Breaking

Friday, July 9, 2021

PWM Signal Controller with Arduino Nano (Sinyal PWM Kontroler dengan Arduino Nano)

PWM atau kepanjangan Pulse Width Modulation, dalam bahasa Indonesia biasa disebut Modulasi Lebar Pulsa. Pada prinsipnya, PWM adalah salah satu teknik modulasi yang mengubah lebar pulsa (pulse width) dengan nilai frekuensi dan amplitudo (tinggi pulsa) yang tetap. PWM Signal ini digunakan menghasilkan sinyal analog dari perangkat Digital yang salah satu contohnya adalah dari Mikrokontroler.

 

Baca Juga : ESP32 PWM with Arduino IDE (Analog Output)


Berikut ini adalah Schematics Diagram dari PWM Signal Controller with Arduino Nano (Sinyal PWM Kontroler dengan Arduino Nano)




Berikut ini adalah Hardware yang dibutuhkan :
> 1 Pcs - Arduino Nano >>> BELI DISINI
> 1 Pcs - LCD 16x2 >>> BELI DISINI
> 1 Pcs - LCD I2C >>> BELI DISINI
> 1 Pcs - Potensiometer >>> BELI DISINI
> 1 Pcs - Resistor 330 Ohm >>> BELI DISINI
> 1 Pcs - Optocoupler PC817 >>> BELI DISINI
> 1 Pcs - Resistor 1K Ohm >>> BELI DISINI
> 1 Pcs - Transistor TIP142 >>> BELI DISINI
> 1 Pcs - Motor DC >>> BELI DISINI
> 1 Pcs - Sumber Tegangan 12V >>> BELI DISINI
> Kabel Jumper Secukupnya >>> BELI DISINI


Untuk project ini kita menggunakan pin ADC (Analog to Digital Converter) pada Arduino Nano sebagai pintu masuk untuk sinyal input dari Potensiometer. Hal ini dikarenakan memang data dari potensiometer adalah merupakan data analog. Tegangan dari Potensiometer yang berupa data Analog ini kemudian dirubah menjadi data digital berupa bilangan desimal 10 bit yang mempunyai range 0 – 1023.  Dalam bilangan desimal 10 bit, angka 0 ini adalah awal permulaan hitungan. Jadi total nilainya ada 1024. Berikut ini merupakan perhitungan dari konversi data tersebut :


 

Dari perhitungan diatas dapat disimpulkan bahwa setiap 4,88 mV data analog dari potensiometer akan dirubah atau dikonversi menjadi data desimal bernilai 1. Apabila potensiometer bergerak ke 20% dengan perhitungan 20 x 50 mV yaitu 1.000 mV atau sebesar 1 Volt, maka nilai desimalnya adalah 1.000 mV : 4,88 mV = 205. Nilai desimal 205 merupakan sebagian dari nilai maksimal 1024.

Untuk menuju output kita menggunakan pin 11 yang merupakan salah satu dari pin Digital PWM milik Arduino Nano. Berikut ini adalah data pin Digital PWM dari Arduino Nano :



Pemilihan Pin 11 dengan pertimbangan bahwa pin tersebut merupakan pin terluar dari Arduino Nano, sehingga mudah untuk pemasangan ke driver output. Selain itu juga merupakan salah satu pin dengan frekuensi paling rendah. Sehingga tidak mudah merusak komponen optocoupler di bagian driver output. Frekuensinya adalah 490 Hz, artinya dalam 1 detik pin tersebut mengeluarkan 490 kali gelombang penuh PWM. 

 

Dikarenakan pin digital PWM tersebut hanya mampu bekerja di bilangan desimal 8 bit yaitu pada range 0 – 255. Dalam bilangan desimal 8 bit, angka 0 ini adalah awal permulaan hitungan. Jadi total nilainya ada 256. Maka, default bilangan desimal ADC yang bernilai 0 -1023 tersebut harus dirubah dengan hitungan sebagai berikut :


Dari perhitungan diatas dapat disimpulkan bahwa setiap 19,53 mV data analog dari potensiometer akan dirubah atau dikonversi menjadi data desimal bernilai 1. Apabila potensiometer bergerak ke 20% dengan perhitungan 20 x 50 mV yaitu 1.000 mV atau sebesar 1 Volt, maka nilai desimalnya adalah 1.000 mV : 19,53 mV = 51. Nilai desimal 51 merupakan sebagian dari nilai maksimal 256.


Berikut ini adalah Code Programnya :


/***************************

PWM Signal Controller with Arduino Nano (Sinyal PWM Kontroler dengan Arduino Nano)

Oleh : Arduino Indonesia
Website : www.arduinoindonesia.id
Toko Online : www.workshopelectronics3in1.com
Blog : www.edukasielektronika.com

Copyright @2021

****************************/ 


#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);

byte Potensiometer = A1;
byte Pin_Out = 11;
int Output;
int PWM_Value;
int DutyCycle;

void setup()
{
  Serial.begin(9600);
  lcd.init(); // initialize the lcd
  lcd.backlight();
  pinMode(Potensiometer, INPUT);
}

void loop()
{
  Output = analogRead(Potensiometer);
  PWM_Value = map(Output, 0, 1023, 0, 255);
  DutyCycle = PWM_Value/2.56;
  analogWrite(Pin_Out, DutyCycle);
  lcd.setCursor(0, 0); //baris pertama  
  lcd.print("Freq: ");
  lcd.print("490 Hz");  
  lcd.setCursor(0, 1); //baris kedua
  lcd.print("DutyCycle: ") ;
  lcd.print(DutyCycle);
  lcd.print("%      ");
  delay(2);
}


Perhitungan dan penjelasan diatas apabila di implementasikan ke dalam Code Program adalah sebagai berikut :

 

 

Dalam konsep sinyal PWM ada yang namanya Duty Cycle. Definisi Duty Cycle adalah representasi dari kondisi logika high dalam suatu periode sinyal dan di nyatakan dalam bentuk (%) dengan range 0% sampai 100%, sebagai contoh jika sinyal berada dalam kondisi high terus menerus artinya memiliki duty cycle sebesar 100%. Jika waktu sinyal keadaan high sama dengan keadaan low maka sinyal mempunyai duty cycle sebesar 50%

 

Aplikasi penggunaan PWM biasanya ditemui untuk pengaturan kecepatan motor dc, pengaturan cerah/redup LED, dan pengendalian sudut pada motor servo. Contoh penggunaan PWM pada pengaturan kecepatan motor dc semakin besar nilai duty cycle yang diberikan maka akan berpengaruh terhadap cepatnya putaran motor. Apabila nilai duty cylce-nya kecil maka motor akan bergerak lambat.

 

Cara menghitung Duty Cycle pada project ini menggunakan rumus sebagai berikut :

 

 

Implementasi ke dalam Code program adalah sebagai berikut :