Bạn muốn theo dõi dữ liệu về khí hậu trong nhà, hoặc xây dựng hệ thống kiểm soát nhiệt độ – độ ẩm? Cảm biến nhiệt độ – độ ẩm DHT11 hoặc DHT22 của sẽ là lựa chọn đơn giản và hoàn hảo cho bạn!
Cảm biến DHT11 / DHT22 đã được hiệu chỉnh sẵn, chỉ với một vài kết nối và một chút mã Arduino, bạn có thể bắt đầu đo độ ẩm tương đối và nhiệt độ ngay lập tức. Cảm biến cung cấp các chỉ số nhiệt độ và độ ẩm chính xác đến một chữ số thập phân. Nhược điểm duy nhất là cảm biến DHT11 / DHT22 chỉ cung cấp dữ liệu mới mỗi giây hoặc hai giây, nhưng với mức giá rẻ thì như vậy là quá tốt bạn không thể đòi hỏi gì hơn nữa.
Linh kiện sử dụng trong bài viết | Shop liên kết bán hàng |
Cảm biến nhiệt độ – độ ẩm DHT11 | |
Cảm biến nhiệt độ – độ ẩm DHT22 | |
Màn hình LCD1602 | https://www.makerstore.vn/product/73563784/ |
Arduino Uno R3 | https://www.makerstore.vn/product/80653977/ |
So sánh cảm biến DHT11 và DHT22
Cảm biến DHT11 và DHT22 là hai cảm biến được sử dụng phổ biến nhất trong dòng DHTxx. Chúng có vẻ giống nhau và có cùng cấu hình chân kết nối, nhưng thông số kỹ thuật thì khác nhau.
Trong hai loại này, DHT22 đắt hơn và chắc chắn có thông số kỹ thuật tốt hơn. DHT22 có thể đo nhiệt độ từ -40°C đến +125°C với độ chính xác ±0.5°C, trong khi DHT11 có thể đo nhiệt độ từ 0°C đến 50°C với độ chính xác ±2°C. Ngoài ra, cảm biến DHT22 có thể đo độ ẩm tương đối từ 0 đến 100% với độ chính xác 2-5%, trong khi cảm biến DHT11 chỉ có thể đo độ ẩm tương đối từ 20 đến 80% với độ chính xác 5%.
Bảng so sánh cấu hình chi tiết cảm biến DHT11 và DHT22:
DHT11 | DHT22 | |
Điện áp hoạt động | 3-5V | 3-5V |
Dòng điện hoạt động | 2.5mA max | 2.5mA max |
Phạm vi độ ẩm | 20-80% (sai số 5%) | 0-100% (sai số 2-5%) |
Phạm vi nhiệt độ | 0-50°C / ± 2°C | -40 tới 80°C / ± 0.5°C |
Tần suất lấy mẫu | 1 Hz (1 giây / lần) | 0.5 Hz (2 giây / lần) |
Kích thước | 15.5mm x 12mm x 5.5mm | 15.1mm x 25mm x 7.7mm |
Ưu điểm | Giá rẻ hơn, tốc độ lấy mẫu cao hơn | Chính xác hơn |
Mặc dù DHT22 có độ chính xác cao hơn và có khả năng hoạt động trong một dải nhiệt độ và độ ẩm rộng hơn, nhưng có nhưng ưu điểm mà DHT11 hoàn toàn vượt trội hơn DHT22. Đó là giá thành rẻ hơn, kích thước nhỏ gọn hơn và có tốc độ lấy mẫu cao hơn. DHT11 thực hiện việc đọc dữ liệu một lần mỗi giây (hoặc tốc độ lấy mẫu 1Hz), trong khi DHT22 thực hiện việc đọc dữ liệu một lần mỗi hai giây (hoặc tốc độ lấy mẫu 0.5Hz).
Mặc dù có những khác biệt này, điện áp hoạt động của cả hai cảm biến đều dao động từ 3 đến 5 volt, với dòng điện tối đa là 2.5mA (trong quá trình chuyển đổi). Điểm hay nhất chính là cảm biến DHT11 và DHT22 có cùng chuẩn chân kết nối nên chúng có thể hoán đổi cho nhau, có nghĩa là nếu bạn xây dựng dự án của mình với một cảm biến, bạn có thể dễ dàng rút nó ra và thay thế bằng một cảm biến khác. Mã của bạn có thể cần điều chỉnh một chút, nhưng hệ thống dây vẫn giữ nguyên!
Bên trong cảm biến DHT11 và DHT22
Nếu bạn tháo vỏ cảm biến, bạn sẽ thấy một điện trở nhiệt độ NTC và một cảm biến độ ẩm bên trong.
Thành phần cảm biến độ ẩm bên trong DHT11 và DHT22 gồm hai điện cực với một lớp nền giữ ẩm ở giữa (thường là muối hoặc polymer nhựa dẫn điện).
Khi độ ẩm tăng lên, lớp nền sẽ hấp thụ hơi nước, dẫn đến việc giải phóng các ion và làm giảm điện trở giữa hai điện cực. Sự thay đổi điện trở này tỷ lệ thuận với độ ẩm, có thể được đo để ước tính độ ẩm tương đối.
DHT11 và DHT22 cũng bao gồm một điện trở nhiệt NTC để đo nhiệt độ. NTC là một loại điện trở có thể thay đổi giá trị theo nhiệt độ.
Về mặt kỹ thuật, tất cả các điện trở đều là NTC theo nghĩa là điện trở của chúng thay đổi một chút theo nhiệt độ, nhưng sự thay đổi này thường rất nhỏ và khó đo. Điện trở nhiệt NTC được thiết kế để điện trở của chúng thay đổi đáng kể theo nhiệt độ (khoảng 100 ohms trở lên mỗi độ). Thuật ngữ “NTC” là viết tắt của “Hệ số nhiệt độ âm” (Negative Temperature Coefficient), nghĩa là điện trở giảm khi nhiệt độ tăng.
Sơ đồ chân cảm biến DHT11 và DHT22
Cảm biến DHT11 và DHT22 đều tương đối đơn giản để kết nối, cảm biến có 4 chân:
- VCC(+): Chân này cung cấp nguồn điện cho cảm biến. Mặc dù điện áp cung cấp có thể dao động từ 3.3V đến 5.5V, nhưng nguồn điện 5V được khuyến nghị sử dụng. Với nguồn cung cấp 5V, cảm biến có thể được đặt cách xa vi điều khiển tới 20m. Với điện áp cung cấp 3.3V, cảm biến chỉ nên được đặt cách 1m nếu không sẽ gây ra hiện tượng sụt áp trên đường dây làm lỗi tín hiệu.
- Data: Chân này được sử dụng để giao tiếp giữa cảm biến và vi điều khiển.
- NC: không sử dụng (Not Connected)
- GND(-): Đây là chân nối đất.
Kết nối cảm biến DHT11 và DHT22 với Arduino
Việc kết nối cảm biến DHTxx với Arduino rất đơn giản. Kết nối chân VCC(+) với chân nguồn 5V và chân GND(-) với chân GND của Arduino. Cuối cùng, kết nối chân Data với một chân digital (ví dụ ở đây là chân D8).
Để đảm bảo giao tiếp chính xác giữa cảm biến và Arduino, bạn cũng cần thêm một điện trở kéo lên 10K giữa chân Data và VCC(+) để giữ tín hiệu ở mức HIGH.
Các sơ đồ dưới đây cho thấy cách kết nối tất cả các thành phần:
Cài đặt thư viện cảm biến DHT
Cảm biến DHT có giao thức truyền dữ liệu của riêng chúng, giao thức này yêu cầu thời gian lấy mẫu chính xác. Tuy nhiên, chúng ta không cần lo lắng quá nhiều về điều này, vì chúng ta sẽ sử dụng thư viện DHTlib, thư viện này xử lý hầu hết mọi thứ.
Để cài đặt thư viện, bạn hãy chọn trên thanh menu của Arduino IDE: Sketch > Include Library > Manage Libraries… rồi tìm kiếm từ khóa “dhtlib”. Nhấp vào kết quả đó và sau đó chọn cài đặt (Install).
Ví dụ 1: Hiển thị và đọc thông số cảm biến DHT22 trên Serial Monitor
Sau khi cài đặt thư viện, sao chép và dán đoạn mã này vào Arduino IDE.
Đoạn mã kiểm tra sau đây sẽ in giá trị nhiệt độ và độ ẩm tương đối của cảm biến DHT22 vào màn hình serial.
Hãy nạp thử đoạn code này vào board sau đó kết nối module cảm biến:
#include <dht.h> #define dataPin 8 // Defines pin number to which the sensor is connected dht DHT; // Creats a DHT object void setup() { Serial.begin(9600); } void loop() { //Uncomment whatever type you're using! int readData = DHT.read22(dataPin); // DHT22/AM2302 //int readData = DHT.read11(dataPin); // DHT11 float t = DHT.temperature; // Gets the values of the temperature float h = DHT.humidity; // Gets the values of the humidity // Printing the results on the serial monitor Serial.print("Temperature = "); Serial.print(t); Serial.print(" "); Serial.print((char)176);//shows degrees character Serial.print("C | "); Serial.print((t * 9.0) / 5.0 + 32.0);//print the temperature in Fahrenheit Serial.print(" "); Serial.print((char)176);//shows degrees character Serial.println("F "); Serial.print("Humidity = "); Serial.print(h); Serial.println(" % "); Serial.println(""); delay(2000); // Delays 2 secods }
Sau khi nạp đoạn mã, bạn sẽ thấy kết quả hiển thị ra trên Serial Monitor.
Ví dụ 2: Hiển thị giá trị module cảm biến DHT22 trên màn hình LCD
Đây là giao diện hiển thị của LCD1602.
Chúng ta hãy kết nối LCD như hình bên dưới.
Code Arduino
#include <LiquidCrystal.h> // includes the LiquidCrystal Library #include <dht.h> #define dataPin 8 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7) dht DHT; bool showcelciusorfarenheit = false; void setup() { lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display } void loop() { int readData = DHT.read22(dataPin); float t = DHT.temperature; float h = DHT.humidity; lcd.setCursor(0,0); // Sets the location at which subsequent text written to the LCD will be displayed lcd.print("Temp.: "); // Prints string "Temp." on the LCD //Print temperature value in Celcius and Fahrenheit every alternate cycle if(showcelciusorfarenheit) { lcd.print(t); // Prints the temperature value from the sensor lcd.print(" "); lcd.print((char)223);//shows degrees character lcd.print("C"); showcelciusorfarenheit = false; } else { lcd.print((t * 9.0) / 5.0 + 32.0); // print the temperature in Fahrenheit lcd.print(" "); lcd.print((char)223);//shows degrees character lcd.print("F"); showcelciusorfarenheit = true; } lcd.setCursor(0,1); lcd.print("Humi.: "); lcd.print(h); lcd.print(" %"); delay(5000); }
nguồn: lastminuteengineers.com