I've recreated the ignition coil part of a small Honda ICE (typically used in lawn mowers or single-digit kW gensets). I use an electric motor to turn a flywheel taken from a dead engine, and I've placed the ignition coil unit just like in the real engine, with a spark plug and all. I get sparks when the flywheel runs faster than 500 RPM.

Physically, it looks like this:

flywheel setup

I've also attached an Arduino-like device, like this:


simulate this circuit – Schematic created using CircuitLab

The ignition coil is meant to be operated like this:

  • The coil's body (laminations) is electrically connected to the engine block (chassis).
  • One well insulated wire runs to the spark plug socket. The circuit is completed through the chassis.
  • There's an engine kill switch: when you want to turn the engine off, you close the switch, which shorts some signal of the ignition circuitry. Again, circuit is completed through the engine chassis.

In my setup, the engine chassis is this strip of metal where the spark plug rests on, and I don't have a kill switch (I don't need one).

The signal to the kill-switch is much lower voltage (25-100V) and has some strange shape, but with some dividers and low-pass filters I've conditioned it for a digital input pin of an Arduino. The signal conditioning circuitry shouldn't matter much (see below), but I'm including it for completeness:


simulate this circuit

My device is powered by a Li-Ion battery + a 3.3V LDO.

I'm observing the following results with engine at 1000 RPM and a non-resistor spark plug:

  • Arduino device not electrically connected to the engine, but physically close to the spark plug - unaffected
  • Arduino electrically connected to the kill-switch signal, but otherwise far away from the spark plug - reboots continuously, essentially on every spark
  • Only the grounds connected (the blue wire) - same thing, reboots furiously

If I swap the spark plug for a resistored one (Denso W20EPR-U), I'm observing

  • Device close to the spark - unaffected
  • Connected to the kill-switch signal - unaffected (I can read the engine RPM)
  • Only grounds connected - unaffected (but of course I can't read the engine RPM)

I also have a GPS chip connected to the Arduino. It shows similar behaviour (it reboots furiously when the non-resistored spark plug is used). All chips are duly bypassed by caps. Scoping on the power rails do not reveal any glitches. The GPS, of course, has a sensitive antenna, which I guess picks up a lot of noise.


What mechanism causes the Arduino's MCU to reboot furiously when I only have the grounds connected? And why the change to a resistored spark plug fixes it so well? Also, how to protect against the non-resistored spark's nastiness? Is opto-isolation a must?


Answering clarifying questions by @glen_geek:

  • the device is powered through a Li-Ion battery and a 3.3V LDO
  • nothing else is connected to it
  • I've included the signal conditioning circuitry
  • I've added a photo of the actual setup (the device itself not shown). As you can see, the thinner wire coming out of the ignition coil goes through a couple of bullet connectors, and into a 4-wire cable. The GND from the laminations (blue wire) is in the same cable. The other 2 wires of the cable are unused. So it's not twisted pair, but it's not flying wires either.
  • \$\begingroup\$ Anytime you're dealing with high voltage, or a high noise environment. One simple way to make things easier and safer is to remove any direct connection that noise can couple through. In your case and optoisolator would be a good choice. You have the grounds connected but the voltage is high enough and there's enough stray capacitance inside the board that things can still happen. \$\endgroup\$
    – MadHatter
    Sep 4 '20 at 0:08
  • \$\begingroup\$ What powers the Arduino? What else is connected to Arduino? Show us your signal conditioning. Are you using twisted pair wires to connect to the ignition coil or two "flying" wires? You've shown us only basic blocks, and perhaps not shown the critical element(s). \$\endgroup\$
    – glen_geek
    Sep 4 '20 at 12:42

You've rediscovered the oldest form of radio transmitters: the spark gap.

Every time the spark plug fires, an impulse of current flows through your circuit. Portions of your circuit act as an antenna to radiate some of that power. From your photo, I would guess this is largely inductive, so the transmission would be predominantly near-field magnetic induction.

Normally, this is prevented by component design -- and the big chunk of metal doesn't hurt!

The spark plug wires will often incorporate some EMI suppression in how the conductor is wound, and some wires are even shielded. The spark itself is usually contained inside the engine block -- not a bad Faraday cage -- and the return currents flow back to the coil through a huge cross section of metal. All of this helps to reduce EM radiation, but custom hot-rodders still struggle with EMI.

On your setup, the spark is exposed and all the return current flows back across a relatively narrow path. These are both suspects as antennas: the gap itself at high frequencies and the long metal strip for lower frequencies.

Now, why would the resistor spark plug change things? The resistor creates a weaker spark, lowering the current impulse and so the RF signal.

  • \$\begingroup\$ I suspect this as well, however the same issue happens on a real engine (with the Faraday cage in place). But I think the ground plane of my device acts as a pretty good antenna at some frequency. Btw, any ideas how to circumvent this antenna behaviour through circuit modifications? \$\endgroup\$
    – anrieff
    Sep 9 '20 at 6:08
  • \$\begingroup\$ Sorry, antenna design is an entire field of study, and it turns out that creating an antenna is easier than preventing something from radiating. Without a detailed model, antenna design typically involves a lot of trial and error: size, shape, materials all matter. As I mentioned above, a lot of design goes into the spark plug wires, so you might hack another wire to serve as the return path. Another approach is to filter the signal, like your resistor spark plug is doing; however, that will also affect your spark. \$\endgroup\$
    – mbedded
    Sep 9 '20 at 13:55

What's likely happening is that the spark plug is causing the ground to bounce because of absolutely enormous currents and the residual resistance of the chassis. If the chassis is made of crap metal or the bolts aren't particularly conductive, there's probably current flowing all over the place.

The fact that the Arduino works when placed close to the spark plug (short distance to ground disturbance so low voltage drop) suggests that this is what happens (if the coupling were magnetic or radiative--closer would be worse, not better).

A "resistored" spark plug simply limits the current that can be discharged which keeps the ground bounce below a threshold that would reset the Arduino.

Now, "Only the grounds connected" should not cause the Arduino to reset as that would only be a single connection and electricity must follow a closed loop.

However, are you SURE that you only have grounds connected? No screws somewhere? No other pins? Your fingers aren't touching something? No conductive path through solder resist to chassis? Input pins also count as connection they have diodes to VDD and GND to bleed off ESD that can get biased if the pin goes above VDD or below GND.

And, yes, an optoisolator would probably be a good idea. You can probably make this work with SCRs, BJTs, MOSFETs, etc., but an optoisolator is probably the quickest and easiest.

Good luck.

  • \$\begingroup\$ The fact that the Arduino works when placed close to the spark plug Sorry my question was unclear there. By close I meant physically close to the spark, but not otherwise electrically connected. \$\endgroup\$
    – anrieff
    Sep 5 '20 at 6:15
  • \$\begingroup\$ and yes, I'm sure that only the grounds are connected electrically. There are just two wires coming off the engine setup I made, so it's pretty easy to ensure this. \$\endgroup\$
    – anrieff
    Sep 5 '20 at 6:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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