#define BLYNK_TEMPLATE_ID "TMPL39osnfuvP"
#define BLYNK_TEMPLATE_NAME "smart waste management system"
#define BLYNK_AUTH_TOKEN "9u9wuG7yhjsaMbqtNh11CAcKcMrTV2NB"
#define BLYNK_PRINT Serial
#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 echoPin1 32
#define trigPin1 33
#define echoPin2 25
#define trigPin2 26
#define echoPin3 14
#define trigPin3 12
//person detection
#define PERSON_ECHO_PIN1 4
#define PERSON_TRIG_PIN1 19
#define PERSON_ECHO_PIN2 2
#define PERSON_TRIG_PIN2 15
#define PERSON_ECHO_PIN3 17
#define PERSON_TRIG_PIN3 16
// Servo objects for 3 bins
Servo servo1;
Servo servo2;
Servo servo3;
int pos = 20; // Initial position of the servos
long duration1, duration2, duration3 ;
int distance1, distance2, distance3;
void checkDustbinStatus()
{
// Maximum distance for each bin
int maxDistance = 400;
// check the dustbin1 status
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = duration1 * 0.034 / 2;
int percentage1 = (maxDistance - distance1) * 100 / maxDistance;
Blynk.virtualWrite(V3, percentage1);
Serial.print("dust bin 1:");
Serial.print(percentage1);
{
if(percentage1<=80){
Blynk.virtualWrite(V0,0);
Serial.println(" %");}
else{
Blynk.virtualWrite(V0,1);
Serial.println(" %,the dustbin is going to be full");
}
}
// check the dustbin2 status
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = duration2 * 0.034 / 2;
int percentage2 = (maxDistance - distance2) * 100 / maxDistance;
Blynk.virtualWrite(V4, percentage2);
Serial.print("dust bin 2:");
Serial.print(percentage2);
{
if(percentage2<=80){
Blynk.virtualWrite(V1,0);
Serial.println(" %"); }
else{
Blynk.virtualWrite(V1,1);
Serial.println(" %,the dustbin going to be full");
}
}
// check the dustbin3 status
digitalWrite(trigPin3, LOW);
delayMicroseconds(2);
digitalWrite(trigPin3, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin3, LOW);
duration3 = pulseIn(echoPin3, HIGH);
distance3 = duration3 * 0.034 / 2;
int percentage3 = (maxDistance - distance3) * 100 / maxDistance;
Blynk.virtualWrite(V5, percentage3);
Serial.print("dust bin 3:");
Serial.print(percentage3);
{
if(percentage3<=80){
Blynk.virtualWrite(V2,0);
Serial.println(" %");
}
else{
Blynk.virtualWrite(V2,1);
Serial.println(" %,the dustbin is going to be full");
}
}
}
void setup()
{
Serial.begin(115200);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
pinMode(PERSON_TRIG_PIN1, OUTPUT);
pinMode(PERSON_ECHO_PIN1, INPUT);
pinMode(PERSON_TRIG_PIN2, OUTPUT);
pinMode(PERSON_ECHO_PIN2, INPUT);
pinMode(PERSON_TRIG_PIN3, OUTPUT);
pinMode(PERSON_ECHO_PIN3, INPUT);
Blynk.begin(auth, ssid, pass);
delay(2000);
timer.setInterval(1000L, checkDustbinStatus);
}
void loop()
{
Blynk.run();
timer.run();
}