The GPS SpeedOMeter project came about from some car needs.
My 1969 Mustang project is drivable but I really do not want to mess with reconnecting the speedomoter cable and figuring out
/ finding / installing the correct drive gear for the 4.11 rear gears and the taller street tires.
My son and I are also building his 66 Galaxie 500 and will have the same need with it.
Yes, I could use my smart phone every time and use some speedometer app to track my speed and I have done so BUT I'd like a dedicated solution in the car that doesn't require my phone laying around somewhere.
Having played around with various GPS solutions and used the TinyGPS / TinyGPSPlus libraries as well as the OLED display libraries I figured this would be a very easy project and indeed it has been.
The TinyGPS library even has a .speed.mph() or .speed.kmph() call that provides the speed information effortlessly. You can even use the .cardinal() call passing the current .course.deg() value to get easy to ready compass information such as N,S,E,W,NSW, etc which is quite handy.
As I am using a ProMini I can add more features to display if I'd like and have already added a DHT22 sensor to
read interior temp and humidity and display it. I could easily add another DHT22 for outside temperature and humidity if desired.
The AdaFruit OLED library I am using does take up a LOT of memory however so that may be the limiting factor on a ProMini.
The project drives a PWM pin to drive a motor to try to actually turn the air gap speedometer in the car. This may be a little challenging unless I implement some speed feedback as likely the manual speedo will have varying resistance and not really linear forces against the PWM which may be an issue. The PWM value is scaled using the MAP() function to start spinning around 5mph and max out at 120. Once I find the correct motor that can drive up to 2000rpm for the output at 5v PWM I can bench test and adjust. I may end up with a couple potentiometers for low/high map settings if I cannot get things accurate enough in hard code.
For now the example code from the TinyGPS+ library is used to poll and populate the variables. It actually pumps out the data still on the serial line using the debug serial lines if I need to view data later on. Every five seconds it goes and get the temp/humidity data and populates those variables for display as well.
A single input button is used to page through the various display page options. Currently there are only four, one is bar bones speed, temps, compass and satellite bar, another is lat/lon/altitude/temps, etc, next is a "max" page where maximum speed, temp, humidity and altitude during this session, and lastly a stats page showing details about satellites, PWM value, HDOP values, and actually MPH/KMPH from TinyGPS+.
I will design and print some cases for the various pieces including the main promini board and DHT22, the GPS sensor so we can mount it whereever it's needed, and a small compact case for the OLED so it can be mounted in the dash somewhere on the cars I use this in. On the Galaxie we will likely mount it inside the instrument cluster behind the plastic cover and blend it in as much as possible so it's only really visible when being used. On the 1969 Mustang I plan on merging this into my shift lift LED mount that I have designed to fit at the base of the steering column merging the two together.