Wireless GPS Data Logger for Wildlife




In this instructable, we will show you how to make a small and inexpensive Arduino based GPS data logger, with wireless capability!

Using telemetry to study the movement of wildlife can be a very important tool for biologists. It can tell you where animals live, where they feed and how far they travel each day. Biologists then use this information to help conserve animals and their environment.

We used this data logger on flying-foxes (also called fruit bats) and together with others, discovered that flying-foxes fly over 40 km each night, returning to feed in the same tree.

This data logger:

  • has a wireless range of over 2 km
  • a battery life of over 2 weeks (using the battery described in Materials and Tools)
  • transmits its current location in a 'heart beat' every 5 minutes
  • can store 100 locations in its EEPROM
  • and can transmit or 'dump' this data to your receiver daily or when commanded

By developing a small and inexpensive Arduino based GPS data logger, with wireless capability, we have provided students, citizen scientists and community groups with the equipment necessary to study the movement of their local wildlife.

Step 1: Materials and Tools

To build this instructable you will need to tidy your makers space, gather the materials (below) and plug in your soldering iron! If you don't know which end of the iron gets hot (hint: it's the pointy end) then you should probably find a friend who does to help you!

1 x Arduino Pro Mini 328 - 3.3V/8MHz

1 x GTOP LadyBird 1(PA6H) GPS Module

2 x HM-TRP 433Mhz RF FSK Transceiver

Here in Australia we use 433Mhz, it is made available to amateurs under the Radiocommunications (Low Interference Potential Devices) Class Licence 2015. Depending on your location you may need to use a transceiver operating on another frequency! Try the HM-TRP 868Mhz RF FSK Transceiver or the HM-TRP 915Mhz RF FSK Transceiver.

1 x Lithium AXIAL 1/2AA 3.6v Battery

1 x 10k Ohm 0.5 Watt Metal Film Resistors - Pack of 8

Step 2: Start With an Arduino Pro Mini

  1. Solder the header pins to the board
  2. Remove the reset button

See the image above for some tips!

Step 3: Wiring Up the GPS Module to the Arduino Board

Follow along with the images above!

Familiarise yourself with the GPS data sheet, or you can just wing it!

  1. Solder a length of red wire onto pin 4 of the GPS module (VBACKUP)
  2. Solder a length of black wire onto pin 12 of the GPS module (GND)
  3. Using double sided tape, attach the GPS to the bottom of the Arduino board
  4. Fold the black wire along the bottom of the Arduino board and solder to GND (next to RAW!)
  5. Push a resistor leg through pin 9 of the Arduino board and solder onto pin 1 of the GPS module
  6. Cut and fold the resistor leg down onto pins 9, 8, 7 and 6 and solder
  7. Fold the red wire over the top of the Arduino board and solder onto VCC
  8. Push a resistor leg through pins 5 and 4 of the Arduino board and solder onto pins 9 and 10 of the GPS module
  9. Cut the resistor legs level with the Arduino board and solder

Your GPS module is now ready for testing!

Step 4: Testing the GPS Module

It's always a good idea to test your GPS module before you continue.

  1. Install Arduino IDE on your computer
  2. Upload the code below to the data logger using a FTDI breakout - 3.3V
  3. Open Serial Monitor on Arduino IDE, you should now be able to see data being transmitted from your GPS module to the Arduino board
  4. You can also use other software like u-center to read the GPS data and give you other information, like how many satellites are in view and the accuracy of your location data!

Don't forget, you might need to go outside so the GPS module can pick up signals from the satellites!

Step 5: Going Wireless!

Have a look at the data sheet for this transceiver. What a clever little board, transmits just as far as a 60 mW Xbee Pro with a wire antenna but uses much less current so our battery will last longer!

  1. Solder a 10K resistor on top of the transceiver board between VCC and ENABLE, this will pull ENABLE high for sleeping, yawn!!!
  2. Solder a length of wire on the bottom of the transceiver board between VCC and CONFIG, this will pull CONFIG high for communicating
  3. Put some insulation tape on the side of the GPS module, this will prevent the transceiver board from shorting on the side of the GPS module case
  4. Solder another length of red wire to VCC, yellow to TX, black to GND, white to RX and blue to ENABLE
  5. Place the transceiver board on the remaining piece of double sided tape
  6. Pull the red wire underneath the Arduino board and solder onto VCC
  7. First pull the black wire over the resistor then down underneath the Arduino board, solder to GND
  8. Then yellow to pin 2, white to pin 3 and blue to pin A2

