Skip to main content

Percobaan Display dan PWM

Section 1

Display OLED 

Sketch, mencoba display OLED 128 x 64 (I2C) yang diambil dari contoh program di Arduino IDE (File > Examples > Adafruit SSD1306):

#include <Wire.h>

Pulse Width Modulation (PWM)

PWM singkatan dari Pulse Width Modulation (Modulasi Lebar Pulsa). Ini adalah teknik modulasi sinyal yang digunakan untuk mengendalikan daya atau besaran sinyal lain dengan cara mengubah lebar pulsa sinyal digital.

Cara kerja PWM:

  1. Sinyal digital: PWM menggunakan sinyal digital dengan dua level tegangan, biasanya 0V dan 5V.
  2. Lebar pulsa: Sinyal digital diubah menjadi serangkaian pulsa dengan lebar yang bervariasi.
  3. Duty cycle: Lebar pulsa dibandingkan dengan periode pulsa, disebut sebagai duty cycle. Duty cycle diukur dalam persen, dengan 0% berarti sinyal mati dan 100% berarti sinyal menyala terus menerus.
  4. Pengendalian daya/besaran: Duty cycle menentukan besarnya daya atau besaran sinyal yang dihasilkan. Semakin tinggi duty cycle, semakin besar daya atau besaran sinyal yang dihasilkan.

Aplikasi PWM:

  • Pengendalian motor: PWM digunakan untuk mengendalikan kecepatan motor DC dengan cara mengubah tegangan yang diberikan ke motor.
  • Pengendalian lampu: PWM digunakan untuk mengendalikan kecerahan lampu LED dengan cara mengubah duty cycle sinyal yang diberikan ke LED.
  • Konverter DC-AC: PWM digunakan untuk mengubah tegangan DC menjadi tegangan AC dengan cara menghasilkan gelombang pulsa dengan duty cycle yang bervariasi.
  • Komunikasi digital: PWM dapat digunakan untuk mentransmisikan data digital dengan cara mengubah lebar pulsa untuk mewakili bit data.

Kita akan membuat rangkaian PWM sederhana untuk mengatur LED terang redup secara terus menerus berdasarkan duty cycle nya. Berikut adalah kode sketch yang kita gunakan (sumber: ):

const int ledPin = 16;  


const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
 
void setup(){
  ledcSetup(ledChannel, freq, resolution);
  ledcAttachPin(ledPin, ledChannel);
}
 
void loop(){
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    ledcWrite(ledChannel, dutyCycle);
    delay(15);
  }

  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    ledcWrite(ledChannel, dutyCycle);   
    delay(15);
  }
}