PWM ESP32 dengan Arduino IDE (Analog Output)

0
95

Dalam artikel kali ini, kita akan belajar mengenai cara untuk men-generate sinyal PWM dengan ESP32 menggunakan Arduino IDE. Contohnya, kita akan membuat rangkaian sederhana untuk menyalakan LED menggunakan LED PWN controller dari ESP32. Kita juga akan belajar cara untuk mendapatkan sinyal PWM yang sama dengan GPIO yang berbeda dalam waktu yang bersamaan.

Untuk lanjut dengan artikel ini, kamu harus menginstall ESP32 add-on di Arduino IDE. Jika kamu belum, kamu bisa mengikuti artikel di bawah ini.

Kami juga merekomendasikan untuk melihat beberapa artikel lain di bawah ini:

Part yang dibutuhkan

Untuk mengikuti artikel ini, kamu membutuhkan alat alat di bawah ini :

Kamu dapat membeli alat tersebut di cnc store bandung yahhhh…

ESP32 LED PWM Controller

ESP32 memiliki LED PWM controller dengan 16 independen Channel yang dapat dikonfigurasikan untuk menghasilkan sinyal PWM.

Berikut adalah step step untuk menyalakan LED dengan PWM menggunakan Arduino IDE :

1. Pertama, kamu perlu untuk memilih channel PWM. Terdapat 16 channel dari 0 sampai 15.

2. Lalu, kamu perlu untuk men-set sinyal frekuensi PWM. Untuk LED, gunakan frekuensi 5000 Hz.

3. kamu juga perlu untuk men-set sinyal resolusi duty cycle : kamu bisa gunakan resolusi  dari 1 ke 16 bit. Kita akan menggunakan resolusi 8-bit, artinya kamu akan dapat mengontrol kecerahan LED menggunakan nilai 0 – 255.

4. lalu, kamu perlu untuk menentukan GPIO atau signal GPIO yang akan ditampilkan. Untuk hal tersebut kamu dapat menggunakan fungsi ini :

ledcAttachPin(GPIO, channel)

fungsi ini menerima dua argument. Pertama adalah GPIO yang akan menampilkan sinyal output, dan yang kedua adalah channel yang akan menghasilkan sinyal nya.

5. Finally, untuk mengontol kecerahan LED menggunakan PWM, kamu bisa menggunakan fungsi di bawah ini:

ledcWrite(channel, dutycycle)

fungsi ini diterima sebagai argument dari channel yang menghasilkan sinyal PWM, dan duty cycle.

Dimming LED

Mari kita lihat contoh bagaimana cara menggunakan ESP32 LED PWM Controller menggunakan Arduino IDE

Skematik

Hubungkan LED ke ESP32 sesuai dengan diagram skematik di bawah ini. LED dihubungkan ke GPIO 16.

(Skematic ini menggunakan Versi ESP32 DevKit V1 Modul dengan 30 GPIO, jika kamu menggunakan model yang lain, silahkan cek pinout board nya.)

Note: kamu bisa gunakan pin manapun sesuai yang kamu inginkan selama itu berfungsi sebagai output. Semua pin output dapat digunakan sebagai pin PWM. Untuk informasi lebih lanjut mengenai ESP32 GPIO, silahkan baca artikel kami tentang ESP32 pinout.

Code

Buka Arduino IDE dan copy kode di bawah ini.

// nilai dari pin LED
const int ledPin = 16;  // 16 mengacu ke GPIO16

// setting PWM properties
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
 
void setup(){
  // Konfigurasi fungsi LED PWM
  ledcSetup(ledChannel, freq, resolution);
  
  // hubungkan channel ke GPIO untuk bisa di kontrol
  ledcAttachPin(ledPin, ledChannel);
}
 
void loop(){
  // menaikkan nilai brightness dari LED
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    // ubah LED brightness dengan PWM
    ledcWrite(ledChannel, dutyCycle);
    delay(15);
  }

  // menurunkan LED brightness
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    // ubah LED brightness dengan PWM
    ledcWrite(ledChannel, dutyCycle);   
    delay(15);
  }
}

Kita mulai dengan menentukan Pin yang dipasangi LED. Dalam kasus ini, LED terpasang di GPIO 16.

const int ledPin = 16;  // 16 mengacu ke GPIO16

Lalu, kita set properties dari sinyal PWM. Kita tentukan frekuensi di 5000Hz, pilih channel 0 untuk meng-generate sinyal dan set resolusi ke 8 bits. Kita dapat men set nilai nilai di atas sesuai dengan yang kita inginkan.

const int freq = 5000; 
const int ledChannel = 0; 
const int resolution = 8;

dalam setup(), kita perlu untuk menentukan PWM LED dengan properties yang telah kita tentukan sebelumnya menggunakan fungsi ledcSetup() yang diterima sebagai argument, ledChannel, frequency dan resolusi menggunakan fungsi

ledcSetup(ledChannel, freq, resolution);

