/*
EMAIL:
PASSWORD:
*/
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL2wahGuDcM"
#define BLYNK_TEMPLATE_NAME "ZAWA PUMP MONITORING"
#define BLYNK_AUTH_TOKEN "Ou-2wj9NL8PkUfhgzoDBBGNdNkX8kAE9"
#define NUM_PZEMS 1
#define LIVE 27
#define relay LIVE
#define isPresent isActive
#define restorePin 5
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>
#include <HCSR04.h>
#include <adafruit_ina219_mock.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
LiquidCrystal_I2C lcd(0x27,20,4);
HCSR04 sonar(16, 17); // Max distance 30cm
Adafruit_INA219 MOCKina219;
bool state;
String notification,
alert1="----OVER VOLTAGE----",
alert2="---UNDER VOLTAGE ---",
alert3="-----OVERLOAD-------";
bool isActive;
float voltage,current,level;
void setup()
{
lcd.init();
lcd.backlight();
loadingdisplay();
Serial.begin(115200);
delay(500);
pinMode(LIVE,OUTPUT);
pinMode(restorePin,INPUT);
/*
if (! MOCKina219.begin()) {
Serial.println("Failed to find INA219 chip");
while (1) { delay(10); }
}*/
Blynk.begin(auth, ssid, pass);
}
void loop()
{
Blynk.run();
get_power();
send_update();
if(current >25)
{
digitalWrite(relay,LOW);
alert_display(alert3);
Blynk.virtualWrite(V4,alert3);
isPresent=LOW;
Blynk.virtualWrite(V0,isPresent);
}
else if(voltage <200)
{
digitalWrite(relay,LOW);
alert_display(alert2);
Blynk.virtualWrite(V4,alert2);
isPresent=LOW;
Blynk.virtualWrite(V0,isPresent);
}
else if(voltage>240)
{
digitalWrite(relay,LOW);
alert_display(alert1);
Blynk.virtualWrite(V4,alert1);
isPresent=LOW;
Blynk.virtualWrite(V0,isPresent);
}
else
{
}
if(state || digitalRead(restorePin)==0)
{
digitalWrite(relay,HIGH);
isPresent=HIGH;
Blynk.virtualWrite(V0,isPresent);
Blynk.virtualWrite(V4,"STANDARD OPERATION");
}
else
{
digitalWrite(relay,LOW);
isPresent=LOW;
Blynk.virtualWrite(V0,isPresent);
Blynk.virtualWrite(V4,"SUCCESSFULLY DISCONNECTED");
}
homedisplay();
}
BLYNK_WRITE(V0)
{
int data=param.asInt();
if(data != state)
{
state=data;
}
}
void get_power()
{ /*
float shuntvoltage = 0;
float busvoltage = 0;
float current_mA = 0;
float loadvoltage = 0;
float power_mW = 0;
shuntvoltage = MOCKina219.getShuntVoltage_mV();
busvoltage = MOCKina219.getBusVoltage_V();
current_mA = MOCKina219.getCurrent_mA();
power_mW = MOCKina219.getPower_mW();
loadvoltage = busvoltage + (shuntvoltage / 1000);
Serial.print("Bus Voltage: "); Serial.print(busvoltage); Serial.println(" V");
Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
Serial.print("Load Voltage: "); Serial.print(loadvoltage); Serial.println(" V");
Serial.print("Current: "); Serial.print(current_mA); Serial.println(" mA");
Serial.print("Power: "); Serial.print(power_mW); Serial.println(" mW");
Serial.println("");
delay(2000);
}*/
//THIS CODE FOR SIMULATION PURPOSE ONLY. COMMENT WHILE UPLOADING
voltage=map(analogRead(34),0,4095,0,300);
current=map(analogRead(35),0,4095,0,50);
level = map(sonar.dist(),0,400,0,100);
//END OF SIMULATION CODE
}
void send_update()
{
Blynk.virtualWrite(V1,voltage);
Blynk.virtualWrite(V2,current);
Blynk.virtualWrite(V3,level);
delay(150);
}
void loadingdisplay()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("*---WATER PUMP ---*");
lcd.setCursor(0,1);
lcd.print("* MONITORING *");
lcd.setCursor(0,2);
lcd.print(" SYSTEM INITIALIZE ");
lcd.setCursor(0,3);
lcd.print("PLEASE WAIT");
for(int k=11;k<20;k++)
{
lcd.setCursor(k,3);
lcd.print(".");
delay(500);
}
}
void homedisplay()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("LEVEL:");
lcd.setCursor(6,0);
lcd.print(level);
lcd.print(" %");
lcd.setCursor(0,1);
lcd.print("VOLTAGE:");
lcd.setCursor(8,1);
lcd.print(voltage,1);
lcd.print(" V");
lcd.setCursor(0,2);
lcd.print("CURRENT:");
lcd.setCursor(8,2);
lcd.print(current,1);
lcd.print(" A");
lcd.setCursor(0,3);
lcd.print("STATUS:");
lcd.setCursor(7,3);
if(isActive){lcd.print("CONNECTED");}
else{lcd.print("DISCONNECTED");}
delay(500);
}
void alert_display(String textAlert)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("-POWER USAGE ALERT-");
lcd.setCursor(0,1);
lcd.print(textAlert);
}
VOLTAGE
CURRENT