#define BLYNK_TEMPLATE_ID "TMPL6RajoqWBn"
#define BLYNK_TEMPLATE_NAME "Water Level Monitoring"
#define BLYNK_AUTH_TOKEN "PgX90SyyKOWr2lxW2x2O4STpXmws7XXe"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
//HC-SR04 Ultrasonic Sensor
#define TRIGPIN 13
#define ECHOPIN 12
//Led Indicator
#define GREEN_LED 5
#define YELLOW_LED 4
#define RED_LED 2
//Push Button
// #define MODE_PB 11
// #define RELAY_PB 10
//Relay
#define RELAY 18
long duration_us;
float distance_cm, waterLevel, capacity;
BlynkTimer timer;
BLYNK_CONNECTED() {
Blynk.syncAll();
}
void setup(){
// Debug console
Serial.begin(115200);
pinMode(TRIGPIN, OUTPUT);
pinMode(ECHOPIN, INPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
// pinMode(MODE_PB, INPUT_PULLUP);
// pinMode(RELAY_PB, INPUT_PULLUP);
pinMode(RELAY, OUTPUT);
Blynk.virtualWrite(V5, "Water Tank Level Monitoring");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(500L, sendToBlynk);
}
void loop() {
Blynk.run();
timer.run();
}
void sendToBlynk(){
sendData();
}
int sensorHeight = 40; //cm
int tankHeight = 30; //cm
void sendData(){
waterLevel = sensorHeight - distance(TRIGPIN, ECHOPIN);
capacity = (waterLevel * 100)/tankHeight;
Blynk.virtualWrite(V4, capacity);
if (waterLevel > 60) {
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, HIGH);
Blynk.virtualWrite(V0, HIGH); //GREEN
Blynk.virtualWrite(V1, LOW); //YELLOW
Blynk.virtualWrite(V2, LOW); //RED
}
else if (waterLevel < 60 && waterLevel > 30) {
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
Blynk.virtualWrite(V0, LOW); //GREEN
Blynk.virtualWrite(V1, HIGH); //YELLOW
Blynk.virtualWrite(V2, LOW); //RED
}
else if (waterLevel < 30) {
digitalWrite(RED_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, LOW);
Blynk.virtualWrite(V0, LOW); //GREEN
Blynk.virtualWrite(V1, LOW); //YELLOW
Blynk.virtualWrite(V2, HIGH); //RED
}
if (capacity < 20) {
digitalWrite(RELAY, HIGH);
Blynk.virtualWrite(V7, "PUMP ON");
} else if (capacity >= 100) {
digitalWrite(RELAY, LOW);
Blynk.virtualWrite(V7, "PUMP OFF");
}
Serial.print("Capacity: " + String(capacity) + "%, ");
Serial.println("Water Level: " + String(waterLevel) + "cm");
delay(500);
}
float distance(int TRIG, int ECHO) {
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
duration_us = pulseIn(ECHO, HIGH);
distance_cm = 0.017 * duration_us;
return distance_cm;
}