Dimmer adalah rangkaian elektronik yang memodifikasi bentuk sinyal ac murni menjadi sinyal terpotong-potong sehingga daya keluaran bisa diatur. Pemotongan sinyal ac ini berguna sebagai peredup lampu, memperlambat motor, mengatur pemanasan dan lainnya.
Dimmer yang lebih komplek menggunakan PWM sebagai pengendalinya. PWM bisa dihasilkan oleh rangkaian SCR, chip/IC PWM atau mikrokontroller. Dimmer PWM ini mampu menghasilkan tingkatan daya yang kecil, sehingga pengontrolan menjadi lebih presisi.
Dimmer PWM bisa dikategorikan menjadi dua macam yaitu :
- Penyalaan berdasarkan titik nol.
- Penyalaan bebas.
Penyalaan berdasarkan titik nol
Waktu penyalaan bergantung pada saat sinya menyentuh nilai nol. Maka dibutuhkan mekanisme untuk mendeteksi waktu sinyal tersebut bernilai 0.
Komponen SCR memiliki sifat forward blocking, forward conduction, dan reverse blocking, maka komponen ini cocok digunakan sebagai dimmer elektronik.
Rangkaian dimmer lampu ac yang memanfatkan sifat SCR:
Pada aplikasi dimmer digital, perlintasan titik nol harus dideteksi terlebih dahulu sebelum melakukan menyalaan, Pendeteksian nilai nol bisa dilakukan dengan rangkaian zero crossing detector / ZCD berikut :
Perancangan dimmer PWM mengikuti kaidah berikut:
- Waktu penyalaan, sinyal bolak-balik (AC) senantiasa bergerak naik dan turun, maka sinyal pengontrol PWM haruslah dimulai saat sinyal AC meninggalkan nilai nol
- Frekuensi AC, Sinyal pengontrol PWM juga harus memiliki frekuensi tepat dengan frekuensi sinyal AC (listrik)
Kendala membuat dimmer metode zero cross adalah :
- frekuensi ac 220v dari penyedia listrik seperti PLN bisa saja berubah-ubah. pada contoh dimmer lampu 220v, intensitas cahaya menjadi tidak konsisten. Untuk mengantisipasi ini sebaiknya dilakukan pengukuran frekuensi secara berkala.
- Sulit untuk sinkronisasi frekuensi jala listrik dengan frekuensi pengontrol, karena keterbatasan perhitungan digital, misalnya faktor pergeseran frekuensi akibat pembagian bilangan yang tidak sempurna. Sebagai contoh perangkat digital akan sulit mencapai frekuensi 50,00019 Hz.
- Memakai resources mikrokontroller seperti arduino untuk mendeteksi ZCD terus menerus.
- Jika ada kesalahan setting waktu penyalaan (program diinterupsi) maka beban seperti lampu akan berkedip.
- Pada duty cycle rendah, untuk dimmer lampu akan terlihat flicker karena perbandingan waktu on sangat kecil dibandingkan waktu off.
Rangkaian dimmer arduino dengan beban lampu:
Penampakan modul dimmer lampu:
Penghasil sinyal PWM yang favorit adalah arduino, karena mampu menghitung frekuensi dan melakukan penyesuaian apabila ada pergeseran frekuensi:
Sketch / koding dimmer lampu arduino
fitur:
- input zcd dari semua pin (tidak harus pin int0/pin 9 dan int1/pin 10)
- input kontrol berupa duty cycle (rentang 0.0 – 100.0 %)
#define PWM 9 //!!!Mega hanya pin 10-13. 50-53, 14-15, A8-A15 #define ZCD 10 // A0 = 14, A5 = 19 #define frekuensi 50 //50 Hz #define inputSerial 0 volatile uint16_t dutyCycle; #define maxDutyCycle ((16000000L / (2 * 1024L * frekuensi)) - 1) volatile intptr_t *portPWM; volatile uint32_t millisZCDSebelumnya; byte bitPWM; void setup() { Serial.begin(9600); Serial.println("Dimmer arduino"); Serial.println("https://www.semesin.com/project/"); Serial.println(); dutyCycle = 0; TCCR2A = _BV(WGM21); TCCR2B = _BV(CS22) | _BV(CS21) | _BV(CS20); OCR2A = maxDutyCycle; OCR2B = setDutyCycle(dutyCycle); TIMSK2 = _BV(OCIE2B); *digitalPinToPCMSK(ZCD) |= bit (digitalPinToPCMSKbit(ZCD)); PCIFR |= bit (digitalPinToPCICRbit(ZCD)); PCICR |= bit (digitalPinToPCICRbit(ZCD)); portPWM = (volatile intptr_t *) portOutputRegister(digitalPinToPort(PWM)); bitPWM = digitalPinToBitMask(PWM); pinMode(PWM, OUTPUT); } void loop() { #if inputSerial if (Serial.available()) { int data = Serial.parseInt(); dutyCycle = setDutyCycle(data); while(Serial.available()) { delay(2); Serial.read(); } } #else for (byte i = 20; i <= 100; i++) { dutyCycle = setDutyCycle(i); delay(20); } for (byte i = 99; i != 20; i--) { dutyCycle = setDutyCycle(i); delay(20); } #endif } uint16_t setDutyCycle(uint8_t dutyCycle) { return maxDutyCycle - (1.0 * dutyCycle / 100 * (maxDutyCycle - 1)) + 1; } #if defined(__AVR_ATmega328P__) # if ((ZCD >= 0) & (ZCD <= 7)) ISR (PCINT2_vect) # elif ((ZCD >= 8) & (ZCD <= 13)) ISR (PCINT0_vect) # elif ((ZCD >= 14) & (ZCD <= 19)) ISR (PCINT1_vect) # endif #elif defined(__AVR_ATmega2560__) # if ((ZCD >= 50) & (ZCD <= 53)) || ((ZCD >= 10) & (ZCD <= 13)) ISR (PCINT0_vect) # elif ((ZCD >= 14) & (ZCD <= 15)) ISR (PCINT1_vect) # elif ((ZCD >= A8) & (ZCD <= A15)) ISR (PCINT2_vect) # endif #endif { if(millisZCDSebelumnya < millis()) { millisZCDSebelumnya = millis() + 7; OCR2B = dutyCycle; TCNT2 = 0; } } ISR (TIMER2_COMPB_vect) { *portPWM |= bitPWM; delayMicroseconds(50); *portPWM &= ~bitPWM; }
Penyalaan bebas
Waktu penyalaan dimmer tidak dipengaruhi oleh nilai nol,
Rangkaian dimmer ac sederhana :
Sirkit melalui dioda disebut juga penyearah setengah gelombang, yang menghasilkan kondisi dimmer setengah terang. Rangkaian ini biasanya digunakan pada solder, heatgun untuk pemanasan awal.
Pengaturan dimmer PWM lebih diutamakan pada frekuensi PWM-nya. Dimmer lampu akan terlihat berkedip jika frekuensi tidak sama. Untuk mengatasi pemasalahan tersebut rangkaian peredup lampu (Dimmer) didesain dengan penggunaan frekuensi yang lebih tinggi dari frekuensi sinyal AC tanpa memperhatikan waktu nol dan nilai frekuensinya.
Sinyal PWM bisa diperoleh dari rangkaian pembangkit PWM (PWM generator) atau dari mikrokontroller seperti arduino. Aplikasi rangkaian dimmer lampu arduino (rangkaian dimmer arduino) bisa menggunakan perintah analogWrite().
Berikut komponen elektronika yang digunakan dalam perancangan dimmer PWM lampu 220v:
- Dioda 1N5408 4 buah
- Dioda 1N4007
- Dioda zener 10V
- Resistor 220 ohm 2 buah
- Resistor 330 ohm
- Resistor 68 Kohm
- Kapasitor 2.2 uH
- Optocoupler 4N35
- Mosfet IRF 830
- Lampu dan Fitting
Berikut skema rangkaian dimmer lampu dc/ac yang dikontrol PWM:
Mas mau tanya kalo di modifikasi i nya pakai inputan keypad. Jadi perubahan rpmnya gak otomatis tapi dibuat inputan apa aja mas bagian yg harus di partisi dari program di atas
tambahkan kode input keypad kemudian :
jika input keypad = iii
maka kode panggilnya
setDutyCycle(iii);
Mau tanya, kalo kita mengubah i nya nilai tetap gitu cuma 100. Apakah putarannya bakal tetap 100 gak berubah ubah gitu?
i=100 hanya mengatur duty cycle si PWM
kalo kecepatan motor akan juga bergantung pada faktor beban dan seterusnya
Assalamualaiku bang, di ac light dimmer kan bang ada ac input dan load buat kelampu bebannya kalo misalnya kta ngasih saklar untuk ngasih Sumber PLN keload utk kelampu tu bisa gak bang… dan bisa rusak gak bang ac light dimernya,masalah kta kasih suplly keload utk lampunya bang ibaratkan lansung menghidupkan lampu
kurang paham maksud nya
saya coba tebak: sumber untuk lampu ada 2 (1) pwm dan (2) langsung
:: sebaiknya gunakan saklar SPDT atau DPDT
Mas,.. kalau input PWM nya dari kalkulasi energy meter bisa ngak mas,..
Rencana saya untuk bikin diversion load ke dimmer ini,.. ( buangan kelebihan daya dari inverter grid tie).
Jadi,.. kelebihan daya akan di baca oleh energy meter,(daya yang dihasilkan inverter di kurang beban pemakaian) kemudian kelebihan itu akan di buang memelalui load dimmer ini..
Bisa ngak mas..??
bisa saja,
dengan catatan khusus penyalaan zcd mesti di kalkulasi dulu duty cyclenya (karena tidak linear)
klau mau dijadiin daftar pustaka gimana caranya mas
https://www.semesin.com/project/2018/05/01/dimmer-pwm-arduino/, diakses pada tanggal 19 Oktober 2020 pukul 08.00 WIB.
perimisi mau tanya mas ini ada video tutorialnya ngga ya mas?, terima kasih mas
belum ada untuk contoh sketch ini
Mas, untuk digunakan pada Kompresor Air Conditioner bisa atau tidak ya?
bisa digunakan jika motor kompresor langsung di drive dengan ‘dimmer pwm arduino’
mas sdh sy coba menggunakan arduino mega. tp hasil msh kedip2. waktu off lbih lama. konfigurasi pin yg digunakan PWM = A8, ZCD = 10 dan pin pembacaan sensor = A1. apakah konfigurasi pin mempengaruhi mas ?
kedip bisa terjadi karena pembacaan zcd belum tepat