#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Define Pins
#define DHTPIN 2
#define DHTTYPE DHT22
#define LDR_PIN 3
#define SOIL_MOISTURE_PIN A0
#define RELAY_PIN 4
// LCD setup (address 0x27, 16 chars, 2 lines)
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
pinMode(LDR_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("Smart Irrigation");
delay(2000);
lcd.clear();
}
void loop() {
float temp = dht.readTemperature();
float humidity = dht.readHumidity();
int soilValue = analogRead(SOIL_MOISTURE_PIN); // 0-1023
bool isDay = digitalRead(LDR_PIN); // 0 = Dark, 1 = Light
// Display on LCD
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temp, 1);
lcd.print("C H:");
lcd.print(humidity, 0);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Soil:");
lcd.print(soilValue);
lcd.print(isDay ? " Day " : " Night");
// Control Relay
if (soilValue > 600) { // Adjust threshold as needed
digitalWrite(RELAY_PIN, HIGH); // Turn ON water pump
} else {
digitalWrite(RELAY_PIN, LOW); // Turn OFF water pump
}
// Debug Output
Serial.print("Temp: "); Serial.print(temp);
Serial.print(" °C, Hum: "); Serial.print(humidity);
Serial.print(" %, Soil: "); Serial.print(soilValue);
Serial.print(", Light: "); Serial.println(isDay ? "Day" : "Night");
delay(2000);
}