#define BLYNK_TEMPLATE_ID "TMPL3RbXt4EOv"
#define BLYNK_TEMPLATE_NAME "WATER LEVEL"
#define BLYNK_AUTH_TOKEN "xzZ_ytvmXFddu2Iq8SjcPb4tK3uqL1IB"
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define LED1 19
#define LED2 18
#define LED3 2
#define LED4 15
#define trig 5
#define echo 4
#define relay 14
#define Buzzer 12
#define Temp 13
OneWire oneWire(Temp);
DallasTemperature sensors(&oneWire);
//Enter your tank max value(CM)
LiquidCrystal_I2C lcd(0x27, 16, 2);
int MaxLevel = 20;
int Level1 = (MaxLevel * 100) / 100; //20
int Level2 = (MaxLevel * 70) / 100; //14
int Level3 = (MaxLevel * 50) / 100; //10
int Level4 = (MaxLevel * 25) / 100; // 5
//Initialize the LCD display
bool motorEnabled = true;
BlynkTimer timer;
// Enter your Auth token
char auth[] = "xzZ_ytvmXFddu2Iq8SjcPb4tK3uqL1IB";
//Enter your WIFI SSID and password
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
void setup() {
Serial.println("Setup started");
// Debug console
Serial.begin(9600);
Blynk.begin(auth, ssid, pass,"blynk.cloud", 80);
sensors.begin();
lcd.init();
lcd.backlight();
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(relay, OUTPUT);
pinMode(Buzzer, OUTPUT);
digitalWrite(relay, HIGH);
lcd.setCursor(0, 0);
lcd.print("System");
lcd.setCursor(4, 1);
lcd.print("Loading..");
delay(4000);
lcd.clear();
}
//Get the ultrasonic sensor values
void ultrasonic() {
digitalWrite(trig, LOW);
delayMicroseconds(4);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
long t = pulseIn(echo, HIGH);
int distance = t / 29 / 2;
sensors.requestTemperatures(); // Send the command to get temperature readings
int waterTemperature = sensors.getTempCByIndex(0); // Get temperature in Celsius
// Display water temperature on LCD
lcd.setCursor(9, 0);
lcd.print(waterTemperature);
lcd.print("c");
Blynk.virtualWrite(V3, waterTemperature);
Blynk.virtualWrite(V4, waterTemperature);
// Display water Level on LCD
lcd.setCursor(10, 1);
lcd.print(distance);
lcd.print("cm");
Serial.println(distance);
int blynkDistance = (distance - MaxLevel) * -1;
if (distance <= MaxLevel) {
Blynk.virtualWrite(V0, blynkDistance);
} else {
Blynk.virtualWrite(V0, 0);
}
// lcd.setCursor(0, 0);
// lcd.print("L:");
if (Level1 <= distance) {
lcd.setCursor(0, 0);
lcd.print("Empty");
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(Buzzer, HIGH);
delay(1000);
digitalWrite(Buzzer, LOW);
delay(1000);
if(motorEnabled==true)
{
digitalWrite(relay, HIGH);
lcd.setCursor(0, 1);
lcd.print("Motor OFF ");
}
else{
digitalWrite(relay, LOW);
lcd.setCursor(0, 1);
lcd.print("Motor ON ");
}
} else if (Level2 <= distance && Level1 > distance) {
lcd.setCursor(0, 0);
lcd.print("Low");
lcd.print(" ");
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(Buzzer, HIGH);
delay(500);
digitalWrite(Buzzer, LOW);
delay(2000);
if(motorEnabled==true)
{
digitalWrite(relay, HIGH);
lcd.setCursor(0, 1);
lcd.print("Motor OFF ");
}
else{
digitalWrite(relay, LOW);
lcd.setCursor(0, 1);
lcd.print("Motor ON ");
}
} else if (Level3 <= distance && Level2 > distance) {
lcd.setCursor(0, 0);
lcd.print("Medium");
lcd.print(" ");
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
if(motorEnabled==true)
{
digitalWrite(relay, HIGH);
lcd.setCursor(0, 1);
lcd.print("Motor OFF ");
}
else{
digitalWrite(relay, LOW);
lcd.setCursor(0, 1);
lcd.print("Motor ON ");
}
} else if (Level4 <= distance && Level3 > distance) {
lcd.setCursor(0, 0);
lcd.print("Full");
lcd.print(" ");
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
if (distance > 5 ) { // Check if motor is enabled
digitalWrite(relay, LOW);
lcd.setCursor(0, 1);
lcd.print("Motor ON ");
} else {
digitalWrite(relay, HIGH);
lcd.setCursor(0, 1);
lcd.print("Motor OFF ");
}
}
}
//Get the button value
BLYNK_WRITE(V1) {
Serial.println("motorEnabled: ");
Serial.println(motorEnabled);
int Relay = param.asInt();
Serial.println("Button State: " + String(Relay));
digitalWrite(relay, Relay);
if (Relay == HIGH) {
lcd.setCursor(0, 1);
lcd.print("Motor ON ");
motorEnabled = true;
} else {
lcd.setCursor(0, 1);
lcd.print("Motor OFF");
motorEnabled = false;
}
}
void loop() {
ultrasonic();
Blynk.run();//Run the Blynk library
}