I have a GPS receiver, Holux M-1000, which you can use it with a laptop, a PDA, or a cellphone through Bluetooth.  I had used it for navigation with Palm TX and Treo700p (yes, I have long been a big fan of Palm PDA series) and Geocaching until I bought an Android smartphone which has a built-in GPS module. So Holux M-1000 has been in my drawer collecting dust for more than a year.

Recently, I wanted to make a small GPS device for measuring distance between two locations, for example, while you are playing golf you can measure how good your driver shot is. There are a lot of commercial product that can do this and much more, but buying is far less fun than making one by yourself (I'm sure Instructables visitor and author will strongly agree with me, right?) There are Android applications as well, but none of them attracts me.

My idea is to add a small LCD, similar size as the size of the GPS, and a microprocessor to acquire data from the GPS, calculate distance, and show it on the LCD along with time and date. I have ordered one of the popular LCD, Nokia 5110, and started doing research on how to get the GPS data, how to interprete the data, and what kind of data I can get.

Well, calculating distance seemed to be easy.  I could find a couple of ways to calculate the distance between two locations. However, converting GPS time(UTC) into local time seemed to be a little tricky, but it was fun to figure out the way to convert time to local time including daylight saving time and date.  I have already posted this part in my blog page and decided to share my Arduino program here. Once I get the LCDand finish assembling the device, I will post another Instructable with full program and pictures, too.  This Instructable includes only how to get the data from the GPS (Holux M-1000) through serial bus and how to convert the GPS time to local time.

Step 1: Connection Between the GPS and Arduino

Holux M-1000 has a bluetooth which means it should have serial output somewhere between the GPS module and the bluetooth module.  I opened up the Holux M-1000 and found RX… TX… on the PCB. YES!!  But I needed to know what voltage requirements for these pins. So I searched on internet for a datasheet or instruction manual of Holux M-1000 and found there were already some people tried to read GPS signal from the Holux M-1000 using either Arduino or PIC microcontrollers. Maybe I was not very lucky to find good articles but none of them were quite useful to give me answers what I wanted clearly.  I found the User’s Manual (1371865.pdf) from Holux homepage and I got very important information as below.
  • Pin 4 and 3 on the USB mini B connector on Holux M-1000 are TX and RX (so I don’t have to add wires from the PCB. That’s good news to make my life easier. In fact, I had thought the USB jack is only for charging the battery!)
  • Pins 5 and 1 of the USB connector are Vcharge (5V) and GND, respectively as standard USB pinouts.
  • Those two RX and TX pins’ voltage range is 3.3 – 5V
  • Data format: NMEA0183 V3.01, GGA, RMC, VTG, GSA, GSV
  • Power consumption: 40 – 50mA in normal mode, 35mA in power saving mode
In order to read serial data from the GPS, I used Jeonlab mini (minimal Arduino I made), but any Arduino compatible board will work. The GPS (Holux M-1000) and the Jeonlab mini v1.3 with an FTDI breakout board are shown in the picture. I have USB A to mini-B cable but I didn’t want to cut the cable, so I used a female USB-A connector as shown in another picture. Note that only 3 pins (V+, GND, and TX from GPS) are used since I only need to read serial data from the GPS, not sending any command or data to it. For this testing, I connected the TX pin from the GPS to one of digital pins on JeonLab mini, 10, and set this pin as software serial port.  Since I don't have an LCD yet, I needed to save the hardware serial port for the FTDI breakout board to communicate with PC. That's why I set up the software serial port for the GPS. For more detail, see attached Arduino sketch.

And another picture shows how they are connected each other. The FTDI breakout board is connected to my computer through USB cable.
<p>Actually GPS time currently differs from UTC by 16 seconds, primarily because GPS doesn't add Leap Seconds. So you'll need to make that adjustment in your code.</p><p>I've got an excellent UTC app on my phone which shows GPS time vs. actual UTC and local time.</p>

About This Instructable




Bio: A human wanting to have wings to fly...
More by JeonLab:Distance measuring (and more) device using Arduino and GPS GPS time (UTC) to local time conversion using Arduino Car Digital Compass & Thermometer 
Add instructable to: