DC
Kelas Digital Creative
Robotika · IoT · Scratch · Canva · CapCut · AI
← kembali ke Home

Smart Sorting Gate

⏱ 40 Menit Arduino August 2026 🔧 Arduino UNO, sensor ultrasonik HC-SR04, motor servo, LED merah, LED hijau, resistor 220 Ohm (2 buah), breadboard, kabel jumper.

Pada tutorial ini, kita akan membuat Smart Sorting Gate — sistem otomatis yang bisa memilah barang berdasarkan ukurannya (besar atau kecil) tanpa perlu ada orang yang menyortir manual. Cara kerjanya mirip seperti mesin sortir yang biasa dipakai di pabrik atau gudang, hanya saja versi sederhana untuk belajar. Proyek ini memakai Arduino UNO, sensor jarak HC-SR04, motor servo, dan dua LED indikator (merah dan hijau), semuanya disimulasikan di Wokwi.

Apa yang Akan Kita Pelajari?

Bagian Komponen Fungsi
Board Arduino UNO Pusat kendali sistem
Sensor HC-SR04 Mengukur jarak barang yang lewat di depan sensor
Aktuator Servo Menggerakkan lengan penyortir ke Kotak A atau Kotak B
Indikator LED Merah & Hijau Menandai jalur mana yang sedang aktif
Batas 15 / 30 cm Ambang batas barang besar dan barang kecil

Inti Proyek

Sistem ini bekerja dengan 3 tahap sederhana: Ukur jarak → Klasifikasi → Gerakkan gate, lalu ditutup dengan indikator LED. Sensor HC-SR04 membaca seberapa dekat sebuah barang lewat di depannya. Kalau barang lewat sangat dekat dengan sensor, sistem menganggap itu barang besar dan mengarahkannya ke Kotak A. Kalau jaraknya agak jauh (sedang), sistem menganggap itu barang kecil dan mengarahkannya ke Kotak B. Kalau tidak ada barang sama sekali, lengan servo kembali ke posisi tengah dan menunggu.

Pada alat nyata, servo dan sensor tidak bisa langsung disamakan hasilnya dengan simulasi — bentuk barang, kecepatan conveyor, getaran, dan pencahayaan bisa memengaruhi hasil pembacaan sensor.

Deskripsi Proyek

Proyek Smart Sorting Gate dibuat untuk mensimulasikan gerbang penyortir barang seperti yang biasa dipakai di jalur produksi pabrik. Masalah yang ingin diselesaikan cukup sederhana: bagaimana caranya barang besar dan barang kecil bisa otomatis masuk ke kotak yang berbeda, tanpa ada orang yang harus memilah satu per satu.

Di dalam simulasi Wokwi, ukuran barang tidak benar-benar diukur, melainkan diwakili oleh jarak yang diatur lewat slider pada sensor HC-SR04. Semakin dekat jaraknya ke sensor, sistem menganggap barang itu semakin besar. Semakin jauh (tapi masih dalam batas wajar), sistem menganggap barang itu kecil.

Yang penting dipahami dari proyek ini bukan cuma “servo bergerak”, tapi bagaimana Arduino mengambil keputusan berdasarkan data sensor, lalu mengubah keputusan itu menjadi gerakan (servo) dan tanda visual (LED).

Manfaat Praktik Ini

  • Memahami cara Arduino membaca jarak menggunakan sensor ultrasonik.
  • Melatih logika pengambilan keputusan berdasarkan rentang nilai (if / else if / else).
  • Mengenal cara mengontrol motor servo dengan library Servo.h.
  • Membaca hasil pengujian lewat Serial Monitor.

Batasan Realistis Simulasi

  • Di Wokwi, jarak barang diatur lewat slider pada sensor, bukan barang sungguhan yang lewat di conveyor.
  • Wokwi tidak mensimulasikan conveyor fisik, gesekan, daya motor besar, atau bentuk barang yang sebenarnya.
  • Sensor ultrasonik pada alat nyata bisa terganggu oleh sudut barang, permukaan yang miring, atau barang yang berlubang.

Tujuan Pembelajaran

  • Menentukan pin TRIG, ECHO, dan pin PWM servo pada Arduino UNO.
  • Menjelaskan bahwa jarak dekat berarti barang besar, sedangkan jarak sedang berarti barang kecil.
  • Menerapkan logika percabangan if, else if, dan else untuk 3 kondisi berbeda.
  • Menguji tiga kondisi: barang besar, barang kecil, dan tidak ada barang.
  • Membedakan simulasi edukasi dengan penerapan alat nyata yang memerlukan mekanik dan daya yang lebih matang.