What an effort. Well done, your getting there!

Step 6: You'll Need a Receiver!

There's not much point in having a wireless GPS data logger if you don't have a receiver, and it couldn't get easier than this setup!

  1. Grab your second transceiver, you did get two, right!
  2. Solder a length of red wire between VCC and CONFIG
  3. Solder a length of black wire between GND and ENABLE
  4. Solder another length of red wire to VCC, black to GND, yellow to TX and white to RX
  5. Now place some header pins in the FTDI breakout
  6. Solder the red wire to VCC, black wire to GND, yellow to RX and white to TX (see how we reversed the wires connecting TX and RX, tricky, tricky, right!)

Now we're ready for some wireless communication!

Step 7: A Note on Antennas

Antennas make all the difference, but with wildlife, some times we have to keep them small.

The best antenna for your data logger and receiver is a dipole antenna, simply, you solder a 173 mm length of wire to the ANT pin on the transceiver and a seperate 173 mm length of wire to the GND pin. This combination will give us a line of sight range of over 2 km.

Sometimes you just can't have wires hanging out, wildlife generally have big teeth and will bite and chew and destroy antennas or even data loggers! To hide your antennas you can roll them up, this is called a helical or spring antenna. Simple wrap your wire around a small screwdriver, start at the end and roll it towards your transceiver.

P.S. do you know what else makes a great antenna, a fishing wire leader. They're generally made of braided steel wire with a plastic coating, extremely strong and very flexible. Excellent for use on wildlife who may be crawling underneath or around vegetation.

Step 8: Testing the Radios

  1. Upload the code below to the data logger using a FTDI breakout - 3.3V
  2. Remove the data logger from the FTDI breakout and power up the data logger using your battery or any other 3.3 v power supply, + to VCC and - to GND
  3. Insert your receiver into the FTDI breakout (usually you should remove the FTDI breakout from your computers USB port before changing peripherals)
  4. Start Arduino IDE and open your Serial Monitor
  5. Set Serial Monitor to 9600 bps and 'No line ending'
  6. Type 'tx' and click on Send
  7. You should receive a message from the GPS data logger saying 'TEST OK!"

Step 9: Deploying Your Wireless GPS Data Logger

That's it, testing complete, now upload the code below using Arduino IDE and your FTDI breakout and your done! You now have a wireless GPS data logger for use on wildlife.

