Kết nối module cảm biến nhiệt độ DHT11 với Arduino

Bạn muốn ghi lại nhật ký về các thông số khí hậu trong nhà, xây dựng hệ thống kiểm soát nhiệt độ – độ ẩm. Module cảm biến nhiệt độ và độ ẩm DHT11 sẽ là lựa chọn hoàn hảo dành cho bạn!

Module cảm biến này được hiệu chuẩn sẵn để hoạt động độc lập và không yêu cầu bất kỳ thành phần linh kiện bên ngoài nào thêm vào. Chỉ cần kết nối và thêm một vài đoạn mã Arduino, bạn có thể bắt đầu đo độ ẩm và nhiệt độ tương đối ngay lập tức.

Linh kiện sử dụng trong bài viết Shop liên kết bán hàng
Module cảm biến nhiệt độ độ ẩm DHT11 https://www.makerstore.vn/product/17529940/
Màn hình LCD1602 https://www.makerstore.vn/product/73563784/
Arduino Uno R3 https://www.makerstore.vn/product/73563784/

Tổng quan về phần cứng module DHT11

Trung tâm của module là cảm biến nhiệt độ và độ ẩm kỹ thuật số DHT11

Module cảm biến DHT11

Cảm biến DHT11 có thể đo nhiệt độ từ 0°C đến 50°C với độ chính xác ± 2.0°C, và độ ẩm từ 20 đến 80% với chính xác 5%. Lưu ý rằng DHT11 có tốc độ lấy mẫu là 1Hz, có nghĩa là nó có thể cung cấp dữ liệu mới mỗi giây một lần.

Bảng mạch điện module DHT11

Module DHT11 được tích hợp sẵn tất cả các mạch hỗ trợ cần thiết, vì vậy bạn có thể sử dụng ngay mà không cần thêm bất kỳ thao tác nào.

Bảng mạch điện module DHT11

Cảm biến DHT11 thông thường yêu cầu lắp thêm một điện trở kéo lên 10K trên chân tín hiệu để giao tiếp chính xác giữa cảm biến và Arduino. Tuy nhiên, module này đã tích hợp sẵn điện trở kéo lên nên bạn không cần phải lắp thêm. Bên cạnh đó, module còn tích hợp thêm tụ điện để lọc nhiễu.

Bên trong cảm biến DHT11

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.

Bên trong cảm biến DHT11

Thành phần cảm biến độ ẩm bên trong DHT11 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.

Cấu trúc cảm biến độ ẩm bên trong DHT11

DHT11 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.

Điện trở nhiệt NTC

Module cảm biến DHT11 cũng bao gồm một IC 8-bit. IC này đo và xử lý tín hiệu analog, chuyển đổi tín hiệu analog sang tín hiệu digital và xuất ra tín hiệu digital chứa dữ liệu nhiệt độ và độ ẩm.

IC 8-bit trong module DHT11

Kết nối module DHT11 với Arduino

Kết nối module DHT11 với Arduino tương đối đơn giản vì module chỉ có ba chân:

Sơ đồ chân module DHT11
  • 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ủa mô-đun này 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.
  • OUT: Chân này được sử dụng để giao tiếp giữa cảm biến và vi điều khiển.
  • GND(-): Đây là chân nối đất.

Bây giờ chúng ta hãy bắt đầu kết nối module DHT11 với Arduino!
Các kết nối tương đối đơn giản. Bắt đầu bằng việc kết nối chân VCC(+) với chân ra 5V của Arduino và chân GND(-) với chân GND. Cuối cùng, hãy kết nối chân OUT với một chân digital (ví dụ ở đây là chân D8).
Sơ đồ dưới đây cho thấy cách kết nối tất cả các thành phần.

Kết nối module DHT11 với Arduino

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).

Thư viện DHTlib

Ví dụ 1: Hiển thị và đọc thông số module cảm biến DHT11 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 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, chúng ta sẽ đi vào giải thích chi tiết hơn.

#include <dht.h>        // Include library
#define outPin 8        // Defines pin number to which the sensor is connected

dht DHT;                // Creates a DHT object

void setup() {
    Serial.begin(9600);
}

