Lampu lalu lintas adalah salah satu contoh sistem otomatis yang sangat mudah dipelajari menggunakan Arduino. Dengan project ini, kita bisa memahami dasar kontrol output digital, pengaturan timing, penggunaan array, hingga teknik non-blocking menggunakan fungsi millis(). Pada artikel ini, kita akan belajar cara menghubungkan modul Traffic Light ke Arduino, mengontrol nyala lampu merah, kuning, dan hijau, serta membuat sistem lampu lalu lintas yang lebih rapi dan efisien menggunakan beberapa metode pemrograman.
Komponen yang Dibutuhkan
- Arduino UNO R3
- Kabel USB
- Breadboard
- Kabel jumper
- Modul Traffic Light
Mengenal Modul Traffic Light
Modul Traffic Light biasanya terdiri dari:
- LED merah
- LED kuning
- LED hijau
Ketiga LED tersebut sudah dirangkai dalam satu modul sehingga lebih praktis digunakan dibanding merangkai LED satu per satu.
Pin pada Modul Traffic Light
Modul Traffic Light umumnya memiliki 4 pin, yaitu:
Cara Kerja Traffic Light
Arduino akan mengontrol setiap LED secara bergantian:
1. Lampu merah menyala
2. Lampu kuning menyala
3. Lampu hijau menyala
4. Siklus kembali ke awal
Sistem ini bekerja seperti simulasi lampu lalu lintas sederhana.
Menghubungkan Modul ke Arduino
Berikut contoh koneksi:
Dasar Mengontrol LED pada Traffic Light
Untuk mengontrol lampu, Arduino menggunakan:
digitalWrite(pin, HIGH);
Untuk menyalakan LED.
digitalWrite(pin, LOW);
Untuk mematikan LED.
Wiring Diagram
Program Dasar Traffic Light Arduino
Kode Program
#define PIN_RED 2
#define PIN_YELLOW 3
#define PIN_GREEN 4
#define RED_TIME 4000
#define YELLOW_TIME 4000
#define GREEN_TIME 4000
void setup() {
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_YELLOW, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
}
void loop() {
// Lampu merah
digitalWrite(PIN_RED, HIGH);
digitalWrite(PIN_YELLOW, LOW);
digitalWrite(PIN_GREEN, LOW);
delay(RED_TIME);
// Lampu kuning
digitalWrite(PIN_RED, LOW);
digitalWrite(PIN_YELLOW, HIGH);
digitalWrite(PIN_GREEN, LOW);
delay(YELLOW_TIME);
// Lampu hijau
digitalWrite(PIN_RED, LOW);
digitalWrite(PIN_YELLOW, LOW);
digitalWrite(PIN_GREEN, HIGH);
delay(GREEN_TIME);
}
Cara Kerja Program
Program di atas bekerja secara berurutan:
- Merah menyala selama beberapa detik
- Kuning menyala
- Hijau menyala
- Siklus diulang terus-menerus
Menjalankan Program
Ikuti langkah berikut:
1. Hubungkan Arduino ke komputer
2. Buka Arduino IDE
3. Salin kode program
4. Pilih board dan port yang sesuai
5. Klik Upload
6. Perhatikan modul Traffic Light
Kelemahan Menggunakan delay()
Meskipun mudah dipahami, penggunaan delay() memiki kekurangan. Saat delay berjalan:
- Arduino berhenti sementara
- Tidak bisa membaca sensor
- Tidak bisa menjalankan task lain
Oleh karena itu, project yang lebih kompleks biasanya menggunakan metode non-blocking.
Merapikan Program dengan Function
Kode sebelumnya masih cukup panjang karena banyak pengulangan. Kita bisa membuat function agar kode lebih rapi.
Program Traffic Light dengan Function
Kode Program
#define PIN_RED 2
#define PIN_YELLOW 3
#define PIN_GREEN 4
#define RED_TIME 2000
#define YELLOW_TIME 1000
#define GREEN_TIME 2000
#define RED 0
#define YELLOW 1
#define GREEN 2
const int pins[] = {PIN_RED, PIN_YELLOW, PIN_GREEN};
const int times[] = {RED_TIME, YELLOW_TIME, GREEN_TIME};
void setup() {
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_YELLOW, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
}
void loop() {
traffic_light_on(RED);
delay(times[RED]);
traffic_light_on(YELLOW);
delay(times[YELLOW]);
traffic_light_on(GREEN);
delay(times[GREEN]);
}
void traffic_light_on(int light) {
for (int i = RED; i <= GREEN; i++) {
if (i == light)
digitalWrite(pins[i], HIGH);
else
digitalWrite(pins[i], LOW);
}
}
Kenapa Menggunakan Array?
Dengan array:
- Kode lebih singkat
- Mudah diubah
- Lebih fleksibel
Kita cukup menyimpan:
- pin LED
- durasi lampu
ke dalam array.
Membuat Program Lebih Ringkas dengan for Loop
Kita juga bisa mempersingkat program menggunakan:
for()
Dengan loop, Arduino bisa berpindah antar lampu secara otomatis tanpa menulis kode berulang.
Program Traffic Light dengan for Loop
Kode Program
#define PIN_RED 2
#define PIN_YELLOW 3
#define PIN_GREEN 4
#define RED_TIME 2000
#define YELLOW_TIME 1000
#define GREEN_TIME 2000
#define RED 0
#define YELLOW 1
#define GREEN 2
const int pins[] = {PIN_RED, PIN_YELLOW, PIN_GREEN};
const int times[] = {RED_TIME, YELLOW_TIME, GREEN_TIME};
void setup() {
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_YELLOW, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
}
void loop() {
for (int light = RED; light <= GREEN; light++) {
traffic_light_on(light);
delay(times[light]);
}
}
void traffic_light_on(int light) {
for (int i = RED; i <= GREEN; i++) {
if (i == light)
digitalWrite(pins[i], HIGH);
else
digitalWrite(pins[i], LOW);
}
}
Membuat Traffic Light Tanpa delay()
Sekarang kita akan membuat versi yang lebih profesional menggunakan:
millis()
Keuntungannya:
- Program tidak blocking
- Arduino tetap responsif
- Bisa menjalankan task lain secara bersamaan
Program Traffic Light dengan millis()
Kode Program
#define PIN_RED 2
#define PIN_YELLOW 3
#define PIN_GREEN 4
#define RED_TIME 2000
#define YELLOW_TIME 1000
#define GREEN_TIME 2000
#define RED 0
#define YELLOW 1
#define GREEN 2
const int pins[] = {PIN_RED, PIN_YELLOW, PIN_GREEN};
const int times[] = {RED_TIME, YELLOW_TIME, GREEN_TIME};
unsigned long last_time = 0;
int light = RED;
void setup() {
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_YELLOW, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
traffic_light_on(light);
last_time = millis();
}
void loop() {
if ((millis() - last_time) > times[light]) {
light++;
if (light >= 3)
light = RED;
traffic_light_on(light);
last_time = millis();
}
// kode lain bisa ditambahkan di sini
}
void traffic_light_on(int light) {
for (int i = RED; i <= GREEN; i++) {
if (i == light)
digitalWrite(pins[i], HIGH);
else
digitalWrite(pins[i], LOW);
}
}
Kenapa millis() Lebih Baik?
Menggunakan millis() membuat Arduino:
- Tetap menjalankan program lain
- Tidak berhenti seperti delay()
- Cocok untuk project multitasking
Teknik ini sangat penting dalam project Arduino yang lebih kompleks.
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino


0 on: "Arduino Traffic Light - Cara Membuat Simulasi Lampu Lalu Lintas dengan Arduino"