I'm trying to make a sort of Keyless Go style system for my 1996 Mazda Miata using an Arduino and RFID shield as a DIY project for fun. I want to make the Arduino crank the starter until the engine starts, like a human would. However, I need some way for it to know the engine has started. Ideally, I would like some wire which produces a signal only when the engine is running. Is there such a wire? If not, do I need to read the tach signal? Could I check the voltage coming out of the alternator, or would that have voltage when cranking too? Help is greatly appreciated.

Edit: This leads to my second question. What kind of signal does the 1996 Miata's tach take? I understand that it's likely a square wave. What is the voltage? Does it vary the frequency or the duty cycle?

  • 1
    There's voltage drop while cranking, so you could use alternator voltage for a running signal. Anything above 13.5v is pretty universal for a running engine. Modern cars look at the engine RPM and crank for a certain period of time or until engine rpm goes above 500 RPM or so.
    – Ben
    Aug 20, 2017 at 3:42
  • I'm not positive what the tach signal looks like. It's sourced from the coil negative terminal so depending on the coil design it could be a square wave or a primary ignition waveform.
    – Ben
    Aug 21, 2017 at 10:52

1 Answer 1


I've considered using an Arduino for automotive stuff also.

The ECU and sensors all work on 5v, so that system will be easy to tap into. I would be looking at the cam / crank / distributor signal. Not sure what your vehicle uses. You can crank the engine in a way that it will not start (disconnect coil wire, remove fuse for the fuel pump, etc.) to determine the maximum RPM from the starter alone. Your 'started' threshold will be a bit above this. This may take some trial and error. I believe the sensor will send a pulse every revolution. You can measure or calculate the pulse width the determine you started threshold.

Be aware that tapping into a sensor could cause issues with the ECU's reading.

You will want to program in a 'timeout' in the event the vehicle does not start after a couple seconds. Have a pause so you need to wait a couple seconds before retrying.

Be sure the neutral safety switch or clutch safety switch is operating properly. Don't want a run-away car.

Might check battery voltage before / during / after to determine battery strength / life.

Don't start cranking if the pulse width shows the engine is running.

When programming, consider all of the ways this can go wrong. Any event that could happen that you would need to account for.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .