Arduino GPS System
A fully functional GPS receiver with the ability to display the current location, heading, speed, average speed and maximum speed, the distance traveled, the bearing, distance and ETA to a way-point or coordinates, and the date and time.
Description
This is a sketch to interface an Arduino, SparkFun GPS Shield, digital compass (optional), and Nuelectronics LCD Keypad Shield together in a useful way, providing all the functionality of older commercial GPS receivers.
The sketch provides four modes of operation: current location, heading and speed; distance traveled, average and maximum speed; bearing, distance and ETA to a set of coordinates or a way-point; and the date and time. In addition, up to 20 way-points can be saved with names, so you can build a library of locations you have visited or plan to visit later. All settings can be configured on the fly from a configuration menu, and the settings and saved way-points are saved in EEPROM so they are persistent between power cycles.
The sketch uses Mikal Hart's excellent TinyGPS library and includes code from the ArduPilot Project for navigation.
The source code for the sketch is available for download below.
Hardware
In this basic configuration, the Arduino, SparkFun GPS Shield, and Nuelectronics LCD Keypad Shield are all stacked together using extra long stacking headers.
The only assembly required is attaching the GPS module to the GPS shield, soldering the stacking headers on to the GPS shield, and setting the toggle switch on the GPS shield to DLINE mode. After that, just attach the shields to the Arduino.
Modes of Operation and Configuration Options
Demonstration
| Attachment | Size |
|---|---|
| 34.65 KB |
- 3370 reads





Comments
Peter
Sun, 01/06/2013 - 17:10
Permalink
Nice work.
Nice work.
Joe Lawrence
Tue, 02/12/2013 - 18:54
Permalink
Cannot download file
I am using Windows 7 64 bit and Arduino 1.0.3. When I click to download the file I get a window with the file in one big sentence without separation between lines. I have tried to place carriage return after all suspected breaks but the file is missing a lot of things and will not run. Don't know what else to do?
Sean Carney
Tue, 02/12/2013 - 20:49
Permalink
Newline conversion
The reason why the sketch lacks any line breaks is due to different newline conventions on Linux and Windows. Wordpad should open the file correctly, you can then save it with the Windows line break characters.
Christian
Thu, 03/21/2013 - 11:41
Permalink
EEprom
Hello
I am very interested in this project and I would like to know what method are you using for the backup with an EEprom?
Is the internal EEprom ? It is not dangerous to 'tired' this 'beast'?
Do you have a plan for an external EEprom?
Adafruit has a shield with a backup on SD card.(GPS shield V1.1)
Very good job. Thank you
Sean Carney
Thu, 03/21/2013 - 16:51
Permalink
EEPROM
For saving data I used the internal EEPROM on the Arduino.
Using on-board EEPROM keeps the project simple since it doesn't require any extra parts. The Arduino's EEPROM has an advertised lifespan of 100,000 writes which is sufficiently large that I see no danger of losing data. The biggest drawback is that you only have 1,024 bytes to work with, but if you are creative and manage each byte carefully you can make good use of the limited space.
The backup of the EEPROM just outputs the entire contents of the EEPROM over the Arduino's serial connection. From there you can store the backup on a computer and restore it with by uploading a simple sketch. This seems to be the simplest way to do backups.
Right now I don't have any plans to change anything to do with memory, I'm more focused on improving features such as adding a digital compass.
Judemo
Fri, 04/05/2013 - 22:49
Permalink
Thanks
Thank u very much for your post, it's need little modificacions for Arduino one.
Great
JBP
Sean Carney
Sat, 04/06/2013 - 17:36
Permalink
Arduino One
The next time I start working on the code again, I might review if it works correctly with newer Arduino models. Otherwise, I'm happy still working with my Duemilanove.
Christian
Mon, 04/22/2013 - 05:26
Permalink
Problemes
Hello
After the acquisition of the equipment and checking of the proper functioning of the head GPS "Ultimate GPS Breakout" that I use, I started editing.
The display is stuck after "Arduino GPS Version 2" and no display on the serial port appeared.
After lengthy research and installation of multiple control points, I realized that it was the "Clear eeprom" and "Save eeprom " functions which prevented the smooth running of the programme.
After having neutralised them, the program worked perfectly.
I would like the program at your disposal if you wish.
Mystery !! No
I'm not sure that satellites signals pass through the LCD Keypad?
Thanks again
Sean Carney
Mon, 04/22/2013 - 07:42
Permalink
GPS Signal Strength
Glad to hear that you got it working.
The keypad shield does block the satellite signals a bit, but that only seems to be a problem when initially acquiring a signal. If I'm having trouble with it I usually take the keypad shield off until the GPS gets a fix then I put the keypad shield back on again.
Christian
Wed, 05/01/2013 - 03:15
Permalink
GPS
It's a bit "military" as the method!
Finally the LCD Keypad does block not too long ago the signal less than another GPS for my manufacturing with a Nokia 5110 display.
I added a routine to move the coordinates from decimal to sexagesimal and degrees and decimal minutes which are the most widely used forms on the GPS.
Thanks for your advice.
Petter
Sun, 04/28/2013 - 02:05
Permalink
Code update
Hi there!! I loooove this project! Great work! Is it a possibility to press one button to snap the cordinates from A to B?!
I having difficulties on the new arduino software! And implementing softwareserial.h instead of the newsoftserial.h! Doesn't work!! And don't know what to do!!
Christian
Thu, 05/02/2013 - 03:38
Permalink
Code Update
Hi,.
Need to download the SoftwareSerial .h using the link below and paste it into the Arduino library directory.
Then must be replaced one by one by SoftWareSerial NewsoftSerial terms in the .ino.
This should work.
https://github.com/arduino/Arduino/blob/master/libraries/SoftwareSerial/...
Add new comment