Minggu, 27 September 2026

SMART LED CONTROLLER
BERBASIS ARDUINO UNO MENGGUNAKAN ADC
10-BIT DAN 7-SEGMENT


Disusun Oleh:
Irma Aulia24051204005
Kaysa Karuma Amalia24051204011
Maskurotin Faizah24051204015
Qurrota Ayun24051204082
Syifa Nayla Artika Dewi24051204238
BAB I
PENDAHULUAN
1.1 Latar Belakang

Perkembangan Internet of Things (IoT) dan sistem embedded mendorong penggunaan mikrokontroler dalam berbagai sistem kendali elektronik. Salah satu kemampuan dasar yang penting dalam sistem mikrokontroler adalah membaca masukan analog dan mengubahnya menjadi keluaran yang dapat dikendalikan sesuai kebutuhan.

Arduino Uno merupakan salah satu mikrokontroler yang banyak digunakan untuk mempelajari konsep tersebut karena menyediakan input analog dengan ADC 10-bit serta output PWM. Dengan ADC 10-bit, Arduino Uno dapat membaca nilai analog dalam rentang 0–1023. Nilai tersebut kemudian dapat diproses dan digunakan untuk mengatur tingkat kecerahan LED melalui PWM.

Berdasarkan konsep tersebut, dibuat sebuah Smart LED Controller yang menggunakan potensiometer sebagai sumber input analog. Nilai potensiometer dibaca oleh Arduino Uno melalui pin analog A0 dan menghasilkan nilai ADC 0–1023. Nilai tersebut kemudian digunakan untuk mengatur kecerahan LED melalui PWM pada pin 9. Selain itu, nilai ADC ditampilkan secara langsung menggunakan display 4-digit 7-segment sehingga pengguna dapat mengetahui nilai input yang sedang digunakan.

Proyek ini disimulasikan menggunakan Wokwi untuk mempermudah proses perancangan, pengujian, dan pengamatan sistem tanpa memerlukan perangkat keras secara langsung.

1.2 Rumusan Masalah
  1. Bagaimana membaca nilai analog dari potensiometer menggunakan ADC 10-bit pada Arduino Uno?
  2. Bagaimana mengubah nilai ADC menjadi nilai PWM untuk mengatur kecerahan LED?
  3. Bagaimana menampilkan nilai ADC pada display 4-digit 7-segment?
  4. Bagaimana mensimulasikan sistem tersebut menggunakan Wokwi?

1.3 Tujuan Laporan
  1. Memahami cara kerja input analog dan ADC 10-bit pada Arduino Uno.
  2. Mengimplementasikan pembacaan nilai potensiometer sebagai input analog.
  3. Mengatur kecerahan LED menggunakan teknik PWM berdasarkan nilai ADC.
  4. Menampilkan hasil pembacaan ADC pada display 4-digit 7-segment.
  5. Menguji dan memvisualisasikan sistem melalui simulasi Wokwi.
1.4 Manfaat Penulisan

Proyek ini diharapkan dapat memberikan manfaat sebagai berikut:

Bagi mahasiswa , proyek dapat meningkatkan pemahaman mengenai konsep dasar mikrokontroler, ADC, PWM, input analog, dan output digital.

Bagi pembelajaran , simulasi dapat menjadi media praktik untuk memahami hubungan antara input analog, proses pengolahan data, dan keluaran sistem.

Bagi pengembangan sistem , proyek ini dapat menjadi dasar untuk membuat sistem kontrol berbasis sensor yang lebih kompleks.

BAB II
TINJAUAN PUSTAKA
2.1 Dasar Teori
A. Mikrokontroler Arduino Uno

Arduino Uno merupakan papan mikrokontroler berbasis ATmega328P yang digunakan untuk membaca input, mengolah data, dan mengendalikan perangkat output. Arduino Uno memiliki beberapa pin digital dan pin analog yang dapat digunakan untuk berbagai kebutuhan sistem kendali. Pada sistem ini, Arduino Uno digunakan sebagai mikrokontroler utama untuk membaca nilai potensiometer melalui pin analog A0, mengolah nilai ADC, mengatur tingkat kecerahan LED menggunakan PWM, serta menampilkan nilai pembacaan pada display 7-segment.

B. Potensiometer

