// IoT waterpump written by s.jashuva email - [email protected]
#define BLYNK_TEMPLATE_ID "TMPL3eiNE1QQe"
#define BLYNK_TEMPLATE_NAME "IoT waterpump"
#define BLYNK_AUTH_TOKEN "EBAt8dQcSNDQnWLUxX_47HnS4PH04XwH"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // WiFi SSID name
char pass[] = ""; // WiFi password
#define virtuallevel V0 // guage widget on Blynk app
#define virtualMode V1 // mode widget on blynk app
#define virtualPump V2 // pump widget on blynk app
const int trigger = 33; // trig connected to D4
const int echo = 25; // echo connected to D3
const int pump = 26; // pump connected to D5
int modevalue = 0;
int pumpvalue = 0;
bool mode = true;
long duration;
float distance;
int waterlevel;
int levellow = 300; // minimum tank depth
int levelhigh = 100; // maximum thersold level
int pumpstate = LOW;
BLYNK_WRITE(virtualMode) {
modevalue = param.asInt();
mode = (modevalue == 0) ? true : false;
}
BLYNK_WRITE(virtualPump) {
pumpvalue = param.asInt();
}
void setup() {
Blynk.begin(auth, ssid, pass);
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 * 0.017;
waterlevel = ((distance - levellow) / (levelhigh - levellow)) * 100;
if (waterlevel < 0) {
waterlevel = 0;
}
if (waterlevel > 100) {
waterlevel = 100;
}
Blynk.virtualWrite(virtuallevel, waterlevel);
}
void pumpAutomate() {
if (mode) {
if (waterlevel >= 95) {
pumpstate = LOW;
} else if (waterlevel <= 5) {
pumpstate = HIGH;
}
Blynk.virtualWrite(virtualPump, pumpstate);
} else {
pumpstate = pumpvalue ? HIGH : LOW;
}
}
void modeShift(){
if(waterlevel >= 85 || waterlevel <= 15){
if(!mode){
mode = true;
Blynk.virtualWrite(virtualMode, mode);
}
}
}
void loop() {
Blynk.run();
tanklevel();
modeShift();
pumpAutomate();
digitalWrite(pump, pumpstate);
}