#include <EEPROM.h>
#include <LiquidCrystal.h>
#include <DHT.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // LCD connections
DHT dht(8, DHT22); // DHT22 sensor connected to pin 8
const int buzzerPin = 12; // Buzzer pin
const int triggerPin = 9; // Ultrasonic sensor trigger pin
const int echoPin = 10; // Ultrasonic sensor echo pin
long duration, inches;
int set_val, percentage;
bool state, pump;
void setup() {
lcd.begin(16, 2);
lcd.print("WATER LEVEL:");
lcd.setCursor(0, 1);
lcd.print("PUMP: OFF AUTO ");
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
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 measurement
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
duration = pulseIn(echoPin, HIGH);
inches = microsecondsToInches(duration);
percentage = (set_val - inches) * 100 / set_val;
// Temperature and humidity measurement
float temperature = dht.readTemperature(); // Read temperature
float humidity = dht.readHumidity(); // Read humidity
// Display water level, temperature, and humidity on LCD
lcd.setCursor(12, 0);
lcd.print(percentage);
lcd.print("% ");
lcd.setCursor(0, 1);
lcd.print("Temp:");
lcd.print(temperature);
lcd.print("C Humidity:");
lcd.print(humidity);
lcd.print("%");
// Pump control based on water level
if (percentage < 30) { // If water level is below 30%
pump = true;
tone(buzzerPin, 1000); // Turn on buzzer with a frequency of 1000Hz
} else {
pump = false;
noTone(buzzerPin); // Turn off buzzer
}
// Control the pump based on pump variable
digitalWrite(12, pump ? HIGH : LOW);
// Delay for stability
delay(500);
}
long microsecondsToInches(long microseconds) {
return microseconds / 74 / 2;
}