Minggu, 27 September 2026

SISTEM COUNTER ANTREAN BERBASIS ARDUINO UNO

 

LAPORAN PRAKTIKUM INTERNET OF THINGS
MODUL 2 DIGITAL DAN ANALOG INPUT OUTPUT
SISTEM COUNTER ANTREAN BERBASIS ARDUINO UNO

 


Disusun oleh:

Ramdani Mulyadi                   24051204137

Naufal Alif Prasetya               24051204126

Syauqi Ihsan Ramadhan         24051204110

Luthfi Fadli Zainuddin           24051204200

 

 

BAB I
PENDAHULUAN

1.1 Latar Belakang

Mikrokontroler menerima masukan dari sensor atau tombol, mengolahnya melalui program, kemudian mengendalikan perangkat keluaran. Urutan kerja seperti ini mudah diamati pada sistem penomoran antrean. Pengguna menekan tombol untuk meminta nomor berikutnya, lalu sistem menampilkan nomor tersebut dan memberi tanda bahwa ada perubahan.

Pada praktikum ini, Arduino Uno dipakai sebagai pengendali counter antrean satu digit. Tombol NEXT berfungsi menaikkan nomor, sedangkan tombol RESET mengembalikan nomor ke 0. Angka keluaran dikirim ke seven-segment, sementara LED dan buzzer menyala sesaat sebagai penanda. Serial Monitor menuliskan perubahan nilai sehingga hasil pembacaan tombol dapat dibandingkan dengan angka yang terlihat pada display.

Rangkaian dibuat dan dijalankan di Wokwi. Melalui simulasi ini, sambungan pin, pembacaan tombol, dan pola angka pada display dapat dicek sebelum rangkaian dipindahkan ke perangkat fisik. Jika ada koneksi yang keliru atau kode tidak berjalan sesuai rencana, gejalanya terlihat dari angka pada display, bunyi buzzer, maupun catatan di Serial Monitor.

1.2 Rumusan Masalah

1.  Bagaimana Arduino Uno membaca tombol NEXT dan RESET sebagai masukan digital dengan konfigurasi INPUT_PULLUP, termasuk kondisi yang terbaca saat tombol ditekan dan tidak ditekan?

2.  Bagaimana program menambah, mengatur ulang, dan membatasi nomor antrean pada rentang 0 sampai 9, kemudian mengirimkan pola angka yang sesuai ke seven-segment common cathode?

3.  Bagaimana LED, buzzer, dan Serial Monitor merespons perubahan nilai counter agar pengguna dapat mengetahui bahwa tombol telah terbaca oleh sistem?

1.3 Tujuan Praktikum

1.  Memahami penggunaan pin digital Arduino Uno sebagai masukan untuk dua tombol dan sebagai keluaran untuk seven-segment, LED, serta buzzer.

2.  Membuat program counter antrean satu digit yang bertambah satu per satu saat tombol NEXT ditekan, kembali ke 0 saat tombol RESET digunakan, dan kembali ke 0 setelah melewati angka 9.

3.  Menampilkan perubahan nomor antrean pada seven-segment serta memeriksa perubahan itu melalui LED, buzzer, dan Serial Monitor selama pengujian berlangsung.

4.  Menguji kecocokan sambungan rangkaian dan perilaku program di Wokwi dengan beberapa kondisi penekanan tombol.

1.4 Batasan Sistem

1.  Counter dibatasi pada satu digit. Nomor yang tampil hanya berada pada rentang 0 sampai 9, sehingga sistem belum dapat menunjukkan puluhan, ratusan, atau menyimpan urutan nomor yang sudah dipanggil.

2.  Tampilan angka menggunakan seven-segment common cathode. Tujuh pin digital Arduino mengendalikan segmen A sampai G pada display; rancangan ini tidak memakai display tambahan maupun layar LCD.

3.  Tombol NEXT dan RESET dibaca sebagai masukan digital dengan konfigurasi INPUT_PULLUP. Pengujian berfokus pada tombol tersebut, bukan pada sensor, masukan analog, atau komunikasi dengan perangkat lain.

