#include <Wire.h>
#include "DHT.h"
// Khai báo DHT22
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Chân LED và cảm biến
int ledPump1 = 8;
int ledPump2 = 9;
int ledPump3 = 10;
int ledFan = 11;
int soilSensorPin = A0;
int soilMoistureThreshold = 340; // Ngưỡng độ ẩm đất đạt 85%
float tempThreshold = 20.0; // Ngưỡng nhiệt độ dưới 20°C
float humidityThreshold = 90.0; // Ngưỡng độ ẩm không khí 90%
void setup() {
// Khởi tạo Serial
Serial.begin(9600);
// Khởi tạo cảm biến DHT22
dht.begin();
// Cài đặt các chân LED
pinMode(ledPump1, OUTPUT);
pinMode(ledPump2, OUTPUT);
pinMode(ledPump3, OUTPUT);
pinMode(ledFan, OUTPUT);
// Tắt tất cả các thiết bị ban đầu
turnOffDevices();
}
void loop() {
// Đọc giá trị cảm biến
int soilMoisture = analogRead(soilSensorPin);
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// In giá trị lên Serial Monitor (Dành cho việc kiểm tra)
Serial.print("Soil Moisture: ");
Serial.print(soilMoisture);
Serial.print(" | Temperature: ");
Serial.print(temperature);
Serial.print(" | Humidity: ");
Serial.println(humidity);
// Điều khiển bơm nước
controlPumps(soilMoisture, temperature);
// Điều khiển quạt khí
controlFan(temperature, humidity);
delay(1000); // Đợi 1 giây trước khi lặp lại
}
// Hàm điều khiển bơm nước
void controlPumps(int soilMoisture, float temperature) {
if (soilMoisture < soilMoistureThreshold || temperature < tempThreshold) {
// Bật bơm nước nếu độ ẩm đất dưới ngưỡng hoặc nhiệt độ dưới 20°C
digitalWrite(ledPump1, HIGH);
digitalWrite(ledPump2, HIGH);
digitalWrite(ledPump3, HIGH);
} else {
digitalWrite(ledPump1, LOW);
digitalWrite(ledPump2, LOW);
digitalWrite(ledPump3, LOW);
}
}
// Hàm điều khiển quạt khí
void controlFan(float temp, float hum) {
if (hum > humidityThreshold) {
digitalWrite(ledFan, HIGH); // Bật quạt khí khi độ ẩm không khí trên 90%
} else {
digitalWrite(ledFan, LOW); // Tắt quạt khí khi độ ẩm không khí dưới 90%
}
}
// Hàm tắt tất cả các thiết bị
void turnOffDevices() {
digitalWrite(ledPump1, LOW);
digitalWrite(ledPump2, LOW);
digitalWrite(ledPump3, LOW);
digitalWrite(ledFan, LOW);
}