#define BLYNK_TEMPLATE_NAME "Water Allowance System"
#define BLYNK_TEMPLATE_ID "TMPL3Sjl0R_dk"
#define BLYNK_AUTH_TOKEN "dqi3VKmWkWGsKH3S9JBPgmYDXv0idDPX"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Ultrasonic sensor pins
#define TRIG_PIN 5
#define ECHO_PIN 18
// LEDs
#define RED_LED 22 // Low level
#define BLUE_LED 21 // Mid level
#define GREEN_LED 19 // High level
// Buzzer
#define BUZZER 14
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
digitalWrite(BUZZER, LOW);
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long duration = pulseIn(ECHO_PIN, HIGH, 30000UL);
if (duration == 0) return -1.0; // No echo
return duration / 58.0; // Convert to cm
}
void loop() {
Blynk.run();
float distance = readDistanceCM();
Serial.print("Water distance: ");
Serial.print(distance);
Serial.println(" cm");
bool lowState = false;
bool midState = false;
bool highState = false;
if (distance >= 200) {
digitalWrite(GREEN_LED, HIGH);
digitalWrite(BLUE_LED, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER, LOW);
Blynk.virtualWrite(V0, 1);
Blynk.virtualWrite(V1, 1);
Blynk.virtualWrite(V2, 1);
}
else if (distance >= 100 && distance < 200) {
digitalWrite(GREEN_LED, LOW);
digitalWrite(BLUE_LED, HIGH);
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER, LOW);
Blynk.virtualWrite(V0, 1);
Blynk.virtualWrite(V1, 1);
Blynk.virtualWrite(V2, 0);
}
else if (distance < 100) {
digitalWrite(GREEN_LED, LOW);
digitalWrite(BLUE_LED, LOW);
digitalWrite(RED_LED, HIGH);
digitalWrite(BUZZER, HIGH);
Blynk.virtualWrite(V0, 1);
Blynk.virtualWrite(V1, 0);
Blynk.virtualWrite(V2, 0);
}
else
{
Blynk.virtualWrite(V0, 0);
Blynk.virtualWrite(V1, 0);
Blynk.virtualWrite(V2, 0);
}
delay(500);
}