#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <ESP8266WiFi.h> // Menyertakan pustaka WiFi untuk ESP8266
#include <BlynkSimpleEsp8266.h> // Menyertakan pustaka Blynk untuk ESP8266
// Definisi pin untuk sensor ultrasonik
int Trig = 6;
int Echo = 7;
int garbageTrig = 8;
int garbageEcho = 9;
int DustBinHeight = 100; // Ubah tinggi tempat sampah sesuai dengan tinggi dalam cm.
// Membuat variabel untuk pengukuran jarak
long ultrasonicDuration, ultrasonicDistance;
long garbageDuration, garbageDistance;
// Konstanta
const int DISTANCE_THRESHOLD = 50;
Servo servo; // Membuat objek servo untuk mengendalikan servo
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat 0x27, 16 karakter dan 2 baris
// Token otentikasi Blynk
char auth[] = "iGOGkkXHGurmdZzp1C5DwSMlq-szOeEy";
// Kredensial WiFi Anda
char ssid[] = "WIFI-GUEST";
char pass[] = "";
void setup() {
// Mengatur sensor ultrasonik
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(garbageTrig, OUTPUT);
pinMode(garbageEcho, INPUT);
servo.attach(10);
servo.write(0); // Mengatur posisi awal servo ke 0 derajat
Serial.begin(9600);
// Mengatur layar LCD
lcd.init();
lcd.backlight();
lcd.clear();
// Inisialisasi Blynk
Blynk.begin(auth, ssid, pass);
}
void loop() {
Blynk.run(); // Menjalankan Blynk
// Sensor ultrasonik 1
digitalWrite(Trig, LOW);
delay(4);
digitalWrite(Trig, HIGH);
delay(10);
digitalWrite(Trig, LOW);
ultrasonicDuration = pulseIn(Echo, HIGH);
ultrasonicDistance = (ultrasonicDuration / 2) * 0.0346;
// Sensor ultrasonik 2
digitalWrite(garbageTrig, LOW);
delay(4);
digitalWrite(garbageTrig, HIGH);
delay(10);
digitalWrite(garbageTrig, LOW);
garbageDuration = pulseIn(garbageEcho, HIGH);
garbageDistance = (garbageDuration / 2) * 0.0346;
float dist = (DustBinHeight - garbageDistance) * 100 / DustBinHeight;
if (dist > 90.00) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Please empty");
lcd.setCursor(0, 1);
lcd.print("the bin");
delay(2000); // Delay untuk menampilkan pesan
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(dist);
lcd.setCursor(4, 0);
lcd.print("% Full");
delay(2000); // Delay untuk menampilkan persentase
}
if (ultrasonicDistance > DISTANCE_THRESHOLD)
servo.write(90); // Memutar motor servo ke 90 derajat
else
servo.write(0); // Memutar motor servo ke 0 derajat
Serial.println(dist);
// Mengirim data ke Blynk
Blynk.virtualWrite(V1, ultrasonicDistance); // Mengirim jarak ultrasonik ke Blynk
Blynk.virtualWrite(V2, dist); // Mengirim persentase isi tempat sampah ke Blynk
delay(500);
}