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.
| 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 |
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.
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).
Servo.h.if, else if, dan else untuk 3 kondisi berbeda.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. |
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.
| 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.
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.
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.
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:
Garis batas jarak: 0 cm — 15 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°. |
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.
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);
}
Klik masing-masing bagian di bawah ini untuk memahami fungsinya satu per satu:
#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.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.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.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.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.Pengujian di Wokwi sebaiknya dilakukan bertahap, mulai dari jarak jauh dulu supaya kita bisa melihat posisi siaga normal sebelum menguji kondisi lainnya.
| 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). |
Servo sudah aktif di Library Manager, sehingga sketch gagal compile dan servo tidak bergerak sama sekali.if dan else if. Barang besar dipakai untuk jarak dekat (0–15 cm), sedangkan barang kecil untuk jarak sedang (16–30 cm).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:
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.