Safe and Simple AC PWM Dimmer for Arduino / Raspberry Pi


Introduction: Safe and Simple AC PWM Dimmer for Arduino / Raspberry Pi

About: embedded system enthusiast ...

Dimmer With  MOSFET

This circuit shows that dimmers intended for use at mains voltage do not always have to contain a triac.
Here, a MOSFET (BUZ41A, 500 V/4.5A) in a diode bridge is used to control the voltage across an incandescent bulb with pulse-width modulation (PWM). The power supply voltage for driving the gate is supplied by the voltage across the MOSFET.

add on board:raspberry pi diy add-on board

Step 1: Circuit Diagram and Description

The power supply voltage for driving the gate is supplied by the voltage across the MOSFET. D6, R5 and C2 form a rectifier. R5 limits the current pulses through D6 to about 1.5 A (as a consequence it is no longer a pure peak rectifier). The voltage across C2 is regulated to a maximum value of 10 V by R3, R4, C1 and D1. An optocoupler and resistor (R2) are used for driving the gate.

R1 is intended as protection for the LED in the optocoupler. R1 also functions as a normal current limiting device so that a ‘hard’ voltage can be applied safely. The optocoupler is anold acquaintance, the CNY65, which provides class-II isolation. This ensures the safety of the regulator. The transistor in the optocoupler is connected to the positive power supply so that T1 can be brought into conduction as quickly as possible. In order to reduce switching spikes as a consequence of parasitic inductance, the value of R2 has been selected to be not too low: 22 kΩ is a compromise between inductive voltages and switching loss when going into and out of conduction.

An additional effect is that T1 will conduct a little longer than what may be expected from the PWM signal only. When the voltage across T1 reduces, the voltage across D1 remains equal to 10 V up to a duty cycle of 88 %. A higher duty cycle results in a lower voltage. At 94 % the voltage of 4.8 V proved to be just enough to cause T1 to conduct sufficiently. This value may be considered the maximum duty cycle. At this value the transistor is just about 100 % in conduction. At 230 V mains voltage, the voltage across the lamp is only 2.5 V lower, measured with a 100-W lamp. Just to be clear, note that this circuit cannot be used to control inductive loads. T1 is switched asynchronously with the mains frequency and this can cause DC current to flow.

Electronic lamps, such as the PL types, cannot be dimmed with this circuit either. These lamps use a rectifier and internally they actually operate off DC.A few remarks about the size of R3 and R4. This is a compromise between the lowest possible current consumption (when the lamp is off) and the highest possible duty cycle that is allowed. When the duty cycle is zero, the voltage across the resistors is at maximum, around 128 V with a mains voltage of 230 V. Because (depending on the actual resistor) the voltage rating of the resistor may be less than 300 V, two resistors are connected in series. The power that each resistor dissipates amounts to a maximum of 0.5 W. With an eye on the life expectancy, it would be wise to use two 1-W rated resistors here.

Author: Ton Giesberts - Copyright: Elektor Electronics
Circuit description source:

Step 2: Assembling Steps

Step 3: AC PWM Dimmer With Arduino

Step 4: Arduino Script


This example shows how to fade an LED using the analogWrite() function.

The circuit:
* LED attached from digital pin 9 to ground.

Created 1 Nov 2008
By David A. Mellis
modified 30 Aug 2011
By Tom Igoe

This example code is in the public domain.


int ledPin = 3;    // LED connected to digital pin 9

void setup()  {
  // nothing happens in setup

void loop() 
  // fade in from min to max in increments of 5 points:
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);        
    // wait for 30 milliseconds to see the dimming effect   

  // fade out from max to min in increments of 5 points:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1)
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);        
    // wait for 30 milliseconds to see the dimming effect   

// analogWrite(ledPin, 25);       

Step 5: AC PWM Dimmer With Raspberry Pi

Step 6: Raspberry Pi Gpio Setup

step 1   install wiringPi GPIO library

step 2:  GPIO setup

open lxterminal/ root terminal   program

sudo su                        # for super user privilege

gpio readall                 #display the gpio status  

gpio mode 1 PWM     # set the gpio -18 [wiringPi gpio-1]  mode to PWM

gpio readall                 # check the new status of  wiringpi pin1/gpio -18 mode

gpio mode 1 0         #off

gpio mode 1 1        #pwm level 1

gpio mode 1 5       #pwm level 5

step 3: how to create and run a script file in raspberry pi

step1: open lxterminal/rootterminal

step 2: sudo su                        # for super user privilege

step 3:sudo nano   #open an editor with file name

step 4: type the program,save and exit from editor [ ctrl+X  and y  for save and exit ]

step 5: bash    #run the script

step 6: ctrl+z /   ctrl+c      #exit from the program

Step 7: Video - Arduino

Step 8: Video Raspberry Pi

light dimming using bash script

light dimming using terminal commands


Step 9: Downloads

Step 10: Reference

16 People Made This Project!


  • Casting Contest

    Casting Contest
  • Microcontroller Contest

    Microcontroller Contest
  • Woodworking Contest

    Woodworking Contest

We have a be nice policy.
Please be positive and constructive.




is there an equivalent for the 4N35??? i couldnt find it around here

PWM Dimmer for Arduino And Raspberry PI


the MOSFET is over heating . I m using table fan as output

It's not working the lamp is always high..

plz kindly tell me the circuit diagram for AC pwm dimmer

Please specify all components which is used to design...??

Hola, me pueden ayudar, no me funciona el circuito, no se si sera porque estoy utilizando un IRF740 en ves del IRF830, el voltaje de entrada AC es el mismo al de salida AC ayuda

I'd ask about the full power capacity of this circuit ?
How many Watts ?

1 reply

It depends on the current carrying capacity of the bridge and the mosfet. For example, if you need to control a 1000W load, the Mosfet and diodes in the bridge should carry atleast 5 Amps (1000W divided by 230V) of current. You can upgrade the circuit with higher current diodes and MOSFETs to achieve this.

hi i'm a college student and i'm planning on using this for my project can you please send me the source code for this thanks here is my email add

Just used this as part of my capstone project. It worked great!

Hey, I'd ask about the switched in this circuit. can i put "switched"? thanks


I really tried multiple times but I am not getting success and being disappointed every time. I want to build this circuit can anyone send this pre-build circuit so that I can understand this where I am going wrong. I can pay for it :(

how many light bulbs can I connect with this circuit?

Hey !
first of all , good job.

i'm asking if this circuit could used for the LED dimming??

2 replies

Most dimmable leds are designed to work with edge cutting dimmers. This is a pwm dimmer, so the reply is 'no'

I tried it on a dimmable led bulb but it didn´t work. The bulb stayed on 100%.