Giới thiệu sản phẩm
#include <DHT.h> // Thư viện cảm biến DHT22
#include <Servo.h> // Thư viện động cơ Servo SG90
#include <Wire.h> // Thư viện giao tiếp I2C (có sẵn)
#include <LiquidCrystal_I2C.h> // Thư viện màn hình LCD I2C
// Cấu hình chân kết nối
const int DHTPIN = 2;
const int DHTTYPE = DHT22; //DHT11
const int SERVOPIN = 9;
//Khởi tạo
DHT dht(DHTPIN, DHT22);
Servo myServo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
dht.begin();
myServo.attach(SERVOPIN);
// Khởi động màn hình LCD
lcd.init();
lcd.backlight(); // Bật đèn nền LCD
// Hiển thị lời chào lúc khởi động
lcd.setCursor(0, 0); // Đặt con trỏ tại Cột 0, Hàng 0
lcd.print("He thong DHT22");
lcd.setCursor(0, 1); // Đặt con trỏ tại Cột 0, Hàng 1
lcd.print("Dang khoi dong..");
myServo.write(0);
delay(2000); // Chờ 2 giây để ổn định hệ thống
lcd.clear(); // Xóa màn hình
}
void loop() {
// Chờ 2 giây giữa các lần đọc dữ liệu
delay(2000);
float temperature = dht.readTemperature();
// Kiểm tra lỗi cảm biến
if (isnan(temperature)) {
Serial.println("Loi doc DHT22!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Loi cam bien!");
return;
}
// 1. In dữ liệu ra Serial Monitor để kiểm tra trên máy tính
Serial.print("Nhiet do: ");
Serial.print(temperature);
Serial.println(" *C");
// 2. Hiển thị nhiệt độ lên Hàng 1 của LCD
lcd.setCursor(0, 0);
lcd.print("Nhiet do: ");
lcd.print(temperature, 1); // Lấy 1 chữ số thập phân (VD: 25.4)
// Tạo ký tự độ C (xDF là mã Hex của dấu độ trên LCD)
lcd.write(0xDF);
lcd.print("C "); // Khoảng trắng dư để xóa ký tự thừa trước đó nếu có
// 3. Logic điều khiển Motor SG90 và hiển thị trạng thái lên Hàng 2 của LCD
lcd.setCursor(0, 1);
if (temperature > 20.0) {
myServo.write(90);
lcd.print("Servo: Mo (90) ");
Serial.println("Servo xoay 90 do.");
} else {
myServo.write(0);
lcd.print("Servo: Dong (0) ");
Serial.println("Servo quay ve 0 do.");
}
}
Hình ảnh sản phẩm
Sản phẩm cùng tác giả
Sản phẩm liên quan
Không có sản phẩm nào
Đăng nhập để tham gia bình luận