4.  Setelah mencapai nilai 9, nomor antrean kembali ke 0 pada tekanan NEXT berikutnya. Tombol RESET juga dapat mengembalikan nilai ke 0 kapan saja selama program berjalan, tanpa menyimpan nilai sebelum reset.

 

BAB II
DASAR TEORI

2.1 Input dan Output Digital

Masukan digital hanya mengenal dua keadaan logika, yaitu HIGH dan LOW. Pada rangkaian ini, satu kaki tombol dihubungkan ke pin Arduino sedangkan kaki lainnya ke ground. Ketika tombol belum ditekan, pin tidak terhubung ke ground. Ketika tombol ditekan, jalur pin berubah menjadi terhubung ke ground sehingga nilainya dapat dibaca oleh program.

Konfigurasi INPUT_PULLUP mengaktifkan resistor pull-up yang sudah tersedia di dalam Arduino. Dengan konfigurasi tersebut, pin terbaca HIGH saat tombol tidak ditekan dan LOW saat tombol ditekan. Logika pembacaan terlihat terbalik jika dibandingkan dengan tombol yang menggunakan pull-down eksternal, sehingga kondisi LOW harus dipakai sebagai penanda penekanan tombol pada program ini.

Pin keluaran juga dikendalikan dengan HIGH dan LOW. Nilai HIGH dipakai untuk menyalakan segmen seven-segment, LED, atau buzzer, sedangkan nilai LOW mematikannya. Karena display yang digunakan bertipe common cathode, setiap segmennya menyala ketika menerima sinyal HIGH dari pin Arduino.

2.2 Arduino Uno

Arduino Uno menyediakan beberapa pin digital yang dapat diprogram sebagai masukan maupun keluaran. Dalam rancangan ini, pin 2 sampai 8 digunakan untuk mengendalikan tujuh segmen display. Setiap pin mewakili satu segmen, sehingga program dapat membentuk angka dengan menentukan segmen mana yang dinyalakan.

Pin 9 dipakai untuk membaca tombol NEXT dan pin 10 untuk tombol RESET. Buzzer terhubung ke pin 11, sedangkan LED hijau terhubung ke pin 12 melalui resistor 220 ohm. Pembagian pin tersebut memisahkan jalur masukan dan keluaran sehingga kode program lebih mudah diikuti saat pengujian dilakukan.

2.3 Seven Segment

Seven-segment terdiri atas tujuh ruas LED yang diberi nama A sampai G. Kombinasi ruas yang menyala membentuk angka 0 sampai 9. Sebagai contoh, angka 0 menyalakan semua ruas kecuali G, sedangkan angka 1 hanya memerlukan ruas B dan C. Pola ini perlu disesuaikan dengan jenis display yang digunakan.

Program menyimpan pola setiap angka pada array digitSegments. Setiap baris array berisi tujuh nilai yang mewakili keadaan segmen A sampai G. Fungsi displayDigit mengambil pola berdasarkan nilai counter, lalu mengirimkan nilai tersebut ke tujuh pin keluaran menggunakan digitalWrite.

2.4 Debouncing Tombol

Tombol mekanis tidak selalu menghasilkan satu perubahan sinyal yang bersih. Saat tombol ditekan atau dilepas, kontak di dalam tombol dapat bergetar sangat singkat. Keadaan ini disebut bounce dan dapat menyebabkan satu tekanan terbaca beberapa kali jika program langsung menambah counter setiap kali mendeteksi LOW.

Program menyimpan kondisi tombol sebelumnya dan hanya menjalankan aksi saat terjadi perubahan dari HIGH ke LOW. Setelah perubahan terdeteksi, program memberi jeda 50 ms sebelum membaca kembali tombol. Pada simulasi ini, jeda tersebut menahan pembacaan ganda yang muncul ketika kontak tombol berubah.

 

BAB III
PERANCANGAN DAN IMPLEMENTASI

3.1 Gambaran Sistem

Saat program mulai dijalankan, nilai counter ditetapkan ke 0 dan angka tersebut langsung ditampilkan pada seven-segment. Program kemudian terus memeriksa keadaan tombol NEXT dan RESET di dalam fungsi loop. Tombol NEXT digunakan untuk memanggil nomor berikutnya, sedangkan tombol RESET digunakan ketika nomor perlu dikembalikan ke kondisi awal.

