2.3 Pulse-Width Modulation (PWM) ESP32 | Koding Indonesia

2.3 Pulse-Width Modulation (PWM) ESP32

Komponen yang diperlukan:

  • ESP32 Devkit 38 Pin (optional)
  • LED 5mm (3x)
  • Resistor 330 Ohm (3x)
  • Breadboard
  • Kabel Jumper

1. Penghantar Pulse-Width Modulation (PWM) ESP32

Pada bagian ini, kita akan membahas tentang Pulse-Width Modulation (PWM) pada ESP32. PWM adalah salah satu teknik penting dalam dunia Internet of Things (IoT) yang memungkinkan kita untuk mengontrol intensitas dari sinyal keluaran seperti LED atau kecepatan motor.

Apa itu Pulse-Width Modulation (PWM)?

Pulse-Width Modulation (PWM) adalah teknik yang digunakan untuk mengontrol kecepatan atau intensitas dari sinyal keluaran, seperti LED atau motor, dengan cara mengubah lebar pulsa sinyal. Secara sederhana, PWM bekerja dengan memberikan sinyal ON-OFF secara berkala dengan lebar pulsa yang berbeda-beda. Semakin lebar pulsa ON, semakin tinggi intensitas keluaran yang dihasilkan.

Mengapa Kita Butuh PWM pada ESP32?

PWM sangat berguna pada proyek-proyek IoT karena memungkinkan kita untuk mengatur kecepatan, intensitas, atau posisi dari berbagai perangkat seperti lampu LED, motor, servo, dan lainnya. Misalnya, kita bisa mengatur kecerahan lampu LED dengan mengubah lebar pulsa PWM, atau mengatur kecepatan motor dengan mengubah kecepatan pulsa PWM.

Menggunakan PWM pada ESP32

ESP32 memiliki dukungan hardware atau GPIO untuk PWM pada beberapa pin tertentu. Untuk menggunakan PWM, kita perlu menentukan pin yang mendukung fitur ini dan mengatur nilai lebar pulsa sesuai kebutuhan.

Pengontrol PWM ESP32 memiliki 16 channel independen yang dapat dikonfigurasikan untuk menghasilkan sinyal PWM dengan properti berbeda-beda. Supaya lebih mudah dalam mempelajari PWM, mari kita gunakan studi kasus LED Dimmer. Berikut adalah langkah-langkah yang harus Anda ikuti untuk LED Dimmer dengan PWM menggunakan Arduino IDE:

  • Pertama, Anda harus memilih channel PWM. Ada 16 channel dari 0 hingga 15 pada ESP32 (semua GPIO mendukung PWM kecuali pin GPIO 34 hingga 39).
  • Kemudian, Anda perlu mengatur frekuensi sinyal PWM. Untuk LED frekuensinya dapat diatur pada 5000 Hz.
  • Anda juga perlu mengatur sinyal resolusi duty cycle: Anda memiliki resolusi dari 1 hingga 16 bit. Kami akan menggunakan resolusi 8-bit, yang berarti Anda dapat mengontrol kecerahan LED menggunakan nilai dari 0 hingga 255.
  • Selanjutnya, Anda perlu menentukan GPIO atau GPIO mana yang akan mengeluarkan sinyal tersebut. Untuk itu, Anda akan menggunakan fungsi berikut: Fungsi ini miliki dua argumen, yang pertama adalah GPIO yang akan mengeluarkan sinyal, dan yang kedua adalah channel yang akan menghasilkan sinyal.
  • Terakhir, untuk mengontrol kecerahan LED menggunakan PWM, Anda menggunakan fungsi berikut ini: Fungsi ini berguna untuk memilih channel yang harus menghasilkan PWM dan duty cycle.

2. Contoh Penggunaan PWM pada ESP32

Mari kita lihat contoh penggunaan PWM untuk mengendalikan intensitas dari LED.

Skematik

Pertama, kita tentukan pin yang akan digunakan sebagai output LED, misalnya pin GPIO 5.

(Skematik ini menggunakan versi modul ESP32 Devkit dengan 38 GPIO – jika Anda menggunakan model lain, silakan periksa pinout untuk papan yang Anda gunakan).

Kode

Kemudian, kita atur frekuensi PWM dan tingkat kecerahan LED dengan kode berikut:

3. Penjelasan Kode

