Arduino Cảm biến Nhiệt độ và Độ ẩm

Trong bài hướng dẫn này, chúng ta sẽ học:

Nếu bạn chỉ muốn đo nhiệt độ, chúng tôi khuyên dùng Arduino - Cảm biến nhiệt độ thay thế. Đây là một cảm biến có giá rẻ và nhỏ gọn. Bạn có thể đặt nó trong nước nóng hoặc nước lạnh.

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×DHT11 Temperature Humidity Sensor Module
1×DHT22 Temperature Humidity Sensor Module
1×10 kΩ Resistor
1×breadboard
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Giới thiệu về cảm biến nhiệt độ và độ ẩm DHT11 và DHT22

Điểm chung giữa DHT11 và DHT22

  • Các chân cắm (pinout) giống nhau
  • Dây kết nối tới Arduino giống nhau
  • Lập trình (với một thư viện) tương tự (chỉ có một dòng mã khác)

Các khác biệt giữa DHT11 và DHT22

DHT11 DHT22
Price ultra low cost low cost
Temperature Range 0°C to 50°C -40°C to 80°C
Temperature Accuracy ± 2°C ± 0.5°C
Humidity Range 20% to 80% 0% to 100%
Humidity Accuracy 5% ± 2 to 5%
Reading Rate 1Hz (once every second) 0.5Hz (once every 2 seconds)
Body size 15.5mm x 12mm x 5.5mm 15.1mm x 25mm x 7.7mm
Operating Voltage3 to 5V 3 to 5V

Như bạn có thể thấy, DHT22 có độ chính xác cao hơn một chút, phạm vi rộng hơn nhưng đắt hơn so với DHT11.

Bố trí chân

Cảm biến DHT11 và DHT22 ở dạng ban đầu có bốn chân:

  • Chân GND: cần được kết nối với GND (0V)
  • Chân VCC: cần được kết nối với VCC (5V, hoặc 3.3V)
  • Chân DATA: chân này được dùng để giao tiếp giữa cảm biến và Arduino
  • Chân NC: Không được kết nối, chúng ta có thể bỏ qua chân này
dht11 và dht22 cảm biến nhiệt độ và độ ẩm: sơ đồ chân

Một số nhà sản xuất cung cấp cảm biến DHT11 và DHT22 ở dạng module với ba chân: GND, VCC và DATA (hoặc thay thế: -, + và OUT).

※ Lưu ý:

Trong dạng module, thứ tự các chân của module có thể khác nhau giữa các nhà sản xuất. Luôn sử dụng nhãn in trên module. Nhìn kỹ!

sơ đồ chân của module đo nhiệt độ và độ ẩm dht11 và dht22

Sơ đồ đấu dây

Việc nối dây tới Arduino giống nhau đối với cả hai cảm biến. Ở dạng ban đầu, một điện trở có giá trị từ 5KΩ đến 10KΩ là cần thiết để giữ cho dòng dữ liệu ở mức cao và để kích hoạt giao tiếp giữa cảm biến và Arduino.

Arduino - Dây kết nối cảm biến DHT11

sơ đồ đấu nối cảm biến dht11 cho Arduino nhiệt độ và độ ẩm

This image is created using Fritzing. Click to enlarge image

Kết nối cảm biến DHT22 với Arduino

sơ đồ đấu nối cảm biến dht22 nhiệt độ và độ ẩm cho Arduino

This image is created using Fritzing. Click to enlarge image

Arduino - Kết nối mô-đun DHT11

Hầu hết các module cảm biến DHT22 đều có sẵn một điện trở tích hợp, vì vậy bạn không cần thêm nó. Điều này giúp bạn tiết kiệm công việc nối dây và hàn.

sơ đồ nối dây cho module dht11 đo nhiệt độ và độ ẩm cho Arduino

This image is created using Fritzing. Click to enlarge image

Arduino - Kết nối Module DHT22

Hầu hết các module cảm biến DHT22 đều có một điện trở tích hợp sẵn, vì vậy bạn không cần phải thêm nó. Điều này giúp tiết kiệm một số công việc đấu dây hoặc hàn.

sơ đồ đấu dây cho module nhiệt độ và Độ ẩm dht22 Arduino

This image is created using Fritzing. Click to enlarge image

Cách Lập Trình Cho Cảm biến Nhiệt Độ DHTxx

Việc lập trình cho cả hai cảm biến tương tự. Chỉ có một dòng mã khác.

  • Bao gồm thư viện:
#include "DHT.h"
  • Định nghĩa chân Arduino được kết nối với cảm biến DHT:
#define DHTPIN 2
  • Định nghĩa loại cảm biến: DHT11 hoặc DHT22 (Đây là dòng mã khác biệt)
#define DHTTYPE DHT11

hoặc

#define DHTTYPE DHT22
  • Khai báo đối tượng DHT
DHT dht(DHTPIN, DHTTYPE);
  • Khởi tạo cảm biến:
dht.begin();
  • Đọc độ ẩm:
float humi = dht.readHumidity();
  • Đọc nhiệt độ ở độ C:
float tempC = dht.readTemperature();
  • Đọc nhiệt độ theo thang Fahrenheit:
float tempF = dht.readTemperature(true);

Mã Arduino - DHT11

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-temperature-humidity-sensor */ #include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); // initialize the sensor } void loop() { // wait a few seconds between measurements. delay(2000); // read humidity float humi = dht.readHumidity(); // read temperature as Celsius float tempC = dht.readTemperature(); // read temperature as Fahrenheit float tempF = dht.readTemperature(true); // check if any reads failed if (isnan(humi) || isnan(tempC) || isnan(tempF)) { Serial.println("Failed to read from DHT sensor!"); } else { Serial.print("Humidity: "); Serial.print(humi); Serial.print("%"); Serial.print(" | "); Serial.print("Temperature: "); Serial.print(tempC); Serial.print("°C ~ "); Serial.print(tempF); Serial.println("°F"); } }

Mã Arduino - DHT22

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-temperature-humidity-sensor */ #include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); // initialize the sensor } void loop() { // wait a few seconds between measurements. delay(2000); // read humidity float humi = dht.readHumidity(); // read temperature as Celsius float tempC = dht.readTemperature(); // read temperature as Fahrenheit float tempF = dht.readTemperature(true); // check if any reads failed if (isnan(humi) || isnan(tempC) || isnan(tempF)) { Serial.println("Failed to read from DHT sensor!"); } else { Serial.print("Humidity: "); Serial.print(humi); Serial.print("%"); Serial.print(" | "); Serial.print("Temperature: "); Serial.print(tempC); Serial.print("°C ~ "); Serial.print(tempF); Serial.println("°F"); } }

Nếu bạn so sánh hai đoạn mã ở phía trên, bạn nhận thấy có một dòng khác (dòng 11).

Hướng dẫn từng bước

  • Kết nối Arduino với máy tính qua cáp USB
  • Mở Arduino IDE, chọn board và cổng đúng
  • Điều hướng tới biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
  • Tìm “DHT”, sau đó tìm thư viện cảm biến DHT của Adafruit
  • Nhấp nút Cài đặt để cài đặt thư viện.
thư viện cảm biến dht cho Arduino
  • Bạn sẽ được yêu cầu cài đặt thêm một số phụ thuộc thư viện khác
  • Nhấp vào nút Install All để cài đặt tất cả các phụ thuộc thư viện.
thư viện cảm biến thống nhất của adafruit cho Arduino
  • Sao chép mã ở trên tương ứng với cảm biến bạn đang có và mở bằng Arduino IDE
  • Nhấp nút Tải lên trên Arduino IDE để tải mã lên Arduino
  • Tạo môi trường xung quanh cảm biến nóng hơn hoặc lạnh hơn
  • Xem kết quả trên Serial Monitor.
COM6
Send
Humidity: 31.00% | Temperature: 27.00°C ~ 80.60°F Humidity: 31.00% | Temperature: 27.00°C ~ 80.60°F Humidity: 31.00% | Temperature: 27.00°C ~ 80.60°F Humidity: 31.00% | Temperature: 27.00°C ~ 80.60°F Humidity: 31.00% | Temperature: 28.00°C ~ 82.40°F Humidity: 31.00% | Temperature: 28.00°C ~ 82.40°F Humidity: 31.00% | Temperature: 28.00°C ~ 82.40°F Humidity: 31.00% | Temperature: 28.00°C ~ 82.40°F Humidity: 32.00% | Temperature: 28.00°C ~ 82.40°F Humidity: 31.00% | Temperature: 29.00°C ~ 84.20°F Humidity: 32.00% | Temperature: 29.00°C ~ 84.20°F Humidity: 31.00% | Temperature: 29.00°C ~ 84.20°F
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.