Potensiometer merupakan komponen elektronika yang memiliki nilai resistansi variabel dan dapat menghasilkan perubahan tegangan berdasarkan posisi putaran. Potensiometer digunakan sebagai sumber input analog pada sistem. Perubahan posisi potensiometer menyebabkan perubahan tegangan yang diterima oleh pin analog Arduino Uno sehingga menghasilkan perubahan nilai ADC.

C. Analog to Digital Converter (ADC) 10-bit

ADC ( Analog to Digital Converter ) merupakan fitur yang berfungsi mengubah sinyal analog menjadi nilai digital yang dapat diproses oleh mikrokontroler. Arduino Uno memiliki ADC dengan resolusi 10-bit, sehingga nilai hasil pembacaan berada pada rentang 0 sampai 1023. Pada sistem ini, ADC digunakan untuk membaca perubahan tegangan dari potensiometer melalui pin A0.

D. Pulse Width Modulation (PWM)

PWM ( Pulse Width Modulation ) merupakan teknik untuk mengatur daya keluaran dengan mengubah lebar pulsa sinyal digital. Pada Arduino Uno, nilai PWM berada pada rentang 0 sampai 255. Nilai ADC yang diperoleh dari potensiometer dipetakan dari rentang 0–1023 menjadi 0–255 sehingga dapat digunakan untuk mengatur tingkat kecerahan LED. Semakin besar nilai ADC, semakin besar nilai PWM yang diberikan sehingga LED menjadi semakin terang.

E. LED

LED ( Light Emitting Diode ) merupakan komponen elektronika yang menghasilkan cahaya ketika dialiri arus listrik. Dalam sistem ini, LED digunakan sebagai output untuk menunjukkan perubahan tingkat kecerahan berdasarkan nilai PWM. LED akan semakin terang ketika nilai potensiometer dinaikkan dan semakin redup ketika nilai potensiometer diturunkan.

F. Display 4-Digit 7-Segment

Display 4- digit 7- segment merupakan perangkat output yang digunakan untuk menampilkan informasi dalam bentuk angka. Pada sistem ini digunakan display 4-digit dengan driver TM1637 untuk menampilkan nilai ADC yang diperoleh dari potensiometer. Dengan demikian, perubahan nilai input analog dapat diamati secara langsung pada display.

G. Serial Monitor

Serial Monitor merupakan fasilitas komunikasi serial yang digunakan untuk menampilkan data hasil pembacaan dan pengolahan mikrokontroler. Pada sistem ini, Serial Monitor digunakan untuk menampilkan nilai ADC dan persentase kecerahan LED sehingga proses pengujian dan pemantauan sistem dapat dilakukan dengan lebih mudah.

2.2 Komponen
A. Arduino Uno

Digunakan sebagai mikrokontroler utama untuk membaca input analog dari potensiometer, mengolah nilai ADC, mengatur kecerahan LED, dan mengendalikan display 4-digit 7-segment.

B. Potensiometer

Digunakan sebagai sumber input analog yang menghasilkan perubahan tegangan sesuai dengan posisi putarannya. Output potensiometer terhubung ke pin A0 Arduino Uno.

C. LED

Digunakan sebagai output indikator untuk menunjukkan tingkat kecerahan berdasarkan nilai PWM yang dihasilkan Arduino. LED terhubung pada pin 9.

D. Resistor 220Ω

Digunakan untuk membatasi arus yang mengalir menuju LED sehingga LED dapat digunakan secara aman dalam rangkaian.

E. Display 4-Digit 7-Segment TM1637

Digunakan untuk menampilkan nilai ADC dari potensiometer dalam bentuk angka. Komunikasi display dengan Arduino menggunakan pin CLK pada GPIO 2 dan DIO pada GPIO 3.

F. Catu Daya 5V

Digunakan sebagai sumber tegangan untuk Arduino dan komponen yang membutuhkan suplai 5V, seperti potensiometer dan display 7-segment.

G. Wokwi Simulator

Digunakan sebagai platform simulasi untuk membuat, menjalankan, dan menguji rangkaian Arduino secara virtual sebelum diterapkan pada perangkat keras secara langsung.

H. Arduino IDE/Arduino CLI

