Arduino GPS Display

I recently salvaged a Navman Jupiter 12 GPS module (a TU35-D410-041) from an old Phantom vehicle tracking device that I got for free and have been experimenting with connecting it to an Arduino Duemilanove and a spare HD44780 compatible 4×20 LCD display that I had lying around.

Once I had found the datasheet for the GPS module online I realised this would be very easy to connect to an Arduino as it has a simple 4800,N,8,1 serial output and supports NMEA-0183 v2.1 messages.

This gives a string containing the GPS data (known as an NMEA sentence) such as:
$GPRMC,190615,A,5323.3339,N,00234.9969,W,0.483,72.4,080711,3.4,W*4D 
Which includes the time, whether the GPS fix is valid or not, latitude, longitude, speed, bearing, date, and magnetic variation. Easy enough to parse into something a bit more human readable.

The GPS module only needs 4 or 5 wires connecting:

Pin 1 (Antenna preamp VDC input): connected to 5V output on Arduino (only required for active antennas)
Pin 4 (3.3-5VDC): Connected to 5V output on Arduino
Pin 18 (GND): Connected to ground on Arduino
Pin 11 (Serial Out): Connected to Pin 0 (RX) on Arduino
Pin 7 (Protocol Select): Connected to ground on Arduino (forces NMEA output)

The datasheet says pin 5 (master reset) should be connected via a 47K resistor to Vcc (grounding it causes a reset) but I found it works fine without this connected.

The LCD is a 4 line 20 character display I bought from Milford Instruments many years ago for a long forgotten and never completed project, it is compatible with the Hitachi HD44780 which makes interfacing it with the Arduino in 4-bit mode very easy using the LiquidCrystal library. This is the same display I used to make a Twitter display last year.

The LCD is connected to the Arduino as follows:

Pin 1 (GND): Connected to ground on Arduino
Pin 2 (5V): Connected to 5V output on Arduino
Pin 3 (Contrast): to wiper of 10K potentiometer across 5V and ground
Pin 4 (RS): Connected to digital pin 8 of Arduino
Pin 5 (RW): Connected to ground on Arduino
Pin 6 (Enable): Connected to digital pin 7 of Arduino
Pin 7 (Data 0): not connected
Pin 8 (Data 1): not connected
Pin 9 (Data 2): not connected
Pin 10 (Data 3): not connected
Pin 11 (Data 4): Connected to digital pin 5 of Arduino
Pin 12 (Data 5): Connected to digital pin 4 of Arduino
Pin 13 (Data 6): Connected to digital pin 3 of Arduino
Pin 14 (Data 7): Connected to digital pin 2 of Arduino
Pin 15 (Backlight 5V): Connected via 15 Ohm resistor to 5V
Pin 16 (Backlight GND): Connected to ground on Arduino

Include the LiquidCrystal library in your code and initialise with “LiquidCrystal lcd(8, 7, 5, 4, 3, 2);” and you can now lcd.print things to the display.

The code I used to display the latitude, longitude and time and date is available here, it’s very simple and it would be easy to change to show other GPS data that the NMEA sentences include such as heading, magnetic variation and so on.

I’m not sure what I will do with the GPS module in the long term, if I can find some nice big 7 segment LEDs or maybe a LED matrix I might make a solar powered GPS clock for the kitchen window ledge (it’s getting a good enough signal with the antenna located there now) or I wonder if an Arduino based NTP server would be possible.  Anyone think of any other ideas?

3 thoughts on “Arduino GPS Display

  1. I’ve built something quite similar, and also wondered if we could turn the arduino into an NTP server. That would be awesome

  2. the Jupiter series are sought after to construct GPS disciplined oscillators. The 10KHz signal is the reference fro a PLL to control a voltage variable crystal setup.

Leave a Reply

Your email address will not be published. Required fields are marked *

Notify me of followup comments via e-mail. You can also subscribe without commenting.