Introduction: Compact Arduino GPS Speedo + and More

About: I’m a Programmer with a interest in Electronics and Cars
So I decided to build an device I could use in my car,
a GPS speedo looked like a good idea.

The Parts I used in this build:
-(fake) Arduino Nano v3 ($10,99).
-MT3339 GPS module.
-Graphic LCD + Connector ($5,00).
-Plastic enclosure ($4.58).
-1 x 6 pin switch.
-1 x Push button.
-1 x 470 Ohm resistor.
-2 x 10K Ohm resistors.
-A small Mini USB cable (came with Arduino)
And a USB power pack for portable power (4000mAh),
But in the car I could be powered of a 5v outlet (phone charger).


I need to confirm this, but this device uses less than 100mA Max.
in combination with an 4000mAh power pack I would last a minimum of 29 Hours.

Power consumption
-GPS   : 25mA on Acquisition, and 20mA on Tracking.
-GLCD  : Display 3-5mA, Backlight 40-45mA.
-Arduino : 20mA running


As you can see, the Backlight is good for 40% of the total consumption.
I’m looking a way to switch on/off the backlight with the Arduino.

if this work I the consumption drops to 50mA and it would last for 50 hours.

But at the moment all my output pins are used.
10 by the GLCD, 2 by the GPS and 1 for the button.

I could switch the button to an analog pin.
But I used pin 2 for interrupt, for later switching between modes.



So I will keep it this way and leave the backlight on. 29 hours is acceptable :)

Step 1: Controlling the GLCD

I used a GLCD(SED1531 controller) with a resolution of 100x48.
I bought very cheap at the time.

the only downside is that it uses a lot of pins.


This is how I connected the GLCD to my Arduino Nano:

LCD PIN                       Arduino Pin
1  GND                        GND
2  +5V                         +5V
3  Backlight (GND)   GND
4  -AO                          D12
5  -RW                         D11
6  -E                             D10

7  -DB7                        D9
8  -DB6                        D8
9 -DB5                         D7
10 -DB4                       D6
11  -DB3                      D5
12 -DB2                       D4
13  -DB1                      D3
14  -DB0                     D13

I found an example code online which controls the GLCD nicely.
For this to work you’ll need to define the fonts, in HEX.

I have put an example font in the Arduino file (download in next step) to use, but if you like you could change it.
you could crate you one using the program is put in the file, named: “GLCDFontCreator2”.


After defining the pins you only need to call setRow(1); for setting the row,
and lcdChar(“Text here”); to set the text in the row.

This GLCD contains 6 pictures above the GLCD matrix.
this could be turned on by calling: setMarker(number of marker, and a bool of on/off);

Step 2: Getting a GPS FIX

For this I used PIN 0 and 1 of the Arduino:

This is a little bit difficult.
I order my GPS MT3339 from EBay.
it came with a 115200 Baud rate and a 10Hz update rate.
This was TO fast for the Arduino to handle.

So I changed the Baud rate, For more info Please look at my other Instructable:
https://www.instructables.com/id/Change-Baudrate-of-MT3339-PA6C-With-Arduino/


To be Able to program the Arduino after I build it in its enclosure, I put a switch between the 2 wires going to the RX an TX port of the Arduino.

After I got a clear message on my Arduino from the GPS I needed to put some code in to do something with the GPS info.
For this I Used the Adafruit_GPS Liberty.  (included in “Files.zip”)

All of the code is found in de “Files.zip”
I have put extra information in the Arduino.INO file to explane all the funtions used and neede to get the info from the GPS.


--important--
For this code to work properly, you need to replace some file in the Arduino folder, this adds functionality to .String

backup your old file fist!

go to your arduino folder --> Hardware --> Arduino --> Cores -->  Arduino.
and replace both file with the one in de "Arduino_stringFiles.zip"


For more info or questions, use the comment section bellow.

Step 3: Creating the Circuit Board Diagram

Next up, cratering a board small enough to fit in my tiny enclosure.

it had to fit all the Items except the power bank.


First drawing a scheme: (pic1)
Its Pretty strait forward.


connecting all the pins to the ports as set in step 2

LCD PIN                       Arduino Pin
1  GND                        GND
2  +5V                         +5V
3  Backlight (GND)   GND
4  -AO                          D12
5  -RW                         D11
6  -E                             D10

7  -DB7                        D9
8  -DB6                        D8
9 -DB5                         D7
10 -DB4                       D6
11  -DB3                      D5
12 -DB2                       D4
13  -DB1                      D3
14  -DB0                     D13

As show on the diagram, between LCD6 and D10 there’s a 470 Ohm resistor,
and another 10K Ohm resistor connected to ground, as a pull down.


GPS PIN                       Arduino Pin
+3.3v                           +3.3v
GND                            GND
RX                               RX 0
TX                               TX 1

not shown on picure, bteweet both Data (RX & TX) pins there’s a switch.
this from stopping the GPS interfering during Programming,
because the Arduino uses the same pins to communicate with the Serial-USB chip.


Button PIN                 Arduino Pin
5v                                5v   
Signal                         D2 (interrupt pin)

I have attached a 10K Ohm resistor to the Signal pin and Ground, as a pull down.

Step 4: Creating the Circuit Board Itself

After creating the diagram it’s easy to solder the board,
just connect the wires to the pins of the Arduino, and to the components.

I soldered a Arduino Nano to a board, and on that board solders all the wires

1st picture, all things put together

Step 5: Building It in the Enclosure

To house all the parts, I had to saw out a windows for the GLCD,
drill 2 holes for the button en switch,
and saw out e hole for the USB cable.

Picture 1:  enclosure with windows for GLCD and hole for the switch.
Picture 2:  A opening for de USB cable.
Picture 3:  Everything put together, its I thigh fit. But it fits.

Step 6: Finished Project

DONE!
It shows the time, your location and speed.



I’m now working on a program for this build with multiple modes,
the Modes can be switched with the button on the front.

-I want to have a mode that displays only the speed, full screen, with big did gets.
-And a mode that show which way you’re going.

It’s easy to make this, because of the use of de GPS library,
and programming is easily done through the USB cable connected to the Arduino.

When it’s done, I will upload it here!



You can always download the code and experiment yourself,
it’s not hard to do :)




For more info or questions, use the comment section bellow.