Langkah 1: Menyiapkan Komponen

Rangkaian ini memerlukan satu library tambahan, yaitu Servo.h, untuk mengontrol motor servo. Selain itu program hanya memakai fungsi bawaan Arduino seperti digitalWrite, pulseIn, Serial, dan delay.

Komponen Fungsi
Arduino UNO Pusat kendali. Mengirim pulsa ke sensor, membaca pantulan lewat pin ECHO, menghitung jarak, lalu memberi perintah ke servo dan LED.
HC-SR04 Sensor ultrasonik dengan pin VCC, GND, TRIG, dan ECHO. Dipakai sebagai pembaca jarak barang yang lewat.
Servo Aktuator berupa motor kecil yang bisa berputar ke sudut tertentu. Bertindak sebagai lengan penyortir yang mengarahkan barang ke Kotak A atau Kotak B.
LED Merah + Resistor Indikator bahwa barang besar sedang diarahkan ke Kotak A. Resistor 220 Ohm membatasi arus LED agar tidak berlebihan.
LED Hijau + Resistor Indikator bahwa barang kecil sedang diarahkan ke Kotak B. Resistor 220 Ohm membatasi arus LED agar tidak berlebihan.
Breadboard Membantu membagi jalur 5V dan GND agar sensor, servo, dan LED sama-sama mendapat daya yang stabil.
💡 Kenapa harus pakai library Servo.h?

Motor servo tidak bisa dikendalikan hanya dengan digitalWrite biasa seperti LED, karena servo perlu sinyal khusus untuk menentukan sudut putarnya (misalnya 0°, 90°, atau 180°). Library Servo.h menyediakan fungsi siap pakai seperti attach() untuk menghubungkan servo ke pin tertentu, dan write() untuk memutar servo ke sudut yang kita inginkan. Tanpa library ini, kita harus mengatur sinyal PWM secara manual, yang jauh lebih rumit untuk pemula.

Langkah 2: Merangkai Wiring (Jalur Kabel)

Komponen Tersambung ke
HC-SR04 VCC 5V (lewat breadboard)
HC-SR04 GND GND (lewat breadboard)
HC-SR04 TRIG Pin digital 3
HC-SR04 ECHO Pin digital 2
Servo V+ 5V (lewat breadboard)
Servo GND GND (lewat breadboard)
Servo PWM Pin digital 9
LED Merah (Anoda) Pin digital 10
LED Hijau (Anoda) Pin digital 11

Jalur LED indikator: Anoda (kaki positif) LED terhubung langsung ke pin Arduino. Katoda (kaki negatif) melewati resistor 220 Ohm, lalu menuju rel negatif (GND) di breadboard.

Breadboard dipakai untuk membagi jalur 5V dan GND, agar sensor, servo, dan dua LED sama-sama mendapatkan catu daya yang stabil dari satu sumber.

💡 Kenapa sensornya harus menghadap ke arah barang lewat?

Sensor ultrasonik HC-SR04 bekerja dengan cara memancarkan gelombang suara lalu “mendengarkan” pantulannya. Kalau sensor tidak menghadap tepat ke arah barang yang lewat, gelombang suara bisa memantul ke arah lain dan sensor jadi salah membaca jarak, atau bahkan tidak membaca apa-apa. Karena itu, posisi dan arah hadap sensor sangat penting supaya pembacaan jarak barang tetap akurat.

💡 Kenapa servo butuh daya yang lebih diperhatikan dibanding LED?

Pada simulasi Wokwi, servo bisa langsung mengambil daya dari jalur 5V yang sama dengan sensor dan LED tanpa masalah. Tapi pada rangkaian fisik (alat nyata), servo biasanya membutuhkan arus listrik yang jauh lebih besar dibanding LED atau sensor, apalagi kalau servo dipakai untuk mengangkat beban. Karena itu, servo pada alat nyata kadang perlu sumber daya terpisah, supaya tidak mengganggu kinerja komponen lain.

Langkah 3: Memahami Konsep Kerja Sistem

  1. HC-SR04 mengukur jarak barang yang lewat di depan sensor.
  2. Arduino membandingkan hasilnya dengan batas 15 cm dan 30 cm.
  3. Servo berputar ke sudut yang sesuai dengan hasil keputusan.
  4. LED indikator menyala sesuai jalur yang sedang aktif.