Di bagian ini, kita mendefinisikan variabel ledPin dengan nilai 5, yang menunjukkan nomor GPIO pada ESP32 yang akan digunakan untuk menghubungkan LED.

Kemudian, kita mendefinisikan beberapa variabel lain yang akan digunakan untuk mengatur properti dari Pulse-Width Modulation (PWM). Variabel freq menunjukkan frekuensi PWM, di sini kita menggunakan nilai 5000 Hz (5 kHz). Variabel ledChannel menunjukkan kanal PWM yang akan digunakan, dalam kasus ini, kita menggunakan kanal 0. Variabel resolution menunjukkan resolusi PWM, di sini kita menggunakan nilai 8-bit.

Fungsi setup() dijalankan pertama kali saat Arduino atau ESP32 dinyalakan. Di dalam fungsi ini, kita menggunakan dua fungsi dari library Pulse-Width Modulation (PWM) yang sudah tersedia di Arduino IDE.

  • Pertama, kita menggunakan ledcAttachPin(ledPin, 0) untuk menyambungkan fungsi PWM ke pin yang telah kita tentukan sebelumnya (ledPin).
  • Kedua, kita menggunakan ledcSetup(ledChannel, freq, resolution) untuk mengatur kanal PWM yang digunakan (0), frekuensi PWM (5000 Hz), dan resolusi PWM (8-bit).

Fungsi loop() akan dijalankan berulang-ulang setelah setup() selesai dieksekusi. Di dalam fungsi loop(), kita menggunakan perulangan (for) untuk mengatur kecerahan LED secara berangsur-angsur.

  • Kita mengubah nilai dutyCycle dari 0 hingga 255 menggunakan perulangan for. Nilai dutyCycle menunjukkan proporsi waktu ON dibandingkan dengan total siklus PWM. Semakin besar nilai dutyCycle, semakin tinggi intensitas LED.
  • Setiap kali nilai dutyCycle berubah, kita mengirimkan nilai tersebut ke pin LED menggunakan ledcWrite(0, dutyCycle). Ini akan mengontrol intensitas LED sesuai dengan nilai dutyCycle yang saat ini diatur.
  • Setelah mengirimkan nilai dutyCycle, kita menunggu selama 10 milidetik (ms) menggunakan delay(10) untuk memberi waktu LED merespons perubahan intensitas.
  • Kemudian ketika mencapai nilai dutyCycle maksimum (255), kita memberi waktu LED tetap menyala selama 1 detik menggunakan delay(1000), lalu siklus perulangan akan dimulai kembali dari nilai dutyCycle 0 hingga 255.

4. Mengunggah Code Ke ESP32

Sebelum menekan tombol Upload, pastikan Anda pilih Board dan Port dengan benar. Caranya, masuk ke Tools > Board lalu pilih board ESP32 yang sedang Anda gunakan. Pada kasus ini, pengaturan kami sebagai berikut:

Sekarang silahkan klik atau tekan Upload

Kemudian tunggu sampai pesan “Done Uploading” muncul.

 

5. Menguji Projek

Setelah semua koneksi dan pengaturan selesai, nyalakan ESP32 dan Anda akan melihat LED yang terhubung ke pin GPIO yang Anda pilih akan mulai menyala dan mati secara bergantian dengan efek dimmer. Jika semuanya berjalan dengan baik, itu berarti proyek PWM pada ESP32 telah berhasil diuji secara langsung.

Anda dapat melakukan pengujian tambahan dengan mengubah nilai properti PWM seperti frekuensi dan resolusi untuk melihat bagaimana pengaturan tersebut mempengaruhi kecepatan dan intensitas perubahan LED. Pastikan juga untuk mencoba menghubungkan LED ke pin GPIO lain dan mengubah kode program sesuai dengan pin yang baru digunakan untuk menguji lebih banyak LED secara bersamaan. Berikut contoh lain dari penggunaan PWM di lebih dari 1 GPIO:

dan ini kodenya:

Selamat mencoba dan eksplorasi lebih lanjut untuk mengembangkan proyek Anda dengan ESP32 dan PWM!

references: randomnerdtutorials.com arduino.cc microcontrollerslab.com circuito.io ahonerd.com instructables.com mischianti.org simple-circuit.com how2electronics.com

Anton Prafanto
Anton Prafanto
Konten developer kodingindonesia.com & staf pengajar tetap di Universitas Mulawarman Samarinda