Digunakan untuk menulis, mengompilasi, dan menghasilkan program Arduino yang dapat dijalankan pada mikrokontroler Arduino Uno. Pada pengembangan proyek ini, Arduino CLI digunakan untuk melakukan proses kompilasi program.

I. Arduino AVR Core

Digunakan sebagai platform pendukung untuk proses kompilasi program Arduino Uno yang berbasis mikrokontroler ATmega328P.

J. Serial Monitor

Digunakan untuk memantau nilai ADC dan persentase kecerahan LED secara real-time selama proses simulasi dan pengujian sistem.

K. Wokwi for Visual Studio Code

Digunakan untuk menjalankan simulasi rangkaian dan firmware Arduino melalui Visual Studio Code, sehingga proses pengembangan dan pengujian dapat dilakukan secara lebih praktis

BAB III
PEMBAHASAN
3.1 Penjelasan Simulasi

Simulasi sistem Smart LED Controller dirancang dan diuji secara virtual menggunakan platform Wokwi Simulator. Pada simulasi ini, seluruh komponen terhubung ke papan Arduino Uno sebagai pengendali utama:

Simulasi Smart LED Controller
  • Input Analog (Potensiometer): Terminal tengah potensiometer terhubung ke Pin A0 Arduino Uno, sedangkan kedua terminal lainnya terhubung ke VCC 5V dan GND.
  • Saat potensiometer diputar, terjadi perubahan tegangan analog ($0-5 V$) yang dibaca oleh ADC 10-bit Arduino menjadi nilai digital berkisar $0$ hingga $1023$.
  • Output PWM (LED): LED terhubung ke Pin Digital 9 (pin dengan fitur Pulse Width Modulation) melalui resistor pembatas arus $220 Ω$ ke GND. Nilai ADC ($0-1023$) diubah melalui fungsi pemetaan (mapping) menjadi sinyal PWM ($0-255$). Semakin besar nilai potensiometer, sinyal PWM makin tinggi sehingga nyala LED semakin terang.
  • Display Output (TM1637 7-Segment): Display 4-digit 7-segment digunakan untuk menampilkan nilai ADC secara real-time. Komunikasi dilakukan via dua jalur serial, yaitu pin CLK pada Pin Digital 2 dan DIO pada Pin Digital 3.
  • Monitoring Data (Serial Monitor): Selain pada display 7-segment, data pembacaan ADC dan tingkat kecerahan LED dalam bentuk persentase ($0-100%$) dikirim melalui komunikasi serial pada baud rate 9600 untuk mempermudah pemantauan simulasi.

Saat simulasi dijalankan:

  1. Ketika potensiometer diputar ke posisi paling kiri (0%), nilai ADC bernilai 0, LED padam, dan display menampilkan angka 0000.
  2. Ketika potensiometer diputar ke tengah (50%), nilai ADC terbaca sekitar 511, kecerahan LED berada pada tingkat sedang (PWM 127 / 50%), dan display 7-segment menampilkan angka 0511.
  3. Ketika potensiometer diputar penuh ke kanan (100%), nilai ADC bernilai 1023, LED menyala dengan kecerahan maksimal (PWM 255 / 100%), dan display menampilkan angka 1023.
3.2 Kode Program
// =====================================================
// SMART LED CONTROLLER
// Potensiometer → ADC → LED Brightness + 7-Segment
// =====================================================
// Pin untuk komunikasi dengan TM1637 7-segment
#define CLK 2
#define DIO 3

// Pin input analog dari potensiometer
#define POT_PIN A0

// Pin PWM untuk mengatur kecerahan LED
#define LED_PIN 9

// =====================================================
// KODE SEGMENT 0-9
// Digunakan untuk menampilkan angka pada 7-segment
// =====================================================
const byte digitCode[] = {
  0x3F, // 0
  0x06, // 1
  0x5B, // 2
  0x4F, // 3
  0x66, // 4
  0x6D, // 5
  0x7D, // 6
  0x07, // 7
  0x7F, // 8
  0x6F  // 9
};

// =====================================================
// FUNGSI TM1637 - START
// Memulai komunikasi dengan modul 7-segment
// =====================================================
void tmStart() {
  // DIO digunakan sebagai output
  pinMode(DIO, OUTPUT);
  // Kondisi awal komunikasi
  digitalWrite(DIO, HIGH);
  digitalWrite(CLK, HIGH);
  // Membuat kondisi START
  digitalWrite(DIO, LOW);
  digitalWrite(CLK, LOW);
}

