Cảm biến nhiệt độ Arduino DHT (đo được cả độ ẩm) rất thông dụng hiện nay vì chi phí rẻ và rất dễ lấy dữ liệu thông qua giao tiếp 1-wire ( giao tiếp digital 1-wire truyền dữ liệu duy nhất), thích hợp sử dụng trong các ứng dụng yêu cầu độ chính xác không cao, môi trường không khắc nghiệt. Cảm biến được tích hợp bộ tiền xử lý tín hiệu giúp dữ liệu nhận về không cần phải qua bất kỳ tính toán nào.
Nếu cần độ chính xác cao hơn (±0.5°C) bạn có thể sử dụng các dòng cảm biến nhiệt độ arduino khác như DHT21 hay DHT22. Sơ đồ chân cảm biến DHT11 gồm 2 chân cấp nguồn, và 1 chân tín hiệu và 1 chân không sử dụng.
Module DHT11 sử dụng một chân digital nên bạn có thể sử dụng cổng Digital 0 để kết nối với module.
Để lập trình Arduino điều khiển được sensor DHT11 ta cần cài đặt thêm 2 thư viện. Bạn có thể cài đặt thêm thư viện trực tiếp trong Libraries manager hoặc download từ link.
Đầu tiên là Adafruit_Sensor: https://github.com/adafruit/Adafruit_Sensor
Sau đó là thư viện DHT: https://github.com/adafruit/DHT-sensor-library
Đoạn code thực hiện công việc:
/** * Example for reading temperature and humidity * using the DHT22 and ESP8266 * * Copyright (c) 2016 Losant IoT. All rights reserved. * https://www.losant.com */ #include "DHT.h" #define DHTPIN 14 // what digital pin the DHT sensor is conected to #define DHTTYPE DHT11 // there are multiple kinds of DHT sensors DHT dht(DHTPIN, DHTTYPE, 15); void setup() { Serial.begin(9600); Serial.setTimeout(2000); // Wait for serial to initialize. while(!Serial) { } Serial.println("Device Started"); Serial.println("-------------------------------------"); Serial.println("Running DHT!"); Serial.println("-------------------------------------"); } int timeSinceLastRead = 0; void loop() { // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); timeSinceLastRead = 0; 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); delay(2000); }
Dòng 1: khai báo với hệ thống là trong chương trình ta có sử dụng thư viện DHT của Adafruit.
Dòng 3: do ở đây ta sử dụng cổng Digital 0 trên Node Wifi nên pin sử dụng là 14 để điều khiển module DHT11, vì vậy ta đặt một hằng số với tên gọi DHTPIN có giá trị là 14. Ta cũng khai báo loại DHT là DHT11 ở dòng kế tiếp. Có nhiều loại cảm biến khác nhau trong dòng DHT như DHT22 hay DHT21.
Dòng 5: khai báo đối tượng DHT, ta cần khai báo pin và loại DHT bằng các hằng số đã khai báo ở trên.
Trong hàm setup, ta cần khởi tạo đối tượng Serial để sử dụng in ra giá trị đọc được từ cảm biến trong hàm loop.
Trong hàm loop, ta lần lượt đọc các giá trị độ ẩm, nhiệt độ (độ C) và nhiệt độ (độ F) và in ra cửa sổ Serial.
Tiến hành biên dịch và upload code lên Arduino. Lúc này, bạn sẽ thấy các giá trị đọc được từ cảm biến sẽ được in ra trong cửa sổ Serial. Bạn thử thổi liên tục vào cảm biến hoặc dùng bật lửa làm cho không khí xung quanh cảm biến nóng lên. Sau đó, bạn có thể quan sát sự thay đổi cả về nhiệt độ và độ ẩm.
Bạn hãy lập trình cho Arduino đọc nhiệt độ và độ ẩm và hiển thị lên màn hình Oled.
Trên đây, OhStem đã hướng dẫn bạn cách sử dụng cảm biết nhiệt độ DHT. Bạn đã làm quen được với nó chưa? Nếu có bất kỳ thắc mắc gì, bạn có thể liên hệ với chúng tôi qua Fanpage để được hỗ trợ và giải đáp nhé.
Bây giờ, chúng ta cùng chuyển sang làm quen với những thiết bị điện tử khác trong Arduino nào.