I have an older car in which I've installed a modern engine & transmission. I'm working on building a converter to adapt electrical signals from the transmission to drive the old-school mechanical Speedo via a stepper motor. I've completed a conditioning circuit & Arduino code to read signals from the transmission output shaft & produce a PWM voltage that varies with the speed of the vehicle.
The trouble I'm having is finding a motor that can turn at a precise speed as directed by the Arduino. It needs to turn a small load at varying RPM - from as low as 20RPM (barely moving) to as much as 2200RPM (~130MPH). I tried the Small Stepper Motor & EasyDriver board from Sparkfun, but it won't spin the speedo head fast enough - if I drive it faster than the equivalent of ~25MPH, it stalls.
I see lots of motors out there, but most have step sizes of 0.9 degrees - I think this will make is hard to drive them to high RPMs. I also found on Phidgets.com a driver ("1067") that is supposed to be capable of almost 5kRPM - but it's big - 3" x 3" x 1.4", drives 4A per coil, and generally seems like overkill for what I'm trying to do. And, it costs almost $100 for the driver alone!
I'm hoping someone has a better suggestion for me!
Thanks!
Steppers aren't great for high RPM. You could gear the stepper up to a higher speed at the expense of torque. It would seem better to use a DC motor controlled with Pulse Width Modulation for a speedo as long as you can get it slow enough for minimum speed.
If you used a DC motor with an encoder disc (black disc with a white stripe?) and a photo-diode to detect the white stripe the Arduino could monitor the motor speed and adjust the PWM accordingly. Cheap and effective.
Is your plan that the motor spins the magnet that is used to move the speedo pointer? You may be able to use the magnet as your rpm detector.
o_lampe:
Why dont you attach the needle of the speedo directly to a stepper?
I could (and in fact did just that for the tach), but I want to have a working odometer. There again, I could make a couple LCDs for the ODO & trip ODO, but that gets away from the original look I'm trying to keep.
Robin2:
If you used a DC motor with an encoder disc (black disc with a white stripe?) and a photo-diode to detect the white stripe the Arduino could monitor the motor speed and adjust the PWM accordingly. Cheap and effective.
Is your plan that the motor spins the magnet that is used to move the speedo pointer? You may be able to use the magnet as your rpm detector.
...R
Hmmm - maybe a good idea. Complicated, I think, to monitor the motor & adjust PWM accordingly , but maybe there's code already out there for that. Perhaps there's a DC motor out there with the encoder / feedback mechanism built in... Off to search the web!
I like the idea of connecting the stepper directly to the pointer. Use a hall effect switch to measure the RPM of the magnet and translate that to a needle position.
groundfungus:
I like the idea of connecting the stepper directly to the pointer. Use a hall effect switch to measure the RPM of the magnet and translate that to a needle position.
Again, that's the easy way, but doesn't give me the odometer function!
KLattig:
The trouble I'm having is finding a motor that can turn at a precise speed as directed by the Arduino. It needs to turn a small load at varying RPM - from as low as 20RPM (barely moving) to as much as 2200RPM (~130MPH).
2200rpm would probably need a high-end CNC stepper driven from 120V supply. Give up on stepper motor, you need
a small servo motor with a servo controller (home made or otherwise).
Actually given the very low load a decent DC motor driven from an accurately controlled supply voltage would probably
do fine. You'll need active braking so the motor supply would need to be from a push-pull driver.
Arduino PWM->low pass filter -> DC servo amplifier capable of several amps -> motor -> speedo shaft.
MarkT:
you need
a small servo motor with a servo controller (home made or otherwise).
Aren't servos typically limited to 180° of revolution before hitting a stop? There are a few continuous-turn servos out there, can they turn 2200RPM though?
Seems like any bog-standard brushless DC motor controlled with PWM will do. Like the kind used in computer fans. The load should not vary, so you can use a simple algorithm (or map) to convert road speed to PWM duty cycle, I don't see why feedback in the form of a rotary encoder would be necessary.
The load to the Motor will Change every mile/ ten miles /hundred miles a.s.o. because everytime you pass these marks an additional digit from the odometer has to be moved.
Why not use two steppermotors? One for the needle and the other directly attached to the odometer.