Setiap perubahan nilai akan memanggil fungsi untuk memperbarui display. LED dan buzzer menyala selama 150 ms sebagai umpan balik singkat, lalu status perubahan dikirim ke Serial Monitor. Jika nilai counter sudah berada pada angka 9, tekanan NEXT berikutnya tidak menghasilkan angka 10, melainkan mengembalikan nilai ke 0.

Gambar 1. Rangkaian counter antrean di Wokwi

3.2 Komponen yang Digunakan

No.

Komponen

Jumlah

Fungsi

1

Arduino Uno

1

Membaca tombol dan mengendalikan keluaran.

2

Seven-segment common cathode

1

Menampilkan nomor antrean 0 sampai 9.

3

Push button NEXT

1

Menambah nomor antrean.

4

Push button RESET

1

Mengembalikan nomor antrean ke 0.

5

LED hijau

1

Menyala saat nomor antrean berubah.

6

Resistor 220 ohm

1

Membatasi arus LED.

7

Buzzer

1

Berbunyi saat nomor antrean berubah.

8

Kabel jumper

Secukupnya

Menyambungkan komponen pada rangkaian.

Tabel 1. Komponen sistem counter antrean

3.3 Konfigurasi Pin

Komponen

Pin Arduino

Keterangan

Segmen A

2

Keluaran segmen A.

Segmen B

3

Keluaran segmen B.

Segmen C

4

Keluaran segmen C.

Segmen D

5

Keluaran segmen D.

Segmen E

6

Keluaran segmen E.

Segmen F

7

Keluaran segmen F.

Segmen G

8

Keluaran segmen G.

Tombol NEXT

9

Masukan digital dengan INPUT_PULLUP.

Tombol RESET

10

Masukan digital dengan INPUT_PULLUP.

Buzzer

11

Keluaran bunyi.

LED hijau

12

Keluaran LED melalui resistor 220 ohm.

Tabel 2. Pemetaan pin Arduino Uno pada sistem

3.4 Alur Kerja Program

Pada fungsi setup, program menetapkan pin segmen, LED, dan buzzer sebagai keluaran. Pin untuk tombol NEXT dan RESET ditetapkan sebagai masukan dengan INPUT_PULLUP. Setelah itu, Serial Monitor diaktifkan dan angka awal 0 dikirim ke display agar kondisi awal sistem dapat langsung terlihat.

Di dalam fungsi loop, Arduino membaca keadaan kedua tombol secara berulang. Aksi hanya dijalankan ketika keadaan tombol berubah dari HIGH ke LOW. Jika perubahan terjadi pada tombol NEXT, nilai counter ditambah satu. Nilai yang melewati 9 dikembalikan ke 0 sebelum ditampilkan. Jika perubahan terjadi pada tombol RESET, nilai counter langsung diatur menjadi 0.

Setelah nilai berubah, fungsi displayDigit memperbarui seven-segment berdasarkan pola pada array. Fungsi triggerNotification menyalakan LED dan buzzer selama 150 ms. Program juga menulis keterangan aksi beserta nomor antrean ke Serial Monitor agar urutan perubahan dapat diperiksa.

3.5 Implementasi Program

Kode berikut berasal dari berkas sketch.ino yang dipakai pada simulasi. Bagian pertama memuat deklarasi pin, pola angka seven-segment, serta fungsi untuk menampilkan angka dan memberi penanda. Bagian berikutnya berisi pengaturan awal dan logika pembacaan tombol di dalam loop.

// Konfigurasi pin segmen display (Common Cathode)

const int pinA = 2;

const int pinB = 3;

const int pinC = 4;

const int pinD = 5;

const int pinE = 6;

const int pinF = 7;

const int pinG = 8;

 

// Konfigurasi pin input digital (Push Button)

const int btnNextPin = 9;   // Tombol antrean berikutnya

const int btnResetPin = 10; // Tombol reset antrean

 