Get to know your data logger before you deploy it, learn to listen for the heart beat using your receiver and Serial Monitor (there will be one every 5 minutes and don't forget the data logger needs to be outside). Once you receive the heart beat you have 5 seconds to type 'tx' and click on Send, then all the data will be 'dumped' to your screen, just copy and paste into the mapping software of your choice.

Get familiar with the code, you can change it to do whatever you want. Tracking a bear, well why not use a larger battery and receive a heart beat every minute!

I won't tell you how to pack your data logger or how to attach it to your wildlife, that's for you and your ethics committee to decide! I will tell you that we simply encased our data loggers with heat shrink, you could 'pot' them in epoxy if you wanted something more sturdy!

A huge shout out to all the people that helped me with this over the years and best of luck with your wireless GPS data logger!

Wireless Contest

First Prize in the
Wireless Contest

Arduino Contest 2017

First Prize in the
Arduino Contest 2017



    • Classroom Science Contest

      Classroom Science Contest
    • Sensors Contest

      Sensors Contest
    • Beauty Tips Contest

      Beauty Tips Contest

    12 Discussions

    Tecwyn Twmffat

    1 year ago

    Could this be useful for keeping track of pets that tend to wander away from home? My dog went off chasing a cat once and it took me 3 hours to find her.

    2 replies
    smithcsTecwyn Twmffat

    Reply 1 year ago

    Absolutely! You could change the code so you get the heart beat more often and help you find animals in real time.


    9 months ago

    Great idea! I've been looking for an off the shelf tracker for my cat but can't find any small enough. The Findster Duo comes close but is a tad big for a cat (OK for a dog). So been looking to build one myself. I've considered the Sodaq One board which has everything on it - radio (LoRa), GPS, battery charger so no wiring required. But is very expensive!. Then there is the Adafruit Feather LoRa and the GPS Feather wing which you simply connect together but is a bit big for my cat. Your solution has given me ideas. Thanks for sharing.


    1 year ago

    Great Example. But moveEEPROM() seems like a pretty big burden to me. Because it essentially sweeps down from 990 to 10 address, every loop.

    So maybe using Stack-like structure, just keeping the 'last Written address' variable as a global variable will allow much faster processing, and less interaction with EEPROM.

    That memory has about 100k Cycles till it gets dysfunctional. So for you, that would take 15minute * 100,000 = 2.8 Years.... => OK, that is a long time. Guess it is not such a big issue :)

    PLUS, I see in your code that you do



    //Write zeros to time and location to indicate NO_GPS

    EEPROM.write(10, 0);

    EEPROM.write(11, 0);

    EEPROM.writeFloat(12, 0.0000);

    EEPROM.writeFloat(16, 0.0000);


    EVERY loop, after the 90 second while loop expiration. So.. I am wondering if that is intended? Maybe it should be inside some else{} condition?

    Because your log must have had VALID, INVALID, VALID, INVALID kinda data I assume.... Maybe I am wrong... Nice Project!!!!


    1 year ago

    I'm looking for something like this to track my father-in-laws 1000+ cattle on his ranch in Mexico. Any ideas?


    1 year ago

    Very cool. Have you tried desoldering the PWR led? That will save several mA of battery.

    1 reply

    Reply 1 year ago

    Hi Splat! Thanks for your comment, your absolutely right, I think you can also unsolder the regulator too. My goal was two week battery life and I reached that with the described battery and no mods, so I left the components soldered to the board. Also, my data loggers are only glued onto the bats back and they usually fall off before the battery fails! I also played around with solar, there are some pretty small panels out their! Thanks again.


    1 year ago

    This is great. I'm an ecologist on a budget and I want to build GPS tracking collars for a number of different species. Thanks a lot for the information. I was about to order the materials to build a similar system using Adafruit's Feather microcontroller, either with either Xbee Pro or GSM, when I read your Instructable. I want to add a couple other sensors to the collar so I may need additional memory. Rather than a datalogger I was thinking of trying out Adafruit's FRAM breakout with 32Kbyte of memory. Your choice of components are lighter than mine which has me wondering if I should change my design. Did you consider other microcontrollers?

    1 reply

    Reply 1 year ago

    Sorry for the late reply MtnMig, I did look at other boards including Adafruit's Feather. This could be a great option for those who don't want to solder, just stack the modules, it would be a larger but some people are ok with this. Before I published this instructable I tried really hard to transfer over to the SparkFun SAMD21 Mini Breakout. Same size and a faster processor (although we don't really need a faster processor for this build) but what is really nice is the 256KB flash built into the processor, you could store well over 25,000 location with this board, or less locations but more of your sensor data. However, I had difficulty setting up the SERCOMs and getting it to sleep, it's not as straight forward as the Pro Mini, it'll take a better person then me to do this but it would be worth it, lack of memory in the Pro Mini is a problem for this build!


    1 year ago

    That's a neat idea for tracking their migratory patterns. We had a giant Okinawan Flying Fox in our backyard in Okinawa whose wingspan was longer than our beagle. He loved to eat fruit from the adan trees nearby. :)

    1 reply

    Reply 1 year ago

    Hi Swansong,

    Thanks for your comment. A few years ago I visited Taiwan and saw some of your flying-foxes in captivity. I think Taiwan is the southern limits of their range. Amazing animals, flying between all those islands and over open ocean! You might like to read about some work my friends did in the Philippines using GPS data loggers (not mine) on the endangered golden-crowned flying-fox.