Project Membuat Traffic Light With 7 Segment Display
1. Komponen yang Diperlukan:
Arduino Uno
Display 7-segment (common anode)
LED Merah, Kuning, Hijau
Kabel Jumper
Breadboard
2. Langkah Perakitan Hardware:
Koneksi 7-segment ke Arduino:
Sambungkan pin segmen dari 7-segment ke pin digital di Arduino sesuai deklarasi berikut:
Pin A dari 7-segment ke pin digital 2 Arduino.
Pin B ke pin 3.
Pin C ke pin 4.
Pin D ke pin 5.
Pin E ke pin 6.
Pin F ke pin 7.
Pin G ke pin 8.
Hubungkan pin common anode dari 7-segment ke VCC (5V)
Koneksi LED ke Arduino:
Lampu Merah: Sambungkan anoda LED merah ke pin 9 Arduino
Lampu Kuning: Sambungkan anoda LED kuning ke pin 10 Arduino
Lampu Hijau: Sambungkan anoda LED hijau ke pin 11
GROUND: sambungkan Ground LED ke Ground Arduino
3. Cara Kerja Koding:
Setup Pin: Pada fungsi setup(), pin-pin untuk 7-segment dan LED diatur sebagai OUTPUT agar Arduino bisa memberikan sinyal tegangan ke masing-masing komponen.
Fungsi displayDigit(): Fungsi ini digunakan untuk menampilkan angka pada 7-segment dengan mengatur pin-pin segmen tertentu menjadi LOW (logika 0) untuk menyalakan segmen sesuai angka yang ingin ditampilkan.
Perulangan Countdown: Dalam fungsi loop(), terjadi tiga perulangan untuk masing-masing LED (merah, kuning, hijau). Setiap perulangan menampilkan angka dari 9 sampai 0 pada display 7-segment, dengan tambahan efek berkedip pada angka terakhir saat counter mendekati 0.
Lampu Merah: Akan menyala dan 7-segment melakukan countdown dari 9 sampai 0. Ketika angka ≤ 2, LED merah berkedip dengan interval 0.5 detik.
Lampu Kuning: Lampu kuning akan menyala dan countdown dari 3 hingga 0. Sama seperti lampu merah, saat angka ≤ 2, LED kuning akan berkedip.
Lampu Hijau: Sama seperti lampu merah, countdown dari 9 hingga 0 dengan LED hijau yang berkedip saat mendekati angka 0.
4. Pengujian dan Debugging:
Upload kode ke Arduino Uno menggunakan Arduino IDE.
Cek apakah 7-segment menampilkan angka dengan benar dan apakah LED berubah sesuai urutan dan interval yang ditentukan.
Jika ada segmen yang tidak menyala, cek koneksi antara segmen dengan pin Arduino.
5. Hasil rangkaian dan koding :
//Deklarasi pin 7 segment int a = 2; // Segmen A int b = 3; // Segmen B int c = 4; // Segmen C int d = 5; // Segmen D int e = 6; // Segmen E int f = 7; // Segmen F int g = 8; // Segmen G #define lamm 9 //Definisi pin lampu merah #define lamk 10 //Definisi pin lampu kuning #define lamh 11 //Definisi pin lampu hijau void setup() { Serial.begin(9600); // Atur pin 7 segment sebagai output pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT); pinMode(e, OUTPUT); pinMode(f, OUTPUT); pinMode(g, OUTPUT); // Atur pin led sebagai output pinMode(lamm, OUTPUT); pinMode(lamk, OUTPUT); pinMode(lamh, OUTPUT); } // Fungsi untuk menampilkan angka pada 7-segment display void displayDigit(int num) { // Reset semua segmen sebelum menampilkan angka digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); // Menghidupkan segmen sesuai dengan angka switch (num) { case 0: digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); break; case 1: digitalWrite(b, LOW); digitalWrite(c, LOW); break; case 2: digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(g, LOW); break; case 3: digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(g, LOW); break; case 4: digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); break; case 5: digitalWrite(a, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); break; case 6: digitalWrite(a, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); break; case 7: digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); break; case 8: digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); break; case 9: digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); break; } } void loop() { // perulangan conterdown 7segment dan led merah digitalWrite(lamm, HIGH); // menyalakan lampu merah for (int i = 9; i >= 0; i--) { // membuat conterdown angka 9 sampai 0 displayDigit(i); // menampilkan digit pada 7 segment if (i<=2){ // jika conterdown sama dengan kurang dari 2, maka digitalWrite(lamm, LOW); // led merah mati delay(500); // delai 0,5 dekit digitalWrite(lamm, HIGH); // led merah hidup delay(500); // delai 0,5 dekit } else {delay(1000);} // tidak maka tunggu 1 detik } digitalWrite(lamm, LOW); // setelah program perulanagn(for) selesai, matikan led merah // perulangan conterdown 7segment dan led kuning digitalWrite(lamk, HIGH); for (int i = 3; i >= 0; i--) { displayDigit(i); if (i<=2){ digitalWrite(lamk, LOW); delay(500); digitalWrite(lamk, HIGH); delay(500); } else {delay(1000);} } digitalWrite(lamk, LOW); // perulangan conterdown 7segment dan led hijau digitalWrite(lamh, HIGH); for (int i = 9; i >= 0; i--) { displayDigit(i); if (i<=2){ digitalWrite(lamh, LOW); delay(500); digitalWrite(lamh, HIGH); delay(500); } else {delay(1000);} } digitalWrite(lamh, LOW); }