// Konfigurasi pin output indikator

const int buzzerPin = 11;   // Buzzer

const int ledIndicatorPin = 12; // LED notifikasi

 

// Array mapping 7-Segment (Angka 0 s/d 9)

const byte digitSegments[10][7] = {

  {1, 1, 1, 1, 1, 1, 0}, // 0

  {0, 1, 1, 0, 0, 0, 0}, // 1

  {1, 1, 0, 1, 1, 0, 1}, // 2

  {1, 1, 1, 1, 0, 0, 1}, // 3

  {0, 1, 1, 0, 0, 1, 1}, // 4

  {1, 0, 1, 1, 0, 1, 1}, // 5

  {1, 0, 1, 1, 1, 1, 1}, // 6

  {1, 1, 1, 0, 0, 0, 0}, // 7

  {1, 1, 1, 1, 1, 1, 1}, // 8

  {1, 1, 1, 1, 0, 1, 1}  // 9

};

 

int currentQueue = 0;

int lastNextState = HIGH;

int lastResetState = HIGH;

 

void displayDigit(int number) {

  if (number < 0 || number > 9) return;

  digitalWrite(pinA, digitSegments[number][0]);

  digitalWrite(pinB, digitSegments[number][1]);

  digitalWrite(pinC, digitSegments[number][2]);

  digitalWrite(pinD, digitSegments[number][3]);

  digitalWrite(pinE, digitSegments[number][4]);

  digitalWrite(pinF, digitSegments[number][5]);

  digitalWrite(pinG, digitSegments[number][6]);

}

 

void triggerNotification() {

  digitalWrite(buzzerPin, HIGH);

  digitalWrite(ledIndicatorPin, HIGH);

  delay(150);

  digitalWrite(buzzerPin, LOW);

  digitalWrite(ledIndicatorPin, LOW);

 

Kode 1. Program sistem counter antrean, bagian 1

}

 

void setup() {

  Serial.begin(9600);

  Serial.println(F("--- Sistem Counter Antrean Modul 2 Dimulai ---"));

 

  pinMode(pinA, OUTPUT);

  pinMode(pinB, OUTPUT);

  pinMode(pinC, OUTPUT);

  pinMode(pinD, OUTPUT);

  pinMode(pinE, OUTPUT);

  pinMode(pinF, OUTPUT);

  pinMode(pinG, OUTPUT);

 

  pinMode(btnNextPin, INPUT_PULLUP);

  pinMode(btnResetPin, INPUT_PULLUP);

 

  pinMode(buzzerPin, OUTPUT);

  pinMode(ledIndicatorPin, OUTPUT);

 

  digitalWrite(buzzerPin, LOW);

  digitalWrite(ledIndicatorPin, LOW);

 

  displayDigit(currentQueue);

  Serial.print(F("Nomor Antrean Awal: "));

  Serial.println(currentQueue);

}

 

void loop() {

  int currentNextState = digitalRead(btnNextPin);

  int currentResetState = digitalRead(btnResetPin);

 

  if (lastNextState == HIGH && currentNextState == LOW) {

    delay(50);

    if (digitalRead(btnNextPin) == LOW) {

      currentQueue++;

      if (currentQueue > 9) {

        currentQueue = 0;

      }

      displayDigit(currentQueue);

      triggerNotification();

 

      Serial.print(F("[ACTION] Antrean Bertambah -> Panggilan Antrean: "));

      Serial.println(currentQueue);

    }

  }

 

  if (lastResetState == HIGH && currentResetState == LOW) {

    delay(50);

    if (digitalRead(btnResetPin) == LOW) {

      currentQueue = 0;

      displayDigit(currentQueue);

 

Kode 2. Program sistem counter antrean, bagian 2

     triggerNotification();

 

      Serial.println(F("[ACTION] Sistem Antrean Direset ke Angka 0"));

    }

  }

 

  lastNextState = currentNextState;

  lastResetState = currentResetState;

}

 

Kode 3. Program sistem counter antrean, bagian 3

 

BAB IV
HASIL DAN ANALISIS

4.1 Hasil Simulasi

