#include <LiquidCrystal.h>
#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 8 // LED1 pin (D8)
#define LED2_PIN 9 // LED2 pin (D9)
#define LED3_PIN 10 // LED3 pin (D10)
#define WATER_QUALITY_PIN A0 // Water quality sensor analog pin
#define MIN_DISTANCE 5 // Minimum distance for simulation (in cm)
#define MAX_DISTANCE 50 // Maximum distance for simulation (in cm)
#define TEMPERATURE_THRESHOLD 50 // Temperature threshold
#define HUMIDITY_THRESHOLD 70 // Humidity threshold
#define WATER_QUALITY_THRESHOLD 50 // Water quality threshold
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // LCD pins: RS, EN, D4, D5, D6, D7
unsigned long previousMillis = 0;
const long interval = 1000; // Interval in milliseconds
void setup() {
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(LED3_PIN, OUTPUT);
Serial.begin(9600);
lcd.begin(16, 2); // Initialize the LCD with 16 columns and 2 rows
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Simulate distance measurement
int distance = random(MIN_DISTANCE, MAX_DISTANCE + 1); // Random distance between MIN_DISTANCE and MAX_DISTANCE cm
int distanceNormalized = map(distance, MIN_DISTANCE, MAX_DISTANCE, 0, 100); // Scale distance to be between 0 and 100
// Simulate temperature and humidity
float temperature = random(TEMPERATURE_THRESHOLD - 10, TEMPERATURE_THRESHOLD + 10); // Random temperature near TEMPERATURE_THRESHOLD
int temperatureNormalized = map(temperature, TEMPERATURE_THRESHOLD - 10, TEMPERATURE_THRESHOLD + 10, 0, 100); // Scale temperature to be between 0 and 100
float humidity = random(HUMIDITY_THRESHOLD - 10, HUMIDITY_THRESHOLD + 10); // Random humidity near HUMIDITY_THRESHOLD
int humidityNormalized = map(humidity, HUMIDITY_THRESHOLD - 10, HUMIDITY_THRESHOLD + 10, 0, 100); // Scale humidity to be between 0 and 100
// Simulate water quality value
int waterQualityValue = random(WATER_QUALITY_THRESHOLD - 10, WATER_QUALITY_THRESHOLD + 10); // Random water quality value near WATER_QUALITY_THRESHOLD
int waterQualityNormalized = map(waterQualityValue, WATER_QUALITY_THRESHOLD - 10, WATER_QUALITY_THRESHOLD + 10, 0, 100); // Scale water quality to be between 0 and 100
// Check water level
if (distance >= MIN_DISTANCE && distance <= MAX_DISTANCE) {
digitalWrite(LED1_PIN, HIGH); // Turn on LED1
digitalWrite(BUZZER_PIN, LOW); // Turn off buzzer
} else {
digitalWrite(LED1_PIN, LOW); // Turn off LED1
digitalWrite(BUZZER_PIN, HIGH); // Turn on buzzer
}
// Check temperature
if (temperatureNormalized >= TEMPERATURE_THRESHOLD) {
digitalWrite(LED2_PIN, HIGH); // Turn on LED2
} else {
digitalWrite(LED2_PIN, LOW); // Turn off LED2
}
// Check humidity
if (humidityNormalized >= HUMIDITY_THRESHOLD) {
digitalWrite(LED3_PIN, HIGH); // Turn on LED3
} else {
digitalWrite(LED3_PIN, LOW); // Turn off LED3
}
// Check water quality
if (waterQualityNormalized >= WATER_QUALITY_THRESHOLD) {
Serial.println("Water quality is good");
// Add corresponding actions here
} else {
Serial.println("Water quality is poor");
// Add corresponding actions here
}
// Print simulated readings to LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Water Level: ");
lcd.print(distanceNormalized);
lcd.print(" %");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidityNormalized);
lcd.print(" %");
}
delay(100); // Delay to stabilize the loop
}