1. Giới thiệu
Bài viết này sẽ hướng dẫn các bạn cách đọc nhiệt độ - độ ẩm từ cảm biến và xuất ra màn hình LCD. Hy vọng rằng qua bài viết này, bạn sẽ dần hiểu được Arduino tạo cho người dùng một sự đơn giản và tiện lợi đến mức nào.
2. Nội dung chính
Đọc dữ liệu từ cảm biến nhiệt độ - độ ẩm DHT11.
Sử dụng màn hình LCD để xuất thông tin.
3. Phần cứng cần thiết
Màn hình LCD 16 x 2
Mạch điều khiển màn hình LCD sử dụng giao tiếp I2C
Cảm biến nhiệt độ - độ ẩm DHT11
Arduino UNO R3 (hoặc tương đương)
Dây cắm breadboard
4. 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
Download và cài đặt thư viện hỗ trợ sử dụng DHT11: download tại đây
Kết nối cảm biến DHT11 với mạch Arduino
Lập trình
#include "DHT.h"
const int DHTPIN = 2; //Đọc dữ liệu từ DHT11 ở chân 2 trên mạch Arduino
const int DHTTYPE = DHT11; //Khai báo loại cảm biến, có 2 loại là DHT11 và DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin(); // Khởi động cảm biến
}
void loop() {
float h = dht.readHumidity(); //Đọc độ ẩm
float t = dht.readTemperature(); //Đọc nhiệt độ
Serial.print("Nhiet do: ");
Serial.println(t); //Xuất nhiệt độ
Serial.print("Do am: ");
Serial.println(h); //Xuất độ ẩm
Serial.println(); //Xuống hàng
delay(1000); //Đợi 1 giây
}
Sau khi upload chương trình lên mạch Arduino, bạn hãy bấm Ctrl + Shift + M để mở cửa sổ Serial Monitor và xem kết quả.
Một lưu ý nho nhỏ cho những bạn lập trình nâng cao, đó là cảm biến DHT11 sẽ "treo" (delay) chương trình của bạn trong quá trình nó đọc nhiệt độ, độ ẩm!
5. Màn hình LCD
Nếu bạn không có module hỗ trợ này, bạn vẫn có thể điều khiển màn hình theo cách thông thường. Tuy nhiên sẽ rất tốn thời gian và chưa chắc bạn sẽ làm được !
Kết nối module màn hình với Arduino
#include <DHT.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> 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)) { // Kiểm tra xem thử việc đọc giá trị } 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(" %"); } }