#define TRIGGER_PIN 3 // Ultrasonic Sensor trigger pin (D3)
#define ECHO_PIN 2 // Ultrasonic Sensor echo pin (D2)
#define DHT_PIN 4 // DHT22 Sensor signal pin (D4)
#define BUZZER_PIN 6 // Buzzer pin (D6)
#define LED1_PIN 0 // LED1 pin (D0)
#define LED2_PIN 1 // LED2 pin (D1)
#define LED3_PIN 7 // LED3 pin (D7)
#define WATER_QUALITY_PIN A0 // Water quality sensor analog pin
#define MAX_DISTANCE 200 // Maximum distance to measure (in cm)
#define MIN_WATER_LEVEL 10 // Minimum water level threshold (in cm)
#define MAX_WATER_LEVEL 50 // Maximum water level threshold (in cm)
#define TEMPERATURE_THRESHOLD 25.0 // Temperature threshold (in Celsius)
#define HUMIDITY_THRESHOLD 60.0 // Humidity threshold (in %)
#define WATER_QUALITY_THRESHOLD 400 // Water quality threshold (adjust as needed)
#include <DHT.h>
DHT dht(DHT_PIN, DHT22); // DHT22 sensor instance
void setup() {
Serial.begin(9600);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(LED3_PIN, OUTPUT);
dht.begin();
}
void loop() {
// Read distance from ultrasonic sensor
long duration, cm;
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
cm = duration / 58; // Convert echo time to distance in cm
// Read temperature and humidity from DHT22 sensor
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Read analog value from water quality sensor
int waterQualityValue = analogRead(WATER_QUALITY_PIN);
// Check if readings are valid
if (cm > 0 && temperature >= 0 && humidity >= 0) {
// Check water level
if (cm >= MIN_WATER_LEVEL && cm <= MAX_WATER_LEVEL) {
// Water level within acceptable range
digitalWrite(LED1_PIN, HIGH); // Turn on LED1
digitalWrite(BUZZER_PIN, LOW); // Turn off buzzer
} else {
// Water level below minimum or above maximum threshold
digitalWrite(LED1_PIN, LOW); // Turn off LED1
digitalWrite(BUZZER_PIN, HIGH); // Turn on buzzer
}
// Check temperature
if (temperature >= TEMPERATURE_THRESHOLD) {
// Temperature above threshold
digitalWrite(LED2_PIN, HIGH); // Turn on LED2
} else {
// Temperature below threshold
digitalWrite(LED2_PIN, LOW); // Turn off LED2
}
// Check humidity
if (humidity >= HUMIDITY_THRESHOLD) {
// Humidity above threshold
digitalWrite(LED3_PIN, HIGH); // Turn on LED3
} else {
// Humidity below threshold
digitalWrite(LED3_PIN, LOW); // Turn off LED3
}
// Check water quality
if (waterQualityValue >= WATER_QUALITY_THRESHOLD) {
// Water quality above threshold
Serial.println("Water quality is good");
// Add corresponding actions here
} else {
// Water quality below threshold
Serial.println("Water quality is poor");
// Add corresponding actions here
}
// Print readings to Serial Monitor
Serial.print("Distance: ");
Serial.print(cm);
Serial.print(" cm, Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.print("%, Water Quality: ");
Serial.println(waterQualityValue);
} else {
// Invalid readings, print error message
Serial.println("Error: Invalid readings");
}
delay(1000); // Delay before next reading
}