#include <DHT.h>
// Define sensor pins
#define SOIL_MOISTURE_PIN A0 // Soil moisture sensor analog pin
#define LDR_PIN A1 // LDR analog pin
#define DHT_PIN 2 // DHT22 data pin
#define BUZZER_PIN 3 // Buzzer digital pin
#define RED_LED_PIN 5 // Red LED for low soil moisture
#define BLUE_LED_PIN 6 // Blue LED for moderate soil moisture
#define GREEN_LED_PIN 7 // Green LED for good soil moisture
// Initialize DHT sensor
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHT_PIN, DHTTYPE);
void setup() {
// Initialize Serial Monitor
Serial.begin(9600);
// Initialize DHT sensor
dht.begin();
// Initialize buzzer and LED pins
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(BLUE_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
// Start with all LEDs and buzzer off
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
Serial.println("Smart Plant Monitoring System Initialized");
}
void loop() {
// Read soil moisture sensor data
int soilMoisture = analogRead(SOIL_MOISTURE_PIN);
// Read light sensor (LDR) data
int lightLevel = analogRead(LDR_PIN);
// Read temperature and humidity from DHT22 sensor
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Display sensor readings on Serial Monitor
Serial.println("==============================");
Serial.print("Soil Moisture: ");
Serial.println(soilMoisture);
Serial.print("Light Level: ");
Serial.println(lightLevel);
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println("°C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println("%");
// Healthy Plant Conditions
bool isSoilMoistureGood = (soilMoisture > 300 && soilMoisture <= 700);
bool isTemperatureGood = (temperature >= 18 && temperature <= 25); // Ideal plant temperature
bool isHumidityGood = (humidity >= 40 && humidity <= 70); // Ideal humidity range
// Determine soil moisture levels and LED indicators
if (soilMoisture < 300) { // Dry soil
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(BLUE_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
Serial.println("Soil is dry! (Low moisture)");
} else if (soilMoisture > 300 && soilMoisture <= 700) { // Moderate moisture
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
Serial.println("Soil is moist! (Moderate moisture)");
} else { // Well-watered soil
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, HIGH);
Serial.println("Soil is well-watered! (High moisture)");
}
// Check overall plant health and buzzer alert
if (isSoilMoistureGood && isTemperatureGood && isHumidityGood) {
Serial.println("The plant environment is healthy.");
digitalWrite(BUZZER_PIN, LOW); // Turn off buzzer
} else {
Serial.println("Warning: The plant environment needs attention!");
if (!isSoilMoistureGood) {
Serial.println("- Soil moisture is not optimal.");
digitalWrite(BUZZER_PIN, HIGH); // Turn on buzzer
}
if (!isTemperatureGood) {
Serial.println("- Temperature is outside the healthy range.");
digitalWrite(BUZZER_PIN, HIGH); // Turn on buzzer
}
if (!isHumidityGood) {
Serial.println("- Humidity is outside the healthy range.");
digitalWrite(BUZZER_PIN, HIGH); // Turn on buzzer
}
}
delay(2000); // Wait 2 seconds before the next reading
}