One of the goals in my previous timer project was to achieve the ability to control multiple electronic devices using the precise time signal generated by the RTC chip (bq3287). For electronic devices using up to a couple of amperes, a relay should be more than capable to handle the load. But for high voltage and high current home appliances such as water heaters (typically 240V, 20 to 30 A), the relay solution becomes much more expensive and less reliable. So I turned to a solution using an optocoupler-isolated TRIAC circuit.

This circuit uses a BTA41 TRIAC from ST Microelectronics as the main switching device. The optocoupler used to trigger the TRIAC is Fairchild Semiconductor‘s MOC3061.

TRIAC Controller
TRIAC Controller

Using the above circuit, the load can be easily turned on and off using an MCU’s output. Here is a picture of the control timer I built earlier and the control signal is outputted from the bottom:

I2C Clock Controller
I2C Clock Controller
Be Sociable, Share!

17 Thoughts on “A High Current TRIAC Controller Using Arduino”

  • You can’t use PWM as a control signal for that circuit unless the PWM is created with zero-cross detection, right?

  • Kerry, does your thyristor circuit just fire at 0 deg or not at all (ie either on or off) or can the Arduino trigger the circuit to switch the thyristor at say 90 deg.
    I realise that the Arduino would require to be phase synced (as comments above) but is this possible with an Arduino?
    I am currently trying to develop a project in which the Arduino determines how much power is supplied to a device, and can be anywhere between 0% and 100%.
    The only solution that I have found so far is to have the Arduino feeding into a Phase Angle Controller, which is an expensive option.
    Any advice would be appreciated.

    • I guess this depends on the driver you use. MOC3061 is a zero-cross driver so the TRIAC is triggered at 0 deg. I am not aware of any easier solution other than measuring the exact phase angle if any precision is required.

      • Yes, but cannot the Arduino monitor the phase angle of the mains and trigger the Triac accordingly? (So the Arduino takes on the role of Phase Angle Controller).
        For example, at they use a 9v AC to AC transformer and a series of resistors to provide a AC input into the Arduino representative of the Mains Power which is subsequently analysed. Could this not be phase corrected and used to trigger a Triac via an optical isolator.
        I don’t have the experience yet with Arduino to make this happen, but would appreciate your thoughts.


  • Kerry, how does the PWM input (pin 1 & 2 )in to MOC3061 work? if the zero detection input is not fed into the microcontroller, how will it know when to switch on the PWM signal?

  • Dear Kerry

    Could you share how you handled the heat sink requirements for BTA41 for larger current. i.e around 16A. I am designing a circuit with BTA24 which is a snubberless version which can operate at 25A however when I do the heat sink calculation, I get 0.5C/W as the thermal resistance of the required heatsink to operate at 16A.

  • Hello,
    Is anybody selling triacs shield for Arduino ?
    I need a 2 chanel for powering wash machine and dryer.

    Many thanks for your help.

    Best regards


  • Hello, this is a good project and I was wonder why did you use a 320 resistor in series with diac ? and why did you use a 320 resistor in parallel? Thank you :)

  • Hi. I have done the same circuit, but he didn’t work.
    The load turned of and on, with no regulation.
    I control the MOC with a pwm pin of arduino (pin 3), but he didn’t work.
    Why? I did the same circuit of the diagram, connecting pin 2 of the MOC to the gnd of Arduino, and pin 1 of the MOC to the Resistance and pin 3 of Arduino.
    Thanks in advance for a future reply.
    Have a nice day

  • Kerry – Send me your email, I want to send you a short video and diagram of SGS-Thompson triac control that works well and reliably with thyristor without snubber on AC transformers and asynchronous electric motors with capacitor (add Arduino code to turn 90 degrees). – Martin

Leave a Reply

Your email address will not be published.