#include <OneWire.h>
#include <DallasTemperature.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Pin definitions
#define DHTPIN 35 // DHT22 data pin connected to D35
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define SOIL_PIN 34 // Soil moisture sensor pin connected to D34
#define DS18B20_PIN 32 // DS18B20 data pin connected to D32
#define LED_PIN 2 // LED pin connected to D2
// Initialize the DHT sensor
DHT dht(DHTPIN, DHTTYPE);
// Initialize OneWire and DS18B20 sensors
OneWire oneWire(DS18B20_PIN);
DallasTemperature ds18b20(&oneWire);
// Initialize LCD (I2C Address 0x27, 16 characters and 2 lines)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variables for sensor readings
float temperatureDHT, humidity, ds18b20Temperature;
int soilMoistureValue, soilMoisturePercent;
// Threshold values for LED activation
float tempThreshold = 30.0; // Temperature threshold for LED (in Celsius)
float humidityThreshold = 40.0; // Humidity threshold for LED (in percentage)
int soilMoistureThreshold = 30; // Soil moisture threshold (in percentage)
void setup() {
Serial.begin(115200); // Start Serial communication
// Initialize sensors
dht.begin();
ds18b20.begin();
// Initialize the LCD
lcd.init();
lcd.backlight();
// Set LED pin as output
pinMode(LED_PIN, OUTPUT);
// Welcome message on LCD
lcd.setCursor(0, 0);
lcd.print("Smart Irrigation");
lcd.setCursor(0, 1);
lcd.print("System Starting");
delay(2000);
lcd.clear();
}
void loop() {
// Reading DHT22 sensor
temperatureDHT = dht.readTemperature();
humidity = dht.readHumidity();
// Read soil moisture sensor
soilMoistureValue = analogRead(SOIL_PIN);
soilMoisturePercent = map(soilMoistureValue, 4095, 0, 0, 100);
// Request temperature from DS18B20 sensor
ds18b20.requestTemperatures();
ds18b20Temperature = ds18b20.getTempCByIndex(0);
// Check for proper DS18B20 reading
if (ds18b20Temperature == DEVICE_DISCONNECTED_C) {
Serial.println("Error: DS18B20 sensor disconnected.");
lcd.setCursor(0, 0);
lcd.print("DS18B20 Error");
} else {
// Display readings on LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperatureDHT);
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(humidity);
lcd.print("% SM:");
lcd.print(soilMoisturePercent);
}
// Print to Serial Monitor for debugging
Serial.print("DHT22 Temp: ");
Serial.print(temperatureDHT);
Serial.print("C, Humidity: ");
Serial.print(humidity);
Serial.print("%, Soil Moisture: ");
Serial.print(soilMoisturePercent);
Serial.print("%, DS18B20 Temp: ");
Serial.println(ds18b20Temperature);
// LED control based on thresholds
if (temperatureDHT > tempThreshold && humidity < humidityThreshold && soilMoisturePercent < soilMoistureThreshold) {
digitalWrite(LED_PIN, HIGH); // Turn on LED
} else {
digitalWrite(LED_PIN, LOW); // Turn off LED
}
delay(2000); // Wait for 2 seconds before next reading
}