#define BLYNK_TEMPLATE_ID "TMPL31u4OlfzT"
#define BLYNK_TEMPLATE_NAME "scwms"
#define BLYNK_AUTH_TOKEN "f0eUJSm13R75TkYz8ntuM2TPPNK2rdS-"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#include <ESP32Servo.h>
BlynkTimer timer;
// Dust bin status level detection
#define echo_Pin1 34
#define trig_Pin1 35
#define echo_Pin2 32
#define trig_Pin2 25
#define echo_Pin3 26
#define trig_Pin3 27
// Servo objects for 3 bins
Servo servo_1;
Servo servo_2;
Servo servo_3;
int pos = 20; // Initial position of the servos
// Calculate the distance in percentage
long dur1, dur2, dur3;
int dis1, dis2, dis3;
void Dustbin_level()
{
// Maximum distance for each bin
int maxDis = 400;
// Check the dustbin1 status
digitalWrite(trig_Pin1, LOW);
delayMicroseconds(2);
digitalWrite(trig_Pin1, HIGH);
delayMicroseconds(10);
digitalWrite(trig_Pin1, LOW);
dur1 = pulseIn(echo_Pin1, HIGH);
dis1 = dur1 * 0.034 / 2;
int per1 = (maxDis - dis1) * 100 / maxDis;
Blynk.virtualWrite(V3, per1);
Serial.print(" bin 1:");
Serial.print(per1);
if (per1 <= 80)
{
Blynk.virtualWrite(V0, 0);
Serial.println(" %");
}
else
{
servo_1.write(pos + 160);
Blynk.virtualWrite(V0, 1);
Serial.println(" %,the dustbin full");
}
// Check the dustbin2 status
digitalWrite(trig_Pin2, LOW);
delayMicroseconds(2);
digitalWrite(trig_Pin2, HIGH);
delayMicroseconds(10);
digitalWrite(trig_Pin2, LOW);
dur2 = pulseIn(echo_Pin2, HIGH);
dis2 = dur2 * 0.034 / 2;
int per2 = (maxDis - dis2) * 100 / maxDis;
Blynk.virtualWrite(V4, per2);
Serial.print("dust bin 2:");
Serial.print(per2);
if (per2 <= 80)
{
Blynk.virtualWrite(V1, 0);
Serial.println(" %");
}
else
{
servo_2.write(pos + 160);
Blynk.virtualWrite(V1, 1);
Serial.println(" %,the dustbin full");
}
// Check the dustbin3 status
digitalWrite(trig_Pin3, LOW);
delayMicroseconds(2);
digitalWrite(trig_Pin3, HIGH);
delayMicroseconds(10);
digitalWrite(trig_Pin3, LOW);
dur3 = pulseIn(echo_Pin3, HIGH);
dis3 = dur3 * 0.034 / 2;
int per3 = (maxDis - dis3) * 100 / maxDis;
Blynk.virtualWrite(V5, per3);
Serial.print("dust bin 3:");
Serial.print(per3);
if (per3 <= 80)
{
Blynk.virtualWrite(V2, 0);
Serial.println(" %");
}
else
{
servo_3.write(pos + 160);
Blynk.virtualWrite(V2, 1);
Serial.println(" %,the dustbin full");
}
}
void setup()
{
Serial.begin(115200);
pinMode(trig_Pin1, OUTPUT);
pinMode(echo_Pin1, INPUT);
pinMode(trig_Pin2, OUTPUT);
pinMode(echo_Pin2, INPUT);
pinMode(trig_Pin3, OUTPUT);
pinMode(echo_Pin3, INPUT);
servo_1.attach(21);
servo_2.attach(22);
servo_3.attach(23);
servo_1.write(pos);
servo_2.write(pos);
servo_3.write(pos);
Blynk.begin(auth, ssid, pass);
delay(2000);
timer.setInterval(1000L, Dustbin_level);
}
void loop()
{
Blynk.run();
timer.run();
}