A High Current TRIAC Controller Using Arduino

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!


  1. chocobo_rider says:

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

  2. Paul says:

    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.

    • kwong says:

      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.

      • Paul says:

        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 http://bit.ly/ihl2tF 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.


  3. Mukul says:

    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?

  4. Krishna Kumar says:

    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.

  5. […] photo, above. Of course, you could build your own…triac control circuits are quite simple (example here). Note that Mark’s boards require an inverted signal – so they are OFF, when the input […]

  6. Vorms says:

    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


Leave a Reply