void loop() {
    int readData = DHT.read11(outPin);

    float t = DHT.temperature;        // Read temperature
    float h = DHT.humidity;           // Read humidity

    Serial.print("Temperature = ");
    Serial.print(t);
    Serial.print("°C | ");
    Serial.print((t*9.0)/5.0+32.0);        // Convert celsius to fahrenheit
    Serial.println("°F ");
    Serial.print("Humidity = ");
    Serial.print(h);
    Serial.println("% ");
    Serial.println("");

    delay(2000); // wait two seconds
}

Sau khi nạp đoạn mã, bạn sẽ thấy kết quả hiển thị ra trên Serial Monitor.

Module DHT11 Serial Monitor

Giải thích đoạn code ví dụ 1:

Chúng ta bắt đầu bằng việc #include thư viện DHT. Sau đó, chúng ta #define chân tín hiệu thành chân D8 của cảm biến được kết nối và tạo một object tên là DHT.

#include <dht.h>
#define outPin 8

dht DHT;

Trong hàm setup(), chúng ta khởi tạo giao tiếp serial.

void setup() {
  Serial.begin(9600);
}

Trong hàm loop(), chúng ta sử dụng hàm read11() để đọc dữ liệu từ module DHT11. Hàm này nhận tham số là số chân kết nối dữ liệu của cảm biến.

Lưu ý: Thư viện DHT có thể có cả hàm read() và read11(). Tuy nhiên, hàm read11() được khuyến nghị sử dụng cho cảm biến DHT11 vì nó cung cấp độ chính xác cao hơn.

int readData = DHT.read11(outPin);

Bây giờ chúng ta có thể truy xuất các giá trị độ ẩm và nhiệt độ bằng cách truy cập vào các thuộc tính của object DHT.

float t = DHT.temperature;        // Read temperature
float h = DHT.humidity;           // Read humidity

Trong đoạn code trên, biến humidity sẽ lưu trữ giá trị độ ẩm tương đối và biến temperature sẽ lưu trữ giá trị nhiệt độ (theo thang độ C).

Bên cạnh đó, bạn có thể dễ dàng chuyển đổi giá trị nhiệt độ sang Fahrenheit (°F) bằng cách sử dụng công thức sau: T(°F) = T(°C) × 9/5 + 32

Serial.print((t * 9.0) / 5.0 + 32.0);

Lưu ý rằng các giá trị này có thể có độ chính xác nhất định tùy thuộc vào loại cảm biến DHT11 bạn đang sử dụng.

Ví dụ 2: Hiển thị giá trị module cảm biến DHT11 trên màn hình LCD

Nếu bạn muốn hiển thị giá trị nhiệt độ – độ ẩm mà không cần dùng Serial Monitor trên máy tính, bạn sẽ cần một màn hình LCD. Vì vậy trong ví dụ này, chúng tôi cũng sẽ kết nối LCD1602 với Arduino bên cạnh module DHT11.

Đây là giao diện hiển thị của LCD1602.

Hiển thị nhiệt độ – độ ẩm module DHT11 trên LCD1602

Chúng ta hãy kết nối LCD như hình bên dưới.

Kết nối LCD1602 vào Arduino để hiển thị thông số module cảm biến DHT11

Đoạn mã dưới đây sẽ hiển thị giá trị nhiệt độ và độ ẩm tương màn hình LCD1602. Đoạn mã này tương tự như đoạn mã trong ví dụ 1, ngoại trừ việc các giá trị được in trên LCD.

#include <LiquidCrystal.h>      // Include LiquidCrystal Library
#include <dht.h>

#define outPin 8

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Create an LCD object.
dht DHT;                // Create a DHT object

void setup() {
    lcd.begin(16,2); 	// Initialize the LCD
}

void loop() {
    int readData = DHT.read11(outPin);
    
    float t = DHT.temperature;
    float h = DHT.humidity;
    
    lcd.setCursor(0,0);
    lcd.print("Temp.: ");
    lcd.print(t);
    lcd.print((char)223);	//shows degrees character
    lcd.print("C");

    lcd.setCursor(0,1);
    lcd.print("Humi.: ");
    lcd.print(h);
    lcd.print("%");
    
    delay(2000);
}

nguồn: lastminuteengineers.com