31 January 2026
Tempat Sampah Pintar
Cara Membuat Tempat Sampah Pintar Berbasis ESP32 (Smart Trash Bin)
Tempat sampah pintar adalah tempat sampah yang bisa membuka tutup otomatis saat ada tangan/objek mendekat, dan (opsional) bisa mengirim data level kepenuhan ke HP lewat Wi-Fi. Proyek ini cocok untuk belajar ESP32, sensor ultrasonik, servo, dan IoT sederhana.
Fitur yang Akan Dibuat
- Tutup terbuka otomatis saat tangan mendekat
- Tutup menutup kembali setelah beberapa detik
- (Opsional) Deteksi “penuh” berdasarkan jarak sampah ke sensor
Komponen yang Dibutuhkan
Wajib:
- 1x ESP32 DevKit
- 1x Sensor ultrasonik HC-SR04 (lebih baik pakai JSN-SR04T kalau lingkungan lembap)
- 1x Servo SG90 / MG90S (MG90S lebih kuat)
- Kabel jumper
- Tempat sampah + mekanisme tutup (bisa pakai bracket sederhana)
Disarankan (agar stabil):
- Power supply 5V 2A (untuk servo)
- Buck converter / step-down (kalau sumber >5V)
- Resistor 1k + 2k (pembagi tegangan untuk pin Echo HC-SR04 ke 3.3V ESP32)
Catatan Penting (ESP32 & Tegangan)
ESP32 hanya aman di 3.3V logic. Pin Echo HC-SR04 output 5V, jadi WAJIB diturunkan dengan pembagi tegangan.
Pembagi tegangan sederhana:
- Echo HC-SR04 → resistor 2k → ke pin ESP32
- Dari pin ESP32 → resistor 1k → GND
Ini menurunkan 5V menjadi kira-kira 3.3V.
Wiring (Koneksi)
HC-SR04 → ESP32
- VCC → 5V
- GND → GND
- TRIG → GPIO 5 (bebas, bisa diganti)
- ECHO → GPIO 18 (via pembagi tegangan ke 3.3V)
Servo → ESP32
- Merah (VCC) → 5V supply eksternal (disarankan)
- Coklat/Hitam (GND) → GND supply
- Oranye (Signal) → GPIO 13
Penting: GND servo supply harus disatukan dengan GND ESP32 (common ground).
Cara Kerja Singkat
- Sensor membaca jarak objek di depan tempat sampah.
- Jika jarak < ambang (misal 20 cm), servo membuka tutup.
- Setelah delay 3 detik, servo menutup kembali.
- (Opsional) Sensor lain / posisi sensor di dalam untuk mengukur level sampah.
Kode Program
- #include <Arduino.h>
#include <Servo.h>
#define TRIG_PIN 5
#define ECHO_PIN 18
#define SERVO_PIN 13
Servo myServo;
// Konfigurasi
const int openAngle = 90; // sudut buka (sesuaikan mekanik)
const int closeAngle = 0; // sudut tutup
const int detectDistance = 20; // cm, jarak tangan terdeteksi
const int openTimeMs = 3000; // lama tutup terbuka
long readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 30000); // timeout 30ms
if (duration == 0) return 999; // jika gagal baca
long distance = duration * 0.034 / 2; // cm
return distance;
}
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
myServo.attach(SERVO_PIN);
myServo.write(closeAngle);
delay(500);
Serial.println("Smart Trash Bin ESP32 Ready!");
}
void loop() {
long d = readDistanceCM();
Serial.print("Jarak: ");
Serial.print(d);
Serial.println(" cm");
if (d < detectDistance) {
// buka
myServo.write(openAngle);
Serial.println("Buka tutup...");
delay(openTimeMs);
// tutup
myServo.write(closeAngle);
Serial.println("Tutup kembali...");
delay(1000);
}
delay(200);
}