#define BLYNK_TEMPLATE_ID "TMPL3VBn6WTqb"
#define BLYNK_TEMPLATE_NAME "IoT waterpump"
#define BLYNK_AUTH_TOKEN "ATVnnH4G1I-o2hwrZVqC3l2pDDsXQoqn"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int trigger = 32;
const int echo = 33;
const int pump = 25;
long duration;
float distance, waterlevel;
int levellow = 400;
int levelhigh = 10;
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
void setup(){
Blynk.begin(auth, ssid, pass);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Initializing...");
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(pump, OUTPUT);
}
void tankLevel(){
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
duration = pulseIn(echo, HIGH);
distance = (duration/2)/29.1;
waterlevel = ((distance - levellow)/(levelhigh - levellow))*100;
if(waterlevel < 0){
waterlevel = 0;
}
if(waterlevel > 100){
waterlevel = 100;
}
lcd.setCursor(0,0);
lcd.print("WATERLEVEL=");
lcd.print(waterlevel);
lcd.print("%");
Blynk.virtualWrite(V0, waterlevel);
}
void pumpAutomate(){
if(waterlevel <= 10){
digitalWrite(pump, HIGH);
lcd.setCursor(0,1);
lcd.print("WATERPUMP=ON ");
}
else if(waterlevel >= 90){
digitalWrite(pump, LOW);
lcd.setCursor(0,1);
lcd.print("WATERPUMP=OFF");
}
}
void loop(){
Blynk.run();
tankLevel();
pumpAutomate();
}