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