Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat yang digunakan untuk DIMMER lampu menggunakan ARDUINO dan PWM. device kendali tegangan AC yang digunakan adalah solid stste relay (SSR) maksimal arus 2A dan pengatur PWM menggunakan analog slider potensio yang mana cara kerja slider potensio ini sama seperti potensio putar namun yang membedakan yaitu jika potensio biasa itu diputar untuk merubah resistansinya, kalau slider potensio dengan digeser ke atas atau ke bawah untuk merubah resistansinya. mikrokontroller yang digunakan adalah Arduino. penampil nilai PWM dan ADC nya menggunakan LCD OLED 128x64. pada percobaan kali ini menggunakan frekuensi PWM 20 KHz. untuk lebih jelasnya berikut skema dan programnya.
a. Arduino UNO
b. Solid State Relay (SSR)
c. Analog Slider Potensio
d. LCD OLED 128x64
e. Program Arduino IDE
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);
#include <PWM.h>
//use pin 11 on the Mega instead, otherwise there is a frequency cap at 31 Hz
int led = 9; // the pin that the LED is attached to
//int brightness = 0; // how bright the LED is
//int fadeAmount = 125; // duty cycle
int32_t frequency = 20000; //frequency (in Hz)
int x;
char tmp_string1[8];
char tmp_string2[8];
int dataadc;
int z;
void draw(void) {
//float dua angka dibelakang koma
itoa(z, tmp_string1, 8);
itoa(dataadc, tmp_string2, 8);
// graphic commands to redraw the complete screen should be placed here
u8g.setFont(u8g_font_unifont);
//u8g.setFont(u8g_font_osb21);
u8g.drawStr(0, 22, "Intensitas= ");
u8g.drawStr(0, 50, tmp_string1);
u8g.drawStr(60, 50, tmp_string2);
}
void setup(void) {
//initialize all timers except for 0, to save time keeping functions
InitTimersSafe();
Serial.begin(9600);
//sets the frequency for the specified pin
bool success = SetPinFrequencySafe(led, frequency);
//if the pin frequency was set successfully, turn pin 13 on
if(success) {
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
}
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
u8g.setColorIndex(255); // white
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
u8g.setColorIndex(3); // max intensity
}
else if ( u8g.getMode() == U8G_MODE_BW ) {
u8g.setColorIndex(1); // pixel on
}
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
u8g.setHiColorByRGB(255,255,255);
}
}
void loop(void) {
dataadc = analogRead(A0);
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);
#include <PWM.h>
//use pin 11 on the Mega instead, otherwise there is a frequency cap at 31 Hz
int led = 9; // the pin that the LED is attached to
//int brightness = 0; // how bright the LED is
//int fadeAmount = 125; // duty cycle
int32_t frequency = 20000; //frequency (in Hz)
int x;
char tmp_string1[8];
char tmp_string2[8];
int dataadc;
int z;
void draw(void) {
//float dua angka dibelakang koma
itoa(z, tmp_string1, 8);
itoa(dataadc, tmp_string2, 8);
// graphic commands to redraw the complete screen should be placed here
u8g.setFont(u8g_font_unifont);
//u8g.setFont(u8g_font_osb21);
u8g.drawStr(0, 22, "Intensitas= ");
u8g.drawStr(0, 50, tmp_string1);
u8g.drawStr(60, 50, tmp_string2);
}
void setup(void) {
//initialize all timers except for 0, to save time keeping functions
InitTimersSafe();
Serial.begin(9600);
//sets the frequency for the specified pin
bool success = SetPinFrequencySafe(led, frequency);
//if the pin frequency was set successfully, turn pin 13 on
if(success) {
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
}
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
u8g.setColorIndex(255); // white
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
u8g.setColorIndex(3); // max intensity
}
else if ( u8g.getMode() == U8G_MODE_BW ) {
u8g.setColorIndex(1); // pixel on
}
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
u8g.setHiColorByRGB(255,255,255);
}
}
void loop(void) {
dataadc = analogRead(A0);
// nilai 1777 maks adc sensor, nilai 0 min adc sensor
// akan dirubah ke range 0 - 255 , min 0 dan maks 255
z = map(dataadc, 0, 1777, 0, 255);
pwmWrite(led, z);
// picture loop
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
// rebuild the picture after some delay
delay(500);
}
z = map(dataadc, 0, 1777, 0, 255);
pwmWrite(led, z);
// picture loop
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
// rebuild the picture after some delay
delay(500);
}
f. VIDEO HASILNYA