// =====================================================
// FUNGSI TM1637 - STOP
// Mengakhiri komunikasi dengan modul 7-segment
// =====================================================
void tmStop() {
  // DIO sebagai output
  pinMode(DIO, OUTPUT);
  // Membuat kondisi STOP
  digitalWrite(DIO, LOW);
  digitalWrite(CLK, HIGH);
  digitalWrite(DIO, HIGH);
}

// =====================================================
// FUNGSI TM1637 - WRITE BYTE
// Mengirimkan 1 byte data ke display
// =====================================================
void tmWriteByte(byte data) {
  // Data dikirim sebanyak 8 bit
  for (int i = 0; i < 8; i++) {
    // CLK dibuat LOW sebelum mengirim bit
    digitalWrite(CLK, LOW);
    // Mengirim bit paling rendah terlebih dahulu
    digitalWrite(DIO, data & 0x01);
    // Geser data 1 bit ke kanan
    data >>= 1;
    // CLK HIGH menandakan bit sedang dikirim
    digitalWrite(CLK, HIGH);
  }

  // Setelah 8 bit dikirim, TM1637 memberikan sinyal ACK
  digitalWrite(CLK, LOW);
  // DIO sementara diubah menjadi input
  pinMode(DIO, INPUT);
  // Membaca ACK dari display
  digitalWrite(CLK, HIGH);
  delayMicroseconds(5);
  digitalWrite(CLK, LOW);
  // Kembalikan DIO menjadi output
  pinMode(DIO, OUTPUT);
}

// =====================================================
// FUNGSI DISPLAY NUMBER
// Menampilkan angka 0-1023 pada 4 digit 7-segment
// =====================================================
void displayNumber(int number) {
  // Array untuk menyimpan kode 4 digit
  byte digits[4];
  // Mengambil masing-masing digit dari angka
  // Digit ribuan
  digits[0] = digitCode[(number / 1000) % 10];
  // Digit ratusan
  digits[1] = digitCode[(number / 100) % 10];
  // Digit puluhan
  digits[2] = digitCode[(number / 10) % 10];
  // Digit satuan
  digits[3] = digitCode[number % 10];

  // -------------------------------------------------
  // DATA COMMAND
  // Memberitahu TM1637 bahwa kita akan mengirim data
  // -------------------------------------------------
  tmStart();
  tmWriteByte(0x40);
  tmStop();

  // -------------------------------------------------
  // ADDRESS COMMAND
  // Menentukan posisi awal data display
  // -------------------------------------------------
  tmStart();
  tmWriteByte(0xC0);
  // Kirim data untuk 4 digit display
  for (int i = 0; i < 4; i++) {
    tmWriteByte(digits[i]);
  }
  tmStop();

  // -------------------------------------------------
  // DISPLAY CONTROL
  // Menyalakan display dan mengatur brightness
  // Nilai 7 = brightness maksimum
  // -------------------------------------------------
  tmStart();
  tmWriteByte(0x88 | 7);
  tmStop();
}

// =====================================================
// SETUP
// Dijalankan satu kali ketika Arduino dinyalakan
// =====================================================
void setup() {
  // Memulai komunikasi dengan Serial Monitor
  // menggunakan baud rate 9600
  Serial.begin(9600);
  // LED sebagai output
  pinMode(LED_PIN, OUTPUT);
  // Pin CLK sebagai output
  pinMode(CLK, OUTPUT);
  // Pin DIO sebagai output
  pinMode(DIO, OUTPUT);
  // Saat pertama kali menyala,
  // tampilkan angka 0 pada 7-segment
  displayNumber(0);
}

