Pertemuan 3
Output Digital & PWM - LED, Buzzer & Kecerahan
Tujuan Pembelajaran
- Memahami cara mengendalikan LED dan buzzer sebagai output digital.
- Mampu membuat pola nyala LED dan bunyi buzzer sederhana.
- Memahami fungsi resistor pembatas arus pada LED.
- Memahami konsep PWM (Pulse Width Modulation) untuk mengatur kecerahan LED dan variasi nada buzzer.
Penjelasan Konsep
LED (Light Emitting Diode)
LED hanya menyala jika arus mengalir searah (dari anoda ke katoda). LED butuh resistor pembatas arus (umumnya 220Ω–330Ω) agar tidak menerima arus berlebih yang bisa merusaknya.
Buzzer aktif vs pasif
- Buzzer aktif (yang ada di daftar alat kelas) - cukup diberi tegangan HIGH/LOW, sudah otomatis bunyi dengan nada tetap. Paling mudah dipakai untuk alarm sederhana.
- Buzzer pasif - perlu sinyal frekuensi (menggunakan fungsi
tone()) untuk menghasilkan bunyi dengan nada yang bisa diatur-atur.
Kombinasi output
LED dan buzzer sering dipakai bersamaan sebagai indikator, misalnya alarm: LED menyala berkedip + buzzer berbunyi saat kondisi tertentu terpenuhi. Pola ini akan sering dipakai lagi saat menggabungkan dengan sensor di pertemuan-pertemuan berikutnya.
Apa itu PWM?
Mikrokontroler sebenarnya tidak bisa mengeluarkan tegangan analog asli - yang bisa dilakukan adalah menyalakan-matikan pin digital dengan sangat cepat sehingga terlihat/terasa seperti nilai analog. Teknik ini disebut PWM (Pulse Width Modulation).
Duty cycle
PWM bekerja dengan mengatur duty cycle - persentase waktu sinyal berada di HIGH dalam satu periode. Duty cycle 100% = selalu HIGH (nyala penuh), 0% = selalu LOW (mati), 50% = separuh waktu HIGH separuh LOW (terlihat setengah terang).
Fungsi analogWrite()
Pada Arduino Uno, gunakan analogWrite(pin, nilai) dengan nilai 0–255 pada pin yang mendukung PWM (ditandai simbol "~"). Pada ESP32, versi core terbaru juga mendukung analogWrite() langsung dengan cara yang sama. Prinsip PWM/sinyal frekuensi ini juga dipakai untuk mengendalikan servo motor di pertemuan mendatang.
Kesalahan umum
- Memasang LED tanpa resistor - arus yang mengalir tidak terbatas, LED bisa langsung putus atau berumur sangat pendek.
- Memakai
analogWrite()di pin yang tidak mendukung PWM - pada Arduino Uno hanya pin bertanda "~" (mis. 3, 5, 6, 9, 10, 11) yang bisa menghasilkan PWM; pin lain akan diperlakukan sebagai HIGH/LOW biasa, bukan error tapi hasilnya tidak sesuai harapan. - Memberi nilai di luar rentang 0–255 ke
analogWrite()- nilai akan "terpotong"/berperilaku tidak konsisten tergantung core yang dipakai. - Mengira buzzer aktif bisa mengeluarkan banyak nada - buzzer aktif hanya bisa ON/OFF dengan nada tetap; untuk nada bervariasi, dibutuhkan buzzer pasif dan fungsi
tone(). - LED terpasang terbalik - LED tidak akan menyala sama sekali (aman, tidak merusak apa pun), tinggal balik posisi anoda/katoda.
Komponen yang Dibutuhkan
- 1x Arduino Uno atau ESP32
- 2x LED (warna bebas)
- 1x Buzzer aktif
- 2x Resistor 220Ω
- 1x Potensiometer (untuk kontrol kecerahan via PWM)
- Breadboard, kabel jumper
Diagram / Skema Pengkabelan
LED 1:
Anoda -> resistor 220Ω -> pin D6
Katoda -> GND
LED 2:
Anoda -> resistor 220Ω -> pin D7
Katoda -> GND
Buzzer aktif:
Pin (+) -> pin D9
Pin (-) -> GND
LED PWM (untuk latihan kecerahan):
Anoda -> resistor 220Ω -> pin PWM (mis. D10 pada Arduino Uno)
Katoda -> GND
Potensiometer kontrol:
Kaki 1 -> GND, Kaki 2 (wiper) -> A0, Kaki 3 -> 5V
Peringatan: pastikan resistor selalu terpasang seri dengan LED. Tanpa resistor, arus yang terlalu besar bisa memperpendek umur LED atau membuatnya putus.
Contoh Kode Program
// Pola LED berjalan + buzzer aktif sebagai alarm sederhana
// + mengatur kecerahan LED memakai potensiometer via PWM
const int led1 = 6;
const int led2 = 7;
const int buzzer = 9;
const int pinPot = A0;
const int ledPwm = 10; // pin PWM
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(ledPwm, OUTPUT);
}
void loop() {
// LED berjalan bergantian
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
delay(300);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(300);
// Buzzer aktif berbunyi singkat
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(300);
// Kecerahan LED PWM mengikuti potensiometer
int nilaiPot = analogRead(pinPot); // 0-1023
int nilaiPwm = map(nilaiPot, 0, 1023, 0, 255); // konversi ke rentang PWM
analogWrite(ledPwm, nilaiPwm);
delay(20);
}Tugas / Latihan
- Buat pola kedip LED yang meniru lampu sein mobil (kedip lambat, berhenti sejenak, ulangi).
- Buat "alarm" yang menyalakan kedua LED berkedip cepat + buzzer berbunyi terus-menerus selama 3 detik, lalu berhenti.
- Buat efek LED "napas" (breathing effect) - kecerahan naik turun perlahan otomatis tanpa potensiometer, memakai analogWrite() dalam loop.
- (Tantangan) Gabungkan efek "napas" dengan potensiometer: gunakan nilai potensiometer untuk mengatur kecepatan naik-turunnya kecerahan (bukan kecerahannya langsung), sehingga potensiometer berfungsi seperti "kenop kecepatan napas".