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 chín trong chuyên mục "Tự học vi điều khiển" cho trang Smart Home Minh Liêm đú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 đo khoảng cách.
Giờ mình kết hợp mấy cái đã học lại với nhau để làm một cái dự án hoàn chỉnh.
Cái này giống như anh em mình xây một cái nhà nhỏ vậy đó, dùng gạch, dùng xi măng, dùng sơn... mà mình đã chuẩn bị từ trước.
Tui sẽ hướng dẫn anh em mình làm một cái máy đo nhiệt độ, độ ẩm, hiển thị lên màn hình LCD cho dễ nhìn.
Thôi, không nói nhiều nữa, anh em mình bắt đầu thôi.
Bài 19: Dự án thực tế - Làm máy đo nhiệt độ và độ ẩm hiển thị lên màn hình LCD
1. 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 cái màn hình LCD 16x2 có module I2C.
- Vài sợi dây nối.
Lưu ý:
- Tui dùng màn hình LCD có module I2C để anh em mình đấu dây cho đỡ phức tạp.
- Nó chỉ có 4 chân thôi, rất gọn.
2. Đấ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ỹ.
Kết nối với Cảm biến DHT11:
- 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 số 2 trên bo Arduino.
Kết nối với Màn hình LCD 16x2 có module I2C:
- 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 SDA:
- Nối vào chân A4 trên bo Arduino.
- Chân SCL:
- Nối vào chân A5 trên bo Arduino.
3. Lập trình và giải thích
Để cái mạch chạy được, anh em mình phải cài hai cái "từ điển" (thư viện).
- Thư viện DHT sensor library by Adafruit (như bài 13).
- Thư viện LiquidCrystal\_I2C by Frank de Brabander.
Giờ, anh em mình mở phần mềm Arduino IDE lên, rồi copy cái đoạn code dưới đây vào:
// Khai báo thư viện
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Định nghĩa chân và loại cảm biến
#define DHTPIN 2
#define DHTTYPE DHT11
// Khởi tạo đối tượng cảm biến DHT
DHT dht(DHTPIN, DHTTYPE);
// Khởi tạo đối tượng màn hình LCD với địa chỉ 0x27, 16 cột, 2 hàng
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Khởi động màn hình LCD
lcd.init();
lcd.backlight();
lcd.clear(); // Xoa man hinh
lcd.setCursor(0, 0);
lcd.print("May do nhiet do:");
// Khởi động cảm biến DHT
dht.begin();
}
void loop() {
// Đợi 2 giây rồi đọc giá trị từ cảm biến
delay(2000);
// Đọc độ ẩm và nhiệt độ
float h = dht.readHumidity();
float t = dht.readTemperature();
// Kiểm tra nếu có lỗi đọc dữ liệu
if (isnan(h) || isnan(t)) {
lcd.setCursor(0, 1);
lcd.print("Loi cam bien!");
return;
}
// In độ ẩm lên hàng thứ hai của màn hình
lcd.setCursor(0, 1);
lcd.print("Do am: ");
lcd.print(h);
lcd.print(" % ");
// In nhiệt độ lên hàng thứ nhất
lcd.setCursor(10, 0);
lcd.print(t);
lcd.print(" C");
}
Giải thích:
- "LiquidCrystal_I2C lcd(0x27, 16, 2);":
- Câu này dùng để khởi tạo màn hình LCD.
- 0x27 là địa chỉ mặc định của module I2C.
- "lcd.init();":
- Lệnh này dùng để khởi động màn hình.
- "lcd.print(...)":
- Câu lệnh này dùng để in chữ lên màn hình.
- "lcd.setCursor(0, 1);":
- Dòng này giống như anh em mình di chuyển con trỏ tới cột 0, hàng 1 để viết chữ.
Tổng kết
Tóm lại, bài này anh em mình đã tự tay làm được một cái máy đo nhiệt độ, độ ẩm xịn sò.
Cái này là bước quan trọng để anh em mình làm mấy cái dự án lớn hơn, như một cái hệ thống điều khiển quạt tự động khi trời nóng.
Nói nhiêu đó đủ rồi.
Hẹn anh em ở bài viết cuối cùng, mình sẽ tổng kết lại những kiến thức đã học và định hướng cho anh em mình những dự án tiếp theo!
Hẹn anh em bữa khác mình lại rủ rỉ tâm sự chuyện nghề!
Tạm biệt anh em.

Đă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.