#define BLYNK_TEMPLATE_ID "TMPL3MZdwa6C8"
#define BLYNK_TEMPLATE_NAME "Water Level control"
#define BLYNK_AUTH_TOKEN "1x4M6ZO74LN9RlqbqY-rVF2_cMxNqIso"
/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// Set your WiFi credentials
char ssid[] = "Wokwi- Guest";
char pass[] = "";
//Define ultrasonic sensor pins
#define trigPin 4
#define echoPin 2
// Define thresholds for water levels in percentage and corresponding
#define FULL_LEVEL_PERCENTAGE 10
#define EMPTY_LEVEL_PERCENTAGE 80
//#define MOTOR_START_PERCENTAGE 5
#define MAX_DISTANCE 400
//Initialize Blynk
BlynkTimer timer;
void setup()
{
Serial.begin(115200);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
//Timer to check water level periodically
timer.setInterval(10000L, checkWaterLevel); //Check every 10 seconds
}
void loop()
{
Blynk.run();
timer.run();
}
void checkWaterLevel()
{
long duration, distance;
//Clear the trigger pin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
//Send a 10 microsecond pulse to trigger pin
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
//Read the duration of pulse on echo pin
duration = pulseIn(echoPin, HIGH);
//Calculate distance in cm
distance = duration * 0.034/2;
//Calculate thresholds in cm
int emptyLevelDistance = MAX_DISTANCE * EMPTY_LEVEL_PERCENTAGE / 100;
int fullLevelDistance = MAX_DISTANCE * FULL_LEVEL_PERCENTAGE / 100;
// Check water level and send appropriate message
if (distance >= emptyLevelDistance)
{
Serial.println("Water Level --> Going to Empty");
Blynk.virtualWrite(V3, "Water Level --> Going to Empty");
Serial.println("Please --> Turn on the Motor");
Blynk.virtualWrite(V3, "Please --> Turn on the Motor");
} else if( distance < fullLevelDistance)
{
Serial.println("Water Tank Full");
Blynk.virtualWrite(V3, "Water Tank Full");
}
}