Pada tutorial ini, kita akan membuat sistem palang pintu parkir otomatis, mirip seperti yang biasa kamu lihat di gerbang mall atau apartemen. Sistem ini menggunakan Arduino UNO, sensor jarak HC-SR04 (sensor ultrasonik) untuk mendeteksi kendaraan, motor servo sebagai palang pintu, dan dua LED (merah & hijau) sebagai lampu indikator status. Semua ini disimulasikan di Wokwi.
| Bagian | Komponen | Fungsi |
|---|---|---|
| Board | Arduino UNO | Pusat kendali sistem |
| Sensor (Input) | HC-SR04 | Mengukur jarak kendaraan ke sensor |
| Aktuator (Output gerak) | Micro Servo | Menggerakkan palang pintu |
| Output | LED merah & hijau | Indikator status palang (tertutup/terbuka) |
| Library | Servo | Memudahkan pengontrolan sudut motor servo |
Panduan ini dibuat untuk praktik simulasi gerbang otomatis. Sistem akan membaca jarak kendaraan, membuka palang saat kendaraan berada dekat, lalu mengembalikan palang ke posisi tertutup saat area kembali aman (tidak ada kendaraan di dekat sensor).
Proyek ini mensimulasikan gerbang parkir otomatis seperti pintu masuk area parkir atau gerbang akses kendaraan. Sensor ultrasonik HC-SR04 membaca jarak kendaraan. Arduino UNO menghitung jarak tersebut, lalu mengatur servo sebagai palang pintu dan LED sebagai lampu status.
Batas jarak yang dipakai dalam proyek ini adalah 20 cm:
Setelah mencoba proyek ini, kamu diharapkan bisa:
Komponen yang dipakai adalah Arduino UNO, HC-SR04, Micro Servo, dua LED, dua resistor 220 Ohm, dan breadboard.
| Komponen | Fungsi Utama | Catatan Praktik |
|---|---|---|
| Arduino UNO | Mengolah input sensor dan mengendalikan output | Pusat kendali rangkaian |
| HC-SR04 | Mengukur jarak kendaraan ke sensor | TRIG di pin 3, ECHO di pin 2 |
| Micro Servo | Menggerakkan palang pintu | PWM di pin 10 |
| LED Merah | Tanda palang tertutup | Anoda ke pin 8 |
| LED Hijau | Tanda palang terbuka | Anoda ke pin 9 |
| Breadboard | Membagi jalur 5V dan GND | Memudahkan kabel daya ke semua komponen |
LED punya dua kaki: anoda (kaki positif, biasanya lebih panjang) dan katoda (kaki negatif, lebih pendek). Anoda disambungkan ke pin Arduino (lewat pin 8 atau 9 di proyek ini), sedangkan katoda disambungkan ke ground lewat sebuah resistor. Resistor 220 Ohm ini penting untuk membatasi arus listrik yang masuk ke LED — tanpa resistor, arus yang terlalu besar bisa membuat LED cepat rusak atau bahkan langsung putus saat pertama kali dinyalakan.
Library yang perlu dipasang di Wokwi untuk proyek ini hanya satu: Servo. Library ini dipakai agar Arduino dapat mengirim sudut gerak ke motor servo dengan perintah yang sederhana, cukup dengan memanggil fungsi seperti write(90) tanpa perlu mengatur sinyal PWM secara manual.
Buka tab Library Manager di Wokwi, lalu pastikan library Servo sudah muncul di daftar Installed Libraries.
Rangkaian ini memakai breadboard sebagai pembagi daya 5V dan GND. Sensor ultrasonik mendeteksi jarak, servo menjadi palang pintu, sementara LED merah dan hijau menjadi indikator status.
| Pin Arduino | Fungsi |
|---|---|
| Pin 2 | ECHO (sensor HC-SR04) |
| Pin 3 | TRIG (sensor HC-SR04) |
| Pin 8 | LED merah |
| Pin 9 | LED hijau |
| Pin 10 | Servo (PWM) |
Ikuti sambungan berikut berdasarkan tabel detail di bawah. Jalur 5V dan GND dibagi melalui breadboard, supaya sensor, servo, dan LED semuanya punya referensi listrik yang sama:
| Komponen / Kaki | Tujuan Sambungan | Warna Kabel |
|---|---|---|
| HC-SR04 VCC | 5V melalui breadboard (+) | Merah |
| HC-SR04 GND | GND melalui breadboard (−) | Hitam |
| HC-SR04 TRIG | Pin digital 3 | Hijau |
| HC-SR04 ECHO | Pin digital 2 | Hijau |
| Servo V+ | 5V melalui breadboard (+) | Merah |
| Servo GND | GND melalui breadboard (−) | Hitam |
| Servo PWM | Pin digital 10 | Hijau |
| LED Merah (Anoda) | Pin digital 8 | Hijau |
| LED Merah (Katoda) | Resistor 220 Ohm → GND | Hijau |
| LED Hijau (Anoda) | Pin digital 9 | Hijau |
| LED Hijau (Katoda) | Resistor 220 Ohm → GND | Hijau |

