Tempat Sampah Pintar
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

  1. Tutup terbuka otomatis saat tangan mendekat
  2. Tutup menutup kembali setelah beberapa detik
  3. (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);
    }