Minggu, 27 September 2026

Implementasi Analog Input dan Digital Output pada Simulasi Speedometer Berbasis Arduino Uno

 

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

  1. Bagaimana mengubah nilai potensiometer menjadi kecepatan digital pada Arduino Uno? 
  2. Bagaimana menampilkan angka menggunakan seven-segment empat digit? 
  3. Bagaimana mengaktifkan peringatan pada batas 80 km/jam dan mengembalikan sistem ke kondisi aman ketika kecepatan menurun?

1.3 Tujuan Praktikum

  1. Praktikum bertujuan merancang rangkaian speedometer pada Wokwi
  2. memahami pemetaan ADC menjadi kecepatan
  3. menerapkan multiplexing tanpa library display tambahan
  4. 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