Interaksi Input-Output

Membaca nilai analog dari potensiometer dan mengontrol kecerahan LED menggunakan PWM.

90 Menit
Modul 5: Pemrograman Arduino Dasar
Pertemuan 12

TPTujuan Pembelajaran

  1. Peserta didik dapat membaca nilai analog dari potensiometer menggunakan analogRead()
  2. Peserta didik dapat mengontrol kecerahan LED menggunakan analogWrite() (PWM)
  3. Peserta didik dapat memetakan nilai sensor (0-1023) ke rentang output yang diinginkan menggunakan map()
  4. Peserta didik dapat membangun project dimmer LED yang dikontrol potensiometer

Analog vs Digital: Bukan Hanya ON dan OFF

Sebelumnya kita sudah belajar tentang sinyal Digital yang hanya memiliki dua status: HIGH (nyala) atau LOW (mati). Tapi dunia nyata tidak hanya hitam dan putih!

Cahaya matahari tidak langsung terang benderang lalu tiba-tiba gelap gulita; ada proses matahari terbit dan terbenam (gradasi). Suara musik juga bisa bervariasi dari pelan hingga sangat keras. Nah, sinyal yang memiliki nilai bervariasi (tidak hanya dua kondisi ekstrem) disebut sinyal Analog.

analogRead(): Mendengar Dunia Analog

Mikrokontroler pada Arduino secara internal hanya memahami bahasa digital (0 dan 1). Lalu bagaimana Arduino memahami sinyal analog dari sensor? Jawabannya ada pada komponen yang disebut ADC (Analog-to-Digital Converter).

Arduino Uno memiliki ADC 10-bit. Artinya, Arduino dapat memecah tegangan 0-5V dari sensor analog menjadi 210 (atau 1024) tingkatan nilai diskrit, dari 0 hingga 1023.

Komponen analog yang paling sering kita gunakan untuk belajar adalah Potensiometer (resistor variabel). Seperti tombol volume pada radio kuno, kita bisa memutarnya untuk mengubah nilai tegangan yang masuk ke pin analog Arduino (A0-A5).

PWM & analogWrite(): Menipu Mata dengan Kecepatan

Arduino bisa membaca sinyal analog. Tapi apakah Arduino bisa mengeluarkan sinyal analog murni? Sayangnya, pin output digital Arduino hanya bisa mengeluarkan 0V (LOW) atau 5V (HIGH).

Namun, Arduino punya trik cerdas yang disebut PWM (Pulse Width Modulation). Dengan PWM, Arduino menyalakan dan mematikan pin digital dengan sangat cepat (ratusan kali per detik). Mata kita tidak bisa menangkap kedipan yang sangat cepat itu, sehingga yang terlihat hanyalah ilusi cahaya yang meredup!

Ilustrasi Duty Cycle pada sinyal PWM

Untuk menggunakan PWM, kita menggunakan fungsi analogWrite(pin, nilai). Nilainya berkisar dari 0 (mati total) hingga 255 (menyala penuh).

Fungsi map(): Penerjemah Universal

Sekarang kita punya tantangan: kita membaca potensiometer (nilainya 0-1023), dan kita ingin mengontrol kecerahan LED (butuh nilai 0-255). Skalanya berbeda!

Kita bisa menggunakan matematika (membagi nilai potensiometer dengan 4), tetapi Arduino menyediakan fungsi map() yang sangat praktis. Fungsi ini bekerja seperti penerjemah yang mengubah nilai dari satu rentang skala ke rentang skala lainnya.

Project: LED Dimmer dengan Potensiometer

Mari kita gabungkan semuanya dalam satu project praktis: Dimmer Lampu LED!

led_dimmer.ino
cpp
const int POT_PIN = A0;  // Pin analog potensiometer
const int LED_PIN = 9;   // Pin PWM (tanda ~)

void setup() {
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600);
  Serial.println("LED Dimmer siap - putar potensiometer!");
}

void loop() {
  // Baca nilai potensiometer (0 - 1023)
  int nilaiPot = analogRead(POT_PIN);
  
  // Konversi ke rentang PWM (0 - 255)
  int nilaiPWM = map(nilaiPot, 0, 1023, 0, 255);
  
  // Atur kecerahan LED
  analogWrite(LED_PIN, nilaiPWM);
  
  // Debug ke Serial Monitor
  Serial.print("Pot: ");
  Serial.print(nilaiPot);
  Serial.print(" | PWM: ");
  Serial.println(nilaiPWM);
  
  delay(100); // Update 10x per detik
}
Serial Monitor Output
LED Dimmer siap - putar potensiometer! Pot: 0 | PWM: 0 Pot: 120 | PWM: 29 Pot: 512 | PWM: 127 Pot: 840 | PWM: 209 Pot: 1023 | PWM: 255

Troubleshooting

Masalah:Saat diputar, nilai di Serial Monitor terlihat acak dan tidak stabil.

Solusi:Periksa sambungan kabel potensiometer. Pastikan pin kiri ke GND, pin kanan ke 5V (atau sebaliknya), dan pin tengah ke A0.


Masalah:LED hanya mati atau langsung menyala terang penuh, tidak meredup halus.

Solusi:Pastikan LED terhubung ke pin PWM (pin 9). Jika Anda menggunakan pin seperti pin 8 (tanpa tanda ~), analogWrite() tidak akan bekerja dengan benar.

Cek Pemahaman

Jika sebuah potensiometer diatur persis di tengah putarannya, berapakah perkiraan nilai yang akan dihasilkan oleh perintah analogRead() pada Arduino Uno?

Mudah

Pin Arduino mana di bawah ini yang TIDAK BISA digunakan untuk mengontrol kecerahan LED menggunakan perintah analogWrite()?

Sedang

Latihan Praktik

Multi-Brightness LED

Ubah kode program dimmer di atas sehingga memiliki fitur berikut:

  1. Tambahkan sebuah LED kuning pada pin 10 (PWM) dan LED hijau pada pin 11 (PWM).
  2. Gunakan satu potensiometer yang sama di pin A0.
  3. Saat potensiometer diputar, LED merah (pin 9) semakin redup, sementara LED hijau (pin 11) justru semakin terang secara bersamaan. (Petunjuk: ubah parameter fungsi map).
Kesimpulan Pertemuan 12
  • Sinyal Analog: Memiliki rentang nilai kontinu, bukan hanya ON/OFF.
  • analogRead(): Membaca tegangan analog dan mengubahnya menjadi nilai digital 0 - 1023 (10-bit).
  • PWM (analogWrite): Membuat ilusi tegangan analog dengan menyalakan dan mematikan sinyal digital sangat cepat. Rentang nilainya 0 - 255.
  • Fungsi map(): Mengonversi nilai dari satu rentang skala ke rentang lainnya secara proporsional.

RRefleksi Belajar

Luangkan 2–3 menit untuk menjawab pertanyaan di bawah secara jujur.

Kejutan & Penemuan

Apa yang paling mengejutkan atau menarik hari ini?

Bagian mana dari konsep PWM yang menurutmu paling menarik atau mengejutkan?

Masih Membingungkan

Apa yang masih membingungkan atau ingin kamu pahami lebih dalam?

Apakah fungsi map() sudah cukup jelas bagi kamu, atau masih terasa membingungkan?

Rencana Selanjutnya

Apa yang ingin kamu coba atau pelajari minggu depan?

Sebutkan satu benda di rumahmu yang menurutmu menggunakan prinsip potensiometer atau dimmer LED!

Refleksi tidak dinilai — ini adalah ruang jujurmu untuk berpikir.