Giỏ hàng hiện tại chưa có sản phẩm nào!
Giỏ hàng hiện tại chưa có sản phẩm nào!
Đo độ ẩm và nhiệt độ hiện nay đang được sử dụng rộng rãi trong các ứng dụng thực tế. Mục đích của các phương pháp đo này là để xác định độ ẩm và nhiệt độ để có phương pháp thay đổi để độ ẩm và nhiệt độ đạt mức yêu cầu. Bài hướng dẫn hôm nay tôi sẽ hướng dẫn cho các bạn giao tiếp cảm biến DHT11 đo độ ẩm và nhiệt độ.
NỘI DUNG BÀI VIẾT
|
1. TÌM HIỂU VỀ CẢM BIẾN DHT11
Cảm biến DHT11 là cảm biến được sử dụng để đo được cả về nhiệt độ và độ ẩm. Các chức năng đo đã được tích hợp sẵn, chúng ta chỉ cần cấp nguồn và đọc dữ liệu từ cảm biến. Cảm biến DHT11 có tín hiệu đầu ra là giá trị số, điều này đảm bảo độ tín cậy cao và không có bị nhiễu. Dữ liệu ngõ ra là tín hiệu số dạng 8 bit, tương thích với nhiều dòng vi điều khiển. Công việc điều khiển cũng rất đơn giản. Chúng ta chỉ việc cấp nguồn và đọc dữ liệu số từ chân tín hiệu.
Thông số kỹ thuật của DHT11
2. CÁC LỆNH CẦN THIẾT ĐỂ ĐIỀU KHIỂN
2.1 CÀI ĐẶT THƯ VIỆN
Trong lần đầu tiên lập trình để giao tiếp với cảm biến DHT11 chúng ta cần phải download thư viện DHT.h cho Arduino IDE. Các bạn có thể download từ nguồn internet để kích hoạt cho thư viện.
2.2 KHAI BÁO THƯ VIỆN DHT.h
Trong chương trình chúng ta cần khai báo thư viện DHT.h và định nghĩa dạng cảm biến đang sử dụng.
Cú pháp: #include “DHT.h“
#define Type DHT11
Trong chương trình này chúng ta đang sử dụng dòng cảm biến DHT.h và định nghĩa loại cảm biến là DHT11.
2.3 KHAI BÁO ĐỐI TƯỢNG THUỘC THƯ VIỆN DHT
Sau khi khai báo xong thư viện DHT, chúng ta cần khai báo các đối tượng mang kiểu dữ liệu DHT để thực hiện được các lệnh trong thư viện DHT.
Cú pháp: <Tên thư viện> <Tên cảm biến>(<Chân đọc cảm biến>, <Loại cảm biến>);
Ví dụ: trong trường hợp tôi đang khai báo đối tượng có tên là HT, chân đọc cảm biến là chân số 2, thì dòng lệnh khai báo đối tượng được viết như sau:
DHT HT(2,Type);
2.4 LỆNH KÍCH HOẠT ĐỐI TƯỢNG – begin()
Để kích hoạt chức năng đối tượng kiểu dữ liệu DHT thì chúng ta phải thực hiện lệnh begin().
Cú pháp: <Tên đối tượng>.begin()
Ví dụ: đối tượng được khai báo là HT thì lệnh kích hoạt được viết là.
HT.begin();
2.5 LỆNH ĐỌC ĐỘ ẨM TỪ CẢM BIẾN – readHumidity()
Cú pháp: <Biến nhận độ ẩm> = <Tên đối tượng>.readHumidity();
Trong lệnh đọc cảm biến các bạn cần phải khai báo biến nhận độ ẩm. Giá trị độ ẩm đọc được là số thập phân, do vậy kiểu dữ liệu cho biến nhận độ ẩm là float.
Ví dụ:
float do_am;
do_am = HT.readHumidity();
2.6 LỆNH ĐỌC NHIỆT ĐỘ DẠNG ĐỘ C – readTemperature()
Cú pháp: <Biến nhận nhiệt độ C> = <Tên đối tượng>.readTemperature();
Trong lệnh đọc cảm biến nhiệt độ dạng độ C các bạn cần phải khai báo biến nhận nhiệt độ. Giá trị nhiệt độ đo được là số thập phân nên kiểu dữ liệu cho biến nhận nhiệt độ loại độ C là float.
Ví dụ:
float do_C;
do_C = HT.readTemperature();
2.7 LỆNH ĐỌC NHIỆT ĐỘ DẠNG ĐỘ F – readTemperature(true)
Cú pháp: <Biến nhận nhiệt độ F> = <Tên đối tượng>.readTemperature(true);
Trong lệnh đọc cảm biến nhiệt độ dạng độ F các bạn cần phải khai báo biến nhận nhiệt độ. Giá trị nhiệt độ đo được là số thập phân nên kiểu dữ liệu cho biến nhận nhiệt độ loại độ F là float.
Ví dụ:
float do_F;
do_F = HT.readTemperature(true);
3. ỨNG DỤNG ĐO NHIỆT ĐỘ VÀ ĐỘ ẨM
Ví dụ 1: Đo nhiệt độ và độ ẩm bằng cảm biến DHT11. Dữ liệu đo được hiển thị lên màn hình serial.
Linh kiện cần thiết
Linh kiện | Số lượng |
Bo arduino UNO | 01 |
Cảm biến DHT11 | 01 |
Sơ đồ kết nối phần cứng
Bạn cần có điện trở kéo lên tại chân tín hiệu của cảm biến. Khi sử dụng điện trở kéo lên đảm bảo tín hiệu không bị nhiễu hay sai lệch.
Đoạn code chương trình
#include "DHT.h" #define Type DHT11 int sensorPin=2; DHT HT(sensorPin,Type); float do_am; float do_C; float do_F; void setup() { Serial.begin(9600); pinMode(sensorPin, INPUT); HT.begin(); delay(500); } void loop() { do_am=HT.readHumidity(); do_C=HT.readTemperature(); do_F=HT.readTemperature(true); Serial.print("Do am: "); Serial.print(do_am); Serial.print("Nhiet do: "); Serial.print(do_C); Serial.print(" C "); Serial.print("do_F); Serial.println(" F "); delay(1000); }
Giải thích chương trình
Khai báo thư viện và biến
#include "DHT.h" #define Type DHT11 int sensorPin=2; DHT HT(sensorPin,Type); float do_am; float do_C; float do_F;
Trong chương trình chúng ta cần khai báo thư viện DHT.h để arduino hiểu được các linh kiện cần thiết. Sau khi khai báo xong thư viện chúng ta định nghĩa kiểu cảm biến DHT11 đang sử dụng.
Lệnh DHT HT(sensorPin, Type) là lệnh để khai báo đối tượng HT mang kiểu dữ liệu DHT. Mục đích của dòng khai báo này là cho phép đối tượng HT sử dụng được các lệnh có trong thư viện DHT.h.
Tiếp theo chúng ta thực hiện các lệnh khai báo các biến kiểu float để lưu trữ giá trị của độ ẩm, nhiệt độ dạng độ C, nhiệt độ dạng độ F.
Các lệnh trong chương trình void setup()
void setup() { Serial.begin(9600); pinMode(sensorPin, INPUT); HT.begin(); delay(500); }
Chúng ta khai báo Serial.begin(9600) để kích hoạt chức năng truyền dữ liệu nối tiếp lên màn hình. Tốc độ truyền dữ liệu thông thường lên máy tính là 9600 bau.
Trong chương trình void setup() chúng ta dùng lệnh pinMode() để định nghĩa chân sensorPin là chân đọc dữ liệu chỗ arduino. Bản chất của dữ liệu đọc được từ cảm biến là dữ liệu số, nên chúng ta có thể sử dụng chân số 2 để đọc.
Ngoài ra, trong chương trình void setup() này chúng ta cần phải dùng lệnh delay(500). Mục đích để chờ cho cảm biến ổn định khi mới cấp nguồn rồi mới thực hiện đọc dữ liệu.
Đoạn chương trình void loop()
void loop() { do_am=HT.readHumidity(); do_C=HT.readTemperature(); do_F=HT.readTemperature(true); Serial.print("Do am: "); Serial.print(do_am); Serial.print("Nhiet do: "); Serial.print(do_C); Serial.print(" C "); Serial.print("do_F); Serial.println(" F "); delay(1000); }
Trong đoạn chương trình chính void loop() chúng ta chỉ việc đọc dữ liệu từ chân cảm biến. Lưu các giá trị đọc được vào các biến. Sau đó xuất dữ liệu lên màn hình Serial.
Ví dụ 2: Ứng dụng đo độ ẩm và nhiệt độ bằng cảm biến DHT11 và hiển thị lên màn hình LCD 16×2.
Các linh kiện cần thiết
Linh kiện | Số lượng |
Bo arduino UNO | 01 |
Cảm biến DHT11 | 01 |
LCD 16×2 | 01 |
Biến trở | 01 |
Sơ đồ kết nối
Đoạn code chương trình
#include "DHT.h" #define Type DHT11 #include <LiquidCrystal.h> int rs=12; int en=11; int d4=5; int d5=4; int d6=3; int d7=2; LiquidCrystal lcd(rs,en,d4,d5,d6,d7); int sensorPin=7; DHT HT(sensorPin,Type); float do_am; float do_C; float do_F; void setup() { HT.begin(); delay(500); lcd.begin(16,2); } void loop() { do_am=HT.readHumidity(); do_C=HT.readTemperature(); do_F=HT.readTemperature(true); lcd.setCursor(0,0); lcd.print("Nhiet do F= "); lcd.print(do_F); lcd.setCursor(0,1); lcd.print("Do am= "); lcd.print(do_am); lcd.print(" %"); delay(500); lcd.clear(); Serial.print("Do am: "); Serial.print(do_am); Serial.print("% Nhiet do "); Serial.print(do_C); Serial.print(" C "); Serial.print(do_F); Serial.println(" F "); }
Giải thích chương trình
Đoạn chương trình này hoàn toàn giống với chương trình trên về cấu trúc. Tuy nhiên, trong ví dụ này chúng ta muốn hiển thị lên LCD. Do vậy, cần có những lệnh riêng của LCD để hiển thị giá trị. Những lệnh riêng này tôi đã hướng dẫn rất kỹ trong bài viết giao tiếp arduino với LCD. Các bạn hãy xem lại bài viết LCD để hiểu rõ hơn. Chúc các bạn học tốt.
Để lại một bình luận