Instructables
Picture of Arduino GPS Datalogger
Do you want to log some GPS data onto an SD card using your Arduino? Do you already own a Sparkfun microSD shield and GPS module? Did you try the Adafruit Sheild (although it is awesome and cheap) but it stole all of your pins? Want it to output into a nice, Google Earth friendly format? Well read on...
 
Remove these adsRemove these ads by Signing Up

Step 1: The Hardware

You will need:
1. An Arduino (which ever you prefer. I stick to the uno, duemilanove, mega, and this bad boy )
2. A GPS module (I'm using the EM-406 from Sparkfun )
3. A matching way to hook the GPS module to the Arduino (I went with Sparkfun's GPS Shield )
4. And a microSD Sheild (Again from Sparkfun )

Some optional stuff:
5. Indicator LED (ok ok I won't force Sparkfun on you for this guy)
6. A nice hard weatherproof case (I used the Pelican 1010 which fit perfectly)
7. Battery (No point logging GPS data tethered to your computer)

Step 2: Hook It All Up

Picture of Hook It All Up
2011-10-17_23-23-11_460.jpg
2011-10-17_22-56-30_972.jpg
It's a simple as, stacking the sheilds.
I put the GPS Shield on top to maximize reception.
The led is on pin 13 (see close up pic). This will flash every time it logs a GPS point.

To work with my code, make sure the little switch is set to "DLINE" on the GPS Shield. (Included a close up if you have no idea what I'm talking about) This is so we can use pins 2 and 3 to communicate with the GPS instead of the "UART" setting, which uses pins 0 and 1. This is a personal preference, modify the code as you wish. If you are using the UART, then make to switch it over to DLINE while uploading code to the Arduino if the shield is attached.

Lastly remember to have your microSD card formatted to FAT (FAT16).

Sparkfun (and many others!) has some awesome tutorials on the product pages that I referenced in this Instructable's Hardware page for both of the shields. I'd highly recommend a glance through them if this is a little too confusing. (Especially the microSD tutorial!!!!!)
echovoice3 years ago
nice tutorial, thanks for the code... works perfectly!

Where did you find the code???
Could you send it to me please? I can't find it anywhere here!

handsup99873 months ago

Hi,

I'm trying to compile the code, but it does not work. I downloaded the sdfat and TinyGPS to the library.

In file included from sketch_aug27a.ino:15:

C:\Users\Y510P\Documents\Arduino\libraries\SdFat2/SdFat.h:294: error: conflicting return type specified for 'virtual void SdFile::write(uint8_t)'

D:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)'

Valber Senna10 months ago
where is the code?
Can you help me with this error?

#error NewSoftSerial has been moved into the Arduino core as of version 1.0. Use SoftwareSerial instead.
In file included from GpsDataLoggerInstructable.pde:11:
sir...wat arduino software are you using? thnk u
jonnyboy323 (author)  electron27091 year ago
Check out step 1!
are you selling this?
adham rabea2 years ago
sire
can u upload the full software plz
thanks
jonnyboy323 (author)  adham rabea2 years ago
Not sure what you mean by "full software" but I just zipped the file to fix that download issue that people have been having. I added an update to the end of the Instructable too.
dsp97532 years ago
Hi Jonny,

I am using your code but it is not printing any values to sd card. Do you know what might be the issue? it creates the text file and adds in "year,month,day,hour,minute,seconds,latitude,longitude,altitude(ft),speed(mph),course" but it does not actually print any values from the gps. The text file is blank besides that one line.
jonnyboy323 (author)  dsp97532 years ago
Hmmm I am not to sure. The bulk of the problems usually come from actually writing to the card. Try printing some of the gps values to the serial port and see if you can see them. If you can then I would say the issue lies in the code where it is compiling that string of all the values. I will admit that this code is very old and probably not compatible with Arduino 1.0. I already owe Rustie0125 some new code from almost 4 months ago now... I can see what I can do and try to release version 2.0
I also find same issue.
but, by changing as described below, I was successful.
NewSoftSerial nss(3, 2);
->
NewSoftSerial nss(0, 1);
mrdakota2 years ago
Great job on the Instructable!
For a first time, it was well constructed.
Now for my problem,
I'm not getting the log file header unless I have the Arduino connected to my computer USB and it is not logging any gps data.
The only thing I have different is the SD card shield, I'm using the Arduino wireless SD shield. http://arduino.cc/en/Main/ArduinoWirelessShield
At first I tried editing the SdFatConfig.h file to change the CS pin from 10 to 4 for my SD shield and that didn't work.
So I changed it back to pin 10 and modified the shield, ( cut the copper trace from pin 4 and connected it to the unused pin 10) still no luck.....
I really looking forward to getting this to work.
Well by mistake , I installed a different micro SD card and it works PNY instead of SanDisk.
But still it doesn't work off the power plug only off the USB. I'm puzzled!
My-BAD- again! It turns out my battery(5v) wasn't enough.
Everything is fine now with a 7.4v Li-Po
Hope this helps someone else in the future!
jonnyboy323 (author)  mrdakota2 years ago
Sorry this is so late but for some reason I didn't even see your post until now...
Thanks for the info and for trying out my instructable!!!!!
I didn't even know that Wireless SD Shield existed, its pretty cool.
In fact, you have stirred up an old project that I have had in mind for a while now :)
Anyways I''m glad you got this all figured out..

Thanks!
Jonnyboy323
HI Jonny any News on the Accuracy problem in the code? , im buring to get this working
jonnyboy323 (author)  Rustie01252 years ago
Well just spent the last 4 hours working with my brother trying to get this to work. We ended up essentially re-writing the code. There are still a few strange little things that I'll make comments on in hope someone optimizes it, but once I clean up the code I'll post it and update the instructable.

Thanks for your patience.
HI Jonny any news ?
Rustie01252 years ago
Hi Thank you for sharing your hard work .! i have all the components but non is on the shields they all stand alone breakout boards. when i try and compile your code it gives me Alot of errors can you help ? mainly ones of missing Files or libraries can you please maybe add the links to all libraries needed

thanx
jonnyboy323 (author)  Rustie01252 years ago
Hello!
Thanks for giving my instructable a try. I'll do my best to help you, just let me know after this if anything else isn't clear and I'll got back and update the steps. It is possible the libraries have updated and no longer compatible with my code. I'll have to start from scratch and test it.

But for now, I'll take these problems 1 at a time.
First off, what hardware/breakout boards are you using?

Second: Libraries....
Which libraries do the errors seem to be referring to?
You will need the NewSoftSerial and TinyGPS (links in step 3).
You will also need the SdFat library.
You can get this here: http://www.sparkfun.com/tutorials/172
While you are there PLEASE read the tutorial. I had a terrible time getting that shield working. Then of course after my struggle they seem to launch a tutorial.... It is extremely helpful. (especially when you start getting into some of the harder stuff like writing/reading data to/from the sd card.
Make sure all of these libraries are extracted in the libraries folder of Arduino.

Now onto the hardware.
The first thing I would do is make sure all of your components work individually. There are thousands of arduino tutorials out there. Once you are sure each one works, you can then use use the working code you have found and compare it to what I am doing here (and hopefully modify it to fit your needs!!!!) That is essentially what I did for this project. Just google everything (including the errors) and keep trying until things begin to work.

Lastly pins:
This is a chopped up quote from the sparkfun microSD tutorial I mentioned above. Its about 3/4 of the way down under the section labeled "I downloaded a FAT library for Arduino on my own from the Web but it's not working! Why not?"

"On Arduino, the default pins are D10 (CS), D11, (MOSI), D12 (MISO) and D13 (SCK). The microSD shield, however, uses pin D8 for the CS signal. If this is left unchanged, the library will not work. You'll need to read your libraries documentation to find out where the signals are defined and change the definition accordingly. For example, in the SdFat library the definition is located in the file named 'ArduinoPins.h' and to change the signal on line number 518 from: #define SS_PIN 10 to #define SS_PIN 8"

If the issue is with the gps module, then the look at this line in my code:
NewSoftSerial nss(3, 2); Look at the documentation on NewSoftSerial. I cant remember off the top of my head which is which but for the gps shield it has the option to change the tx/rx pins from 0 and 1 (which are the arduinos tx/rx pins) and 2 and 3 with a little switch. Just adjust the numbers to whatever pins you are using. If it doesn't work, try flipping them. That is one problem that I know I ran into.

Whew that was a lot. Hopefully thats enough to give you a push in the right direct. Just post anything else that comes up and I'll dig out this project to test these things. Please post your results either way!

Thanks again.
Jonnyboy323
Hi Johnny

I got it to work thank you , I wantted to ask if you were aware that your GPS readings is very inaccurate . Iv done some research and it seems where the problem is is where you convert the output to int. instead of keeping them as is and saving them like that . I have media tek gps and the best accuracy I get when using your code is +- 10km range but when using a GPS example from Arduino I get 3 foot accuracy .

Is there a way you code step away from converting the output to int? And just print them as floats . ? Iv tried but I can get it working then

Thanx for the post very helpfull
jonnyboy323 (author)  Rustie01252 years ago
It's funny you mention that. I had never actually used this project to track something. But about a month after I made this instructable I decided to take it camping with me to give it a test. When I got home and uploaded the data it was really far off. I figured it was just a fluke, because when I tested the code before, it was right on (or so I thought.....). Anyways thank you for pointing out that bug. I'll have to look at it later on this week and see what I can do and re-upload the code.

Thanks!
Jonnyboy323
Hi Jonny

Looking forward to your fix , I'm buzy with same setup . Please let me know if you got it fixed .
Rustie01252 years ago
Also something else that I cant get from looking at the code is where or what pins is the Sd card attached to?
manashraja3 years ago
Sir, excuse me. The link you have provided is making me download "FADFMAUGTW2B6VB.tmp". I am not getting the required "GPSDataLoggerInstructable.pde" file.
jonnyboy323 (author)  manashraja3 years ago
That's very strange, the link used to work, but I see what you are talking about.
I tried re-uploading but it is still showing up as a .tmp file.

I do have 2 solutions for you however for now, until a moderator gets back to me:
1. Try a different browser. When I tried Internet Explorer it opened as a link and the full text showed. Simple Copy/Paste.
2. Change the filetype to .pde instead of .tmp and it opens just fine.

Thanks for your interest and sorry for the slight incontinence for now!
mikeasaurus3 years ago
great project!