HC-SR04 punya dua “mata”: pin TRIG (trigger, pemancar) dan pin ECHO (penerima pantulan). Cara kerjanya mirip seperti kelelawar atau sonar kapal selam: sensor memancarkan gelombang ultrasonik (suara berfrekuensi sangat tinggi, tidak terdengar telinga manusia) lewat TRIG, lalu gelombang itu memantul saat mengenai benda (misalnya mobil), dan pantulannya diterima kembali lewat ECHO. Dengan mengukur berapa lama waktu dari gelombang dipancarkan sampai pantulannya diterima kembali, sensor (dibantu Arduino) bisa menghitung seberapa jauh jarak benda tersebut.
Saat jarak lebih dari 0 dan kurang dari atau sama dengan 20 cm, Arduino menganggap kendaraan berada dekat palang. LED hijau menyala, LED merah mati, dan servo bergerak ke 90 derajat (membuka). Saat tidak ada kendaraan dekat, servo kembali ke 0 derajat (menutup), LED merah menyala, dan LED hijau mati.
| Kondisi Jarak | Servo | LED Merah | LED Hijau | Pesan di Serial Monitor |
|---|---|---|---|---|
| 0 < jarak ≤ 20 cm | 90 derajat (palang terbuka) | Mati | Nyala | “Mobil terdeteksi!” |
| Jarak > 20 cm | 0 derajat (palang tertutup) | Nyala | Mati | “Sistem menunggu” |
Buka file sketch.ino di Wokwi, lalu salin kode berikut:
#include <Servo.h>
// Menyiapkan colokan komponen
int trigPin = 3;
int echoPin = 2;
int pinLampuMerah = 8;
int pinLampuHijau = 9;
Servo palangPintu; // Memberi nama motor servonya "palangPintu"
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(pinLampuMerah, OUTPUT);
pinMode(pinLampuHijau, OUTPUT);
palangPintu.attach(10); // Servo dicolok ke angka 10
palangPintu.write(0); // Posisi Awal: Palang Tertutup (0 derajat)
// Menyalakan lampu merah pertama kali
digitalWrite(pinLampuMerah, HIGH);
digitalWrite(pinLampuHijau, LOW);
Serial.println("Sistem Parkir Aktif. Palang Tertutup.");
}
void loop() {
// 1. Membaca Jarak (Mendeteksi Mobil)
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 Buka Tutup Palang Pintu
if (jarak > 0 && jarak <= 20) {
// JIKA ADA MOBIL MENDEKAT (Jarak 20 cm atau kurang)
Serial.println("Mobil terdeteksi! Silakan masuk.");
// Lampu Hijau Nyala, Merah Mati
digitalWrite(pinLampuMerah, LOW);
digitalWrite(pinLampuHijau, HIGH);
// Buka palang pintu (gerak ke 90 derajat)
palangPintu.write(90);
// Tahan palang tetap terbuka selama 3 detik untuk mobil lewat
delay(3000);
} else {
// JIKA TIDAK ADA MOBIL (Jarak lebih dari 20 cm)
// Palang menutup otomatis (0 derajat)
palangPintu.write(0);
// Lampu Merah Nyala, Hijau Mati
digitalWrite(pinLampuMerah, HIGH);
digitalWrite(pinLampuHijau, LOW);
}
delay(200); // Jeda sebelum membaca sensor lagi
}
Klik masing-masing bagian di bawah ini untuk memahami fungsinya satu per satu:
#include <Servo.h> — memanggil library untuk mengontrol motor servo.int trigPin = 3; — membuat variabel trigPin berisi angka 3, menandai bahwa pin TRIG sensor terhubung ke pin digital 3 Arduino.int echoPin = 2; — sama seperti di atas, tapi untuk pin ECHO yang terhubung ke pin digital 2.int pinLampuMerah = 8; dan int pinLampuHijau = 9; — menandai pin LED merah dan hijau.Servo palangPintu; — membuat objek (perwakilan) servo di dalam program, diberi nama palangPintu supaya mudah dipanggil sesuai fungsinya.Kenapa pakai nama variabel, bukan langsung angka? Supaya kode lebih mudah dibaca dan diubah. Kalau suatu saat servo dipindah ke pin lain, kita cukup ubah satu baris int trigPin = ..., tanpa perlu mencari-cari angka pin di semua bagian program.
Serial.begin(9600); — mengaktifkan komunikasi Serial Monitor.pinMode(trigPin, OUTPUT); — mengatur pin TRIG sebagai output (pin ini yang mengirim sinyal ultrasonik keluar).pinMode(echoPin, INPUT); — mengatur pin ECHO sebagai input (pin ini yang menerima sinyal pantulan).pinMode(pinLampuMerah, OUTPUT); dan pinMode(pinLampuHijau, OUTPUT); — mengatur kedua pin LED sebagai output, karena Arduino akan mengirim perintah nyala/mati ke LED tersebut.palangPintu.attach(10); — menghubungkan objek servo ke pin fisik 10 Arduino.palangPintu.write(0); — memutar servo ke posisi 0 derajat (tertutup) sebagai posisi awal.digitalWrite(pinLampuMerah, HIGH); — menyalakan LED merah (HIGH = nyala/hidup).digitalWrite(pinLampuHijau, LOW); — memastikan LED hijau mati (LOW = mati) di awal program.Serial.println("Sistem Parkir Aktif. Palang Tertutup."); — menampilkan pesan status awal ke Serial Monitor.Bagian ini adalah cara standar mengukur jarak dengan sensor HC-SR04:
digitalWrite(trigPin, LOW); delayMicroseconds(2); — memastikan pin TRIG dalam kondisi mati (LOW) sesaat, sebagai "ancang-ancang" sebelum mengirim sinyal.digitalWrite(trigPin, HIGH); delayMicroseconds(10); — menyalakan TRIG selama 10 mikrodetik untuk memancarkan gelombang ultrasonik.digitalWrite(trigPin, LOW); — mematikan TRIG lagi setelah gelombang dipancarkan.long duration = pulseIn(echoPin, HIGH); — pulseIn() mengukur berapa lama (dalam mikrodetik) pin ECHO menerima sinyal HIGH, yaitu waktu yang dibutuhkan gelombang untuk pergi dan kembali (memantul dari benda).int jarak = duration * 0.034 / 2; — mengubah waktu tempuh gelombang menjadi jarak dalam sentimeter. Angka 0.034 adalah kecepatan suara di udara (dalam cm per mikrodetik), dan dibagi 2 karena gelombang menempuh jarak dua kali (pergi ke benda, lalu memantul kembali) — jadi kita hanya perlu jarak satu arahnya saja.if (jarak > 0 && jarak <= 20) { ... } — tanda && berarti "dan" — kondisi ini bernilai benar hanya jika jarak lebih dari 0 DAN kurang dari atau sama dengan 20. Kenapa harus lebih dari 0? Karena kadang sensor bisa membaca hasil yang error/kosong (0 atau negatif) jika tidak ada pantulan terdeteksi sama sekali — jadi kita pastikan hanya angka jarak yang valid dan masuk akal yang diproses.if ini: LED hijau dinyalakan, LED merah dimatikan, servo diputar ke 90 derajat (membuka), lalu delay(3000) menahan kondisi ini selama 3 detik supaya ada waktu untuk kendaraan lewat.else { ... } — kalau kondisi di atas tidak terpenuhi (jarak lebih dari 20 cm, artinya tidak ada kendaraan dekat), maka servo diputar kembali ke 0 derajat (menutup), LED merah dinyalakan, dan LED hijau dimatikan.delay(200); — jeda singkat 0,2 detik sebelum loop() mengulang dan membaca jarak lagi. Jeda ini membuat pembacaan sensor tidak terlalu terburu-buru, sehingga hasilnya lebih stabil.Hasil yang diharapkan: ketika kendaraan mendekat, sistem memberi akses masuk dengan membuka palang. Setelah beberapa detik atau saat kendaraan tidak lagi berada dekat sensor, sistem kembali ke kondisi tertutup secara otomatis.
| Masalah | Pemeriksaan Cepat |
|---|---|
| Servo tidak bergerak | Cek kabel PWM ke pin 10, V+ ke 5V, dan GND ke jalur ground. |
| Sensor tidak membaca jarak | Pastikan TRIG ke pin 3 dan ECHO ke pin 2, jangan sampai tertukar posisinya. |
| LED tertukar (merah dan hijau kebalik) | Cek LED merah harus ke pin 8, dan LED hijau ke pin 9. |
| Semua komponen mati/tidak merespons | Cek jalur 5V dan GND dari Arduino ke breadboard, pastikan semua tersambung. |
| Gerbang selalu terbuka terus | Pastikan objek/benda pada sensor tidak terus-menerus berada di jarak 20 cm atau kurang. |
Simulasi ini bisa dikembangkan menjadi miniatur gerbang parkir yang lebih realistis. Sensor dapat dipadukan dengan tombol manual, kartu akses (RFID), buzzer, LCD, atau pencatatan jumlah kendaraan.
| Kategori | Ide Pengembangan |
|---|---|
| Upgrade Fitur | Tambahkan tombol manual, tambahkan LCD status, tambahkan pencatatan jumlah kendaraan. |
| Kalibrasi | Atur ulang batas jarak sesuai kebutuhan, uji di berbagai posisi, cek delay buka-tutup. |
| Aplikasi Nyata | Palang parkir mini, gerbang akses, simulasi tol untuk keperluan edukasi. |
Untuk perangkat fisik, servo kecil hanya cocok untuk miniatur dan tidak boleh langsung dipakai untuk mengangkat palang berukuran besar — servo mikro seperti yang dipakai di proyek ini tidak cukup kuat untuk beban berat, dan bisa rusak/terbakar kalau dipaksakan. Jika ingin membuat versi lebih besar, kamu perlu:
Nilai batas 20 cm dipakai di proyek ini supaya simulasi mudah diuji. Pada alat nyata, batas ini bisa diubah sesuai posisi sensor dan ukuran palang yang sesungguhnya. Pastikan juga kabel daya dan ground selalu stabil sebelum menguji servo, karena servo membutuhkan arus listrik yang lebih besar dibanding LED — kalau jalur dayanya kurang stabil, servo bisa bergerak tersendat-sendat atau tidak bergerak sama sekali.
if...else dipakai untuk menentukan aksi berdasarkan kondisi jarak tertentu (dekat = buka, jauh = tutup).&& ("dan") berguna untuk memastikan sebuah kondisi harus memenuhi dua syarat sekaligus secara bersamaan.🔒 Simulasi ini dikunci. Minta passcode ke gurumu untuk membuka.