// Blynk credentials
#define BLYNK_TEMPLATE_ID "TMPL3sYaEsPFu"
#define BLYNK_TEMPLATE_NAME "Smart Waste Monitoring System"
#define BLYNK_AUTH_TOKEN "6sG3Jw_gqbQ-17NC3_IU9J6vgG7_4xqD"
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
#define PIN_TRIG 26
#define PIN_ECHO 25
#define GreenLight 18
#define RedLight 5
// WiFi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
void setup() {
Serial.begin(115200);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(GreenLight, OUTPUT);
pinMode(RedLight, OUTPUT);
// Initialize I2C and LCD
Wire.begin();
lcd.init();
lcd.backlight();
// Connect to WiFi and Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
float readDistanceCM() {
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
int duration = pulseIn(PIN_ECHO, HIGH);
return duration * 0.034 / 2;
}
void loop() {
Blynk.run(); // Run Blynk
float distance = readDistanceCM();
// Check the distance and update the lights
bool notNearby = distance < 350;
bool almostFull = distance > 385;
digitalWrite(GreenLight, notNearby);
digitalWrite(RedLight, almostFull);
// Serial output for debugging
Serial.print("Distance in CM: ");
Serial.println(distance);
// Update the LCD display
lcd.clear(); // Clear the LCD before printing
lcd.setCursor(0, 0);
if (notNearby && !almostFull) {
lcd.print("BIN HAS SPACE");
Blynk.virtualWrite(V0, "Bin still has space");
Blynk.virtualWrite(V0, HIGH);
Blynk.virtualWrite(V1, LOW);
// Update Blynk app
} else if (almostFull) {
lcd.print("BIN IS FULL");
Blynk.virtualWrite(V1, "Bin is near full");
Blynk.virtualWrite(V0, LOW);
Blynk.virtualWrite(V1, HIGH);// Update Blynk app
} else {
lcd.print("CHECK SENSOR"); // For unexpected readings
Blynk.virtualWrite(V1, "Check sensor"); // Update Blynk app
}
Blynk.virtualWrite(V2, distance); // Send distance to Blynk
delay(1000); // Slightly longer delay for readability
}