Membaca nilai analog dari potensiometer dan mengontrol kecerahan LED menggunakan PWM.
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.
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).
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!
Untuk menggunakan PWM, kita menggunakan fungsi analogWrite(pin, nilai). Nilainya berkisar dari 0 (mati total) hingga 255 (menyala penuh).
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.
map(nilai, batasBawahAsli, batasAtasAsli, batasBawahTujuan, batasAtasTujuan);int nilaiPWM = map(nilaiPot, 0, 1023, 0, 255);Mari kita gabungkan semuanya dalam satu project praktis: Dimmer Lampu LED!
Solusi:Periksa sambungan kabel potensiometer. Pastikan pin kiri ke GND, pin kanan ke 5V (atau sebaliknya), dan pin tengah ke A0.
Solusi:Pastikan LED terhubung ke pin PWM (pin 9). Jika Anda menggunakan pin seperti pin 8 (tanpa tanda ~), analogWrite() tidak akan bekerja dengan benar.
Ubah kode program dimmer di atas sehingga memiliki fitur berikut:
Luangkan 2–3 menit untuk menjawab pertanyaan di bawah secara jujur.
Apa yang paling mengejutkan atau menarik hari ini?
Bagian mana dari konsep PWM yang menurutmu paling menarik atau mengejutkan?
Apa yang masih membingungkan atau ingin kamu pahami lebih dalam?
Apakah fungsi map() sudah cukup jelas bagi kamu, atau masih terasa membingungkan?
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.