Skip to main content

Percobaan Display dan PWM

Display OLED 

Pada percobaan kali ini kita akan mencoba menampilkan informasi ESP32 dengan sebuah display. Display yang akan kita gunakan adalah OLED (organic light-emiting diode) yaitu jenis teknologi tampilan layar yang menggunakan bahan organik sebagai unsur pemancar cahaya. Komponen yang akan kita gunakan adalah sebagaimana ditampilkan dalam tabel berikut.

ESP 32 OLED
GPIO 22 SCL
GPIO 21 SDA
GND GND
3V3 3V3

ESP-32 kita hubungkan dengan OLED melalui protokol komunikasi I2C, seperti skema berikut.

Rangkaian Sederhana_bb.png

Sebelum kita dapat menggunakan OLED, kita harus mendownload beberapa library yang akan kita gunakan sebagai driver menampilan informasi/ output dari ESP32. Library yang harus kita unduh adalah Adafruit_SSD1306 dan Adafruit_GFX

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.

Dengan ESP 32 kita dapat membuat generator PWM dengan langkah-langkah sebagai berikut:

  1. Pertama, kita harus memilih kanal PWM, dimana kanal ini dapat diatur dari 0 sampai dengan 15.
  2. Kita mengatur frekuensi sinyal dari PWM. Pada percobaan kali ini kita akan menyalakan LED sehingga dengan frekuensi 5000 Hz akan cukup.
  3. Kita dapat mengatur resolusi duty-cycle, ESP 32 memilik resolusi 1 sampai 16 bits. Pada percobaan ini kita akan menggunakan resolusi 8-bits, sehingga kecerahan LED dapat kita ekspresikan dalam kemungkinan 28 = 255. 

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

Rangkaian PWM_bb.png

Kode program

const int ledPin = 18;  
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);
  }
}

Penjelasan. skettch program diatas

  • ledPin = 18: Mendefinisikan pin GPIO nomor 18 sebagai pin yang terhubung ke LED.
  • freq = 5000: Mengatur frekuensi PWM menjadi 5000 Hz (5 kHz).
  • ledChannel = 0: Menentukan kanal PWM yang akan digunakan (umumnya papan microcontroller memiliki beberapa kanal PWM).
  • resolution = 8: Mengatur resolusi PWM menjadi 8-bit, artinya nilai duty cycle berkisar antara 0 - 255 (2^8).

Fungsi setup():

  • ledcSetup(ledChannel, freq, resolution): Mengonfigurasi kanal PWM yang ditentukan (ledChannel) dengan frekuensi (freq) dan resolusi (resolution) yang telah didefinisikan.
  • ledcAttachPin(ledPin, ledChannel): Menghubungkan ledPin dengan kanal PWM yang telah dikonfigurasi.

Fungsi loop():

  • Loop Pertama:

    • for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++): Loop yang akan berjalan dari nilai dutyCycle 0 hingga 255 (meningkat).
    • ledcWrite(ledChannel, dutyCycle): Mengatur tingkat kecerahan LED pada kanal PWM yang dipilih. dutyCycle menentukan seberapa lama sinyal PWM dalam kondisi aktif (HIGH) dalam satu siklus.
    • delay(15): Memberikan jeda 15 milidetik pada setiap iterasi.
  • Loop Kedua:

    • for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--): Loop yang akan berjalan dari nilai dutyCycle 255 hingga 0 (menurun).
    • ledcWrite(ledChannel, dutyCycle): Sama seperti loop sebelumnya, mengatur tingkat kecerahan LED.
    • delay(15): Memberikan jeda 15 milidetik pada setiap iterasi.