Lompat ke konten utama
Iklan

Cara Membuat Tempat Sampah Otomatis dengan Arduino dan Sensor Ultrasonik

Tempat sampah yang tutupnya terbuka sendiri saat tangan Anda mendekat adalah salah satu proyek pameran sains dan tugas akhir SMK yang paling populer — terlihat mengesankan, tapi sebenarnya hanya menggabungkan dua komponen yang sudah pernah dibahas terpisah di blog ini: sensor ultrasonik dan motor servo.

Sensor ultrasonik HC-SR04
HC-SR04. Foto: Suyash Dwivedi / Wikimedia Commons, CC BY-SA 4.0.
Motor servo SG90
Servo SG90. Foto: Suyash Dwivedi / Wikimedia Commons, CC BY-SA 4.0.

Cara Kerja

Sensor ultrasonik dipasang menghadap ke atas atau ke depan tutup tempat sampah, mengukur jarak secara terus-menerus. Begitu ada tangan yang mendekat dalam jarak tertentu (misalnya 15 cm), Arduino memerintahkan servo memutar tutup ke posisi terbuka. Setelah beberapa detik tanpa ada objek terdeteksi, tutup menutup kembali secara otomatis.

Alat dan Bahan

KomponenJumlahCatatan
Arduino Uno / Nano1 
Sensor ultrasonik HC-SR041 
Motor servo (SG90 atau MG90S)1SG90 cukup untuk tutup dari bahan ringan
Tempat sampah dengan tutup engsel1Bisa dari plastik atau kardus untuk prototipe
Baterai 4x AA atau power bank1Supaya alat portabel, tidak perlu kabel ke stopkontak

Skema Penyambungan

Arduino 5V GND Pin 9 Pin 10 Pin 11 5V/GND HC-SR04 VCC Trig Echo GND Servo SG90 VCC (merah) Signal (oranye) GND (cokelat) Trig = pin 9, Echo = pin 10, Servo = pin 11

Kode Lengkap

#include <Servo.h>

const int pinTrig = 9;
const int pinEcho = 10;
const int pinServo = 11;

const int jarakBuka = 15;      // cm, jarak deteksi tangan
const unsigned long waktuTunggu = 3000; // 3 detik sebelum tutup lagi

Servo servoTutup;
unsigned long waktuTerakhirDeteksi = 0;
bool tutupTerbuka = false;

long bacaJarakCm() {
  digitalWrite(pinTrig, LOW);
  delayMicroseconds(2);
  digitalWrite(pinTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(pinTrig, LOW);

  long durasi = pulseIn(pinEcho, HIGH, 30000); // timeout 30ms
  if (durasi == 0) return 999; // tidak ada pantulan terdeteksi

  return durasi * 0.034 / 2;   // konversi ke cm
}

void setup() {
  pinMode(pinTrig, OUTPUT);
  pinMode(pinEcho, INPUT);
  servoTutup.attach(pinServo);
  servoTutup.write(0); // posisi tertutup
  Serial.begin(9600);
}

void loop() {
  long jarak = bacaJarakCm();
  Serial.print("Jarak: ");
  Serial.print(jarak);
  Serial.println(" cm");

  if (jarak < jarakBuka) {
    waktuTerakhirDeteksi = millis();
    if (!tutupTerbuka) {
      servoTutup.write(90); // buka
      tutupTerbuka = true;
    }
  }

  if (tutupTerbuka && millis() - waktuTerakhirDeteksi > waktuTunggu) {
    servoTutup.write(0);   // tutup lagi
    tutupTerbuka = false;
  }

  delay(100);
}

Perhatikan fungsi bacaJarakCm(). Fungsi pulseIn diberi parameter timeout 30000 mikrodetik — tanpa ini, program akan membeku sepenuhnya jika sensor tidak menerima pantulan sama sekali (misalnya saat tidak ada objek di depan sensor melebihi jangkauannya). Ini bug yang sangat umum pada proyek berbasis HC-SR04 dan sering membuat pemula bingung kenapa Arduino-nya "hang".

Kenapa Tutup Tidak Langsung Menutup Begitu Tangan Ditarik

Variabel waktuTerakhirDeteksi dan pengecekan millis() - waktuTerakhirDeteksi > waktuTunggu sengaja dibuat supaya tutup memberi jeda 3 detik sebelum menutup lagi. Tanpa jeda ini, tutup akan langsung menutup detik itu juga saat tangan Anda menarik sampah masuk ke lubang — berisiko menutup tepat saat tangan masih di sana. Pola jeda seperti ini identik dengan penanda sudahKirimPeringatan pada artikel relay dan Telegram sebelumnya: mencegah aksi berulang terlalu cepat.

Masalah yang Sering Muncul

GejalaPenyebab dan Solusi
Program seperti membeku (hang) sesekali Parameter timeout pada pulseIn tidak diisi. Selalu sertakan nilai timeout seperti pada kode di atas.
Tutup terbuka-tutup terus-menerus (flickering) Jarak deteksi terlalu sensitif terhadap pantulan dari dinding tempat sampah itu sendiri. Perbesar sedikit jarakBuka atau reposisi sensor.
Pembacaan jarak tidak stabil, angka meloncat-loncat Permukaan objek yang menyerap suara (kain, busa) memantulkan sinyal lemah. Ini keterbatasan wajar sensor ultrasonik, bukan kerusakan.
Servo bergetar saat baterai dipakai Baterai hampir habis tidak sanggup memberi arus lonjakan servo. Ganti baterai atau tambahkan kapasitor seperti dijelaskan di artikel motor servo.

Pengembangan Lanjutan

Setelah versi dasar bekerja, Anda bisa menambahkan indikator LED yang menyala saat tempat sampah hampir penuh (dengan logika jarak terbalik: makin dekat pantulan dari dasar, makin penuh), atau memakai LCD I2C untuk menampilkan status "Kosong / Penuh" secara langsung di badan tempat sampah.

Iklan
0 Komentar

Berkomentarlah dengan sopan dan menggunakan bahasa yang semestinya.