Tutorial PWM pada Arduino

posted in: Belajar Dasar | 1

Seperti yang sudah dijelaskan di artikel sebelumnya, efek keluaran gelombang analog pada Arduino dapat dicapai menggunakan teknik PWM pada gelombang digital. Teknik PWM ini dilakukan dengan mengontrol gelombang digital menjadi ON/OFF secara bergantian dalam satu periode gelombang. Perbandingan waktu antara saat gelombang ON dengan waktu gelombang dalam satu periode inilah yang disebut dengan duty cycle. Agar lebih jelas, mari kita lihat ilustrasi berikut.

Dari gambar di atas, terlihat ilustrasi bagaimana duty cycle diubah-ubah pada tiap gelombang. Syntax analogWrite(0) akan menghasilkan duty cycle 0%, sementara analogWrite(255) akan menghasilkan duty cycle 100%. Rentang PWM 0 hingga 255 akan menghasilkan duty cycle dari 0% hingga 100%. Adapun rentang 0 hingga 255 ini adalah PWM pada Arduino Uno yang hanya memiliki resolusi 8-bit saja (8 bit = 2 dipangkatkan 8 = 256), sehingga apabila kamu menggunakan Arduino versi lain, kamu perlu mengetahui resolusi PWM-nya agar tahu batas maksimum dan minimum.

Let’s try!

Pada percobaan ini, kamu membutuhkan sebuah LED dan sebuah resistor 330 ohm. Hubungkan kaki negatif LED ke GND dan kaki positif LED dihubungkan dengan resistor, kemudian ujung resistor satunya dihubungkan ke pin PWM arduino yang bertanda (~). Mudahnya, lihat ilustrasi skematik berikut ini:

Kalau rangkaian kamu udah sesuai, langsung aja coba program berikut, kuy!

int ledPin = 9;    // LED di pin 9

void setup() {
}

void loop() {
   analogWrite(ledPin, 255); // LED nyala sempurna
   delay(3000);
   analogWrite(ledPin, 128); //LED setengah redup
   delay(3000);
   analogWrite(ledPin, 0); //LED mati
   delay(3000);
}

Ketika kamu menjalankan program di atas, kamu bisa tahu perbedaan intensitas cahaya LED yang dihasilkan oleh PWM dengan duty cycle yang berbeda-beda.
Lalu coba lagi kode program yang ini:

int ledPin = 9;    // LED di pin 9

void setup() {
}
void loop() {
   for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5)
   {
      analogWrite(ledPin, fadeValue);
      delay(30);
   }
   for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5)
   {
      analogWrite(ledPin, fadeValue);
      delay(30);
   }
}

Sederhana bukan?

One Response

  1. yudi surya naibaho

    apa ya maksud dari program kedua ? yang FadeValue …. please minta penjelasannya

Leave a Reply