Arduino memulai pembacaan dengan memberi pulsa singkat ke pin TRIG. Sensor memancarkan gelombang ultrasonik, lalu pin ECHO menerima pantulan dari permukaan barang. Waktu pantulan ini dihitung menjadi jarak dalam satuan sentimeter.

Rumus pada program memakai duration * 0.034 / 2. Angka 0.034 adalah pendekatan kecepatan suara dalam cm per mikrodetik. Pembagian dengan 2 dilakukan karena gelombang menempuh perjalanan pergi dan pulang, dari sensor ke barang lalu kembali lagi ke sensor.

Setelah jarak didapat, Arduino membandingkan nilai tersebut dengan dua batas:

  • Jika jarak lebih dari 0 dan sampai 15 cm, barang dianggap besar dan diarahkan ke Kotak A.
  • Jika jarak lebih dari 15 cm sampai 30 cm, barang dianggap kecil dan diarahkan ke Kotak B.
  • Jika jarak lebih dari 30 cm (atau tidak ada barang sama sekali), servo kembali ke posisi tengah dan LED mati.

Langkah 4: Memahami Zona Keputusan

Garis batas jarak: 0 cm15 cm (batas barang besar) — 30 cm (batas barang kecil) — >30 cm (kosong, servo kembali ke tengah).

Kondisi Penjelasan
Jarak 0–15 cm Barang berada sangat dekat dengan sensor. Sistem menganggap ini barang besar. LED merah menyala, servo berputar ke 45°, mengarahkan barang ke Kotak A.
Jarak 16–30 cm Barang berada agak jauh dari sensor, tapi masih dalam jangkauan. Sistem menganggap ini barang kecil. LED hijau menyala, servo berputar ke 135°, mengarahkan barang ke Kotak B.
Jarak >30 cm Tidak ada barang yang terdeteksi. Kedua LED mati dan servo kembali ke posisi siaga di tengah, yaitu 90°.
💡 Kenapa harus ada posisi “siaga” di tengah (90°), bukan langsung diam di salah satu sisi?

Posisi tengah (90°) dipakai supaya lengan servo selalu siap menerima barang berikutnya dari posisi netral. Kalau servo dibiarkan diam di posisi 45° (Kotak A) misalnya, dan tiba-tiba barang kecil datang, servo harus berputar lebih jauh untuk sampai ke posisi 135° (Kotak B). Dengan selalu kembali ke tengah saat tidak ada barang, jarak putaran servo ke kedua sisi jadi lebih seimbang dan gerakannya lebih rapi untuk diamati saat pengujian.

Langkah 5: Menulis Kode Program (sketch.ino)

Buka file sketch.ino di Wokwi, lalu salin kode berikut:

#include <Servo.h>

int trigPin = 3;
int echoPin = 2;
int pinLampuA = 10;
int pinLampuB = 11;

Servo lenganSortir;

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(pinLampuA, OUTPUT);
  pinMode(pinLampuB, OUTPUT);

  lenganSortir.attach(9);
  lenganSortir.write(90); // Posisi tengah (siaga)

  Serial.println("Sistem Sortir Barang AKTIF!");
}

void loop() {
  // 1. Ukur Jarak Barang
  digitalWrite(trigPin, LOW); delayMicroseconds(2);
  digitalWrite(trigPin, HIGH); delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  int jarak = duration * 0.034 / 2;

  // 2. Logika Sortir
  if (jarak > 0 && jarak <= 15) {
    // BARANG BESAR (Jarak ke sensor dekat)
    Serial.println("-> Barang BESAR terdeteksi! Arahkan ke Kotak A.");
    digitalWrite(pinLampuA, HIGH);
    digitalWrite(pinLampuB, LOW);
    lenganSortir.write(45); // Belok ke kiri (Kotak A)
    delay(2000); // Tunggu barang lewat

  } else if (jarak > 15 && jarak <= 30) {
    // BARANG KECIL (Jarak ke sensor sedang)
    Serial.println("-> Barang KECIL terdeteksi! Arahkan ke Kotak B.");
    digitalWrite(pinLampuA, LOW);
    digitalWrite(pinLampuB, HIGH);
    lenganSortir.write(135); // Belok ke kanan (Kotak B)
    delay(2000);

  } else {
    // Tidak ada barang
    digitalWrite(pinLampuA, LOW);
    digitalWrite(pinLampuB, LOW);
    lenganSortir.write(90); // Kembali ke posisi tengah
  }

  delay(200);
}