Selanjutnya kita perlu untuk memilih GPIO yang akan menerima sinyal. Untuk hal tersebut kita akan menggunakan fungsi ledcAttachPin()  yang berfungsi sebagai argument dari GPIO yang akan menerima dan menghasilkan sinyal. Di contoh ini, kita akan menerima sinyal di ledPin GPIO, yang mengacu ke  GPIO 16. Channel yang menghasilkan channel yaitu ledChannel, yang mengacu ke channel 0.

ledcAttachPin(ledPin, ledChannel);

di loop, kita akan melakukan variasi dari duty cycle antara 0 dan 255 untuk menaikkan kecerahan LED.

for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);
    delay(15); 
}

Untuk menurunkan kecerahan LED, kita bisa set antara 255 ke 0.

for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);
    delay(15);
 }

Untuk men set kecerahan dari LED, kita juga bisa menggunakan fungsi ledcWrite()  yang diterima sebagai argument channel yang menghasilkan sinyal dan duty cycle.

ledcWrite(ledChannel, dutyCycle);

karena kita menggunakan resolusi 8-bit, duty cycle dapat di control menggunakan nilai dari 0 sampai 255. Hal yang perlu diperhatikan di fungsi ledcWrite() , kita gunakan channel  yang menghasilkan sinyal dan bukan GPIO.

Testing the Example

Upload kode nya ke ESP32. Pastikan kita pilih board dan COM yang sesuai. Pastikan kembali rangkaian kita memiliki LED yang bisa di set kecerahannya.

Cara mendapatkan sinyal yang sama dengan menggunakan GPIO berbeda

Kita bisa mendapatkan sinyal yang sama dari channel yang sama dengan GPIO yang berbeda.

Untuk melakukannya, kita hanya butuh untuk menghubungkan GPIO itu ke channel yang sama dengan fungsi setup().

Mari kita melakukan modifikasi contoh sebelumnya menggunakan 3 LED dim menggunakan sinyal PWM yang sama dari channel yang sama.

Skematik

Tambahkan LED ke rangkaian dengan menggunakan skematik diagram di bawah ini.

(skematik ini menggunakan versi ESP32 DEVKIT V1- jika kamu menggunakan versi yang lain, tolong cek dulu pinout board nya yah..)

Kode Program

Copy kode di bawah ini ke Arduino .

// nomor pin LED yang digunakan
const int ledPin = 16;  // 16 mengacu ke GPIO16
const int ledPin2 = 17; // 17 mengacu ke GPIO17
const int ledPin3 = 5;  // 5 mengacu ke GPIO5

// setting properties PWM
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
 
void setup(){
  // konfigurasi LED PWM
  ledcSetup(ledChannel, freq, resolution);
  
  // hubungkan channel ke GPIO untuk di kontrol
  ledcAttachPin(ledPin, ledChannel);
  ledcAttachPin(ledPin2, ledChannel);
  ledcAttachPin(ledPin3, ledChannel);
}
 
void loop(){
  // menaikan kecerahan LED
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    // merubah kecerahan LED dengan PWM
    ledcWrite(ledChannel, dutyCycle);
    delay(15);
  }

  // menurunkan kecerahan LED
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    // merubah kecerahan LED dengan PWM
    ledcWrite(ledChannel, dutyCycle);   
    delay(15);
  }
}

Kode diatas merupakan kode yang sama dengan yang sebelumnya, tapi hanya ditambahkan beberapa modifikasi. Kita tentukan 2 variabel untuk 2 LED yang baru yang mengacu ke GPIO 17 dan GPIO 5.

const int ledPin2 = 17; // 17 mengacu ke GPIO17
const int ledPin3 = 5;  // 5 mengacu ke GPIO5

lalu, dalam setup(), kita tambahkan beberapa baris untuk  meng-assign kedua GPIO to channel 0. Itu artinya kita akan mendapat sinyal yang sama, yang akan dihasilkan di channel 0, di kedua GPIO tersebut

const int ledPin3 = 5;  // 5 mengacu ke GPIO5
ledcAttachPin(ledPin3, ledChannel);

Testing the Project

Upload sketch yang baru ke ESP32. Pastikan kamu memilih Board dan COM port yang sesuai dengan yang kamu gunakan. Sekarang lihat di rangkaian :

Semua GPIO mengeluarkan sinyal PWM yang sama. Jadi ketiga LED akan menaikkan dan menurunkan kecerahan nya secara bersamaan, menghasilkan efek sinkronisasi.

Kesimpulan

Kesimpulan nya, dari artikel ini kita belajar cara menggunakan LED PWM controller dari ESP32 dengan menggunakan Arduino IDE untuk merubah kecerahan LED. Konsep tersebut dapat juga digunakan untuk mengontrol perangkat lain dengan menggunakan settingan yagn tepat dari PWM.

LEAVE A REPLY

Please enter your comment!
Please enter your name here