LAPORAN PRAKTIKUM
Implementasi Analog Input dan Digital
Output pada Simulasi Speedometer Berbasis Arduino Uno
Disusun oleh:
Muhammad Naufal Zakcky Dzikrillah 24051204106
Gerizt Geovany Saragih Sumbayak 24051204117
Mahdi Ghani Afriza 24051204119
Muhammad Risqi Gemilang 24051204181
BAB I
PENDAHULUAN
1.1
Latar Belakang
Speedometer
digital menampilkan informasi kecepatan dalam bentuk angka agar mudah dibaca.
Selain menampilkan nilai, sistem dapat dilengkapi indikator untuk memberi
peringatan ketika kecepatan mencapai batas tertentu. Praktikum ini menerapkan
konsep tersebut melalui simulasi Arduino Uno pada Wokwi.
Potensiometer
digunakan sebagai masukan untuk menyimulasikan perubahan kecepatan. Nilai
analog dibaca oleh Arduino, dipetakan menjadi 0–120 km/jam, lalu ditampilkan
pada seven-segment empat digit. LED hijau menunjukkan kondisi di bawah 80
km/jam, sedangkan LED merah dan buzzer memberikan peringatan mulai 80 km/jam.
Batas tersebut merupakan parameter praktikum, bukan acuan batas kecepatan di
jalan.
Kegiatan
ini melatih pembacaan input analog, pengolahan data, multiplexing display, dan
pengaturan waktu keluaran. Sistem yang dibuat merupakan simulasi lokal; program
belum mengirimkan data ke internet atau layanan IoT.
1.2
Rumusan Masalah
- Bagaimana mengubah nilai potensiometer menjadi kecepatan digital pada Arduino Uno?
- Bagaimana menampilkan angka menggunakan seven-segment empat digit?
- Bagaimana mengaktifkan peringatan pada batas 80 km/jam dan mengembalikan sistem ke kondisi aman ketika kecepatan menurun?
1.3
Tujuan Praktikum
- Praktikum bertujuan merancang rangkaian speedometer pada Wokwi
- memahami pemetaan ADC menjadi kecepatan
- menerapkan multiplexing tanpa library display tambahan
- serta menguji kesesuaian display dan indikator pada kondisi minimum, mendekati ambang, tepat pada ambang, dan maksimum.
1.4
Ruang Lingkup
Kecepatan
merupakan hasil pemetaan posisi potensiometer, bukan pengukuran gerak
kendaraan. Pengujian mencakup fungsi program dan respons komponen virtual.
Kalibrasi sensor kecepatan, pengukuran arus fisik, dan pengiriman data melalui
jaringan tidak dilakukan.
BAB II
DASAR TEORI DAN KOMPONEN
2.1
Arduino Uno dan Pembacaan Analog
Arduino
Uno menjadi pusat kendali yang membaca potensiometer melalui A0 dan
mengendalikan pin keluaran. Program menggunakan analogRead(A0) dengan rentang
nilai 0–1023. Pin A1 dan A2 dipakai sebagai keluaran digital untuk LED merah
dan buzzer; pin analog Arduino Uno juga dapat berfungsi sebagai GPIO [1].
Pada
implementasi ini, kecepatan dihitung dengan map(nilaiADC, 0, 1023, 0, 120).
Untuk nilai masukan nonnegatif, hasil bilangan bulatnya setara dengan:
v
= floor(120 × ADC / 1023)
Simbol
v menyatakan kecepatan simulasi dalam km/jam. Sebagai contoh, ADC 678
menghasilkan 79 km/jam, sedangkan ADC 690 menghasilkan 80 km/jam. Karena
hasilnya berupa bilangan bulat, beberapa nilai ADC yang berdekatan dapat
menghasilkan kecepatan yang sama.
2.2
Potensiometer
Potensiometer
menyimulasikan masukan yang berubah saat kenop diputar. Pada rangkaian, VCC
dihubungkan ke 5V, GND ke ground, dan SIG ke A0. Perubahan posisi kenop
digunakan untuk menguji sistem pada beberapa nilai kecepatan tanpa memerlukan
kendaraan atau sensor putaran [2].
2.3
Seven-Segment dan Multiplexing
Display
menggunakan tujuh segmen A–G untuk membentuk angka serta empat pin pemilih
digit DIG1–DIG4. Atribut common diatur menjadi cathode. Segmen menyala ketika
pin segmennya HIGH dan digit yang dipilih diaktifkan dengan LOW. Pengaturan ini
harus sesuai dengan logika program [3].
Multiplexing
menyalakan digit secara bergantian dengan cepat. Program mematikan semua digit
sebelum mengubah pola segmen, mengaktifkan satu digit selama 1.000 mikrodetik,
lalu mematikannya kembali. Digit yang tidak digunakan dikosongkan sehingga
angka 79 tampil sebagai 79, bukan 0079. Proses berulang membuat angka dapat
dibaca sebagai satu tampilan.
2.4
LED, Buzzer, dan Pengaturan Waktu
Saat
v < 80, LED hijau menyala, LED merah mati, dan buzzer tidak aktif. Saat v ≥
80, LED hijau mati; status LED merah dan buzzer berganti setiap sekitar 300 ms
berdasarkan millis(). Ketika status peringatan aktif, tone(BUZZER, 1000)
membangkitkan nada 1.000 Hz. Serial Monitor menampilkan ADC dan kecepatan
setiap sekitar 500 ms sesuai kode.
2.5
Alat dan Bahan
Tabel
2.1 Komponen pada proyek Wokwi
|
Komponen |
Jumlah |
Fungsi |
|
Arduino Uno |
1 |
Pengolah input dan pengendali keluaran |
|
Potensiometer |
1 |
Masukan kecepatan simulasi |
|
Seven-segment 4 digit |
1 |
Menampilkan 0–120 km/jam |
|
LED hijau |
1 |
Indikator kecepatan di bawah 80 |
|
LED merah |
1 |
Indikator peringatan berkala |
|
Buzzer |
1 |
Keluaran alarm |
|
Resistor 220 Ω |
9 |
7 untuk segmen; 2 untuk LED |
Tujuh
resistor membatasi arus pada jalur segmen dan dua resistor lainnya berada pada
jalur LED indikator.
BAB III
PERANCANGAN DAN HASIL PRAKTIKUM
3.1
Konfigurasi Rangkaian
Tabel
3.1 Hubungan komponen dengan Arduino Uno
|
Bagian
rangkaian |
Koneksi pada
Arduino Uno |
|
SIG potensiometer |
A0 |
|
VCC dan GND potensiometer |
5V dan GND.2 |
|
Segmen A, B, C, D, E, F, G |
D2, D3, D4, D5, D6, D7, D8
(masing-masing melalui 220 Ω) |
|
DIG1 |
D9 |
|
DIG2 |
D10 |
|
DIG3 |
D11 |
|
DIG4 |
D12 |
|
Anoda LED hijau |
D13 melalui 220 Ω |
|
Anoda LED merah |
A1 melalui 220 Ω |
|
Katoda kedua LED |
GND.1 |
|
Buzzer pin 2 (+) dan pin 1 (−) |
A2 dan GND.3 |
Semua
ground komponen terhubung ke ground Arduino. Segmen A–G masing-masing melewati
resistor 220 Ω. Anoda LED terhubung melalui resistor 220 Ω, sedangkan katodanya
ke ground. Pin DP tidak digunakan karena kecepatan ditampilkan sebagai bilangan
bulat.
Gambar
3.1 Rangkaian simulasi speedometer berbasis Arduino Uno pada Wokwi.
3.2
Alur Kerja Program
Saat
mulai, setup() mengaktifkan komunikasi serial 9600 baud, mengatur mode pin,
mematikan seluruh digit, menyalakan LED hijau, dan mematikan buzzer.
Selanjutnya loop() membaca ADC, menghitung kecepatan, menyiapkan isi digit,
memperbarui display, mengevaluasi ambang peringatan, dan mencetak data
pemantauan secara berkala.
Fungsi
siapkanDisplay() memecah angka dari digit paling kanan dengan operasi modulo
dan pembagian sepuluh. Nilai -1 menandai digit kosong. Fungsi
tampilkanSatuDigit() mengatur pola segmen dan pemilihan digit, sedangkan
refreshDisplay() menjalankan pemindaian empat posisi.
|
const
int POT_PIN = A0; const
int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8}; const
int digitPins[4] = {9, 10, 11, 12}; const
int LED_HIJAU = 13; const
int LED_MERAH = A1; const
int BUZZER = A2; const
byte polaAngka[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
isiDigit[4] = {-1, -1, -1, 0}; unsigned
long waktuBlinkTerakhir = 0; unsigned
long waktuSerialTerakhir = 0; const
unsigned long intervalBlink = 300; bool
statusMerah = false; void
setup() { Serial.begin(9600); for
(int i = 0; i < 7; i++) { pinMode(segmentPins[i],
OUTPUT); digitalWrite(segmentPins[i],
LOW); } for
(int i = 0; i < 4; i++) { pinMode(digitPins[i],
OUTPUT); digitalWrite(digitPins[i],
HIGH); } pinMode(LED_HIJAU,
OUTPUT); pinMode(LED_MERAH,
OUTPUT); pinMode(BUZZER,
OUTPUT); pinMode(POT_PIN,
INPUT); digitalWrite(LED_HIJAU,
HIGH); digitalWrite(LED_MERAH,
LOW); noTone(BUZZER); } void
loop() { int
nilaiADC = analogRead(POT_PIN); int
kecepatan = map(nilaiADC, 0, 1023, 0, 120); siapkanDisplay(kecepatan); refreshDisplay(); if
(kecepatan < 80) { digitalWrite(LED_HIJAU,
HIGH); digitalWrite(LED_MERAH,
LOW); noTone(BUZZER); statusMerah
= false; }
else { digitalWrite(LED_HIJAU,
LOW); if
(millis() - waktuBlinkTerakhir >= intervalBlink) { waktuBlinkTerakhir
= millis(); statusMerah
= !statusMerah; digitalWrite(LED_MERAH,
statusMerah); if
(statusMerah) { tone(BUZZER,
1000); }
else { noTone(BUZZER); } } } if
(millis() - waktuSerialTerakhir >= 500) { waktuSerialTerakhir
= millis(); Serial.print("ADC:
"); Serial.print(nilaiADC); Serial.print("
| Kecepatan: "); Serial.print(kecepatan); Serial.println("
km/jam"); } } void
siapkanDisplay(int angka) { for
(int i = 0; i < 4; i++) { isiDigit[i]
= -1; } if
(angka == 0) { isiDigit[3]
= 0; return; } int
posisi = 3; while
(angka > 0 && posisi >= 0) { isiDigit[posisi]
= angka % 10; angka
/= 10; posisi--; } } void
tampilkanSatuDigit(int posisi, int nilai) { for
(int i = 0; i < 4; i++) { digitalWrite(digitPins[i],
HIGH); } for
(int i = 0; i < 7; i++) { digitalWrite(segmentPins[i],
LOW); } if
(nilai < 0 || nilai > 9) { return; } for
(int i = 0; i < 7; i++) { digitalWrite(segmentPins[i],
polaAngka[nilai][i]); } digitalWrite(digitPins[posisi],
LOW); delayMicroseconds(1000); digitalWrite(digitPins[posisi],
HIGH); } void
refreshDisplay() { for
(int i = 0; i < 4; i++) { tampilkanSatuDigit(i,
isiDigit[i]); } } |
3.3
Langkah Pelaksanaan
Proyek
Arduino Uno dibuat di Wokwi, kemudian isi sketch.ino dan diagram.json dari
rancangan sebelumnya dimasukkan. Rangkaian diperiksa untuk memastikan pemetaan
pin pada program sesuai dengan koneksi komponen, terutama jenis common cathode
dan urutan DIG1–DIG4.
Simulasi
dijalankan melalui tombol Start. Setelah kompilasi selesai, potensiometer
diubah untuk menghasilkan ADC 0, 678, 690, dan 1023. Pada setiap nilai,
keluaran Serial Monitor dibandingkan dengan display dan keadaan indikator.
Pengujian juga mencakup penurunan dari 80 menjadi 79 km/jam untuk memeriksa
pemulihan kondisi aman.
Proses
awal sempat menunggu antrean kompilasi server Wokwi. Setelah kompilasi selesai,
simulasi berjalan tanpa ditemukan kesalahan kompilasi. Kode dan koneksi awal
tidak memerlukan perubahan untuk memenuhi skenario pengujian yang dilakukan.
3.4
Hasil Pengujian
Tabel
3.2 Hasil observasi simulasi
|
ADC |
Display
(km/jam) |
LED hijau /
merah |
Buzzer |
|
0 |
0 |
Nyala / mati |
Tidak aktif |
|
678 |
79 |
Nyala / mati |
Tidak aktif |
|
690 |
80 |
Mati / berkala |
Aktif berkala |
|
1023 |
120 |
Mati / berkala |
Aktif berkala |
Gambar
3.2 Kondisi awal sistem pada kecepatan 0 km/jam.
Gambar
3.3 Kondisi sistem pada kecepatan 79 km/jam.
Gambar
3.4 Kondisi sistem saat mencapai ambang 80 km/jam.
Gambar
3.5 Kondisi sistem pada kecepatan maksimum 120 km/jam.
Display
menunjukkan angka yang sama dengan kecepatan pada Serial Monitor untuk seluruh
titik uji. Pada kondisi peringatan, indikator buzzer pada simulator muncul
bersamaan dengan fase aktif LED merah. Aktivasi buzzer dikonfirmasi melalui
indikator visual simulator dan logika program; frekuensi suara tidak diukur
secara akustik.
Keluaran
Serial Monitor yang teramati:
ADC:
0 | Kecepatan: 0 km/jam
ADC:
678 | Kecepatan: 79 km/jam
ADC:
690 | Kecepatan: 80 km/jam
ADC:
1023 | Kecepatan: 120 km/jam
3.5
Analisis Hasil
Peralihan
ADC 678 ke 690 merupakan titik penting karena menghasilkan perubahan kecepatan
dari 79 menjadi 80 km/jam. Hasil ini sesuai dengan kondisi kecepatan < 80
pada program: tepat pada 80 km/jam sistem sudah memasuki cabang peringatan.
Pengujian batas membuktikan bahwa alarm tidak menunggu sampai kecepatan lebih
besar dari 80.
Saat
kecepatan diturunkan dari 80 menjadi 79 km/jam, LED hijau kembali menyala, LED
merah mati, dan indikator buzzer tidak aktif. Dengan demikian, sistem dapat
kembali ke kondisi aman setelah sebelumnya berada dalam kondisi peringatan.
Pengujian minimum dan maksimum menunjukkan bahwa pemetaan mencapai 0 dan 120 km/jam. Hasil ini memvalidasi perilaku empat titik uji, tetapi tidak merupakan pengukuran akurasi kecepatan kendaraan nyata. Periode kedip dan frekuensi buzzer adalah nilai yang ditetapkan dalam kode, bukan hasil pengukuran menggunakan osiloskop.
3.6
Keterbatasan dan Pengembangan
Masukan
potensiometer belum mewakili pulsa sensor roda. Pengembangan dapat memakai
sensor Hall atau encoder, menghitung jumlah putaran terhadap waktu dan keliling
roda, lalu mengalibrasi hasilnya. Pengujian perangkat fisik juga diperlukan
untuk memeriksa kemampuan arus pin dan kebutuhan penggerak digit.
Logika
saat ini menggunakan satu ambang tanpa histeresis. Jika nilai masukan
berfluktuasi di sekitar batas, status dapat berganti berulang. Penyaringan
input atau ambang masuk/keluar yang berbeda dapat dipertimbangkan pada
pengembangan berikutnya; keduanya belum diterapkan pada proyek yang diuji.
BAB IV
PENUTUP
4.1
Kesimpulan
Simulasi
speedometer Arduino Uno berhasil membaca masukan potensiometer, mengonversinya
menjadi 0–120 km/jam, dan menampilkan hasil pada seven-segment empat digit.
Nilai display sesuai dengan Serial Monitor pada pengujian 0, 79, 80, dan 120
km/jam.
Logika
peringatan bekerja pada batas yang ditentukan. Kondisi di bawah 80 km/jam
ditandai LED hijau, sedangkan mulai 80 km/jam sistem mengaktifkan peringatan
LED merah dan buzzer secara berkala. Setelah kecepatan diturunkan menjadi 79
km/jam, indikator kembali ke kondisi aman.
4.2
Saran
Pengujian berikutnya dapat menambahkan lebih banyak titik masukan dan pengujian berulang di sekitar batas. Untuk penerapan fisik, gunakan sensor kecepatan yang sesuai, lakukan kalibrasi, dan evaluasi rangkaian penggerak display. Fitur konektivitas dapat ditambahkan apabila sistem akan dikembangkan menjadi perangkat IoT.
4.3
Proyek Simulasi
https://wokwi.com/projects/475497317197757441
Proyek
memuat rangkaian dan program yang digunakan dalam praktikum. Untuk mengulang
pengujian, jalankan simulasi, putar potensiometer, lalu amati angka display,
LED, indikator buzzer, dan Serial Monitor.
DAFTAR PUSTAKA
[1] Wokwi.
“wokwi-arduino-uno Reference.” Dokumentasi Arduino Uno pada simulator.
[2] Wokwi.
“wokwi-potentiometer Reference.” Dokumentasi masukan potensiometer.
[3] Wokwi. “wokwi-7segment
Reference.” Dokumentasi seven-segment dan atribut common.
Tidak ada komentar:
Posting Komentar