#define BLYNK_TEMPLATE_ID "TMPL52mlVWMHA"
#define BLYNK_TEMPLATE_NAME "voltage sensor"
#define BLYNK_AUTH_TOKEN "F4Lh67JCGrWJqYweC8vfhPxfMf81ok2H"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
// My WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
#define PIN_TRIG 26
#define PIN_ECHO 25
#define LOWLED 18
#define MIDLED 19
#define HIGHLED 21
#define Power 27
//Change the virtual pins according the Voltage
#define HIGHLED_vpin V1
#define MIDLED_vpin V2
#define LOWLED_vpin V3
#define Power_vpin V4
unsigned int level = 0;
//--------------------------------------------------------------------------
// This function is called every time the Virtual Pin state change
// i.e when web LEd Moves from Any volatge from Blynk App or Web Dashboard
BLYNK_WRITE(HIGHLED_vpin) {
level = param.asInt();
digitalWrite(HIGHLED, level);
}
//--------------------------------------------------------------------------
BLYNK_WRITE(MIDLED_vpin) {
level = param.asInt();
digitalWrite(MIDLED, level);
}
//--------------------------------------------------------------------------
BLYNK_WRITE(LOWLED_vpin) {
level = param.asInt();
digitalWrite(LOWLED, level);
}
//--------------------------------------------------------------------------
BLYNK_WRITE(Power_vpin) {
level = param.asInt();
digitalWrite(Power, level);
}
//------------------------------------------------------------------------------
// This function is called every time the device is connected to the Blynk.Cloud
// Request the latest state from the server
BLYNK_CONNECTED() {
Blynk.syncVirtual(HIGHLED);
Blynk.syncVirtual(MIDLED);
Blynk.syncVirtual(LOWLED);
Blynk.syncVirtual(Power);
}
void setup() {
Serial.begin(115200);
pinMode(LOWLED, OUTPUT);
pinMode(MIDLED, OUTPUT);
pinMode(HIGHLED, OUTPUT);
pinMode(Power, OUTPUT);
digitalWrite(LOWLED, HIGH);
digitalWrite(MIDLED, HIGH);
digitalWrite(HIGHLED, HIGH);
digitalWrite(Power, LOW);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
Blynk.begin(auth, ssid, pass);
}
void loop() {
Blynk.run();
timer.run();
Read_level();
}
void Read_level() {
// Start a new measurement
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
// To read the result
int duration = pulseIn(PIN_ECHO,HIGH);
Serial.print("Distance in CM: ");
Serial.println(duration / 58);
Serial.println("Distance in inches: ");
Serial.println(duration / 148);
level = duration / 58;
if ((level < 100) && (level < 240)){
digitalWrite(LOWLED, LOW);
Blynk.virtualWrite(LOWLED_vpin, HIGH);
digitalWrite(Power, HIGH);
Blynk.virtualWrite(Power_vpin, HIGH);
digitalWrite(HIGHLED, HIGH);
Blynk.virtualWrite(HIGHLED_vpin, LOW);
digitalWrite(MIDLED, HIGH);
Blynk.virtualWrite(MIDLED_vpin, LOW);
Blynk.logEvent("below_240v");
}
else if ((level < 300) && (level < 280)){
digitalWrite(LOWLED, HIGH);
Blynk.virtualWrite(LOWLED_vpin, LOW);
digitalWrite(HIGHLED, HIGH);
Blynk.virtualWrite(HIGHLED_vpin, LOW);
digitalWrite(MIDLED, LOW);
Blynk.virtualWrite(MIDLED_vpin, HIGH);
Blynk.logEvent("almost_below_240v");
}
else if (level >= 400){
digitalWrite(HIGHLED, LOW);
Blynk.virtualWrite(HIGHLED_vpin, HIGH);
digitalWrite(MIDLED, HIGH);
Blynk.virtualWrite(MIDLED_vpin, LOW);
digitalWrite(LOWLED, HIGH);
Blynk.virtualWrite(LOWLED_vpin, LOW);
digitalWrite(Power, LOW);
Blynk.virtualWrite(Power_vpin, LOW);
Blynk.logEvent("power_good_and_stable");
}
}