A while back I prototyped a ublox GPS unit with an Arduino Nano on a breadboard. I wrote up some thoughts here. The ublox GPS unit streams messages on a serial line that contain a variety of time, date, location, altitude and speed fields. So one obvious application is to make these parts into a desk clock. The big advantage of a GPS clock is that it never has to be set. Just power it with 12v and you know the time is correct. Well at least until the next Carrington Event.
Last week I built up the GPS ublox module onto an Arduino Uno in an Altronics K9675 prototyping case. I bought this nice perspex case and matching LCD for my teenage son as a way of demoing Arduino. Once you have an Arduino with an LCD connected, a lot of things become possible.
I made up a Veroboard ‘shield’ to get access to the Uno pins I needed, and soldered on a 7805 regulator for the LCD. I ‘mounted’ the Ublox 6m GPS breakout on four Vero tracks and wired them up to Uno serial tx/rx and power. I connected up the LCD in the usual way. I see from the pictures that the GPS antenna is supposed to sit on the bottom of the GPS PCB, but I put the pins in the other way. Oh well, I’ll just have to work out how to physically support it. That’s about it for melting solder.
Time in UTC is present in every NMEA message header, regardless of whether the unit has a GPS position fix. So I used the header timestamps for my time display. I initially thought to write code to apply the Daylight Savings Time offset. Do the EST/DST transitions happen on the same date every year? Of course not. I left it displaying Eastern Australian Standard Time (EST) for now. A push button could be used to apply the DST offset, with the state stored in EEPROM.
There is code for some other functions in my script as well. Gridsquare is one. Distance to a hard coded lat/long is another. Again, a push button could be used to cycle through various data on the lower row of the LCD. To keep it simple I added code to cycle the data displayed on the lower row, changing every 10 seconds. My unit shows lat/lon; gridsquare, speed and altitude; distance to home, school, Melbourne GPO, Sydney and London.
The rough wiring diagram below illustrates how it is wired. The row of numbers across the top are the LCD pins. The parallel vertical rows of small squares and labels are a subset of the Uno connections available on the 0.1″ headers running down either side of the Uno. A 7812 regulates 12VDC to 5V for the Uno and LCD including the backlight. The 470 ohm series backlight resistor was reduced to 33 ohms on experimentation. The script will be available on github.