Tangkapan layar Wokwi memperlihatkan angka 7 pada seven-segment setelah tombol NEXT ditekan berulang kali. Serial Monitor mencatat perubahan nomor dari 1 sampai 7 secara berurutan. Catatan tersebut sesuai dengan angka terakhir yang terlihat pada display.

Catatan pada Serial Monitor mengikuti angka yang tampil pada seven-segment, dari 1 sampai 7. Artinya, pembacaan tombol, perubahan nilai counter, dan pembaruan display terjadi dalam urutan yang sama. LED dan buzzer memberi penanda singkat pada setiap perubahan. Saat pengujian, catatan serial dapat dipakai untuk melacak apakah masalah muncul pada pembacaan tombol, pemetaan pin, atau bagian program yang mengubah angka.

Gambar 2. Nomor antrean 7 dan riwayat Serial Monitor

4.2 Analisis Logika Counter

Kondisi

Nilai sebelum

Nilai sesudah

Respons sistem

Sistem baru aktif

-

0

Seven-segment menampilkan 0.

NEXT ditekan

0 sampai 8

Nilai + 1

Display berubah; LED dan buzzer menyala singkat; Serial Monitor mencatat aksi.

NEXT ditekan

9

0

Counter berputar kembali ke 0.

RESET ditekan

0 sampai 9

0

Display kembali ke 0; LED dan buzzer menyala singkat.

Tabel 3. Logika respons sistem berdasarkan program

Variabel lastNextState dan lastResetState menyimpan keadaan tombol pada pembacaan sebelumnya. Nilai dari pembacaan saat ini dibandingkan dengan nilai tersebut. Program hanya menjalankan aksi ketika keadaan berubah dari HIGH ke LOW. Dengan cara ini, counter tidak terus bertambah selama tombol NEXT masih ditekan.

Setelah perubahan tombol terdeteksi, ada jeda 50 ms sebelum program melanjutkan pembacaan. Jeda ini digunakan sebagai debouncing sederhana. Nilainya tidak dimaksudkan sebagai pengatur waktu antrean, melainkan untuk memberi waktu agar sinyal tombol kembali stabil setelah kontak mekanis berubah.

Array digitSegments memuat tujuh nilai untuk setiap angka menurut urutan segmen A sampai G. Fungsi displayDigit membaca pola yang sesuai dengan nilai counter, lalu mengirimkannya melalui digitalWrite ke masing-masing pin. Penyimpanan pola dalam array membuat kode lebih pendek dibandingkan menulis rangkaian kondisi terpisah untuk angka 0 sampai 9.

4.3 Keterbatasan Rancangan

Sistem hanya menampilkan satu digit sehingga nomor antrean terbatas pada angka 0 sampai 9. Ketika jumlah antrean lebih dari sembilan, angka pada display kembali ke 0 dan tidak menyimpan riwayat nomor sebelumnya. Rancangan ini belum sesuai untuk penggunaan antrean dengan jumlah pemanggilan yang panjang.

LED dan buzzer hanya memberi penanda singkat tanpa membedakan jenis layanan atau nomor tujuan. Rangkaian masih memakai delay ketika penanda aktif. Selama jeda tersebut berlangsung, program tidak dapat menjalankan pekerjaan lain. Untuk penggunaan yang lebih panjang, rancangan dapat diganti dengan display multi-digit atau LCD dan pengaturan waktu tanpa delay.

 

BAB V
PENUTUP

5.1 Kesimpulan

Simulasi di Wokwi menunjukkan bahwa counter antrean berbasis Arduino Uno dapat menjalankan fungsi dasar yang direncanakan. Tombol NEXT menambah nomor satu per satu, sedangkan RESET mengembalikan nomor ke 0. Seven-segment menampilkan nilai counter, dan Serial Monitor mencatat perubahan yang sama. LED serta buzzer memberi tanda sesaat setelah nilai berubah.

Penggunaan INPUT_PULLUP membuat tombol dapat dihubungkan langsung ke ground tanpa resistor pull-up tambahan. Program membaca perubahan dari HIGH ke LOW dan memakai jeda 50 ms untuk mengurangi pembacaan berulang dari satu tekanan tombol. Pola segmen disimpan dalam array, sehingga program dapat memilih bentuk angka tanpa mengatur tujuh pin dari awal untuk setiap nilai.

