Tác giả: Thợ điện vô duyên - Phạm minh liêm
Hé lô anh em, Vô Duyên lại lên đây!
Bữa nay anh em mình lại tỉ tê chuyện nghề ha.
Anh em muốn tui viết bài thứ mười ba trong chuyên mục "Vô Duyên - Hỏi Đáp Về Smart Home" với chủ đề "Tự học vi điều khiển" đúng không?
Vụ này thì tui khoái nè, vì nó là cái "cần câu cơm" của tui mà.
Ở mấy bài trước, anh em mình đã biết cách điều khiển đồ điện, giờ mình học thêm cái nữa, đó là cách đọc dữ liệu từ môi trường.
Cái này giống như anh em mình gắn thêm cái "máy đo" cho thằng Arduino vậy đó.
Anh em mình sẽ làm được mấy cái đồng hồ đo nhiệt độ, đo độ ẩm, rất hay ho.
Thôi, không nói nhiều nữa, anh em mình bắt đầu thôi.
Bài 13: Giao tiếp với cảm biến nhiệt độ và độ ẩm DHT11 và DHT22
1. Cảm biến DHT11 và DHT22 là gì?
Nói thẳng luôn, hai thằng này là hai anh em sinh đôi, nhưng tính tình mỗi thằng mỗi khác.
Anh em cứ tưởng tượng nó là một cái "nhiệt kế điện tử" vậy đó.
Nó sẽ cho anh em mình biết nhiệt độ và độ ẩm của không khí xung quanh nó.
DHT11:
- Đây là thằng em út.
- Nó rẻ tiền, dễ kiếm, nhưng chỉ đo được nhiệt độ từ 0-50°C và độ ẩm từ 20-90%.
- Độ chính xác vừa phải, anh em mới học thì xài nó là đủ rồi.
DHT22:
- Đây là thằng anh lớn.
- Nó mắc tiền hơn nhưng xịn hơn nhiều.
- Nó đo được nhiệt độ rộng hơn (-40 đến 80°C), độ ẩm cũng rộng hơn (0-100%) và chính xác hơn thằng em.
- Anh em mình làm mấy cái dự án cần độ chính xác cao thì xài thằng này.
Cả hai đều có 3 chân để nối với Arduino:
- VCC (nguồn),
- GND (đất),
- DATA (dữ liệu).
2. Chuẩn bị "đồ nghề"
Để làm bài này, anh em mình cần có:
- Một bo Arduino Uno.
- Một cái breadboard.
- Một cái cảm biến DHT11 (hoặc DHT22).
- Một điện trở 10k Ohm.
- Vài sợi dây nối.
3. Đấu dây (Mạch điện)
Nói thiệt, cái này quan trọng lắm, anh em nhìn hình rồi làm theo cho kỹ.
- Chân VCC:
- Nối vào chân 5V trên bo Arduino.
- Chân GND:
- Nối vào chân GND trên bo Arduino.
- Chân DATA:
- Nối vào chân digital bất kỳ trên bo Arduino, ví dụ chân số 2.
- Thêm điện trở kéo lên (pull-up resistor):
- Anh em mình nên nối thêm một điện trở 10k Ohm từ chân VCC sang chân DATA.
- Cái này giúp tín hiệu từ cảm biến ổn định hơn, tránh bị nhiễu.
4. Lập trình và giải thích
Để thằng Arduino nó hiểu được tín hiệu từ cảm biến, anh em mình phải cài thêm một cái "từ điển" cho nó.
Cái này trong lập trình gọi là thư viện (library).
- Bước 1:
- Cài đặt thư viện.
- Anh em mở Arduino IDE, vào Sketch -\> Include Library -\> Manage Libraries...
- gõ "DHT sensor" vào ô tìm kiếm,
- rồi tìm thư viện tên là "DHT sensor library by Adafruit".
- Bấm "Install" để cài đặt.
- Bước 2:
- Viết chương trình.
- Giờ, anh em mình mở phần mềm lên, rồi copy cái đoạn code dưới đây vào:
// Khai báo thư viện để sử dụng cảm biến DHT
#include "DHT.h"
// Định nghĩa loại cảm biến và chân kết nối
#define DHTPIN 2 // Chân DATA nối vào chân số 2
#define DHTTYPE DHT11 // Đặt tên loại cảm biến là DHT11 (nếu xài DHT22 thì sửa lại)
// Khởi tạo đối tượng DHT
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// Bật cổng Serial để xem dữ liệu
Serial.begin(9600);
Serial.println("Hello, anh em! Bat dau do nhiet do va do am...");
dht.begin(); // Khoi dong cam bien DHT
}
void loop() {
// Đợi 2 giây rồi mới đọc giá trị
delay(2000);
// Đọc độ ẩm và nhiệt độ từ cảm biến
float doAm = dht.readHumidity();
float nhietDo = dht.readTemperature();
// Kiểm tra xem có lỗi đọc dữ liệu không
if (isnan(doAm) || isnan(nhietDo)) {
Serial.println("Loi! Khong the doc du lieu tu cam bien DHT!");
return;
}
// Hiển thị giá trị lên màn hình Serial Monitor
Serial.print("Do am: ");
Serial.print(doAm);
Serial.print(" %\t");
Serial.print("Nhiet do: ");
Serial.print(nhietDo);
Serial.println(" *C");
}
Giải thích:
- "#include "DHT.h"":
- Dòng này để gọi cái "từ điển" mình vừa cài vào.
- "#define DHTPIN 2":
- Giống như anh em mình đặt tên cho cái chân DATA là DHTPIN, và dặn nó là chân số 2.
- "#define DHTTYPE DHT11":
- Dòng này để cho nó biết mình đang xài loại cảm biến nào.
- "dht.readHumidity();" và "dht.readTemperature();":
- Hai câu lệnh này giống như anh em mình ra lệnh cho thằng Arduino là: "Mày đi hỏi thằng DHT xem độ ẩm và nhiệt độ là bao nhiêu rồi về nói cho tao nghe!".
- "Serial.println()":
- Câu lệnh này dùng để in kết quả ra màn hình Serial Monitor.
- Anh em mình có thể mở cái màn hình này lên bằng cách bấm vào biểu tượng kính lúp ở góc trên bên phải của phần mềm.
Tổng kết
Tóm lại, bài này anh em mình đã biết cách sử dụng cảm biến để đo nhiệt độ và độ ẩm.
Cái này là bước quan trọng để làm mấy cái máy đo thời tiết mini, hoặc điều khiển quạt tự động khi trời nóng trong các dự án smart home.
Nói nhiêu đó đủ rồi.
Hẹn anh em ở bài viết tiếp theo, mình sẽ học cách điều khiển động cơ servo trong các dự án tự động hóa!

Đăng nhận xét
Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.