Stepper Motors for Analog Car Gauges

Hey All!

I’m new to the world of Arduino’s and coding, but after taking classes regarding circuits and motors for my degree program I came up with an idea that I wanted to run past some more experienced people.

I have an older truck (76 F250) that is a long term project vehicle, and as with most old cars the gauges are unreliable as hell. So, I wanted to be able to retrofit a stock gauge cluster with a more accurate way to display information without altering the stock look. I’ve seen a few projects that use an Uno to control one or more LCD displays for similar projects, but I’d like it to remain analog. To achieve this, I found some gauge specific stepper motors that are designed as a replacement for early-mid 2000’s chevy vehicles (These ones)

There are 5 gauges in the cluster, and 4 that I want to retrofit. From another project that I saw, as far as I understand I should be able to drive 4 stepper motors with an Uno. At any rate, the inputs that I’m getting from the sending units would be fuel level, temperature, oil pressure, and then volts will come directly in. The temperature and oil pressure senders will both output a variable resistance. I’m replacing the float-style fuel sender in the tank with a capacitance style sending unit, that outputs a variable voltage.

From what I understand, the I/O pins can only support up to 5V DC, so I’ll need to step down the voltmeter reading somehow. Voltage dividers aren’t the most efficient way to do it but that may be the route that I go.

So, here’s where I don’t know;
-Will I be able to program the arduino to read mixed signal inputs? (2 variable voltage, 2 variable resistance)
-Am I able to set a “home” position on the stepper motors, so that the needle returns to that position when the key is shut off (maybe have capacitors to provide the voltage to spin them back?), and so that the program starts the needle off at that exact point every time the vehicle is turned on (and power supplied to the arduino) without having to move through a calibration motion?
-Since the arduino has flash memory, I know that my program will still be there through power cycles, but will the arduino run a “default” program when it’s powered on with no user input to select a program?
-What rate will the arduino read the input signals, process them, and output at? In other words, depending on what I set my step rate/acceleration at, will the needles be constantly moving? Or will they “jump” during a rise or fall in input values?

I know this is really stream of though, so if we need more clarity feel free to ask!

Thanks!
-Jameson

Your intent really confuses me. You complain about the old stuff being unreliable and then want to use the same unreliable input and output, and then add an Arduino to the mix. How will the Arduino make it all better?

Paul

From what I understand, the I/O pins can only support up to 5V DC, so I'll need to step down the voltmeter reading somehow. Voltage dividers aren't the most efficient way to do it but that may be the route that I go.

A voltage divider is the perfect solution, with the exception that the "12V" in a car is unregulated and you might still occasionally go over 5V. So, it's usually a good idea to add a [u]protection diode[/u].

So, here's where I don't know;
-Will I be able to program the arduino to read mixed signal inputs? (2 variable voltage, 2 variable resistance)

The way to "measure" resistance is to make a voltage divider where the variable resistance sensor is one of the resistors. This type of solution is not linear (half the original resistance doesn't give you half the original voltage, etc.) but you can linearize/calibrate the readings in software.

-Am I able to set a "home" position on the stepper motors, so that the needle returns to that position when the key is shut off (maybe have capacitors to provide the voltage to spin them back?), and so that the program starts the needle off at that exact point every time the vehicle is turned on (and power supplied to the arduino) without having to move through a calibration motion?

There is no home sensor built-into the stepper motor. It's up to you. Typically, you'll "home" during start-up initialization. If you want to "home" again at shut-off, the Arduino will have to remain on after you turn the car off.

-Since the arduino has flash memory, I know that my program will still be there through power cycles, but will the arduino run a "default" program when it's powered on with no user input to select a program?

Yes, that's normally how it works. There's no operating system so usually it just runs whatever is programmed into flash. ...If you load the Blink Example the LED will start blinking again the next time you power-on the Arduino.

-What rate will the arduino read the input signals, process them, and output at? In other words, depending on what I set my step rate/acceleration at, will the needles be constantly moving? Or will they "jump" during a rise or fall in input values?

It will run fast enough... Faster than the motors can move. You'll probably want some "smoothing" in your software so the meters do jump-around too much.

Standard stepper motors are 200 steps per revolution (1.8 degrees per step) so they don't move smoothly. You can [u]microstep[/u] them, but I don't know how well that works on the Arduino or if you'd be "pushing it" if you tried to microstep multiple motors at once.

Paul_KD7HB:
Your intent really confuses me. You complain about the old stuff being unreliable and then want to use the same unreliable input and output, and then add an Arduino to the mix. How will the Arduino make it all better?

Paul

The plan is also to replace the oil and temp sending units, as well as a brand new wiring harness for the gauges to eliminate old corroded wires as possible noise. Sorry for not mentioning.

Additionally, is largely the mechanism that causes old gauges to be unreliable. In my instance, it's bimetallic strip that uses the variance in current (caused by the change in resistance at the sensor) to heat the bimetallic strip.

DVDdoug:
Standard stepper motors are 200 steps per revolution (1.8 degrees per step) so they don't move smoothly. You can [u]microstep[/u] them, but I don't know how well that works on the Arduino or if you'd be "pushing it" if you tried to microstep multiple motors at once.

Suppose I should have mentioned, the motors list 600 steps for a roughly 315* arc, so each step is 0.52*. In theory, if I were to microstep by 1/8 I should get 3000 steps, and for the 315* arc each step would be 0.1*, right?

-Jameson

Instead of stepper motors, use servos. Less power use (no power used to hold position unless force applied), no need to look for "home" position (absolute positioning). Normal steppers can move 180°, which should be enough for most gauges.

The plan is also to replace the oil and temp sending units, as well as a brand new wiring harness for the gauges to eliminate old corroded wires as possible noise. Sorry for not mentioning.

I agree servos sound more appropriate than steppers. But the OP has recently taken classes in circuits and motors. Surely, such classes would have covered the strengths and weaknesses of each type of motor? So why the choice of steppers?

I think both steppers and servos would have their disadvantages, if you had to go for one I would go for the servo.

you could use conventional voltage driver gauges, and drive them from the Arduino , you would then get speed and accuracy, most of the problems with these old sensors and gauges is the senders and the fact that for example petrol in your tank is sloshing around

you could replace temp sensors with digital ones, I would not replace fuel senders.

the Arduino could take these values and average them, better accuracy would be available as you would power the sensors and dials from a regulated supply, and you could calibrate the dials to the output of the Arduino.

wvmarle:
Instead of stepper motors, use servos. Less power use (no power used to hold position unless force applied), no need to look for "home" position (absolute positioning). Normal steppers can move 180°, which should be enough for most gauges.

If you look at the link the OP provided, it is to steppers specifically designed for automotive gauges.
There is even a Library for them and you can run them directly from the Arduino output.
They are open or air cored steppers.
When you power up, you make them reverse back against a stop to find home position.
I have 6 to play with, just haven't had the time.
Tom... :slight_smile:

Those are sweet indeed!

It seems you can even drive them directly from the pin (the description mentions 200Ω coil resistance but the technical details say it's 260Ω which would be OK for a 5V Arduino pin).