#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 4 // Pin connected to the DHT sensor
#define DHTTYPE DHT22 // Type of the DHT sensor
LiquidCrystal_I2C lcd(0x27, 16, 2); // Initialize the LCD with I2C address 0x27
#define TRIG_PIN 13 // TRIG pin of the ultrasonic sensor
#define ECHO_PIN 12 // ECHO pin of the ultrasonic sensor
#define GREEN_LED_PIN 2 // Green LED pin
#define ORANGE_LED_PIN 14 // Orange LED pin
#define RED_LED_PIN 15 // Red LED pin
#define BUZZER_PIN 27 // Buzzer pin
DHT dht(DHTPIN, DHTTYPE); // Initialize the DHT sensor
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(ORANGE_LED_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
dht.begin();
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(ORANGE_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
lcd.setCursor(0, 0);
lcd.print("Flood Monitoring");
lcd.setCursor(0, 1);
lcd.print("Alerting System");
delay(5000);
lcd.clear();
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
lcd.print("ERROR");
return;
}
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
int waterLevelPercentage = map(distance, 2, 400, 0, 100);
waterLevelPercentage = constrain(waterLevelPercentage, 0, 100);
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("% Temperature: ");
Serial.print(temperature);
Serial.print("C Water Level: ");
Serial.print(waterLevelPercentage);
Serial.println("%");
lcd.setCursor(0, 0);
lcd.print("Temperature:");
lcd.setCursor(0, 1);
lcd.print("Humidity :");
lcd.setCursor(12, 0);
lcd.print(temperature);
lcd.setCursor(12, 1);
lcd.print(humidity);
delay(1000);
lcd.clear();
lcd.print("Water Level:");
lcd.print(waterLevelPercentage);
lcd.print("% ");
if (distance <= 3) {
lcd.setCursor(0, 1);
lcd.print("Red Alert! ");
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(ORANGE_LED_PIN, LOW);
tone(BUZZER_PIN, 1000); // Turn on the buzzer
delay(2000);
noTone(BUZZER_PIN); // Turn off the buzzer
delay(2000);
} else if (distance <= 10) {
lcd.setCursor(0, 1);
lcd.print("Orange Alert! ");
digitalWrite(ORANGE_LED_PIN, HIGH);
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
tone(BUZZER_PIN, 1000); // Turn on the buzzer
delay(2000);
noTone(BUZZER_PIN); // Turn off the buzzer
delay(2000);
} else {
lcd.setCursor(0, 1);
lcd.print("Green Alert! ");
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(ORANGE_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, LOW);
noTone(BUZZER_PIN); // Turn off the buzzer
}
}