#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
DHT dht(2, DHT22); // Assuming the DHT22 sensor is connected to digital pin 2
Servo myservo; // Declare the Servo object
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 MANUAL");
pinMode(8, OUTPUT);
pinMode(9, INPUT);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, OUTPUT);
dht.begin(); // Initialize the DHT sensor
myservo.attach(3); // Assuming the servo is connected to digital pin 3
set_val = analogRead(A0);
if (set_val > 150) set_val = 150;
}
void loop() {
digitalWrite(8, HIGH);
delayMicroseconds(10);
digitalWrite(8, LOW);
duration = pulseIn(9, 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("% ");
// DHT22 Sensor
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
lcd.setCursor(0, 3);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C Humid: ");
lcd.print(humidity);
lcd.print("%");
// Servo Control
if (humidity > 60) {
myservo.write(90); // Move the servo to 90 degrees (or your desired position)
} else {
myservo.write(0); // Move the servo to 0 degrees (or another position)
}
// Pump Control
if (percentage < 30 && digitalRead(11)) pump = true;
if (percentage > 99) pump = false;
digitalWrite(12, !pump);
lcd.setCursor(5, 1);
if (pump) lcd.print("ON ");
else lcd.print("OFF ");
lcd.setCursor(9, 1);
if (!digitalRead(11)) lcd.print("MANUAL");
else lcd.print("AUTO ");
}
long microsecondsToInches(long microseconds) {
return microseconds / 74 / 2;
}