Analog Output pada Arduino Menggunakan PWM (Pulse Width Modulation)

Toni Haryanto 14 Januari 2016

Analog Output pada Arduino Menggunakan PWM (Pulse Width Modulation)

Pada tutorial ini kita akan membahas tentang analog output pada Arduino. Bila Kamu masih bingung dengan konsep input-output dan digital-analog pada Arduino, silakan baca dulu tutorial yang berjudul Digital Input Output pada Arduino dan Analog Input pada Arduino.

Kita dapat mengirimkan sinyal HIGH dan LOW atau on dan off pada Arduino untuk menyalakan dan mematikan sesuatu menggunakan digitalWrite(). Bagaimana kalo kita ingin mengaktifkan sesuatu dengan kekuatan tertentu dan bisa diubah-ubah sesuai keperluan, seperti misalnya mengatur intensitas cahaya LED atau mengatur kecepatan putaran motor? Dalam hal ini kita punya analog output. Analog output pada Arduino berarti kita mengirimkan sinyal analog dengan intensitas yang ditentukan sesuai kebutuhan.

Analog input dihasilkan oleh teknik yang dikenal dengan istilah PWM atau Pulse Width Modulation. PWM memanipulasi keluaran digital sedemikian rupa sehingga menghasilkan sinyal analog. Mikrokontroler mengeset output digital ke HIGH dan LOW bergantian dengan porsi waktu tertentu untuk setiap nilai keluarannya. Durasi waktu untuk nilai HIGH disebut pulse width atau panjang pulsa. Variasi nilai output analog didapatkan dari perubahan panjang pulsa yang diberikan pada satu periode waktu dan dilakukan berulang-ulang. Untuk lebih jelasnya perhatikan ilustrasi berikut:

[caption id="" align="alignnone" width="400"] sumber: Arduino.cc[/caption]

Kondisi HIGH adalah kondisi ketika sinyal berada di atas grafik (5V) dan LOW adalah ketika sinyal berada di bawah (0V). Duty cycle adalah persentasi panjang pulsa HIGH dalam satu periode sinyal. Ketika duty cyclenya 0% atau sinyal LOW penuh, maka nilai analog yang dikeluarkan adalah 0V atau setara dengan GND. Ketika duty cyclenya 100% atau sinyal HIGH penuh maka sinyal yang dikeluarkan adalaah 5V.

Untuk mengatur nilai duty cycle, kita gunakan fungsi analogWrite([nomorPin], [nilai]). Nilai pada parameter kedia berkisar antara 0 hingga 255. Bila kita hendak mengeset duty cycle ke 0%, maka kita set nilai parameter ke 0, dan untuk duty cycle 100%, maka kita set nilai parameter ke 255. Jadi bila misalkan kita hendak mengeset duty cycle ke 50%, berarti nilai yang harus kita set adalah 127 (50% x 255).

Sebenarnya berdasarkan konsep PWM di atas, kita dapat mensimulasikan PWM pada semua pin digital. Tapi khusus penggunaan fungsi digitalWrite() kita hanya bisa menggunakannya pada pin-pin PWM. Seperti pada Arduino Uno, pin yang dapat menggunakan fungsi ini hanya pin 3, 5, 6, 9, 10 dan 11. Biasanya pin PWM disimbolkan dengan karakter '~'.

Demikian sekilas tentang teori PWM. Supaya lebih paham tentang analog output, kita coba implementasikan ke dalam rangkaian.

Bahan-bahan yang diperlukan untuk percobaan berikut diantaranya;

  • Arduino Uno board
  • Breadboard
  • kabel jumper
  • LED
  • Resistor 220 ohm
Buat rangkaian seperti pada gambar di bawah ini: arduino-analog-write-led

Pada rangkaian di atas, kita menghubungkan pin 3 ke kaki anoda (positif) LED dengan melalui resistor 220 ohm dan menghubungkan kaki yang lain ke GND. Alih-alih menyalakan dan mematikan LED menggunakan digitalWrite() seperti pada artike Digital Input Output, kita akan menyalakan LED dengan intensitas yang terus naik hingga titik maksimum dan kemudian menurunkan intensitasnya terus hingga mati. Demikian seterusnya. Berikut adalah kode programnya:

int pinLed = 3; // LED terhubung dengan pin 3

void setup(){}

void loop() {
   // buat iterasi dari 0 sampai 255 dengan kelipatan 5
   for (int nilai = 0; nilai <= 255; nilai += 5) {
      // set nilai analog menggunakan iterasi di atas
      analogWrite(pinLed, nilai);
      // beri jeda waktu 3 milidetik biar ga terlalu cepat
      delay(30);
   }

   // buat iterasi mundur dari 255 ke 0 dengan kelipatan 5
   for (int nilai = 255; nilai >= 0; nilai -= 5) {
      // set nilai analog menggunakan iterasi di atas
      analogWrite(pinLed, nilai);
      // beri jeda waktu 3 milidetik
      delay(30);
   }
}

Upload program. Bila program berhasil diupload, Kamu akan melihat LED menyala perlahan dari redup ke terang lalu kemudian meredup hingga mati. Begitu seterusnya.