• Cần giúp đỡ? Hãy gọi:   0938.788.458
Tất cả danh mục
Điện tử

Hướng dẫn sử dụng cảm biến nhiệt độ và độ ẩm của DHT11 & DHT22 bằng Arduino

Hướng dẫn sử dụng cảm biến nhiệt độ và độ ẩm của DHT11 & DHT22 bằng Arduino

Trong Hướng dẫn Arduino này, chúng ta sẽ tìm hiểu cách sử dụng cảm biến DHT11 hoặc cảm biến DHT22 để đo nhiệt độ và độ ẩm với board Arduino. Bạn có thể xem video sau hoặc đọc hướng dẫn dưới đây để biết thêm chi tiết.

Tổng quan


Những cảm biến này rất phổ biến cho những người thích điện tử vì có giá rất rẻ nhưng vẫn cung cấp hiệu suất tuyệt vời. Dưới đây là các thông số kỹ thuật chính và sự khác biệt giữa hai cảm biến này:

DHT22 là phiên bản đắt hơn rõ ràng có thông số kỹ thuật tốt hơn. Phạm vi đo nhiệt độ của nó là từ -40 đến +125 độ C với độ chính xác +/-0,5 độ, trong khi phạm vi nhiệt độ của DHT11 là từ 0 đến 50 độ C với độ chính xác +/-2 độ. Ngoài ra, cảm biến DHT22 có phạm vi đo độ ẩm tốt hơn, từ 0 đến 100% với độ chính xác 2-5%, trong khi phạm vi độ ẩm DHT11 là từ 20 đến 80% với độ chính xác 5%.

Thông số kỹ thuật của DHT11-vs-DHT22

Có hai đặc điểm kỹ thuật trong đó DHT11 tốt hơn so với DHT22. Đó là tốc độ lấy mẫu đối với DHT11 là 1Hz hoặc một lần đọc mỗi giây, trong khi tốc độ lấy mẫu của DHT22 là 0,5Hz hoặc một lần đọc cứ sau hai giây và DHT11 có kích thước nhỏ hơn. Điện áp hoạt động của cả hai cảm biến là từ 3 đến 5 volt, trong khi dòng điện tối đa được sử dụng khi đo là 2,5mA.

Các linh kiện cần thiết:

  • Cảm biến DHT11
  • Cảm biến DHT22
  • Board Arduino
  • Breadboard và dây dẫn

Nguyên lý hoạt động của DHT11 / DHT22


Bây giờ hãy xem những cảm biến này thực sự hoạt động như thế nào. Chúng bao gồm một linh kiện cảm biến độ ẩm, cảm biến nhiệt độ NTC (hoặc nhiệt điện trở) và một IC ở phía sau của cảm biến.

Để đo độ ẩm, họ sử dụng thành phần cảm biến độ ẩm có hai điện cực với chất giữ ẩm giữa chúng. Vì vậy, khi độ ẩm thay đổi, độ dẫn của chất nền thay đổi hoặc điện trở giữa các điện cực này thay đổi. Sự thay đổi điện trở này được đo và xử lý bởi IC khiến cho vi điều khiển luôn sẵn sàng để đọc.

Mặt khác, để đo nhiệt độ, các cảm biến này sử dụng cảm biến nhiệt độ NTC hoặc nhiệt điện trở.

Một nhiệt điện trở thực sự là một điện trở thay đổi điện trở của nó với sự thay đổi của nhiệt độ. Những cảm biến này được chế tạo bằng cách thiêu kết các vật liệu bán dẫn như gốm hoặc polyme để cung cấp những thay đổi lớn hơn trong điện trở chỉ với những thay đổi nhỏ về nhiệt độ. Thuật ngữ có tên là “NTC” có nghĩa là hệ số nhiệt độ âm, có nghĩa là điện trở giảm khi nhiệt độ tăng.

Sơ đồ mạch

Các cảm biến DHTxx có bốn chân, VCC, GND, chân dữ liệu và chân không được kết nối không sử dụng. Cần có một điện trở từ 5K đến 10K Ohms để giữ cho đường dữ liệu ở mức cao và để cho phép giao tiếp giữa cảm biến và Board Arduino. Có một số phiên bản của các cảm biến này đi kèm với một board đột phá với điện trở tích hợp và chúng chỉ có 3 chân.

Sơ đồ mạch DHT22-DHT11

Các cảm biến DHTXX có giao thức dây đơn riêng được sử dụng để truyền dữ liệu. Giao thức này yêu cầu thời gian chính xác và sơ đồ thời gian để lấy dữ liệu từ các cảm biến có thể được tìm thấy từ board dữ liệu của các cảm biến. Tuy nhiên, không phải lo lắng nhiều về các sơ đồ thời gian này bởi vì chúng ta sẽ sử dụng thư viện DHT.

Code chính


Đầu tiên chúng ta cần nạp thư viện DHT có thể tìm thấy từ trang web chính thức của Arduino, sau đó xác định số chân mà cảm biến của chúng ta được kết nối và tạo một đối tượng DHT. Trong phần thiết lập, chúng ta cần bắt đầu giao tiếp nối tiếp vì chúng ta sẽ sử dụng màn hình để in kết quả. Sử dụng hàm read22 () để đọc dữ liệu từ cảm biến và đặt các giá trị của nhiệt độ và độ ẩm vào các biến t và h. Nếu bạn sử dụng cảm biến DHT11, bạn sẽ cần hàm read11 (). Cuối cùng, in nhiệt độ và các giá trị độ ẩm trên màn hình LCD.

#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() {
  int readData = DHT.read22(dataPin); // Reads the data from the sensor
  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(" *C ");
  Serial.print("    Humidity = ");
  Serial.print(h);
  Serial.println(" % ");
  
  delay(2000); // Delays 2 secods, as the DHT22 sampling rate is 0.5Hz
}

Sau khi tảicode này lên board Arduino, có thể thấy kết quả nhiệt độ và độ ẩm từ cảm biến trên màn hình LCD.

Tôi cũng đã làm một ví dụ hiển thị kết quả trên màn hình LCD . Đây là code của ví dụ đó:

#include <LiquidCrystal.h> // includes the LiquidCrystal Library
#include <dht.h>


#define dataPin 8
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
dht DHT;

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
  lcd.print(t); // Prints the temperature value from the sensor
  lcd.print(" C");
  lcd.setCursor(0,1);
  lcd.print("Humi.: ");
  lcd.print(h);
  lcd.print(" %");
  delay(2000);
}

Dịch từ: https://howtomechatronics.com/tutorials/arduino/dht11-dht22-sensors-temperature-and-humidity-tutorial-using-arduino/