Langkah 6: Memahami Setiap Bagian Kode

Klik masing-masing bagian di bawah ini untuk memahami fungsinya satu per satu:

📦 Bagian Variabel Pin dan Objek Servo
  • #include <Servo.h> — memasukkan library Servo agar Arduino bisa mengenali perintah-perintah khusus untuk mengontrol motor servo.
  • int trigPin = 3; dan int echoPin = 2; — menyimpan nomor pin TRIG dan ECHO sensor.
  • int pinLampuA = 10; dan int pinLampuB = 11; — menyimpan nomor pin untuk LED merah (Kotak A) dan LED hijau (Kotak B).
  • Servo lenganSortir; — membuat sebuah “objek” servo bernama lenganSortir. Objek inilah yang nanti dipakai untuk memerintah servo berputar.
🚀 Bagian setup() — Dijalankan Sekali di Awal
  • Serial.begin(9600); — mengaktifkan komunikasi Serial Monitor.
  • pinMode(trigPin, OUTPUT); dan pinMode(echoPin, INPUT); — mengatur pin TRIG sebagai pengirim sinyal dan ECHO sebagai penerima pantulan.
  • pinMode(pinLampuA, OUTPUT); dan pinMode(pinLampuB, OUTPUT); — mengatur kedua pin LED sebagai output.
  • lenganSortir.attach(9); — menghubungkan objek servo ke pin fisik nomor 9 pada Arduino.
  • lenganSortir.write(90); — memutar servo ke posisi 90° (tengah) sebagai posisi awal sebelum ada barang yang terdeteksi.
  • Serial.println("Sistem Sortir Barang AKTIF!"); — menampilkan pesan pembuka di Serial Monitor, sebagai tanda program sudah mulai berjalan.
📏 Bagian loop() — Membaca Jarak Sensor
  • digitalWrite(trigPin, LOW); delayMicroseconds(2); — memastikan TRIG mati sesaat sebagai ancang-ancang.
  • digitalWrite(trigPin, HIGH); delayMicroseconds(10); — menyalakan TRIG selama 10 mikrodetik untuk memancarkan gelombang ultrasonik.
  • digitalWrite(trigPin, LOW); — mematikan TRIG lagi.
  • long duration = pulseIn(echoPin, HIGH); — mengukur berapa lama pin ECHO menerima sinyal HIGH, yaitu waktu tempuh gelombang pergi-pulang.
  • int jarak = duration * 0.034 / 2; — mengubah waktu tempuh menjadi jarak dalam sentimeter, dengan rumus yang sudah dijelaskan di Langkah 3.
🚦 Bagian loop() — Logika Sortir (Inti Program)
  • if (jarak > 0 && jarak <= 15) { ... } — mengecek apakah jarak lebih dari 0 (artinya ada pembacaan valid) dan tidak lebih dari 15 cm. Tanda && berarti "dan", jadi kedua syarat ini harus sama-sama benar.
  • Di dalam blok tadi, Arduino menyalakan LED merah (pinLampuA HIGH), memastikan LED hijau mati (pinLampuB LOW), lalu memutar servo ke 45° untuk mengarahkan barang ke Kotak A.
  • delay(2000); pada blok ini memberi jeda 2 detik, supaya ada cukup waktu untuk barang benar-benar lewat sebelum sistem membaca jarak lagi.
  • } else if (jarak > 15 && jarak <= 30) { ... }else if berarti "kalau kondisi pertama tadi salah, coba cek kondisi ini". Blok ini mengecek apakah jarak berada di antara 16 sampai 30 cm, lalu menyalakan LED hijau dan memutar servo ke 135° untuk Kotak B.
  • } else { ... } — blok terakhir ini dijalankan kalau kedua kondisi di atas sama-sama salah, artinya jarak lebih dari 30 cm atau sensor tidak membaca barang sama sekali. Kedua LED dimatikan dan servo kembali ke posisi tengah (90°).
  • delay(200); — jeda singkat sebelum sensor membaca jarak lagi di perulangan berikutnya.

Langkah 7: Menjalankan dan Menguji Simulasi

