Using Arduino (i got leonardo and uno), I'm looking for a way to get the RPM of my car's engine. I know this can be done using an OBD2 connection however i'm looking for a different way.


I need a reference for a sensor / a creative way to get this data.

Having said that, these approaches came up:

  • guessing the RPM by reading the amps in the car's 12V connection
  • recording the sound of the engine using a microphone and setting thresholds for certain RPM values
  • 1
    If you wrap a few loops of wire around one ignition wire you can probably messure the ignition pulses. But that could kill your arduino, because even the induced voltage in the wrapped wire may be over 1000 Volts. So be carefull!!! Perhaps a diode (Fast Schottky) might help. But that's a question for the electronics site electronics.stackexchange.com. These guys know more about that than I do. Commented Jun 16, 2015 at 15:07
  • 1
    I think it will depend on whether you have access to the tachometer feed (assuming one is available). Otherwise, if there is something "rotating" at the engine speed, you can attach various types of sensor for measuring revolutions (eg. IR reflection or hall effect magnet sensing).
    – Kolban
    Commented Jun 16, 2015 at 16:26
  • 2
    Paint a white of black spot on the drivebelt, and use an reflective optical sensor (e.g. tcrt5000) to see how many times the spot passes the sensor.
    – Gerben
    Commented Jun 17, 2015 at 12:17
  • Could you state the reasons why OBD2 is not an option? Commented Aug 7, 2018 at 8:03

3 Answers 3


I would think something like this would benefit you greatly. If your vehicle was produced after 1996 it will have an OBD port near the steering wheel that allows you to read diagnostic information from the car. This diagnostic information always includes error codes (think: Check engine light), and often includes operating information like speed and engine rpm.


What about measuring the speedometer? I suspect that would be easiest - you may get away with hooking up the speedo directly to the Arduino analog (but measure with multimeter first!).

  • The question seeks engine RPM, not speed. Transmissions have various ratios, and they slip, so the two are not directly related. Commented Dec 11, 2015 at 1:50
  • Most speedos have RPMs. I meant "the rpm line on the dashboard" (that part of the dashboard being referred to as the speedo, even the parts that aren't). Commented Dec 14, 2015 at 2:43

I'm doing this with a TCRT5000 and a LED+phototransistor, you can find them all over Amazon and eBay. I painted one quarter of a camshaft pulley white, and the other three-quarters flat black, and mounted the optical sensor over the edge of the pulley. This is on a Subaru, where the cam pulley and timing belt are all underneath a shroud, which keeps out ambient light. It works quite well.

Plus a .1uf capacitor next to the Arduino, because the transitions between high and low were pretty noisy without it.

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.