EBOOK ARDUINO CHO NGƯỜI MỚI BẮT ĐẦU
Trong bài viết hôm trước mình đã hướng dẫn các bạn làm thế nào để hiển thị các ký tự lên màn hình LCD 16×2 bằng giao tiếp I2C.
Tiếp tục trong chuỗi bài viết về LCD hôm nay mình sẽ hướng dẫn các bạn làm thế nào để hiển thị các thông số của cảm biến nhiệt độ, độ ẩm lên LCD.
Để hiểu hơn về bài viết này các bạn đọc lại 2 bài viết bên dưới rồi chúng ta tiếp tục bài này tiếp nha.
- Đọc thêm: Tổng quan LCD 16×2 và giao tiếp I2C LCD sử dụng Arduino
- Đọc thêm: Đọc nhiệt độ, độ ẩm (DHT11) sử dụng Arduino Uno
Kết hợp đọc nhiệt độ độ – độ ẩm và xuất ra màn hình
a.Code Arduino
#include #include #include “DHT.h” #include #define DHTPIN D4 #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 is the I2C bus address for an unmodified backpack void setup() { // activate LCD module lcd.begin (16,2); // for 16 x 2 LCD module lcd.setBacklightPin(3,POSITIVE); lcd.setBacklight(HIGH); lcd.home (); // set cursor to 0,0 lcd.print(“nhiet do :”); lcd.setCursor (0,1); // go to start of 2nd line lcd.print(“do am :”); } void loop() { delay(1000); float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); lcd.setCursor (11,0); lcd.print(t); lcd.setCursor (9,1); // go to start of 2nd line lcd.print(h); } /////////////////////////////////////////////////////
Code mẫu
#include
#include
#includeLiquidCrystal_I2C lcd(0x3F,16,2); const int DHTPIN = 4; const int DHTTYPE = DHT11; DHT dht(DHTPIN, DHTTYPE); byte degree[8] = { 0B01110, 0B01010, 0B01110, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000 }; void setup() { lcd.init(); lcd.backlight(); lcd.print(“Nhiet do: “); lcd.setCursor(0,1); lcd.print(“Do am: “); lcd.createChar(1, degree); dht.begin(); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(t) || isnan(h)) { } else { lcd.setCursor(10,0); lcd.print(round(t)); lcd.print(” “); lcd.write(1); lcd.print(“C”); lcd.setCursor(10,1); lcd.print(round(h)); lcd.print(” %”); } }
Bạn sẽ học được gì
- Có kiến thức cơ bản về Robotics
- Chế tạo Robot dò đường thông minh
- Đánh thức nhà khoa học bên trong bạn
- Tìm hiểu thêm về Robotics, các thuật toán Robot tự động
- Kiến thức nền tảng để chế tạo các máy móc tự động phục vụ đời sống sinh hoạt, lao động sản xuất
- Kiến thức để chế tạo sản phẩm, tham gia các cuộc thi khoa học công nghệ trong nước và quốc tế
Cảm biến DHT11
Cảm biến DHT11 đã được tích hợp trong một mạch duy nhất, bạn chỉ việc nối dây nguồn (Vcc, GND) và dây tín hiệu (Signal) vào mạch Arduino là xong.
Thông số kĩ thuật
- Điện áp hoạt động: 3-5.5V DC
- Ngưỡng độ ẩm: 20 – 90%
- Sai số độ ẩm: ± 5%
- Ngưỡng nhiệt độ: 0 – 55oC
- Sai số nhiệt độ: ± 2oC
Giải thích code
Hàm createChar()
lcd.createChar(1, degree);
Dùng để tạo một ký tự tùy chỉnh để sử dụng trên màn hình LCD 16×2. Tối đa có 8 ký tự được hỗ trợ là 5×8 pixel (được đánh số từ 0 đến 7).Sự xuất hiện của mỗi ký tự tùy chỉnh được chỉ định bởi một mảng gồm 8 byte, 1 byte cho mỗi hàng.
Để hiển thị một ký tự tùy chỉnh trên màn hình ta dùng hàm write() để viết ra con số đó.
Cú pháp
lcd.createChar(số, dữ liệu)
Thông số
lcd: là một biến của kiểu dư liệu LiquidCrystal.
số: tạo ký tự (0 đến 7).
dữ liệu: dữ liệu của các ký tự là pixel.
Hàm isnan()
if (isnan(t) || isnan(h))
Hàm isnan() là hàm trả về true hoặc false nếu giá trị cần kiểm tra không phải là một biểu thức toán học đúng.
Ở đoạn code trên mình kiểm tra xem thử việc đọc giá trị của nhiệt độ hoặc độ ẩm trả về có bị thất bại hay không.
Cú pháp
isnan(double x) ;
Hàm round()
lcd.print(round(t));
Hàm round() là hàm làm tròn của một giá trị nào từ số thập phân làm tròn tới số nguyên gần nhất.
Màn hình LCD16x2
Thông thường, để sử dụng màn hình LCD, bạn sẽ phải mất rất nhiều chân trên Arduino để điều khiển. Tham khảo tại http://arduino.cc/en/Tutorial/Liquid….
Do vậy, để đơn giản hóa công việc, người ta đã tạo ra một loại mạch điều khiển màn hình LCD sử dụng giao tiếp I2C. Nói một cách đơn giản, bạn chỉ tốn … 2 dây để điều khiển màn hình, thay vì 8 dây như cách thông thường.
Sử dụng 2 chân SDA và SCL là 2 chân tín hiệu dùng cho giao tiếp I2C.
Bạn cần kết nối phần cứng đúng theo Sơ đồ sau :
CHI TIẾT BÀI VIẾT
HƯỚNG DẪN SỬ DỤNG CẢM BIẾN DHT11 VÀ ARDUINO HIỂN THỊ NHIỆT ĐỘ VÀ ĐỘ ẨM LÊN MÀN HÌNH LCD
1. Giới thiệu
Bài viết này sẽ hướng dẫn các bạn cách sử dụng Sensor (cảm biến) DHT11 với Arduino và LCD để hiển thị nhiệt độ, độ ẩm.
2. Nội dung chính
- Sử dụng cảm biến nhiệt độ và độ ẩm DTH11 kết nối với Arduino.
- Sử dụng LCD hiển thị nhiệt độ và độ ẩm từ DHT11.
3. Phần cứng cần thiết
- Arduino Uno R3
- LCD Text LCD1602
- Module giao tiếp I2C
– LCD có quá nhiều chân gây khó khăn trong quá trình đấu nối và chiếm dụng nhiều chân trên vi điều khiển. – Module I2C ra đời để giải quyết vấn để này. – Thay vì phải sử dụng 6 chân vi điều khiển để kết nối với LCD 16×2 (RS, EN, D7, D6, D5 và D4) thì module IC2 bạn chỉ cần tốn 2 chân (SCL, SDA) để kết nối. – Module I2C hỗ trợ các loại LCD sử dụng driver HD44780(LCD 16×2, LCD 20×4, …) và tương thích với hầu hết các vi điều khiển hiện nay. |
-
Module DHT11 (sensor đo độ ẩm và nhiệt độ)
-
BreadBoard
4. Kết nối các thiết bị
-
Nối nguồn Arduino với Breadboard
– Nối trực tiếp chân 5V từ Arduino ra Board mạch tại cực dương.
– Nối trực tiếp chân GND từ Arduino ra Board mạch tại cực âm.
- Thực hiện kết nối DHT11 với Arduino
- Kết nối Module I2C & LCD với Arduino
5. Code thiết bị Arduino
Để sử sensor DHT11 giao tiếp với Arduino thì ta cần cài đặt thư viện DHT_Sensor
– Mở phần mềm Arduino 🡪 Sketch 🡪 Include Lirbary 🡪 Add .zip Library 🡪 chọn tới file zip DHT-sensor.zip. – Tương tự ta add tiếp 🡪 file zip Adafruit_Sensor-master.zip – Sau khi add thư viện nên thoát khỏi phần mềm Arduino rồi mở lại. – Gọi thư viện DHT Sensor , LiquidCrystal_I2C. – Mở Phần mềm Arduino 🡪 Sketch 🡪 Include Lirbary 🡪 Kéo xuống dưới chọn DHT_Sensor. – Mở Phần mềm Arduino 🡪 Sketch 🡪 Include Lirbary 🡪 Kéo xuống dưới chọn LiquidCrystal_I2C. |
LiquidCrystal_I2C lcd(0x27,16,2); // Khai báo LCD
- Đặt địa chỉ LCD là 0x27 cho màn hình LCD 16×2.
- 16 là số cột của màn hình (nếu dùng loại màn hình 20×4) thì thay bằng 20.
- 2 là số dòng của màn hình (nếu dùng loại màn hình 20×4) thì thay bằng 4.
Code cấu hình DHT11, Arduino, LCD
#include #include LiquidCrystal_I2C lcd(0x27,16,2); const int DHTPIN = 2; const int DHTTYPE = DHT11; DHT dht(DHTPIN, DHTTYPE); byte degree[8] = { 0B01110, 0B01010, 0B01110, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000 }; void setup() { lcd.init(); lcd.backlight(); lcd.print(“Nhiet do: “); lcd.setCursor(0,1); lcd.print(“Do am: “); lcd.createChar(1, degree); dht.begin(); void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(t) || isnan(h)) { else { lcd.setCursor(10,0); lcd.print(round(t)); lcd.print(” “); lcd.write(1); lcd.print(“C”); lcd.setCursor(10,1); lcd.print(round(h)); lcd.print(” %”); |
Thực hiện: Nguyễn Mạnh Cương
Components and supplies
Standard LCD – 16×2 White on Blue
Jumper wires (generic)
DHT11 Temperature & Humidity Sensor (4 pins)
Arduino UNO
Project description
Code
Temperature and Humidity sensor with LCD display.ino
arduino
The coding part with explanations
1//We’ll start by adding our libraries 2 3#include
4 5#include
6 7//Declaring digital pin no 6 as the dht11 data pin 8 9int pinDHT11 = 6; 10SimpleDHT11 dht11; 11 12//Declaring the lcd pins 13 14const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; 15LiquidCrystal lcd(rs, en, d4, d5, d6, d7); 16 17void setup() { 18// Don’t forget to choose 9600 at the port screen 19 20 Serial.begin(9600); 21 22//Telling our lcd to start up 23 24 lcd.begin(16, 2); 25 26 27} 28 29void loop() { 30 31 //These serial codes are for getting readings on the port screen aswell as the LCD display, since they’ll offer us a more detailed interface 32 33 34 Serial.println(“=================================”); 35 Serial.println(“DHT11 readings…”); 36 37 38 byte temperature = 0; 39 byte humidity = 0; 40 int err = SimpleDHTErrSuccess; 41 42 //This bit will tell our Arduino what to do if there is some sort of an error at getting readings from our sensor 43 if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) { 44 Serial.print(“No reading , err=”); Serial.println(err);delay(1000); 45 return; 46 } 47 48 Serial.print(“Readings: “); 49 Serial.print((int)temperature); Serial.print(” Celcius, “); 50 Serial.print((int)humidity); Serial.println(” %”); 51 52 //Telling our lcd to refresh itself every 0.75 seconds 53 lcd.clear(); 54 55 //Choosing the first line and row 56 lcd.setCursor(0,0); 57 //Typing Temp: to the first line starting from the first row 58 lcd.print(“Temp: “); 59 //Typing the temperature readings after “Temp: ” 60 lcd.print((int)temperature); 61 //Choosing the second line and first row 62 lcd.setCursor(0,1); 63 //Typing Humidity(%): to the second line starting from the first row 64 lcd.print(“Humidity(%): “); 65 //Typing the humidity readings after “Humidity(%): ” 66 lcd.print((int)humidity); 67 68 69 70 71 delay(750); 72} 73
Temperature and Humidity sensor with LCD display.ino
arduino
The coding part with explanations
1//We’ll start by adding our libraries 2 3#include
4 5#include
6 7//Declaring digital pin no 6 as the dht11 data pin 8 9int pinDHT11 = 6; 10SimpleDHT11 dht11; 11 12//Declaring the lcd pins 13 14const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; 15LiquidCrystal lcd(rs, en, d4, d5, d6, d7); 16 17void setup() { 18// Don’t forget to choose 9600 at the port screen 19 20 Serial.begin(9600); 21 22//Telling our lcd to start up 23 24 lcd.begin(16, 2); 25 26 27} 28 29void loop() { 30 31 //These serial codes are for getting readings on the port screen aswell as the LCD display, since they’ll offer us a more detailed interface 32 33 34 Serial.println(“=================================”); 35 Serial.println(“DHT11 readings…”); 36 37 38 byte temperature = 0; 39 byte humidity = 0; 40 int err = SimpleDHTErrSuccess; 41 42 //This bit will tell our Arduino what to do if there is some sort of an error at getting readings from our sensor 43 if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) { 44 Serial.print(“No reading , err=”); Serial.println(err);delay(1000); 45 return; 46 } 47 48 Serial.print(“Readings: “); 49 Serial.print((int)temperature); Serial.print(” Celcius, “); 50 Serial.print((int)humidity); Serial.println(” %”); 51 52 //Telling our lcd to refresh itself every 0.75 seconds 53 lcd.clear(); 54 55 //Choosing the first line and row 56 lcd.setCursor(0,0); 57 //Typing Temp: to the first line starting from the first row 58 lcd.print(“Temp: “); 59 //Typing the temperature readings after “Temp: ” 60 lcd.print((int)temperature); 61 //Choosing the second line and first row 62 lcd.setCursor(0,1); 63 //Typing Humidity(%): to the second line starting from the first row 64 lcd.print(“Humidity(%): “); 65 //Typing the humidity readings after “Humidity(%): ” 66 lcd.print((int)humidity); 67 68 69 70 71 delay(750); 72} 73
Temperature and Humidity sensor with LCD display.ino
arduino
The code with explanations
1//We’ll start by adding our libraries 2 3#include
4 5#include
6 7//Declaring digital pin no 6 as the dht11 data pin 8 9int pinDHT11 = 6; 10SimpleDHT11 dht11; 11 12//Declaring the lcd pins 13 14const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; 15LiquidCrystal lcd(rs, en, d4, d5, d6, d7); 16 17void setup() { 18// Don’t forget to choose 9600 at the port screen 19 20 Serial.begin(9600); 21 22//Telling our lcd to start up 23 24 lcd.begin(16, 2); 25 26 27} 28 29void loop() { 30 31 //These serial codes are for getting readings on the port screen aswell as the LCD display, since they’ll offer us a more detailed interface 32 33 34 Serial.println(“=================================”); 35 Serial.println(“DHT11 readings…”); 36 37 38 byte temperature = 0; 39 byte humidity = 0; 40 int err = SimpleDHTErrSuccess; 41 42 //This bit will tell our Arduino what to do if there is some sort of an error at getting readings from our sensor 43 if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) { 44 Serial.print(“No reading , err=”); Serial.println(err);delay(1000); 45 return; 46 } 47 48 Serial.print(“Readings: “); 49 Serial.print((int)temperature); Serial.print(” Celcius, “); 50 Serial.print((int)humidity); Serial.println(” %”); 51 52 //Telling our lcd to refresh itself every 0.75 seconds 53 lcd.clear(); 54 55 //Choosing the first line and row 56 lcd.setCursor(0,0); 57 //Typing Temp: to the first line starting from the first row 58 lcd.print(“Temp: “); 59 //Typing the temperature readings after “Temp: ” 60 lcd.print((int)temperature); 61 //Choosing the second line and first row 62 lcd.setCursor(0,1); 63 //Typing Humidity(%): to the second line starting from the first row 64 lcd.print(“Humidity(%): “); 65 //Typing the humidity readings after “Humidity(%): ” 66 lcd.print((int)humidity); 67 68 69 70 71 delay(750); 72} 73
Temperature and Humidity sensor with LCD display.ino
arduino
The code with explanations
1//We’ll start by adding our libraries 2 3#include
4 5#include 6
7 8//Declaring digital pin no 6 as the dht11 data pin 9 10int 11 pinDHT11 = 6; 12SimpleDHT11 dht11; 13 14//Declaring the lcd pins 15 16const 17 int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; 18LiquidCrystal lcd(rs, en, 19 d4, d5, d6, d7); 20 21void setup() { 22// Don’t forget to choose 9600 at the 23 port screen 24 25 Serial.begin(9600); 26 27//Telling our lcd to start up 28 29 30 lcd.begin(16, 2); 31 32 33} 34 35void loop() { 36 37 //These 38 serial codes are for getting readings on the port screen aswell as the LCD display, 39 since they’ll offer us a more detailed interface 40 41 42 Serial.println(“=================================”); 43 44 Serial.println(“DHT11 readings…”); 45 46 47 byte temperature = 0; 48 49 byte humidity = 0; 50 int err = SimpleDHTErrSuccess; 51 52 //This bit will 53 tell our Arduino what to do if there is some sort of an error at getting readings 54 from our sensor 55 if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) 56 != SimpleDHTErrSuccess) { 57 Serial.print(“No reading , err=”); Serial.println(err);delay(1000); 58 59 return; 60 } 61 62 Serial.print(“Readings: “); 63 Serial.print((int)temperature); 64 Serial.print(” Celcius, “); 65 Serial.print((int)humidity); Serial.println(” 66 %”); 67 68 //Telling our lcd to refresh itself every 0.75 seconds 69 lcd.clear(); 70 71 72 //Choosing the first line and row 73 lcd.setCursor(0,0); 74 //Typing Temp: 75 to the first line starting from the first row 76 lcd.print(“Temp: “); 77 //Typing 78 the temperature readings after “Temp: ” 79 lcd.print((int)temperature); 80 81 //Choosing the second line and first row 82 lcd.setCursor(0,1); 83 //Typing 84 Humidity(%): to the second line starting from the first row 85 lcd.print(“Humidity(%): 86 “); 87 //Typing the humidity readings after “Humidity(%): ” 88 lcd.print((int)humidity); 89 90 91 92 93 94 delay(750); 95} 96
Downloadable files
Fritzing stuff
The Fritzing schemes (which I tried to keep as obvious and simple as possible)
Fritzing stuff
Comments
Only logged in users can leave comments
onatto22
0 Followers
•
0 Projects
Table of contents
Intro
46
Components and supplies
I2C 16×2 Arduino LCD Display Module
Arduino UNO
DHT11 Temperature & Humidity Sensor (3 pins)
Tools and machines
Premium Male/Male Jumper Wires, 40 x 3″ (75mm)
Premium Female/Male Extension Jumper Wires, 40 x 6″ (150mm)
Breadboard, 170 Pin
Apps and platforms
Arduino Web Editor
Project description
Code
Temperature and Humidity sensing with LCD 1602 I2C display
c_cpp
We are using the LCD display using the I2C module to display the temperature and humidity with the DHT 11 sensor.
Temperature and Humidity sensing with LCD 1602 I2C display
c_cpp
We are using the LCD display using the I2C module to display the temperature and humidity with the DHT 11 sensor.
Downloadable files
Temperature and Humidity sensing with LCD 1602 I2C display
Please download it if required
Temperature and Humidity sensing with LCD 1602 I2C display
Comments
Only logged in users can leave comments
Druhi_C
0 Followers
•
0 Projects
Table of contents
Intro
Star
You must be signed in to star a gist
// This tutorial is based on Arduino UNO R3 // and DHT11 Sensor + LCD 16×2 with I2C Board // Enjoy and visit my blog piotrgisworks.blogspot.com
/*—–( WELCOME )—–*/ |
// This tutorial is based on Arduino UNO R3 |
// and DHT11 Sensor + LCD 16×2 with I2C Board |
// Enjoy and visti my blog piotrgisworks.blogspot.com |
/*—–( Import needed libraries )—–*/ |
#include // Comes with Arduino IDE |
#include // Download from https://github.com/adafruit/DHT-sensor-library |
// Get the LCD I2C Library here: |
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads |
// Move any other LCD libraries to another folder or delete them |
// See Library “Docs” folder for possible commands etc. |
#include |
dht DHT; |
#define DHT11_PIN 7 //Declare sensor pin on Your Arduino UNO Board |
/*—–( Declare Constants )—–*/ |
/*—–( Declare objects )—–*/ |
// set the LCD address to 0x27 for a 16 chars 2 line display |
// A FEW use address 0x3F |
// Set the pins on the I2C chip used for LCD connections: |
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol |
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address |
/*—–( Declare Variables )—–*/ |
//NONE |
void setup() /*—-( SETUP: RUNS ONCE )—-*/ |
lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines, turn on backlight |
// ——- Quick 3 blinks of backlight , just for fun ————- |
for(int i = 0; i< 3; i++) |
lcd.backlight(); |
delay(250); |
lcd.noBacklight(); |
delay(250); |
lcd.backlight(); // finish with backlight on |
//——– Write characters on the display —————— |
// NOTE: Cursor Position: (CHAR, LINE) start at 0 |
lcd.setCursor(0,0); |
lcd.print(“Hello, world!”); //Welcome Message |
delay(1000); |
lcd.setCursor(0,1); |
lcd.print(“Second Line”); |
delay(8000); // Delay betwen first screen and sensor data |
void loop() /*—-( LOOP: RUNS CONSTANTLY )—-*/ |
// Display Temp and Humidity to LCD |
lcd.clear(); |
lcd.setCursor(0,0); //Start at character 0 on line 0 |
int chk = DHT.read11(DHT11_PIN); |
lcd.print(“Temp: “); |
lcd.print(DHT.temperature); //Read tempreature from DHT11 Sensor |
lcd.print((char)223); |
lcd.print(“C”); |
lcd.setCursor(0,1);//Start at character 0 on line 1 |
lcd.print(“Humidity: “); |
lcd.print(DHT.humidity);//Read humidity from DHT11 Sensor |
lcd.print(“%”); |
delay(1000); //Set sensor data refresh time |
/* ( THE END ) */ |
Đo nhiệt độ – độ ẩm DHT11 hiển thị lên LCD16X2 Trên ESP8266 NodeMCU
Hiển thị nhiệt độ, độ ẩm lên LCD sử dụng I2C
Màn hình LCD I2C | Arduino UNO R3 |
GND | GND |
VCC | 5V |
SDA | A4 |
SCL | A5 |
Cảm biến nhiệt độ, độ ẩm DHT11 | |
VCC | 5V |
DATA | D4 |
GND | GND |
Sơ đồ đấu nối
Các linh kiện cần thiết cho dự án:
Linh kiện | Số lượng | Shoppe |
Arduino Uno R3 | Xem ngay | |
Dây cáp nạp | Xem ngay | |
Màn hình LCD 16×2 | Xem ngay | |
Module I2C LCD 16×2 | Xem ngay | |
Cảm biến nhiệt độ, độ ẩm DHT11 | Xem ngay | |
Bread Board (Bo Test) | Xem ngay | |
Dây cắm ( Đực – Cái) | Xem ngay | |
Dây cắm ( Đực – Cái) | Xem ngay | |
Nguồn 12V/2A Jack DC (Nếu có rồi không cần mua) | Xem ngay |
Keywords searched by users: arduino dht11 lcd 16×2 code
Categories: Có được 77 Arduino Dht11 Lcd 16X2 Code
See more here: kientrucannam.vn
See more: https://kientrucannam.vn/vn/