#include <EEPROM.h>
#include <LiquidCrystal.h>
#include <DHT.h>
#define DHTPIN 8 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
long duration, inches;
int set_val, percentage;
bool state, pump;
const int buzzerPin = 4; // Buzzer pin
const int ledPin = 13; // LED pin
const int manualSwitchPin = 10; // Manual/Auto switch pin
void setup() {
lcd.begin(16, 2);
lcd.print("WATER LEVEL:");
lcd.setCursor(0, 1);
lcd.print("PUMP: OFF MANUAL");
pinMode(9, OUTPUT); // Trigger pin for ultrasonic sensor
pinMode(8, INPUT); // Echo pin for ultrasonic sensor
pinMode(buzzerPin, OUTPUT); // Buzzer pin
pinMode(ledPin, OUTPUT); // LED pin
pinMode(manualSwitchPin, INPUT_PULLUP); // Manual/Auto switch pin
dht.begin(); // Initialize DHT sensor
set_val = EEPROM.read(0);
if (set_val > 150) set_val = 150; // Limit set_val to 150 (adjust according to your requirements)
}
void loop() {
// Water level monitoring
digitalWrite(9, LOW);
delayMicroseconds(2);
digitalWrite(9, HIGH);
delayMicroseconds(10);
digitalWrite(9, LOW);
duration = pulseIn(8, HIGH);
inches = microsecondsToInches(duration);
percentage = (set_val - inches) * 100 / set_val;
lcd.setCursor(12, 0);
if (percentage < 0) percentage = 0;
lcd.print(percentage);
lcd.print("% ");
// Pump control
if (percentage < 30 && digitalRead(manualSwitchPin)) {
pump = true;
digitalWrite(buzzerPin, HIGH); // Turn on buzzer
digitalWrite(ledPin, HIGH); // Turn on LED
} else {
pump = false;
digitalWrite(buzzerPin, LOW); // Turn off buzzer
digitalWrite(ledPin, LOW); // Turn off LED
}
digitalWrite(12, pump ? HIGH : LOW); // Control the pump
// Manual/Auto switch state
lcd.setCursor(9, 1);
lcd.print(digitalRead(manualSwitchPin) ? "MANUAL" : "AUTO ");
// Save new set_val if manual switch pressed
if (digitalRead(manualSwitchPin) == LOW && !state) {
state = true;
set_val = inches;
EEPROM.write(0, set_val);
} else if (digitalRead(manualSwitchPin) == HIGH) {
state = false;
}
// Temperature and humidity monitoring
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Environmental condition alert
if (temperature >= 30 || humidity >= 70) {
digitalWrite(buzzerPin, HIGH); // Turn on buzzer
delay(1000);
digitalWrite(buzzerPin, LOW); // Turn off buzzer
delay(1000);
}
}
long microsecondsToInches(long microseconds) {
return microseconds / 74 / 2;
}