I have an Arduino Uno with Ethernet Shield controlling some relays. Initially everything works fine but then when switching the relay off, the Ethernet controller frequently 'crashes'. Ethernet stops responding to pings, although the Arduino Uno keeps running. Pressing the reset button brings the Ethernet controller back to life.

I am using three relays to control:

  • The 'Call for Heat' contact on the boiler (normally connected to a thermostat)
  • A Honeywell V4043 zone valve (6W / 0.42A)
  • A Grundfos UPS2 underfloor heating pump (0.06A - 0.42A)

Block Diagram

This is my setup:

  • I am using 2N7002 MOSFETs to drive the relays
  • I have 1N4004 diodes across the coils

There is a circuit diagram for the 'Relay Driver Shield' part of the circuit here:

This is what I have done to attempt to solve the problem:

  • I have moved the Arduino + Ethernet further away from the relays
  • I switched to higher quality Omron Relays (G2R-1-S-DC12)
  • I have tried both Wiznet W5100 and ENC28J60 Ethernet controllers

But so far nothing has solved the problem.

Of the three relays, it appears to be the Honeywell V4043 zone valve that is causing the problem. While testing with no loads connected to the relays, it was working fine. My assumption is that the problem is related to discharges across the contacts, partly due to the inductive loads. But I am not sure what to do to fix it.



  • 4
    A schematic showing the connections will be very useful.
    – user31481
    Commented Feb 5, 2018 at 12:19
  • 1
    I'd start with optocoupler and separate power supply for the relay.
    – KIIV
    Commented Feb 5, 2018 at 12:33
  • 3
    Sounds like you want some relay snubber circuits. And opto-isolation can't hurt either.
    – Majenko
    Commented Feb 5, 2018 at 12:34
  • I have added a Block Diagram inline and a link to the relay driver circuit diagram on GitHub.
    – njh
    Commented Feb 5, 2018 at 22:25
  • 1
    a 3300uf 10v "motherboard"capacitor "shorting" your 5v to ground might help.
    – dandavis
    Commented Feb 6, 2018 at 0:19

1 Answer 1


I would suggest two things:

  1. Use opto-isolators instead of (or as well as) the MOSFETs to control the relays, and
  2. Add RC snubber circuits across the contacts.

The latter is the most important, since the spark across the contacts when they open will cause massive amounts of EMI.

The simplest circuit is a simple series resistor and capacitor placed across the contacts:


simulate this circuit – Schematic created using CircuitLab

Of course, ensure that the resistor and capacitor are rated for at least the voltage you are switching, preferably double.

Selecting the right values for the components depends very much on the load being switched and how much energy needs to be absorbed. I have shown ball-park figures that are usually "ok" for many situations.

  • Does the 1N4004 diodes across the coils not count?
    – user31481
    Commented Feb 5, 2018 at 12:48
  • No. Those are to absorb the back-EMF from the collapsing magnetic field in the relay coil. The snubber circuit is for the back-EMF from the inductive load that makes a massive spark across the relay contacts, both shortening the life of the relay, and making a massive EMI spike.
    – Majenko
    Commented Feb 5, 2018 at 12:49
  • Thank you very much, I will give the RC snubber circuit a go. In a previous version of the circuit, a cheap eBay 4-channel relay board, it did have an opto-isolater, but it doesn't seem to help. Would isolating the power lines (DC-DC isolated converter) help?
    – njh
    Commented Feb 5, 2018 at 13:08
  • @Majenko. I see. Now, for the contact side a zero-current crossing detector will be really nice for switching off inductive loads.
    – user31481
    Commented Feb 5, 2018 at 13:16
  • Note that you need a mains rated capacitor. I think they are called class X capacitors, but please don't trust me on that one.
    – Gerben
    Commented Feb 5, 2018 at 16:49

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.