Location and Data Logging Capability for Arduino

Good afternoon team,

Some advice/recommendations please.
I have a SYSTEM (ARDUINO MEGA 2560 R3) reading numerous (8 in total) analogue and digital sensors INPUT(s). The SYSTEM is mobile and moves around NSW. The values from the INPUTS are used in algorithms on the SYSTEM to generate information about the relationship of the INPUTS(s) each time the value of a sensor changes. The information from the algorithms generate MESSAGE(s) (csv text strings) which are sent to the serial monitor and a 16x2 LCD. The frequency of the MESSAGE is variable and will range between milliseconds and minutes. All the MESSAGE(s) are currently volatile ie visual only on the serial monitor and LCD display. This system is up and running and working as expected.

I now need to permanently capture each MESSAGE and store them for future retrieval and analysis. In addition, I now need to record the corresponding time/date/geographic LOCATION of the system each time a MESSAGE is generated. This will also be in the form of CSV text string such as MESSAGE + LOCATION.

I am seeking your advice on suitable hardware that will

  • Generate information of the current LOCATION of the SYSTEM (GPS?)
  • Provide current LOCATION information for use by the SYSTEM so I can append LOCATION to corresponding MESSAGE string (ie LOCATION needs to be available to the SYSTEM)
  • provide a means for the MESSAGE(s) (with LOCATION), generated by the SYSTEM, to be stored on a non-volatile and removable device(SD or micro SD)
  • integrated with the ARDUINO MEGA 2560 R3 (what ports/ comms must be available on the MEGA to add recommended hardware) and
  • retain the single (but enhanced) SYSTEM (direct connected shields etc?).

Are you able to advise me about options regarding hardware configuration to achieve my requirements. I happy to field any questions to fill gaps in my information.
The following mud map to help clarify requirements


Hey Tim,

In terms of hardware you will want a GPS module (I would recommend the Adafruit Ultimate GPS Breakout as it has some great tutorials to get you started. We have a few options for SD card readers.
I am not sure about how you would wire them all together, Have a look around at what is available and when you have found the options you are happy with we can help you work out the wiring.

I have played with a few different GPS modules, they all use a serial interface with default speeds like 4800 baud, 9600 baud. The ones I’ve used by default produce NMEA messages, and the default is Recommended minimum specific GPS $GPRMC. It looks like:
; $GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
It contains latitude, longitude, UTC date and time and is output (for the ones I’ve dealt with) once a second. For my purposes (not on Arduino so I can’t help there) I set up an interrupt routine that decoded the data and put it in fixed locations in memory. Then when my mainline wanted the data it disabled the routine, copied the data, reenabled the routine. Because the copy is quite quick it did not cause any data to be lost. All you need for this is a serial in (RX) line. There is no need to send data to the GPS unit, this is its default configuration. You can read about NMEA messages here: http://aprs.gids.nl/nmea/