Turns out you can save a hulluva lot of power by carefully using a GPS unit…
Just a reminder of my current (no pun intended!) set up:
- Arduino Pro Mini 05 with FTDI to USB host (Mac) for power and hardware serial comms
- GP-635T GPS unit with software serial comms
- 3DR radio transmitter with software serial comms
The GPS and radio receive power from the VCC output of the Arduino Pro Mini. I decided to put a multimeter in between to see what the results were.
Firstly, I was running a set of GPS readings constantly until I got a lon/lat fix, followed by transmitting this location on the radio, then looping straight back to getting a fix.
During all of the above the GPS was in continuous read mode. The radio was also constantly trying to pair over 433MHz (I had the receiver turned off).
Power consumption during entire test: a steady 95ma.
This would mean that my tracking device with its 2000mAh battery would have a life of about only 20 hours – not enough for an entire Bronze D of E expedition (2 day) let along a 5 day gold with 1 day acclimatisation.
GPS and power consumption
Every GPS unit typically has a constant read mode and a power saving mode. I decided to turn the GPS off by default until I needed it, then turn it on, get a fix, then transmit the fix and turn the GPS off again for 30 seconds. No need for readings more often than 30 seconds.
Here’s the power consumption and time to fix results for this first part of the test:-
|Time until GPS time received||21||34||40|
|Time until GPS location received||78||76||90|
Then I remembered that GPS units can have a ‘battery backup’ feature where they remember satellite position and location information whilst in power saving mode. I connected the extra 3.3V input to my arduino then retested. Here are the results:-
|Power draw searching (mA)||95||97|
|Power draw gps time, position searching (mA)||89||89||89||90||90||86|
|Time until GPS time received (s)||15||42||24||1||1||1||1||1|
|Time until GPS location received (s)||78||58||58||79||28||24||66||25|
|Power draw during pause (GPS off) (mA)||27||27||27||27||27||27||27||27|
As you can see I can now get 27mA draw for 30 seconds (whilst sleeping) and approx 89 mA draw whilst getting a fix. The fix also takes less time. Given that I sleep for 30 seconds and read a position for around 30 seconds, this will give me one accurate position every minute.
Averaging out the power usage now gives me 58mA draw, giving me 34.5 hours of use.
Other interesting things
In the above I didn’t notice that during GPS satellite acquisition for time and acquisition of fix there is a small power differential. I started noticing this in step 3 above, hence the two power draw rows above.
I also notice that the memorised GPS location was only really useful for quick reacquisition after a few fixes had been received. This leads me to conclude I need to take several GPS lat/lon fixes over a number of seconds before the GPS unit will store a useful satellite acquisition list.
I also noticed in the serial console that initial reading for lon/lat had inaccurate speed estimates – up to 6km/h! Taking several readings over many seconds then taking the median of these (to remove outliers) for lon/lat/speed/altitude etc. will likely result in a more trustworthy estimate to send over the radio.
There are other power saving tricks to try now:-
- See if the radio has a power saving mode similar
- Test the radio’s power draw whilst paired (above I only tested when unpaired – and thus searching for another radio)
- Change the time between attempted fixes to once every 5 minutes. (Thus an average of 33 mA, giving 60.5 hours of use – enough for a 3 day Silver D of E expedition)
- Take 10 readings during each ‘fix’ to a) teach the GPS the correct satellite table for its ROM, and b) get more trustworthy lat/lon etc values to transmit