Pengujian di Wokwi sebaiknya dilakukan bertahap, mulai dari jarak jauh dulu supaya kita bisa melihat posisi siaga normal sebelum menguji kondisi lainnya.

  1. Tekan tombol Play untuk menjalankan simulasi.
  2. Buka Serial Monitor agar nilai jarak dan pesan status terlihat.
  3. Klik sensor HC-SR04, lalu geser slider jarak ke posisi jauh (di atas 30 cm) untuk memastikan servo diam di posisi tengah dan kedua LED mati.
  4. Geser slider ke sekitar 10 cm untuk menguji kondisi barang besar. LED merah harus menyala dan servo berputar ke 45°.
  5. Geser slider ke sekitar 20 cm untuk menguji kondisi barang kecil. LED hijau harus menyala dan servo berputar ke 135°.
  6. Geser slider kembali ke atas 30 cm untuk memastikan sistem kembali netral ke posisi tengah.
  7. Ulangi beberapa kali untuk memastikan hasilnya konsisten setiap kali diuji.

Hasil yang Diharapkan

Kondisi Jarak Hasil
0–15 cm Muncul pesan barang besar, LED merah menyala, servo ke 45° (Kotak A).
16–30 cm Muncul pesan barang kecil, LED hijau menyala, servo ke 135° (Kotak B).
>30 cm Tidak ada pesan barang, kedua LED mati, servo kembali ke 90° (tengah).

Kesalahan Uji yang Umum Terjadi

  • Menggeser slider langsung ke 20 cm dari posisi awal tanpa melewati posisi jauh terlebih dahulu, sehingga sulit membandingkan posisi siaga servo.
  • Lupa mengecek library Servo sudah aktif di Library Manager, sehingga sketch gagal compile dan servo tidak bergerak sama sekali.
  • Salah membaca arah LED (anoda dan katoda tertukar), sehingga LED terlihat tidak menyala padahal wiring sebenarnya sudah hampir benar.
  • Lupa memberi jeda cukup lama saat menguji, sehingga servo terlihat "loncat-loncat" karena sensor keburu membaca kondisi berikutnya.

Troubleshooting Umum

  • Servo tidak bergerak — pastikan library Servo aktif, kabel PWM servo tersambung ke pin 9, V+ ke 5V, dan GND ke rel negatif. Cek juga apakah sketch berhasil compile tanpa error.
  • LED tidak menyala — cek arah LED. Anoda harus menuju pin 10 atau pin 11, sedangkan katoda melewati resistor lalu menuju GND. LED yang terbalik tidak akan menyala.
  • Sensor selalu membaca aneh — pastikan TRIG ke pin 3 dan ECHO ke pin 2. Di Wokwi, klik sensor HC-SR04 lalu ubah jarak lewat slider untuk melihat apakah nilainya berubah dengan wajar.
  • Barang besar dan kecil tertukar — cek kembali batas jarak pada if dan else if. Barang besar dipakai untuk jarak dekat (0–15 cm), sedangkan barang kecil untuk jarak sedang (16–30 cm).

Catatan untuk Penerapan Alat Nyata

Project ini sangat cocok sebagai latihan dasar sebelum masuk ke sistem otomasi yang lebih kompleks, tapi ada beberapa hal yang perlu diperhatikan kalau ingin dikembangkan menjadi alat sungguhan:

  • Conveyor nyata memiliki kecepatan, getaran, dan jarak antar barang yang bisa memengaruhi pembacaan sensor.
  • Servo punya batas torsi (kekuatan putar), jadi tidak semua beban bisa langsung digerakkan oleh servo kecil.
  • Sensor ultrasonik punya sudut pancar tertentu, sehingga benda kecil atau posisinya miring kadang tidak terbaca dengan stabil.
  • Untuk beban listrik atau motor yang lebih besar, jangan mengambil daya langsung dari pin Arduino — gunakan rangkaian driver dan sumber daya terpisah yang sesuai.

Kesimpulan

Sistem Smart Sorting Gate berhasil jika perubahan jarak pada sensor HC-SR04 menghasilkan keputusan yang sesuai: jarak dekat mengarahkan barang ke Kotak A, jarak sedang mengarahkan barang ke Kotak B, dan jarak jauh membuat sistem kembali ke posisi siaga di tengah. Dengan memahami project ini, kita jadi lebih paham bagaimana sensor, logika program, dan aktuator (servo) bisa saling bekerja sama membentuk sebuah sistem otomatis sederhana.