#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Định nghĩa chân cho DHT22 và relay
#define DHTPIN 4
#define DHTTYPE DHT22
#define RELAY_PIN 25 // Chân GPIO điều khiển relay
// Ngưỡng độ ẩm để kích hoạt relay
#define HUMIDITY_THRESHOLD 30.0 // Thay đổi theo nhu cầu
// Khởi tạo đối tượng DHT và LCD
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
dht.begin(); // Khởi động cảm biến DHT22
lcd.init(); // Khởi tạo LCD
lcd.backlight(); // Bật đèn nền LCD
// Khởi tạo chân relay
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // Tắt relay ban đầu (tùy thuộc vào loại relay)
}
void loop() {
delay(2000); // Đợi 2 giây giữa các lần đọc dữ liệu
// Đọc độ ẩm và nhiệt độ từ DHT22
float h = dht.readHumidity();
float t = dht.readTemperature();
// Kiểm tra xem việc đọc cảm biến có thành công hay không
if (isnan(h) || isnan(t)) {
Serial.println("Không đọc được dữ liệu từ cảm biến DHT!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Loi cam bien");
return; // Thoát khỏi hàm loop nếu có lỗi
}
// Hiển thị độ ẩm và nhiệt độ lên màn hình LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Do am: ");
lcd.print(h, 1); // Hiển thị 1 chữ số thập phân
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Nhiet do: ");
lcd.print(t, 1); // Hiển thị 1 chữ số thập phân
lcd.print("C");
// Điều khiển relay dựa trên độ ẩm
if (h < HUMIDITY_THRESHOLD) {
digitalWrite(RELAY_PIN, HIGH); // Kích hoạt relay
Serial.println("Relay duoc kich hoat - LED sang");
} else {
digitalWrite(RELAY_PIN, LOW); // Tắt relay
Serial.println("Relay tat - LED tat");
}
// In ra giá trị độ ẩm và nhiệt độ lên Serial Monitor để debug
Serial.print("Do am: ");
Serial.print(h);
Serial.print("% - Nhiet do: ");
Serial.print(t);
Serial.println("C");
}