Cara Membuat Counter Orang dengan Seven Segment Arduino — Simulasi Online
Counter orang menghitung setiap orang yang melintas di depan sensor PIR, lalu menampilkan jumlahnya di seven segment. Karena tampilannya satu digit, hitungan berjalan dari 0 sampai 9 lalu kembali ke 0.
Komponen yang dipakai
- Arduino Uno
- Breadboard (setengah)
- Sensor gerak (PIR)
- Display 7-segment
Cara kerja
- Sensor PIR di pin D2 mendeteksi orang yang lewat di depannya.
- Setiap deteksi baru menaikkan variabel penghitung sebanyak satu.
- Seven segment terhubung ke pin D3 sampai D10; kombinasi segmen a sampai g yang menyala membentuk angka hitungan.
- Setelah angka 9, hitungan berikutnya kembali ke 0.
Konsep yang dipelajari
Kode program
/*
Counter orang: setiap gerakan yang terdeteksi PIR menambah hitungan,
angka 0-9 tampil di display 7-segment.
Rangkaian: PIR (VCC -> 5V, GND -> GND, OUT -> D2),
7-segment (A-G,DP -> D3-D10, COM1/COM2 -> GND).
Klik kubah PIR di kanvas untuk mensimulasikan orang lewat.
*/
// Segment A, B, C, D, E, F, G untuk angka 0-9 (common-cathode: 1 = nyala).
const byte ANGKA[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111, // 9
};
const int PIN_SEG[7] = {3, 4, 5, 6, 7, 8, 9}; // A..G
const int PIN_PIR = 2;
int hitungan = 0;
bool terakhirAdaGerak = false;
void tampilkan(int angka) {
byte pola = ANGKA[angka % 10];
for (int i = 0; i < 7; i++) {
digitalWrite(PIN_SEG[i], (pola >> i) & 1);
}
}
void setup() {
pinMode(PIN_PIR, INPUT);
for (int i = 0; i < 7; i++) {
pinMode(PIN_SEG[i], OUTPUT);
}
pinMode(10, OUTPUT); // DP tidak dipakai, pastikan mati.
digitalWrite(10, LOW);
Serial.begin(9600);
tampilkan(0);
Serial.println(F("Counter siap. Klik PIR untuk menghitung."));
}
void loop() {
bool adaGerak = digitalRead(PIN_PIR) == HIGH;
if (adaGerak && !terakhirAdaGerak) {
hitungan = (hitungan + 1) % 10;
tampilkan(hitungan);
Serial.print(F("Orang ke-"));
Serial.println(hitungan);
}
terakhirAdaGerak = adaGerak;
delay(50);
}