Read Speed from Car Speed Sensor

Hi to everyone I am new to the Arduino forum. I am doing a project which consists of reading the speed of my car and displaying it on an LCD display. The only problem is that I don’t know how car speed sensor works and how to read them with Arduino. If someone has experience or knows this I will appreciate your help. I will include some pictures of the sensor.


Ref F2136000014 - F2136000007

I use an UNO and a GPS, NEO-6M. The GPS tells the speed.

Maybe it would be an idea to use\buy a sensor that you can know how it works ?

This is purely a guess, but since your sensor appears to have three wires, I am guessing it to be a hall effect sensor, One wire (black) for ground, one (red) for power, and one for output signal (blue). In order to read the RPM correctly you will also need to know the number of signals per revolution that are being output. The output signal is probably a square wave that looks similar to the one in the picture below. If you cannot find the specifications on the speed sensor (voltage output and number of signals per revolution), you should connect the sensor to an oscilloscope to determine the output. Once you know this information you can use interrupts in the Arduino code to count the number of pulses to determine the wheel speed. What car (make,model,year) are you using?

Thank you so much for all this info is there a way I can check all this using a regular multimeter? I also think like you that the black is for ground and that the red is for +12v and the blue is for signal. I don’t have an oscilloscope that’s my main issue.

Probably available signal over Canbus too.

Check the voltage on the input (red?) wire. If it is +5v you should be good to go. If it is over 5v you will probably need to reduce it because the maximum voltage for the Arduino UNO input pins is 5v (I think).
If the input voltage is +12 you can also try running the sensor using a +5v from the Arduino. Of course if you do this the sensor will probably not work with the normal speedometer or ABS system if your car is so equipped.

With the sensor connected and the wheel spinning, check the voltage on the signal (blue?) wire. If it is below 5v you should be OK. The signal voltage should fluctuate slightly as you spin the wheel faster and slower.

Google “arduino hall effect interrupt rpm” for some information on coding the Arduino to read the speed.

What car are you working on?


Hi, thank you again for your help. I created a jumper cable for the blue cable to measure the output signal using a classic multimeter. While moving just a lit of bit the car I can see the voltage going quickly from 11v to 0v. I will attach a video showing this pattern. Do you know how I can manage this with Arduino?

Here is the link to the video I did:



You need to decrease the signal level before going anywhere near an arduino input with it. A voltage divider should probably work.

A better way would be to use an optocoupler, or just separate LED and photodiode. Add a resistor on the LED side.
Then you just count pulses per second coming from the photodiode/optocoupler output.

Are you sure you have the meter connected correctly? Your video shows the reading going from about -10.6v to -0.2v. I think this should be a positive voltage.
Are you measuring +12 on the red wire?
How fast are you turning the wheel?

If you are getting +12v on the red wire, try disconnecting the connector from the vehicle vehicle harness and feeding +5v from the Arduino to the red wire, ground the black wire to an Arduino GND pin, then check the output signal on the blue wire. When you do this you should be getting a 0 to +5 (or just a little less) on the blue wire. You do not want to feed the Arduino more than +5v.

Is the car running when you are doing the tests? Try it with the engine off and turning the wheel very slowly (by hand) and see how many voltage spikes you get in one wheel revolution.

Again, thanks for the help. The voltage that I get is positive is just the wiring of the multimeter.
The car was with the ignition key on and with the engine off, so I think this is why my multimeter reads a lower value than 12v. (With the ignition on but engine off the voltage of the battery drops a lit of bit) Plus, it is an old multimeter and it is not very accurate.

I can do the test with the 5v of Arduino, but in my project, I need to use the 12v since the speed must also be read from the ECU of the car which operates at 12v

When I did the test the car was not running as said, I was pushing it very slowly in my garage.

I am stuck figuring out how I can lower the 12v pulse signal to a 5v pulse signal for the Arduino without disturbing the signal

Thanks again

As was mentioned in another post, use a voltage divider.

Remember that the input voltage may vary depending on the source, so you need to design a divider based on the maximum input voltage.

Did you read @oldvetteguy's post? All you need is two resistors.

If you click on the wikipedia link in my previous post you will find a formula for calculating the value of the two resistors. If my quick calculation is correct, R1=180Ω and R2=100Ω should give you 5v with a 14v input, 3.9v with an 11v input.