#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2 // Chân DATA của DHT22
#define DHTTYPE DHT22 // Loại cảm biến: DHT22
#define RELAY_PIN 7 // Chân điều khiển relay
#define LED_PIN 13 // Chân điều khiển đèn LED
#define HUMIDITY_THRESHOLD 50 // Ngưỡng độ ẩm không khí (%)
LiquidCrystal_I2C lcd(0x27, 16, 2); // Màn hình LCD I2C
DHT dht(DHTPIN, DHTTYPE); // Cảm biến DHT22
void setup() {
pinMode(RELAY_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Tắt bơm ban đầu
digitalWrite(LED_PIN, LOW); // Tắt LED ban đầu
Serial.begin(9600);
dht.begin();
lcd.begin(16, 2); // 16 cột, 2 dòng
lcd.backlight(); // Bật đèn nền LCD
lcd.setCursor(0, 0);
lcd.print("Bat dau...");
delay(2000); // Đợi 2 giây
}
void loop() {
float humidity = readHumidity(); // Đọc độ ẩm
float temperature = readTemperature(); // Đọc nhiệt độ
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Không đọc được dữ liệu từ cảm biến DHT!");
return;
}
displayData(humidity, temperature); // Hiển thị dữ liệu trên LCD và Serial
controlPumpAndLED(humidity); // Điều khiển bơm và đèn LED
delay(2000); // Đọc giá trị mỗi 2 giây
}
// Hàm đọc độ ẩm
float readHumidity() {
return dht.readHumidity(); // Đọc giá trị độ ẩm từ cảm biến DHT22
}
// Hàm đọc nhiệt độ
float readTemperature() {
return dht.readTemperature(); // Đọc giá trị nhiệt độ từ cảm biến DHT22
}
// Hàm hiển thị dữ liệu trên LCD và Serial Monitor
void displayData(float humidity, float temperature) {
// Hiển thị thông tin lên Serial Monitor
Serial.print("Độ ẩm không khí: ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Nhiệt độ: ");
Serial.print(temperature);
Serial.println(" °C");
// Hiển thị thông tin trên màn hình LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Do am: ");
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Nhiet do: ");
lcd.print(temperature);
lcd.print("C");
}
// Hàm điều khiển bơm nước và đèn LED
void controlPumpAndLED(float humidity) {
if (humidity < HUMIDITY_THRESHOLD) {
digitalWrite(RELAY_PIN, LOW); // Bật bơm nước
digitalWrite(LED_PIN, HIGH); // Bật đèn LED
Serial.println("Bơm đang bật (Tưới nước)");
} else {
digitalWrite(RELAY_PIN, HIGH); // Tắt bơm nước
digitalWrite(LED_PIN, LOW); // Tắt đèn LED
Serial.println("Bơm đã tắt (Không cần tưới)");
}
}