#include <Servo.h>
#include <DHT.h>
#include <LiquidCrystal.h>
#define DHTPIN 6
#define DHTTYPE DHT22
#define SOIL_MOISTURE_PIN A0
#define SERVO_PIN 9
#define LED_PIN 7
#define BUTTON_PIN 8
DHT dht(DHTPIN, DHTTYPE);
Servo servo;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
bool irrigationStatus = false;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
servo.attach(SERVO_PIN);
servo.write(0); // Valve closed
lcd.begin(16, 2);
dht.begin();
}
void loop() {
int soilMoistureValue = analogRead(SOIL_MOISTURE_PIN);
float h = dht.readHumidity();
float t = dht.readTemperature();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: "); lcd.print(t); lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Hum: "); lcd.print(h); lcd.print("%");
if (digitalRead(BUTTON_PIN) == LOW) {
irrigationStatus = !irrigationStatus;
delay(500); // Debounce delay
}
if ((soilMoistureValue > 500 && t > 25) || irrigationStatus) { // Adjust the threshold as per your requirement
startIrrigation();
} else {
stopIrrigation();
}
delay(2000); // Adjust delay as per requirement
}
void startIrrigation() {
digitalWrite(LED_PIN, HIGH);
servo.write(90); // Open valve
lcd.setCursor(0, 1);
lcd.print("Irrigation ON ");
}
void stopIrrigation() {
digitalWrite(LED_PIN, LOW);
servo.write(0); // Close valve
lcd.setCursor(0, 1);
lcd.print("Irrigation OFF");
}