Complete/guide: Accurate Custom Digital Tach.
I looked around for a tach. Since our diesels have no computer or coil, standard (cheap) tachometers won't work, and I had a hard time finding one which would work at all, for any price.
I decided "DIY time!"
Since that time, I've put a very decent solution together. I actually had it working a good 8 months ago, but there were always glitches of one sort or another; I finally got the time to properly wire, mount and attach everything.
Take a look!
First off, stopped:
Running at different speeds. Note that I've got total revs run(since power on of arduino), RPM, and then calculated speeds(note: gear 6 = GearVendor overdrive + s5-42 in overdrive) based on RPM and gear ratio. Using a nominal value for tire size, I ended up with it reading about 1.75MPH fast at 60MPH, compared to the GPS in my phone(which is still better than the stock speedometer which is like 2MPH slow). I've since adjusted the calculation-factor to drop that to perhaps .5MPH off.
Here's the guts: I installed a plate under where the middle seat used to be(bucket seat configuration), and installed a cover over it which slides back(black at the bottom):
Top of my custom board(details below):
Back side of custom board:
Arduino below:
Now, Once I got the thing together for the first time, I was impressed with how accurate it was - it seemed right, but I couldn't test it.
A few weeks ago, though, I got my Fox Valley luminocity probe setup, and I compared the output of this device with a "proper" digital tach - a Snap On timing light with tach, hooked up to the luminocity probe. I got within one or two RPM at the speeds I tested, and consider that "good enough" :P
How it works:
-------------------------
Now, first off, our tachometer sensor is a http://en.wikipedia.org/wiki/Variable_reluctance_sensor. This is basically a coil of wire and a magnet which is positioned on top of the 106 tooth injection pump gear, which turns once per two revolutions of the engine. Whenever a tooth goes past, you gear one positive and one negative pulse(a full sine wave) out of the sensor. The time between pulses is inversely proportional to the RPM.
In order to make a tachometer, I needed three things: One, something to read the (very weak) pulses of the sensor and translate them into something usable, a computer to take that signal and do some calculations, and a monitor to display it.
For these three components I used:
VRS amplifier: lm1815 (<$5)
Computer: Arduino Uno (~$15-20)
Display: http://www.ebay.com/itm/20X4-LCD-2004-LCD-2004A-LCD-LCD-2004-LCD-Display-Module-5V-yellow-green-screen-/140852727363?pt=LH_DefaultDomain_0&hash=item20cb7a0e43 ($10 or so; I had one handy spare)
To keep things neat, I used a http://www.ebay.com/itm/ARTduino-Proto-Prototype-Shield-DIY-KIT-for-Arduino-UNO-R3-Mega-1280-2560-328P-/181119016638?pt=LH_DefaultDomain_0&hash=item2a2b88debe (Is not a standard Arduino-endorsed design)
and http://www.ebay.com/itm/5M-16-FT-Rainbow-flat-Ribbon-stranded-10-Way-cable-10-pin-conductor-300v-/160993311415?pt=LH_DefaultDomain_0&hash=item257bf2fab7 so I could separate the Arduino from the screen.
I don't have the exact schematics for you guys now, but it's fairly easy to deduce - the lm1815 chip is off to the side, wired up on it's own entirely, with one wire(yellow jumper) connecting it to the arduino. LCD is wired up in a 4-bit configuration, pin numbers are in my code.
Here's my code:
http://pastebin.com/wjgjPxYC
The only confusing bit about the whole operation is the constants involved. Converting from microseconds per pulse to RPM is a string of calculations that got boiled down to the following: rpm= (60*10^6)/diff, diff being the time for 53 teeth to go by.
(note, as I was typing this out, I found an error in my math. I had that factor as 59904575, which is 1130275 * 53, 1130275 being /rounded/ 60/53*10^6, or the conversion from one tooth to RPM - multiplied by 53, I get the 599 number, which is off by rounding margin, or 3 RPM at 2K)
The other bit is converting the RPM to MPH - it's basically a matter of taking your final drive ratio, convert RPM to RevsPerHour, and use the circumference of your tire.
Cool or what, guys?
Any input? Questions? Comments?
Last edited by Macrobb; May 28, 2013 at 10:44 PM. Reason: Better code link
Trending Topics
Just think actuate sensors on oil temp, oil pressure, coolant temp, boost, EGT left/right/after turbo, EGT warning light, RPM, air in/after turbo/after intercooler, probably even throttle % if you have the auto TPS.
With 13 inputs you'd running out of thing to put sensors in.
Ford Trucks for Ford Truck Enthusiasts
Just think actuate sensors on oil temp, oil pressure, coolant temp, boost, EGT left/right/after turbo, EGT warning light, RPM, air in/after turbo/after intercooler, probably even throttle % if you have the auto TPS.
With 13 inputs you'd running out of thing to put sensors in.
The only problem I have thus far is that my next project is going to involve EGT, and I can't find a converter chip which will go over about 1000C, and we need like 1300C for an upper limit.
Things like oil pressure/water temperature are straight resistance sensors, easy to setup and read for an Arduino, however the cheap ones aren't all that accurate.
Throttle position... Hm, I wonder if we'd een need a TPS - Looking at the schematics, the cruise control has a feedback variable resistor which /might/ just read throttle position, but I haven't looked into it enough to be sure.
My plan, if I do do this, is to interface 8 or 9 sensors - one in the exhaust manifold in front of each cylinder, one in the intake, and perhaps one before/after a turbo if I ever get one.
With an arduino, some op-amps(which is apparently the way to interface these 'properly'), and a multiplexer or 8-channel spi DAC(or two), I could interface /many/ sensors, then pull the temps in and display low/high/average temps etc.