// =====================================================
// LOOP
// Program dijalankan berulang-ulang
// =====================================================
void loop() {
  // -------------------------------------------------
  // 1. MEMBACA INPUT ANALOG
  // Arduino membaca nilai dari potensiometer
  // ADC Arduino Uno memiliki resolusi 10-bit,
  // sehingga nilai yang dihasilkan adalah 0-1023.
  // -------------------------------------------------
  int adcValue = analogRead(POT_PIN);

  // -------------------------------------------------
  // 2. KONVERSI NILAI ADC KE PWM
  // ADC 0-1023 diubah menjadi PWM 0-255.
  // Nilai ini digunakan untuk mengatur
  // tingkat kecerahan LED.
  // -------------------------------------------------
  int brightness = map(adcValue, 0, 1023, 0, 255);

  // -------------------------------------------------
  // 3. MENGATUR KECERAHAN LED
  // analogWrite menggunakan nilai PWM 0-255.
  // 0 = LED mati
  // 255 = LED paling terang
  // -------------------------------------------------
  analogWrite(LED_PIN, brightness);

  // -------------------------------------------------
  // 4. MENAMPILKAN NILAI ADC
  // Nilai ADC 0-1023 ditampilkan pada
  // 4-digit 7-segment.
  // -------------------------------------------------
  displayNumber(adcValue);

  // -------------------------------------------------
  // 5. MENAMPILKAN DATA DI SERIAL MONITOR
  // Nilai brightness dikonversi lagi menjadi
  // persentase 0-100%.
  // -------------------------------------------------
  Serial.print("ADC: ");
  Serial.print(adcValue);
  Serial.print(" | Brightness: ");
  Serial.print(
    map(adcValue, 0, 1023, 0, 100)
  );
  Serial.println("%");

  // -------------------------------------------------
  // Delay 100 ms agar pembacaan tidak terlalu cepat
  // -------------------------------------------------
  delay(100);
}
BAB IV
PENUTUP
4.1 Kesimpulan

Berdasarkan perancangan, pembuatan program, dan pengujian simulasi sistem Smart LED Controller berbasis Arduino Uno yang telah dilakukan, dapat disimpulkan bahwa sistem dapat bekerja secara optimal dalam mengolah sinyal analog menjadi keluaran digital maupun variabel PWM. Seluruh komponen utama, seperti potensiometer, LED, dan display 7-segment, terintegrasi dengan baik melalui logika program yang diterapkan. Secara rinci, kesimpulan dari praktikum ini adalah sebagai berikut:

  1. Pembacaan nilai analog potensiometer menggunakan ADC 10-bit pada Arduino Uno berhasil diimplementasikan pada pin A0 dan menghasilkan rentang nilai digital $0-1023$.
  2. Pengubahan nilai ADC menjadi nilai PWM ($0-255$) menggunakan fungsi map() berhasil mengatur tingkat kecerahan LED secara proporsional.
  3. Nilai ADC berhasil ditampilkan secara langsung (real-time) pada display 4-digit 7-segment berbasis driver TM1637 melalui komunikasi serial bit-banging.
  4. Simulasi rangkaian yang dirancang pada platform Wokwi berjalan dengan baik dan sesuai dengan rancangan sistem.
4.2 Saran

Untuk pengembangan dan peningkatan kualitas sistem Smart LED Controller pada praktikum atau penelitian selanjutnya, terdapat beberapa hal yang dapat direkomendasikan. Saran-saran ini bertujuan untuk mempermudah penulisan program serta meningkatkan fungsionalitas alat agar lebih aplikatif di kehidupan nyata:

  1. Penggunaan modul 7-segment TM1637 pada pengembangan selanjutnya dapat memanfaatkan library eksternal (misal ) untuk menyederhanakan penulisan kode program.
  2. Sistem dapat dikembangkan lebih lanjut dengan menambahkan sensor otomatis, seperti LDR (sensor cahaya), agar kecerahan LED dapat menyesuaikan kondisi pencahayaan ruangan secara otomatis.
BAB V
DAFTAR PUSTAKA

Banzi, M., & Shiloh, M. (2014). Getting Started with Arduino: The Open Source Electronics Prototyping Platform (3rd ed.). Maker Media, Inc.

Monk, S. (2016). Programming Arduino: Getting Started with Sketches (2nd ed.). McGraw-Hill Education.

Titan Micro Electronics. (2011). TM1637 LED Drive Control Special Circuit Datasheet (Rev. 1.0). Titan Micro Electronics.

Wokwi. (2026). Wokwi Simulation Features and Documentation. Diakses dari https://docs.wokwi.com/

BAB VI
LAMPIRAN
Link Video:

https://drive.google.com/drive/folders/1eAsC6eeqvtllnme-lRmHzXwRXi8NeIe3

Tidak ada komentar:

Posting Komentar