5.2 Saran

Jika sistem ini dipakai untuk antrean yang lebih panjang, display lebih dari satu digit diperlukan agar nomor tidak kembali ke 0 setelah angka 9. LCD dapat menampilkan nomor yang sedang dipanggil beserta keterangan layanan. Debouncing berbasis millis juga lebih sesuai untuk menggantikan delay, karena Arduino tetap bisa membaca masukan ketika LED dan buzzer aktif.

 

 

DAFTAR PUSTAKA

Kurniawan, N. Y. (2026). Modul 2 Digital dan Analog Input Output. Materi praktikum Internet of Things.

Arduino. (n.d.). Digital I/O pins. https://docs.arduino.cc/learn/electronics/digital-pins/

Wokwi. (n.d.). Arduino Uno simulation. https://docs.wokwi.com/guides/arduino-uno/

 

 

LAMPIRAN

Konfigurasi Wokwi

Berkas diagram.json menyimpan daftar komponen dan sambungan rangkaian yang dibaca Wokwi saat simulasi dibuka. Berkas ini mencantumkan Arduino Uno, seven-segment, dua tombol, LED, resistor, buzzer, serta hubungan tiap komponen ke pin digital. Konfigurasi tersebut menjadi acuan agar susunan komponen pada simulator sama dengan pemetaan pin yang digunakan dalam program.

{

  "version": 1,

  "author": "nop4al",

  "editor": "wokwi",

  "parts": [

    { "type": "wokwi-arduino-uno", "id": "uno", "top": 40, "left": -20, "attrs": {} },

    { "type": "wokwi-7segment", "id": "sevseg", "top": -120, "left": 230, "attrs": { "digits": "1", "common": "cathode" } },

    { "type": "wokwi-pushbutton", "id": "btn_next", "top": 180, "left": 180, "attrs": { "color": "green", "label": "NEXT" } },

    { "type": "wokwi-pushbutton", "id": "btn_reset", "top": 270, "left": 180, "attrs": { "color": "red", "label": "RESET" } },

    { "type": "wokwi-buzzer", "id": "bz1", "top": 120, "left": 360, "attrs": {} },

    { "type": "wokwi-led", "id": "led1", "top": 240, "left": 360, "attrs": { "color": "green" } },

    { "type": "wokwi-resistor", "id": "r1", "top": 280, "left": 360, "attrs": { "value": "220" } }

  ],

  "connections": [

    [ "uno:2", "sevseg:A", "green", [ "v0" ] ],

    [ "uno:3", "sevseg:B", "green", [ "v0" ] ],

    [ "uno:4", "sevseg:C", "green", [ "v0" ] ],

    [ "uno:5", "sevseg:D", "green", [ "v0" ] ],

    [ "uno:6", "sevseg:E", "green", [ "v0" ] ],

    [ "uno:7", "sevseg:F", "green", [ "v0" ] ],

    [ "uno:8", "sevseg:G", "green", [ "v0" ] ],

    [ "sevseg:COM", "uno:GND.1", "black", [ "v0" ] ],

    [ "btn_next:1.l", "uno:9", "blue", [ "v0" ] ],

    [ "btn_next:2.l", "uno:GND.2", "black", [ "v0" ] ],

    [ "btn_reset:1.l", "uno:10", "orange", [ "v0" ] ],

    [ "btn_reset:2.l", "uno:GND.2", "black", [ "v0" ] ],

    [ "uno:11", "bz1:2", "purple", [ "v0" ] ],

    [ "bz1:1", "uno:GND.3", "black", [ "v0" ] ],

    [ "uno:12", "r1:1", "gold", [ "v0" ] ],

    [ "r1:2", "led1:A", "gold", [ "v0" ] ],

    [ "led1:C", "uno:GND.3", "black", [ "v0" ] ]

  ]

}

Kode 4. Konfigurasi rangkaian Wokwi

 

Tidak ada komentar:

Posting Komentar