#define BLYNK_TEMPLATE_ID "TMPL3wUJNpfTz"
#define BLYNK_TEMPLATE_NAME "smart dustbin"
#define BLYNK_AUTH_TOKEN "2VvbIyGexZEI0ZuWsgZexsDnnpvNCEAn"
#define BLYNK_PRINT Serial
#include <BlynkSimpleEsp32.h>
#include <WiFi.h>
#include <WiFiClient.h>
#define echoPin 32
#define trigPin 33
#include <ESP32Servo.h>
Servo servo;
BlynkTimer timer;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
long duration;
int distance;
int binLevel=0;
void sendSensor()
{
int ir=digitalRead(34);
if(ir==HIGH)
{
Serial.println("IR sensor triggered. Opening servo.");
servo.write(90); // Open position
Blynk.virtualWrite(V2, 90);
delay(500); // Give servo time to move
ultrasonic(false);
Serial.println("Closing servo.");
servo.write(0); // Close position
Blynk.virtualWrite(V2, 0);
delay(500); // Give servo time to move
}
else if (ir == LOW)
{
ultrasonic(true);
delay(200);
}
}
void ultrasonic(bool printMessage)
{
if (printMessage) {
Serial.println("Blynk.air updated");
}
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2; //formula to calculate the distance for ultrasonic sensor
binLevel=map(distance, 20, 0, 0,100); // ADJUST BIN HEIGHT HERE
binLevel = constrain(binLevel, 0, 100);
Serial.print("Distance: ");
Serial.print(distance);
Serial.print(" cm, Bin Level: ");
Serial.print(binLevel);
Serial.println(" %");
binLevel = constrain(binLevel, 0, 100);
Blynk.virtualWrite(V0, distance);
Blynk.virtualWrite(V1, binLevel);
}
void setup()
{
Serial.begin(9600);
servo.attach(13);
pinMode(34, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
delay(2000);
timer.setInterval(8000L, sendSensor);
}
void loop()
{
Blynk.run();
timer.run(); // Initiates SimpleTimer
}