Bangun Simulator Lampu Lalu Lintas dengan Penghitung Mundur Menggunakan Arduino dan Tampilan 7-Segmen
Pendahuluan
Dalam proyek yang menarik ini, kita akan membangun simulator lampu lalu lintas lengkap dengan penghitung mundur, menggunakan Arduino dan tampilan 7-segmen. Ini adalah proyek yang bagus untuk pemula yang ingin belajar tentang mikrokontroler, LED, dan tampilan 7-segmen. Proyek ini menggabungkan prinsip-prinsip dasar elektronika, pemrograman, dan logika untuk menciptakan sistem interaktif yang mensimulasikan perilaku lampu lalu lintas dunia nyata. Selain itu, penambahan penghitung mundur memberikan sentuhan praktis dan informatif, memungkinkan pengguna untuk melihat secara visual waktu yang tersisa sebelum perubahan lampu lalu lintas. Proyek ini adalah cara yang bagus untuk belajar tentang konsep-konsep berikut:
- Mikrokontroler dan pemrograman Arduino
- LED dan resistor pembatas arus
- Tampilan 7-segmen dan driver BCD
- Logika digital dan kondisi percabangan
- Timer dan interupsi
Mengapa Membangun Simulator Lampu Lalu Lintas?
Membangun simulator lampu lalu lintas bukan hanya proyek yang menyenangkan, tetapi juga cara yang bermanfaat untuk mempelajari berbagai konsep elektronika dan pemrograman. Berikut beberapa alasan mengapa proyek ini bermanfaat:
- Pembelajaran Praktis: Anda akan mendapatkan pengalaman langsung dalam menghubungkan komponen elektronik, menulis kode Arduino, dan memecahkan masalah.
- Aplikasi Dunia Nyata: Lampu lalu lintas adalah bagian penting dari infrastruktur perkotaan. Membangun simulator membantu Anda memahami cara kerjanya.
- Pengembangan Keterampilan: Proyek ini membantu Anda mengembangkan keterampilan dalam pemrograman, elektronika, dan pemecahan masalah.
- Proyek Portofolio: Simulator lampu lalu lintas adalah proyek yang bagus untuk ditambahkan ke portofolio Anda, menunjukkan kemampuan Anda dalam elektronika dan pemrograman.
Komponen yang Dibutuhkan
Sebelum kita mulai, mari kita kumpulkan semua komponen yang kita butuhkan untuk proyek ini:
- Arduino Uno: Mikrokontroler yang akan mengontrol semua komponen.
- LED (Merah, Kuning, Hijau): Tiga LED untuk mensimulasikan lampu lalu lintas.
- Resistor (220 Ohm): Untuk membatasi arus yang mengalir melalui LED dan mencegahnya terbakar.
- Tampilan 7-Segmen (Common Cathode atau Common Anode): Untuk menampilkan penghitung mundur.
- Driver BCD ke 7-Segmen (misalnya, 74HC47 atau 74HC48): Untuk mengonversi kode biner ke format yang dapat ditampilkan oleh tampilan 7-segmen. (opsional, tergantung jenis tampilan 7-segmen yang digunakan)
- Kabel Jumper: Untuk menghubungkan semua komponen ke Arduino.
- Breadboard: Untuk membuat prototipe rangkaian.
- Resistor (1k Ohm atau 10k Ohm) – Pull-up Resistor (Opsional): Tergantung pada konfigurasi rangkaian Anda, Anda mungkin memerlukan resistor pull-up untuk memastikan pembacaan yang stabil dari pin input digital.
- Catu Daya (USB atau Adaptor Eksternal): Untuk memberikan daya ke Arduino.
Diagram Rangkaian
Diagram rangkaian sangat penting untuk memahami cara menghubungkan semua komponen. Berikut adalah diagram rangkaian dasar untuk proyek ini:
(Karena keterbatasan teks, saya tidak dapat menyertakan gambar diagram rangkaian di sini. Namun, Anda dapat mencari diagram rangkaian simulator lampu lalu lintas Arduino dengan tampilan 7-segmen di internet.)
Penjelasan Diagram Rangkaian:
- LED: Setiap LED (merah, kuning, hijau) terhubung ke pin digital Arduino melalui resistor 220 Ohm. Resistor ini penting untuk membatasi arus dan mencegah LED terbakar.
- Tampilan 7-Segmen: Tampilan 7-segmen terhubung ke pin digital Arduino (baik secara langsung atau melalui driver BCD ke 7-Segmen). Jika menggunakan driver BCD, pin input driver BCD (A, B, C, D) terhubung ke pin digital Arduino. Pin output driver BCD (a, b, c, d, e, f, g) terhubung ke segmen yang sesuai pada tampilan 7-segmen.
- Resistor Pull-up (Opsional): Jika menggunakan tombol atau sensor lain, Anda mungkin memerlukan resistor pull-up untuk memastikan pembacaan yang stabil. Resistor pull-up biasanya terhubung antara pin digital dan VCC (5V).
Langkah-Langkah Pembuatan
Sekarang mari kita bahas langkah-langkah untuk membangun simulator lampu lalu lintas:
- Siapkan Breadboard: Tempatkan Arduino dan breadboard di permukaan yang datar.
-
Hubungkan LED:
- Hubungkan kaki anoda (kaki panjang) LED merah ke pin digital Arduino (misalnya, pin 13) melalui resistor 220 Ohm.
- Hubungkan kaki katoda (kaki pendek) LED merah ke ground (GND) Arduino.
- Ulangi langkah yang sama untuk LED kuning (misalnya, pin 12) dan LED hijau (misalnya, pin 11).
-
Hubungkan Tampilan 7-Segmen:
- Tanpa Driver BCD: Hubungkan setiap segmen tampilan 7-segmen (a, b, c, d, e, f, g) ke pin digital Arduino yang berbeda (misalnya, pin 2-8). Hubungkan pin common cathode (untuk tampilan common cathode) ke ground Arduino. Atau, hubungkan pin common anode (untuk tampilan common anode) ke VCC (5V) Arduino melalui resistor.
- Dengan Driver BCD: Hubungkan pin input driver BCD (A, B, C, D) ke pin digital Arduino (misalnya, pin 8-11). Hubungkan pin output driver BCD (a, b, c, d, e, f, g) ke segmen yang sesuai pada tampilan 7-segmen. Hubungkan VCC dan GND driver BCD ke VCC dan GND Arduino.
- Periksa Koneksi: Pastikan semua koneksi sudah benar dan aman.
Kode Arduino
Berikut adalah contoh kode Arduino untuk simulator lampu lalu lintas:
// Pin yang terhubung ke LED
const int redLed = 13;
const int yellowLed = 12;
const int greenLed = 11;
// Pin yang terhubung ke segmen tampilan 7-segmen (Tanpa Driver BCD)
//Sesuaikan pin sesuai dengan koneksi Anda
const int segmentA = 2;
const int segmentB = 3;
const int segmentC = 4;
const int segmentD = 5;
const int segmentE = 6;
const int segmentF = 7;
const int segmentG = 8;
// Pin yang terhubung ke driver BCD (Dengan Driver BCD)
//Sesuaikan pin sesuai dengan koneksi Anda
const int bcdA = 8;
const int bcdB = 9;
const int bcdC = 10;
const int bcdD = 11;
// Waktu untuk setiap lampu lalu lintas (dalam milidetik)
const int redTime = 5000;
const int yellowTime = 2000;
const int greenTime = 5000;
// Fungsi untuk menampilkan angka pada tampilan 7-segmen (Tanpa Driver BCD)
void displayDigit(int digit) {
switch (digit) {
case 0:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, HIGH);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, LOW);
break;
case 1:
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
break;
case 2:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, LOW);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, HIGH);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, HIGH);
break;
case 3:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, HIGH);
break;
case 4:
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
break;
case 5:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
break;
case 6:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, HIGH);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
break;
case 7:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
break;
case 8:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, HIGH);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
break;
case 9:
digitalWrite(segmentA, HIGH);
digitalWrite(segmentB, HIGH);
digitalWrite(segmentC, HIGH);
digitalWrite(segmentD, HIGH);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, HIGH);
digitalWrite(segmentG, HIGH);
break;
default:
// Matikan semua segmen jika digit tidak valid
digitalWrite(segmentA, LOW);
digitalWrite(segmentB, LOW);
digitalWrite(segmentC, LOW);
digitalWrite(segmentD, LOW);
digitalWrite(segmentE, LOW);
digitalWrite(segmentF, LOW);
digitalWrite(segmentG, LOW);
break;
}
}
// Fungsi untuk menampilkan angka pada tampilan 7-segmen (Dengan Driver BCD)
void displayDigitBCD(int digit) {
// Pastikan digit berada dalam rentang 0-9
if (digit < 0 || digit > 9) {
return; // Keluar dari fungsi jika digit tidak valid
}
// Konversi digit ke kode BCD
int bcdValue = digit;
// Kirim kode BCD ke driver BCD
digitalWrite(bcda, bcdValue & 0x01); // Bit 0 (LSB)
digitalWrite(bcdB, (bcdValue >> 1) & 0x01); // Bit 1
digitalWrite(bcdC, (bcdValue >> 2) & 0x01); // Bit 2
digitalWrite(bcdD, (bcdValue >> 3) & 0x01); // Bit 3 (MSB)
}
void setup() {
// Set pin LED sebagai output
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(greenLed, OUTPUT);
// Set pin segmen 7-segmen sebagai output (Tanpa Driver BCD)
pinMode(segmentA, OUTPUT);
pinMode(segmentB, OUTPUT);
pinMode(segmentC, OUTPUT);
pinMode(segmentD, OUTPUT);
pinMode(segmentE, OUTPUT);
pinMode(segmentF, OUTPUT);
pinMode(segmentG, OUTPUT);
// Set pin BCD sebagai output (Dengan Driver BCD)
pinMode(bcda, OUTPUT);
pinMode(bcdB, OUTPUT);
pinMode(bcdC, OUTPUT);
pinMode(bcdD, OUTPUT);
}
void loop() {
// Lampu Merah
digitalWrite(redLed, HIGH);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, LOW);
countdown(redTime / 1000); // Konversi milidetik ke detik
digitalWrite(redLed, LOW);
// Lampu Hijau
digitalWrite(greenLed, HIGH);
digitalWrite(yellowLed, LOW);
digitalWrite(redLed, LOW);
countdown(greenTime / 1000); // Konversi milidetik ke detik
digitalWrite(greenLed, LOW);
// Lampu Kuning
digitalWrite(yellowLed, HIGH);
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
countdown(yellowTime / 1000); // Konversi milidetik ke detik
digitalWrite(yellowLed, LOW);
}
// Fungsi untuk menampilkan penghitung mundur
void countdown(int seconds) {
for (int i = seconds; i >= 0; i--) {
//Tampilkan angka pada tampilan 7-segmen (Pilih salah satu):
//displayDigit(i); //Tanpa Driver BCD
displayDigitBCD(i); //Dengan Driver BCD
delay(1000);
}
}
Penjelasan Kode
Mari kita bahas kode Arduino secara rinci:
- Deklarasi Pin: Kode dimulai dengan mendeklarasikan pin yang terhubung ke LED (merah, kuning, hijau) dan segmen tampilan 7-segmen. Anda perlu menyesuaikan pin ini dengan koneksi fisik Anda.
- Waktu Lampu Lalu Lintas: Kode mendefinisikan waktu untuk setiap lampu lalu lintas (merah, kuning, hijau) dalam milidetik. Anda dapat menyesuaikan waktu ini sesuai dengan preferensi Anda.
- Fungsi `displayDigit()`: (Hanya untuk konfigurasi tanpa driver BCD) Fungsi ini mengambil digit (0-9) sebagai input dan menampilkan angka yang sesuai pada tampilan 7-segmen dengan mengatur pin segmen yang sesuai ke HIGH atau LOW.
- Fungsi `displayDigitBCD()`: (Hanya untuk konfigurasi dengan driver BCD) Fungsi ini mengambil digit (0-9) sebagai input dan mengirimkan kode biner yang sesuai ke input driver BCD. Driver BCD kemudian akan menampilkan angka yang sesuai pada tampilan 7-segmen.
- Fungsi `setup()`: Fungsi ini dijalankan sekali di awal program. Di sini, kita mengatur pin LED dan segmen tampilan 7-segmen sebagai output.
-
Fungsi `loop()`: Fungsi ini dijalankan berulang kali setelah fungsi `setup()`. Di sini, kita mengontrol lampu lalu lintas dan menampilkan penghitung mundur.
- Kita memulai dengan menyalakan lampu merah dan mematikan lampu kuning dan hijau.
- Kemudian kita memanggil fungsi `countdown()` untuk menampilkan penghitung mundur untuk lampu merah.
- Setelah penghitung mundur selesai, kita mematikan lampu merah dan menyalakan lampu hijau.
- Kita mengulangi proses ini untuk lampu hijau dan kuning.
-
Fungsi `countdown()`: Fungsi ini mengambil jumlah detik sebagai input dan menampilkan penghitung mundur pada tampilan 7-segmen.
- Kita menggunakan loop `for` untuk menghitung mundur dari jumlah detik yang diberikan hingga 0.
- Di dalam loop, kita memanggil fungsi `displayDigit()` atau `displayDigitBCD()` untuk menampilkan angka saat ini pada tampilan 7-segmen.
- Kita menggunakan fungsi `delay()` untuk menunda program selama 1 detik (1000 milidetik).
Unggah Kode ke Arduino
Setelah Anda memahami kode, ikuti langkah-langkah ini untuk mengunggahnya ke Arduino:
- Hubungkan Arduino ke Komputer: Gunakan kabel USB untuk menghubungkan Arduino ke komputer Anda.
- Buka Arduino IDE: Buka perangkat lunak Arduino IDE di komputer Anda.
- Pilih Papan dan Port: Di menu “Tools”, pilih papan Arduino Anda (misalnya, “Arduino Uno”) dan port COM yang sesuai.
- Unggah Kode: Klik tombol “Upload” (ikon panah kanan) untuk mengunggah kode ke Arduino.
Pengujian dan Pemecahan Masalah
Setelah kode diunggah, simulator lampu lalu lintas Anda seharusnya mulai berfungsi. Berikut beberapa tips untuk pengujian dan pemecahan masalah:
- Periksa LED: Pastikan semua LED menyala dan mati dengan benar sesuai dengan urutan lampu lalu lintas.
- Periksa Tampilan 7-Segmen: Pastikan tampilan 7-segmen menampilkan angka dengan benar selama penghitung mundur.
- Periksa Koneksi: Jika ada komponen yang tidak berfungsi, periksa kembali semua koneksi untuk memastikan semuanya terhubung dengan benar.
- Periksa Kode: Jika semuanya terhubung dengan benar, periksa kembali kode untuk memastikan tidak ada kesalahan.
- Gunakan Multimeter: Jika Anda mengalami masalah dengan tegangan atau arus, gunakan multimeter untuk mengukur tegangan dan arus di berbagai titik rangkaian.
Modifikasi dan Peningkatan
Setelah Anda berhasil membangun simulator lampu lalu lintas dasar, Anda dapat memodifikasi dan meningkatkannya dengan berbagai cara:
- Tambahkan Lampu Lalu Lintas untuk Pejalan Kaki: Tambahkan LED tambahan untuk mensimulasikan lampu lalu lintas untuk pejalan kaki.
- Tambahkan Sensor: Tambahkan sensor (misalnya, sensor ultrasonik) untuk mendeteksi keberadaan mobil dan menyesuaikan waktu lampu lalu lintas secara dinamis.
- Gunakan Beberapa Tampilan 7-Segmen: Gunakan beberapa tampilan 7-segmen untuk menampilkan waktu yang lebih lama.
- Tambahkan Tombol Interupsi: Tambahkan tombol yang ketika ditekan akan langsung mengubah lampu menjadi hijau, mensimulasikan kendaraan darurat.
- Kontrol Jarak Jauh: Kendalikan lampu lalu lintas dari jarak jauh menggunakan Bluetooth atau Wi-Fi.
- Integrasi IoT: Hubungkan lampu lalu lintas ke internet untuk memantau dan mengendalikan dari jarak jauh menggunakan platform IoT.
Kesimpulan
Membangun simulator lampu lalu lintas dengan penghitung mundur menggunakan Arduino dan tampilan 7-segmen adalah proyek yang menyenangkan dan mendidik. Anda telah belajar tentang mikrokontroler, LED, tampilan 7-segmen, dan pemrograman Arduino. Selain itu, Anda telah mengembangkan keterampilan dalam elektronika, pemrograman, dan pemecahan masalah. Dengan sedikit kreativitas, Anda dapat memodifikasi dan meningkatkan proyek ini untuk menciptakan sistem yang lebih kompleks dan interaktif. Teruslah bereksperimen dan belajar, dan Anda akan menjadi seorang ahli elektronika dan pemrograman dalam waktu singkat!
Sumber Daya Tambahan
Berikut beberapa sumber daya tambahan yang dapat membantu Anda dengan proyek ini:
- Tutorial Arduino: https://www.arduino.cc/en/Tutorial/HomePage
- Tutorial Tampilan 7-Segmen: https://learn.adafruit.com/7-segment-led-displays-with-arduino
- Forum Arduino: https://forum.arduino.cc/
“`