I have designed a circuit board for my Arduino controlled dishwasher, using the following circuit taken from the MOC3043 datasheet. I have used a BTA 16-600BW snubberless TRIAC with a 100 ohms and 10 nF snubbing circuit. I have seen Electrolux boards use snubberless TRIACs and this combination of resistor and snubber network for inductive loads while powering the heater with a relay.

enter image description here

I am controlling a total of 6 loads, mostly inductive: 3 solenoids (water softener, fill, detergent dispenser), drain pump, washing pump, heater. For this reason, I have employed TRIACs rather than relays as the latter ones would give me Arduino reset issues when powering the inductive loads.

Now, the problem is: everything works fine when I use it at home, but if I take it to a different house (I have given the machine to a dear friend of mine who doesn't own a dishwasher in order to test it) where there is electrical noise on the network, the heater TRIAC self triggers and ends up burning the heater. It's already happened twice, so I am thinking to revert back to a relay in order to power the heater (resistive load + removal of the Arduino inbuilt voltage regulator + shielding of the microcontroller shouldn't give me reset issues.)

Why does the self trigger happen? Is my idea of electrical noise correct? How can I improve my design so that my other loads do not risk undergoing the same treatment? (Thid has not happened yet.)

I have seen some datasheets for the MOC3021 recommend using a snubbing circuit for the TRIAC gate but have not seen this in any MOC3043 datasheets so I wouldn't know what to do.

  • \$\begingroup\$ Comments are not for extended discussion; this conversation has been moved to chat. \$\endgroup\$
    – Voltage Spike
    Jan 14, 2023 at 15:13

1 Answer 1


For this reason, I have employed TRIACs rather than relays as the latter ones would give me Arduino reset issues when powering the inductive loads.

I've had problems with noise from inductive loads leaking through the coil-to-contact capacitance of relays and making the relay controller chip misbehave. This was a nasty load, a little AC motor controlling a valve, and it had a very bouncy limit switch that would spark and make a lot of noise.

The solution was to put a snubber on the load, which is good for the relay contacts anyway. That took care of most of the noise at the source. Then I added a 10nF capacitor between the coil pin connected to the driver and ground, to catch what remained of the spike. No more problems since then.

the heater TRIAC self triggers and ends up burning the heater.

Now that's interesting. A triac can self trigger under some circumstances, but with a resistive load it should only remain on for a half cycle and then it should have no trouble turning off. It's quite weird for it to self-trigger continuously on a resistive load. Unless maybe the power line is quite inductive and voltage spikes when the triac turns off, and you forgot to add an X2 capacitor and/or a MOV at the mains power input of your circuit to absorb that spike.

Or perhaps it's not the triac that self-triggers, but rather it's the opto-triac, or the transistor driving its LED, if the driving signal goes through wires that pick up noise.

You should definitely put a LED on the input of the opto-triac to make sure it isn't triggered by the arduino misbehaving.

removal of the Arduino inbuilt voltage regulator + shielding of the microcontroller shouldn't give me reset issues

Shielding is useless if there's plenty of wires poking through the shield. Basically the usual arduino prototype will be very sensitive to noise and crash because it's made up of several boards and modules connected with a mess of wires. So, first it doesn't have a ground, as any current going through the mess of ground wires will cause each board to have a different concept of what "0V" is. Then the micro's GPIO pins are directly connected to board headers without any protection, no diodes, no caps, no TVS, so any spikes picked up by the wires will zap the input pins directly and crash the micro.

The voltage regulator is most likely an innocent bystander.

If you want it to be more robust, then you need to put the micro on a nice board, with a nice ground plane, and put at least the minimum bit of filtering on the IO. For example if you have an IO header, you can put a resistor and a BAT54S dual schottky diode (4c each at reichelt) on each line, with one diode to ground and the other to VCC. Add a decoupling capacitor on VCC right next to the diodes, to provide a short path to the ground plane for currents that the diodes will steer away from your micro. You can also filter inputs with RC's, or put a transistor. But the best option is to have everything on the board, with a nice ground plane, and no mess of wires.

  • \$\begingroup\$ Wow, thanks for your detailed answer. I did use snubbers but had a design where I would connect a flowswitch in series with the heater. That caused a lot of noise, so I started using the flow switch just as a signal and wired the heater separately§ The Arduino was not powered (but the rest of the circuit was) when the users told me they smelled something burning. The way the circuit is wired cuts the 5V to the Arduino and leaves all the grounds and 230V wires untouched Would optoisolators work well to isolate the inputs? I removed the VREG because I saw a video on YT suggesting it \$\endgroup\$ Jan 13, 2023 at 17:29
  • \$\begingroup\$ When it overheated, did the triac fail shorted or was it OK? They tend to fail short and that would probably start a fire if no-one smelled the resistor burning, so it's strange there's no extra safety in the machine, like a bimetallic thermostat (or a flow switch)... OK so when it happened the arduino was unpowered, but you say there was still 5V to the rest of the circuit. What is driving the optocouplers? Does it have memory, like an IO expander? Can you put a schematic? \$\endgroup\$
    – bobflux
    Jan 13, 2023 at 18:06
  • \$\begingroup\$ For example my dryer has a thermostat and an extra single use thermal cutoff in case the thermostat ends up welding its contacts, that's pretty common. \$\endgroup\$
    – bobflux
    Jan 13, 2023 at 18:08
  • \$\begingroup\$ the TRIAC was ok. The optocoupler is driven directly by the Arduino pins. There was a flow switch but I decided to run it as a signal since when it would switch 230V it created a huge amount of electrical noise Still, why does it affect only the heater triac and none of the others? Could the fact that it is a small resistive load influence anything? \$\endgroup\$ Jan 13, 2023 at 20:39
  • \$\begingroup\$ If it's a problem with too much inductance in the mains then the high current drawn by the heater could be why it manifests, but that's just a hunch. It would be better to fix the crashes then put the safety flow switch back in series with the resistor... \$\endgroup\$
    – bobflux
    Jan 13, 2023 at 21:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.