Introduction: Power Saving GPS With E-Ink Display

Every summer I go hiking in remote locations. Sometimes, when the trail is faint or even disappears, I have to use my phone's GPS to get my coordinates and then check my position on a paper map (I often do not have signal so paper maps are mandatory). In order to save my phone's battery I decided to build a low-power GPS device based on arduino and using an E-Ink display. An E-Ink display only needs power to actualise the screen, therefore it is well suited for energy saving devices.

What is the principle of this GPS ?

You turn the GPS on by pressing a push button, the display actualise your location, altitude and the number of satellites used to compute your location and then automatically shuts off to save the battery. Thanks to the E-Ink display, your location stays on the screen even once the GPS is turned off. You can change the coordinates system used by the GPS (longitude/latitude in decimal degrees, UTM system and its variants...) using push buttons, so that you can use it with maps from many different countries.

I learned so much things during this little project and hope you will have as much fun as I did doing it !

Disclaimer :

I am confident enough in this build so that I will use it during my next hikes, however I will always have my phone as a backup GPS. If you are not sure about what you are doing I advise you buy a commercial GPS instead of building one yourself. I encourage you to check the circuit and the code by yourself and I cannot be held responsible if the GPS that you built according to this instructable fails you.

Another thing : this GPS will not work in Norway and the Svalbard in the UTM mode. Indeed, the UTM grid is not designed in the same way in these places compared to the rest of the world and I wasn't able to include this specificity in the arduino due to memory constraints...


- 1 x Arduino Nano

- 1 x Ublox-6m GPS module

- 1 x E-Ink display with it's module. I used this one :

- 1 x 18650 Li-Ion battery (about 2000mah should be enough)

- 1 x 18650 battery holder

- 1 x charging and protection module for Li-Ion batteries based on a TP4056 like this one :

- 1 x two positions switch (the ON/OFF type)

- 3 x little push button switches

- 1 x 1 MΩ resistor

- 1 x General purpose N channel mosfet (I scavenged one from a computer power supply unit)

- 1 x Stripboard

- Wires

- 1 x Breadboard for prototyping

Step 1: Prototyping the GPS

First of all you need to assemble the device on a breadboard to test the components and the arduino code.

Powering the GPS

In order to power the device I used a Li-Ion 18650 battery of 2000 mAh. This kind of battery needs, just like Li-Po batteries, to be charged and discharged in a controlled manner. Charging you battery in the wrong way could take fire or even explode just like a Li-Po ! To be able to charge it using a classical phone charger you need to use a TP4056 based module.

In this first step you just need to solder the positive (red) wire from the battery holder to B+ on the module and the negative (black) wire from the battery holder to B-. Then you have to solder wires to OUT+ and OUT- on the module, they will connect later to the device.

IMPORTANT : Once the device is completed we will have to plug the arduino to the computer, when doing so it is REALLY IMPORTANT TO TAKE OFF THE BATTERY FROM THE DEVICE, otherwise there is a risk that the arduino will start to charge the battery in an incorrect way and there is, again, a risk of it taking fire.

Wiring things up on the breadboard

The next step can be a bit tricky : you have to wire everything on the breadboard so that it matches the schematic above.

A little tip : take the maximum of the space available on your breadboard, and ... take your time ;)

Step 2: Upload the Code

Now it is time to upload the code on the arduino !

First make sure that the battery is taken off from the battery holder, then plug the arduino to the computer, upload the attached arduino code and unplug the arduino. You can finally put the battery in the device.

If you have any question about the code, feel free to ask them in the comment section below ! :)

Step 3: Make It Work !

Now let me explain how this GPS actually works :

When you push the button that connects the ground and +5V pins from the arduino for around 3 seconds the GPS boots up.

The GPS can boot in two different modes : the configuration mode and the actual GPS mode. To choose the mode in which you boot up you have to change the position of the two positions switch connected between A0 and the ground.

Configuration mode : In this mode you can choose whether the GPS displays your location (latitude, longitude, altitude and number of satellites used to compute your location) in decimal degrees or if you want it to show your location (easting, northing, altitude, zone and number of satellites used to compute your location) projected on the UTM grid (or any variant of it as we'll see later). To switch between Easting/Northing and Latitude/Longitude mode just press on the push button connecting A1 to the ground until the display shows "MODE : E/N" (for Easting/Northing) or "MODE : L/L" (for Latitude/Longitude).

If you want your coordinates in decimal degrees then select the "L/L" mode and then switch back the two position switch to the GPS mode. Your settings are now saved in the memory of the arduino and the device will now sync up with the satellites and display your position, the altitude and the number of satellites used to compute your location. Beware : you have to be outside or close to a window to allow the GPS to hear the satellites ! The device then turns off automatically to save the battery.

To find your position on a map you will probably have to use your coordinates in terms of Easting and Northing. This system is actually a projection of your GPS coordinates on a grid. Most of the time the map will be graduated in the UTM system, but some countries use a variant of this system therefore you have to set another parameter in order to choose between the UTM system and the variant of your map.

To find the system of your map you often have to check tiny scriptures in a corner of it. If your map is in UTM system then parametrizing the GPS is straightforward : just press the push button connecting A2 to the ground so that the screen shows "ZONE : AUTO".

In many countries the maps are in a local variant of the UTM system : for instance in Sweden maps are often in the SWEREF 99 TM system. This system uses the same projection as the UTM system in the zone 33 but extended to the whole country ! This means that if you use a map in SWEREF 99 TM you will have to fix the zone of the GPS to 33 manually. To do so press the push button connecting A2 to the ground until the display shows "ZONE : AUTO" and then press the push button connecting A1 to the ground until the display shows " ZONE : 33". Similarly, in Finland most maps use the ETRS-TM35 system which is the UTM system in the zone 35 extended to the whole country (therefore you would have here to select "ZONE : 35"). Lots of countries have this kind of UTM system variants.

Once you have correctly parametrized the GPS just switch back the two position switch to the GPS mode, your settings are now saved and the device will now sync up with the satellites, display your position and shut down.

GPS mode :

The device will boot up and directly show your positions according to the parameters stored in its memory. Once the position is printed the device will shut itself down directly to save the battery.

Step 4: Solder the Components on a Strip Board and Assemble the Device

Now that everything works, solder the components on the stripboard according to the schematic. You can start from how you organized the components on the stripboad as a starting point for the stripboard design. Don't hesitate to scratch the copper from some stripes in order to make a more compact circuit.

Important : Don't forget to remove the copper across the pins of the arduino ;)

Finally, glue the screen, the battery holder and the GPS module antenna to the stripboard with hot glue. Use insulating electrical tape if necessary to avoid short circuits.

In order to complete the device you have now two options : you can either search online for a plastic box that would suits the dimension of your finished GPS (you will have to cut holes for the screen, the push buttons, the switch and the micro USB charger input) or you can 3D-print a plastic case that would perfectly suits your build.

Maps Challenge

Participated in the
Maps Challenge