Mini Smart Trash Bin Project Using Arduino
Di tengah meningkatnya permasalahan lingkungan dan perkembangan teknologi sistem tertanam, pengelolaan sampah kini dapat dibuat lebih cerdas dan efisien. Salah satu inovasi yang dapat diterapkan adalah Mini Smart Trash Bin, yaitu tempat sampah pintar yang mampu mengklasifikasikan jenis sampah secara otomatis. Sistem ini dirancang untuk memisahkan sampah menjadi tiga kategori, yaitu sampah kering, sampah basah, dan sampah undefined, guna mendukung pengelolaan sampah yang lebih efektif dan ramah lingkungan.
KONSEP DAN CARA KERJA SISTEM
Mini Smart Trash Bin dirancang menggunakan mikrokontroler (seperti Arduino atau ESP32) sebagai pusat pengendali sistem. Tempat sampah ini dilengkapi dengan beberapa sensor, seperti sensor kelembapan untuk mendeteksi kandungan air, sensor proximity atau ultrasonik untuk mendeteksi keberadaan objek, serta aktuator berupa motor servo untuk mengarahkan sampah ke kompartemen yang sesuai.
Ketika sampah dimasukkan ke dalam sistem, sensor akan melakukan pembacaan kondisi sampah secara real-time. Berdasarkan data sensor yang diperoleh, mikrokontroler akan mengolah informasi tersebut untuk menentukan kategori sampah. Sampah dengan tingkat kelembapan rendah akan diklasifikasikan sebagai sampah kering, sedangkan sampah dengan tingkat kelembapan tinggi akan dikategorikan sebagai sampah basah. Apabila data sensor tidak memenuhi kriteria kedua kategori tersebut, maka sampah akan dimasukkan ke dalam kategori undefined.
Setelah klasifikasi dilakukan, sistem akan menggerakkan motor servo untuk membuka jalur pembuangan menuju tempat sampah yang sesuai. Mekanisme ini bertujuan untuk mengurangi kesalahan pemilahan sampah secara manual dan meningkatkan efisiensi pengelolaan sampah rumah tangga.
Adapun cara kerja Mini Smart Trash Bin dengan Tiga Klasifikasi Sampah dapat dijelaskan sebagai berikut:
1. Inisialisasi Sistem
Mikrokontroler melakukan inisialisasi seluruh komponen, termasuk sensor, motor servo, dan indikator sistem. Setelah sistem aktif, alat siap menerima sampah.
2. Deteksi Sampah
Sensor ultrasonik atau proximity mendeteksi adanya objek yang masuk ke dalam tempat sampah dan memicu sistem untuk melakukan proses klasifikasi.
3. Pembacaan Sensor
Sensor kelembapan membaca tingkat kandungan air pada sampah. Data ini digunakan sebagai parameter utama dalam penentuan jenis sampah.
4. Klasifikasi Sampah
Sistem menerapkan logika klasifikasi sebagai berikut:
-
Sampah kering: tingkat kelembapan di bawah batas yang ditentukan.
-
Sampah basah: tingkat kelembapan di atas batas yang ditentukan.
-
Sampah undefined: kondisi sampah tidak dapat diklasifikasikan sebagai kering maupun basah.
5. Pengarahan Sampah
Motor servo akan bergerak untuk mengarahkan sampah ke kompartemen yang sesuai dengan hasil klasifikasi.
6. Indikator dan Reset Sistem
LED atau buzzer memberikan informasi status proses. Setelah proses selesai, sistem kembali ke kondisi awal dan siap menerima sampah berikutnya.
Coding
#include <CheapStepper.h> #include <Servo.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> Servo servo1; #define ir 5 #define proxi 6 #define buzzer 12 int potPin = A0; int DRY = 0; int fsoil; int countSampah = 0; LiquidCrystal_I2C lcd(0x27, 16, 2); CheapStepper stepper(8, 9, 10, 11); void setup() { Serial.begin(9600); pinMode(proxi, INPUT_PULLUP); pinMode(ir, INPUT); pinMode(buzzer, OUTPUT); servo1.attach(7); stepper.setRpm(17); lcd.init(); lcd.backlight(); lcd.clear(); lcd.setCursor(0,0); lcd.print("UAS MIKRO"); lcd.setCursor(0,1); lcd.print("System Ready"); delay(1500); lcd.clear(); servo1.write(180); delay(1000); servo1.write(70); delay(1000); } void loop() { fsoil = 0; int L = digitalRead(proxi); int irState = digitalRead(ir); lcd.setCursor(0,0); lcd.print("Sampah:"); lcd.print(countSampah); lcd.print(" "); if (L == 0 && irState == 1) { countSampah++; tone(buzzer, 1000, 800); lcd.setCursor(0,1); lcd.print("Tidak Dikenali "); stepper.moveDegreesCW(240); delay(1000); servo1.write(180); delay(1000); servo1.write(70); delay(1000); stepper.moveDegreesCCW(240); delay(1000); } if (irState == 0) { countSampah++; tone(buzzer, 1000, 500); delay(500); DRY = 0; for(int i = 0; i < 3; i++) { DRY = analogRead(potPin); DRY = constrain(DRY, 485, 1023); fsoil = (map(DRY, 485, 1023, 100, 0)) + fsoil; delay(75); } fsoil = fsoil / 3; lcd.setCursor(0,1); lcd.print("mendeteksi:"); lcd.print(fsoil); lcd.print("% "); if (fsoil > 20) { stepper.moveDegreesCW(120); delay(1000); servo1.write(180); delay(1000); servo1.write(70); delay(1000); stepper.moveDegreesCCW(120); delay(1000); lcd.setCursor(0,1); lcd.print("Sampah Basah "); } else { tone(buzzer, 1000, 500); delay(500); servo1.write(180); delay(1000); servo1.write(70); delay(1000); lcd.setCursor(0,1); lcd.print("Sampah Kering "); }}} |