Các cảm biến DHTXX này rất phổ biến. Các cảm biến DHT là cảm biến giá rẻ để đo nhiệt độ và độ ẩm. Những cảm biến này chứa bộ chuyển đổi tương tự sang kỹ thuật số để tạo ra tín hiệu số với nhiệt độ và độ ẩm. Các tín hiệu này dễ xử lý bởi với bất kỳ loại vi điều khiển (MCU) nào.
Sơ đồ nguyên lý tổng thể
Thông số kỹ thuật DHT11 vs DHT22
Có hai phiên bản của cảm biến DHT:
DHT11
- Phạm vi: 20-90%
- Sai số: ± 5%
- Độ lặp : ± 1%
- Ổn định lâu dài: ± 1% mỗi năm
DHT22
- Phạm vi: 0-100%
- Độ chính xác tuyệt đối: ± 2%
- Độ lặp lại: ± 1%
- Ổn định lâu dài: ± 0,5% mỗi năm
Như bạn có thể thấy từ các thông số kỹ thuật ở trên, DHT22 chính xác hơn một chút.
Arduino với cảm biến DHT11
Sơ đồ đấu nối
Chân 1 - VCC 5V
Chân 2 - Dữ liệu ra, nối vào chân Digital 2 của Arduino
Chân 3 - Để trống
Chân 3 - GND
Mã nguồn
- Trước tiên bạn cần cài đặt thư viện DHT.
- Giải nén thư viện DHT
- Đổi tên thư mục được trích xuất thành DHT và xóa ký tự “-” trong tên thư mục. Nếu không thì Arduino IDE không nhận được thư viện của bạn
- Cài đặt DHT11 trong Arduino IDE của bạn: Sketch -> Include Library -> Add ZIP library và chọn file thư viện bạn vừa tải xuống
- Khởi động lại Arduino IDE của bạn
- Chuyển đến File -> Examples -> DHT sensor library -> DHTtester
- Upload code vào Board Arduino
// Ví dụ đọc Cảm biến nhiệt độ DHT11 / DHT22 và cảm biến độ ẩm
// by ladyada
#include "DHT.h"
#define DHTPIN 2 // chân D2 của arduino
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("vi du doc cam bien DHTxx !");
dht.begin();
}
void loop() {
// đợi 2 s sau 1 lần đọc cảm biến
delay(2000);
// thời gian cảm biến đọc xong là 250 milli giây!
float h = dht.readHumidity();
// Đọc ở độ C
float t = dht.readTemperature();
// Đọc ở nhiệt độ Fahrenheit
float f = dht.readTemperature(true);
// Kiểm tra nếu cảm biến đọc sai
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Doc sai tu cam bien DHT!");
return;
}
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.println(" *F");
}
#DHT11 #DHT22 #cảmbiến