Thursday, March 22, 2018

PWM Pada Arduino





  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.

     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:

Rangkailah komponen seperti gambar diatas dan langsung aja coba program dibawah ini:
1
2
3
4
5
6
7
8
9
10
11
12
13
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 menjalankan program di atas, kamu bisa tahu perbedaan intensitas cahaya LED yang dihasilkan oleh PWM dengan duty cycle yang berbeda-beda.
Dan kemudian coba lagi kode program yang ini:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
   }
}

No comments: