Geo Data Logger: Arduino+GPS+SD+Accelerometer to log, time-stamp, and geo-tag sensor data

 by techbitar
Featured
UPDATES

INTRODUCTION

I thought it would be educational to build a prototype that I can take on the road to log, geo-tag, and time-stamp sensor data to be analyzed later with mapping and/or data analysis applications.  So I figured why not start with a gadget that can log road conditions. This prototype, the Bump-O-Meter, measures road conditions by using an Arduino, a GPS receiver, an SD card, and an accelerometer sensor.

This prototype is a generic sensor logging/geo-tagging gadget which means the accelerometer can be replaced with any other sensor(s) to log and map anything anywhere.  

As a matter or fact my next adventure with this logger is to replace the accelerometer with a pollution sensor to visualize levels of air quality around town. 

PROJECT SECTIONS

This guide is divided into the following sections:
  1. Overview & Background
  2. Hardware & Software Components
  3. Wiring the Prototype
  4. Logging data to the LC STUDIO SD Card
  5. Geo-Tagging & Time-Stamping With the LS20031 GPS Receiver
  6. Measuring Road Condition with an ADXL335 Accelerometer
  7. PROGRAM: The Arduino Program That Pulls It All Together
  8. PROGRAM: A Plain GPS Logger To Interface With Google Earth
  9. Scrubbing & Formatting Data with a Spreadsheet
  10. Plotting and Color-coding Road Condition Data with GPSvisualizer.com
  11. Formatting GPS Date/time Output For Stamping Data
  12. Speed vs. Logging Accuracy

PROJECT OVERVIEW

The Bump-O-Meter uses an Arduino to capture the X,Y,Z motion data generated by the ADXL335 accelerometer. In this case, we are measuring road "shakiness" as a result of road condition. Poor road conditions and uneven road surfaces generate lots of sudden acceleration in the car body up and down (z-axis). But before this data is saved to the SD card, it's tagged with location information from the LS20031 GPS receiver and also date/time stamped in real-time using the GPS satellites' atomic clock. More on this later.

We want to capture and analyze the z-axis acceleration information visually to determine which road stretches are poorer and need attention. We can repeat this and compare our data over time. The possibilities are endless. Not just for road condition scanning, but for any sort of environmental geo data logging.  

HOW TO USE

We can use this gadget by placing it in a car and driving over a given road stretch to assess its condition.  We can even attach this prototype to a bike or skateboard to identify irregular and rough stretches of tracks.

We can substitute the ADXL335 accelerometer sensor with any other sensor(s) such as temperature or pollution sensors with simple code modification.

The data on the SD card can then be imported it into a spreadsheet for scrubbing, sub-setting, reformatting, analysis, and visualizing.

We will also make use of a wonderful website GPSvisualizer.com to plot our data over a map using intelligent markers that change shape and color according to magnitude of road shakiness so we can visually detect road conditions in need of further inspection.

I have published a guide titled "Connect your LS20031 GPS receiver to Google Earth via PC" explaining how to configure the LS20031 GPS receiver.  You can refer to it for more details on how to use the LS20031 GPS receiver.

HARDWARE & SOFTWARE COMPONENTS

HARDWARE 
  • Arduino Uno or Leonardo*:  $25 (Arduino.cc, Seeedstudio.com)
  • LS20031 GPS receiver: $50 (Ebay, Pololu, Adafruit, Sparkfun)
  • ADXL335 or ADXL345 Accelerometer (or any other sensor): $7 (Ebay.com)
  • SN74AHC125 as level shifter from 5V to 3.3V**: $1 (Mouser.com, Futurlec.com)
  • SD reader socket. The LC STUDIO: $2.50 (Ebay.com)
  • SD memory card.  $5 for 4GB. 
  • LED: $0.1
  • Resistor 1K Ohm: $0.1
  • Breadboard: $5
  • Jumper wires: $2
  • Male headers 2.45mm (0.1") -  straight and right angle: $1 (Ebay.com)
  • Any battery or power source that can provide 7-12V and a minimum of 500mA.

* I have not tried this prototype with the Arduino Leonardo because of some known issues with the SD library . But according to the release notes of the  Arduino IDE 1.02 software these issues have been addressed.

** In the future, I am phasing out the SN74AHC125 level-shifter (5V to 3.3V converter) in favor of the CD4050BE HEX Non-Inverting Buffer/Converter simply because it's more readily and cheaply available on Ebay.com.  I purchased 10 ICs for $4.0. That's $0.4 per IC. The CD4050 is not pin compatible with the SN74AHC125 but there are plenty of examples on the net.

SOFTWARE
  • Arduino IDE 1.02 
  • MiniGPS 1.4: This is a nifty utility to configure the LS20031 GPS receiver.
  • GPSvisualizer.com: This amazing website will help us plot logged sensor data along with the GPS coordinates using color schemes to indicate road conditions.
  • MS Excel or comparable spreadsheet: We will use a spreadsheet to scrub the logged data, to remove any garbage, to make sub-selections of our logged, and to format it in a manner that can be read by other applications and websites such as GPSvisualizer.com and Google Earth.
  • SD Arduino library (bundled with Arduino IDE)

 
VIDEO OF IMPORTING/REFORMATTING LOG FILE



DISCLAIMER
This is a prototype and prototypes by definition are drafts of products not finished yet. Your feedback is appreciated.

CONTACT
Hazim Bitar (techbitar)
techbitar at gmail dot com
 
Remove these adsRemove these ads by Signing Up

Step 1: Wiring the Geo-logger

Arduino-Sensor-Logger_bb.jpg
GPS-sensor-logger-(45).jpg
WIRING THE ARDUINO

GND                   GND rail of the breadboard (usually the blue row)
5V                      To 5V VIN of the SD card
3.3V                   To the positive rail (red-lined row) of the breadboard
PIN13                 PIN5 (2A) of the SN74AHC125 IC
PIN12                 SD MISO PIN
PIN11                 PIN2 (1A) of the SN74AHC125 IC
PIN8                   LED POSITIVE
PIN4                   PIN12 (4A) of the SN74AHC125 IC
PIN1(TX)            PIN9 (3A) of the SN74AHC125 IC
PIN0(RX)            PIN TX of the LS20031 GPS Receiver
ANALOG0          PIN X of the ADXL335 (or any analog sensor output)
ANALOG1          PIN Y of the ADXL335 (or any analog sensor output)
ANALOG2          PIN Z of the ADXL335 (or any analog sensor output)
GND (bottom)    GND rail bottom of the breadboard

WIRING THE SN74AHC125 IC

PIN1 (10E)          GND rail of breadboard
PIN2 (1A)            Arduino PIN11
PIN3 (1Y)            SD MOSI PIN
PIN4 (20E)         GND rail of breadboard
PIN5 (2A)            Arduino PIN13
PIN6 (2Y)            SD SCK PIN
PIN7 GND          GND rail of breadboard
PIN9 (3A)           Arduino TX PIN1
PIN8 (3Y)            GPS RX PIN
PIN10 (30E)       GND rail of breadboard
PIN12 (4A)         Arduino PIN4
PIN11 (4Y)         SD CS PIN
PIN13 (40E)      GND rail of breadboard
PIN14 (VCC)     Arduino 3.3V pin

WIRING THE SD CARD SOCKET

GND                 GND rail of breadboard
3.3V                 No connection
5V                    Arduino 5V pin
CS                    PIN11 (4Y) of the SN74AHC125 IC
MOSI                PIN3 (1Y) of the SN74AHC125 IC
SCK                 PIN6 (2Y) of the SN74AHC125 IC
MISO               Arduino PIN12
GND                GND rail of breadboard

WIRING THE LS20031 GPS RECEIVER

GND               GND rail of breadboard
GND               GND rail of breadboard
TX                   Arduino PIN0 (RX)
RX                  PIN8 (3Y) of the SN74AHC125 IC
VCC               3.3V rail of the breadboard

WIRING THE ADXL335 ACCELEROMETER

GND               GND rail of breadboard
Z                     Arduino ANALOG2
Y                     Arduino ANALOG1
X                    Arduino ANALOG0
3.3V              3.3V rail of breadboard
ST                  No connection.
zmilosavljevic says: Apr 20, 2013. 7:12 PM
Does anyone know why I am getting this: http://imgur.com/AeUVEwj , and not what the instructable shows? Any help would be much appreciated, especially seeing how far I've gotten.
0xKD says: Dec 10, 2012. 7:37 AM
"We have to level-shift the Arduino's 5V signals to 3.3V before we can connect them to the SD card."  Why?

Can I power the SD card via a 3.3V output of the SN74AHC125? I just have the SD socket and have got all components except the LM1117 to build a circuit like the LC STUDIO.
techbitar (author) in reply to 0xKDDec 11, 2012. 8:26 AM
Wikipedia says "The power consumption of microSD cards varies by manufacturer, but is in the range of 66–330 mW (20–100 mA)"
lmsalgado in reply to techbitarFeb 27, 2013. 8:22 AM
"Just because this SD card socket can be powered with 5V or 3.3V, we still can't connect 5V Arduino pins to the SD card socket's pins".

Also ask why? If the arduino's 5V socket can hold 500mA shouldn't I be able to connect this socket to the shield's 5V socket directly?
moguraj says: Feb 18, 2013. 1:41 AM
Hw to make this data logger into real time to upload the SD card contents after formatting into any GPS visulaizing website automatically !!
Can any one help me !!!
danang1 says: Dec 26, 2012. 12:03 PM
everything is well
tolstoyan says: Dec 5, 2012. 7:41 PM
does the GPS data logger always have to be connected to the internet or all it needs is a power source? i need an urgent reply coz im about to start making it please help me hehe tnx in advanced
techbitar (author) in reply to tolstoyanDec 7, 2012. 12:43 PM
there's no need to connect the gadget to the internet.
tolstoyan in reply to techbitarDec 7, 2012. 4:39 PM
oh i get it thank you very much
skrubol says: Dec 4, 2012. 1:55 PM
You can read the accelerometer more often than the GPS, so there should be no need to interpolate the accelerometer reading. Either you would interpolate the position reading (write 10 accelerometer readings for every GPS reading and do the interpolation in post processing,) or characterize the 10 accelerometer readings (likely take RMS or peak) and record once per GPS reading.
tolstoyan says: Nov 28, 2012. 6:19 PM
actually this is my 2nd time to use the arduino and im a student, most of the materials that you use is available in the Philippines but they differ on the look and sizes but the function remain the same

SN74AHCT1G32DCKR 2 input OR Gate tsop-5 <--- is this IC are allowed to use? i find it hard to find the IC SN74AHC125 as level shifter from 5V to 3.3V
or do you have any alternatives?
techbitar (author) in reply to tolstoyanNov 29, 2012. 11:37 AM
Google it and see if others have used it and what are their impressions. then check the datasheet and see if the specs meet your requirements
tolstoyan in reply to techbitarDec 2, 2012. 9:52 PM
ok tnx for the reply
psycho4m1947 says: Dec 2, 2012. 6:50 PM
awesome and super useful....keep going :)
zmilosavljevic says: Nov 29, 2012. 7:41 PM
Hello techbitar,

I just ordered all the hardware for this project, and I should be beginning it some time next week. I just had a question. Obviously all of these components would need to be powered up whilst in car data collecting while driving, so would one of these do the job: http://www.radioshack.com/product/index.jsp?productId=3802146 . Also, I got this for the 'in-home' programming and construction of the actual project: https://www.sparkfun.com/products/9442? ..... Do you think that'll be good as well? I would assume so.
techbitar (author) in reply to zmilosavljevicNov 30, 2012. 3:57 AM
The Arduino Uno specs are as follows:
Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-20V

As for current, I have tested my Bump-O-Meter with a USB connection which provides 5V and up to 0.5A. I did not run into any issues but I did not perform any exhaustive tests.

While driving around in my car, I powered the Arduino Uno via the DC plug using a battery brick made of 6 X 1.2V (NiMh) = 7.2V @ 2A. That voltage is close to the minimum recommended voltage. It worked but of course the moment the battery dropped to 6V and below I am sure I would have ran into all sorts of issues.

If I go production with this, I would use a 3S LiPo for a cool 11.1 Volts and 1.5A or 2A current for safety margin in case I need to add additional power hungry gizmos to the bump-o-meter.

Check you choices of power supplies against the min/max voltage specs and add a comfortable margin to the current with an eye on your future plans. then decide what fits your requirements best.
tolstoyan says: Nov 27, 2012. 5:46 PM
this is a LOT better than your previous version, i am planning to build it, i am from the Philippines, is it okay if i present it to my school? anyway i hope you can help me out if i encounter trouble in making this prototype :D
GOD bless thank you :)
techbitar (author) in reply to tolstoyanNov 27, 2012. 11:50 PM
Hi tolstoyan, by all means you can do whatever you want with the design. But if this is your first Arduino project, may I suggest that you start with something more basic (so many nice Arduino projects on instructbales.com) before you start with the geo data logger. I have provided point to point wiring diagrams both visually and textually so you can implement this with little need for intervention from anyone. if you use the same parts and wire them according to my instructions, the accompanying software will also work as-is. I would love to see some videos of your final project. Best of luck and keep me posted please.
Scubamatt says: Nov 27, 2012. 12:48 PM
Hello, this looks pretty awesome. I am learning to fly a Powered Paraglider and would live to have some type of instrumentation that gives similar results to what you have here. Just a simple GPS or Variometer seems like minimal information. Thanks for the post ill keep up with you to see how things progress. If you ever need an aviation instrument tester let me know!
techbitar (author) in reply to ScubamattNov 27, 2012. 11:42 PM
Thanks, Scubamatt. I am not sure I will be flying things with my gadget any time soon :) but I think the nice folks at DIYDRONES.com have great guides and tools for what you have in mind. Check this out: http://diydrones.com/profiles/blogs/a-newbies-guide-to-uavs
borogoves says: Nov 27, 2012. 7:08 AM
Air quality depends a lot on time of day. This seems like a good way to measure that variation on a local level over many, many trips through the same area at different times of day.
techbitar (author) in reply to borogovesNov 27, 2012. 9:02 AM
good point.
borogoves says: Nov 27, 2012. 7:05 AM
I would like to use something like this to log mileage driven in my informal two-household car-sharing program, for the purpose of sharing expenses. We determined that we don't need to know where the car has been, but would like to know just the amount of time it is driven + time it is away from the garage, for each user. So I think it's three sensor inputs needed to log three pieces of info:
1. am i away from the garage?
2. if so, am i moving?
3. if moving, who is driving me?
And the rest can be worked out offline. Any ideas?
techbitar (author) in reply to borogovesNov 27, 2012. 9:01 AM
my first impression is that you will have write a program to analyze the data generated by the geo logger. we already capture location, speed, and date/time. Since know your garage's latitude/longitude you can analyze logged data ranges that start and end with your garage's location.this signifies a completed round trip. then you calculate difference of time/date when you left the garage vs when you returned. that's the duration of your journey. then you scan the previous data for in between locations to look for periods where location does not change much which should mean the car is stationary. subtract the time for the stationary locations from total round trip time to determine for how much time the car was moving. this is very preliminary approach but you get my drift. the solution will be mostly programmatic.
scistarter says: Nov 26, 2012. 6:47 AM
This is great! Is there a way to retrofit this to log climate info from homes? http://www.instructables.com/community/Provide-1000-cheap-wireless-climate-data-loggers-/ ?? Thanks for your thoughts.
techbitar (author) in reply to scistarterNov 26, 2012. 10:49 PM
You can replace the accelerometer sensor with a host of environmental sensors such as temperature, humidity, barometer, CO2, methane, air quality, etc sensors
onlinebeat says: Nov 26, 2012. 3:48 PM
great stuff!
techbitar (author) in reply to onlinebeatNov 26, 2012. 10:41 PM
Thanks:)
biolethal says: Nov 26, 2012. 4:38 PM
Looks great, what if you mounted a cellphone on the car's dashboard and wrote an app for it? They have three axis accelerometers and most modern smartphones have a GPS feature or some sort of similar geolocation device.
techbitar (author) in reply to biolethalNov 26, 2012. 10:40 PM
There's often more than one way to achieve the same goal.
BrianHanifin says: Nov 26, 2012. 5:18 PM
Featured on today's Instructables Email. :-)
techbitar (author) in reply to BrianHanifinNov 26, 2012. 10:38 PM
Nice!
billbillt says: Nov 26, 2012. 11:22 AM
Great!!..
anool says: Nov 23, 2012. 6:50 AM
techbitar,
Nice, useful instructible. I'm going to find this very useful for mapping potholes here in Mumbai, India.
Anool
PS: check for a mail from me in your Inbox regarding this project.
techbitar (author) in reply to anoolNov 23, 2012. 9:09 AM
Hi Anool, I am glad you can put it to good use. Please keep me posted of how it goes.
Edgar says: Nov 20, 2012. 10:54 AM
Countless Gizmo Builders will benefit from this, so I've added a Link and an Infro to my Blog, about this, and nice work, by the way:
http://faz-voce-mesmo.blogspot.pt/2012/11/solidoodle-mindsets-e-muito-mais.html
techbitar (author) in reply to EdgarNov 22, 2012. 4:20 AM
Thanks, Edgar :)
Edgar in reply to techbitarNov 22, 2012. 6:54 AM
Keep those Instructables comming! :)
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!