Introduction: Compact Arduino GPS Speedo + and More
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 :)
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 :)
Attachments
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
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);
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);
Attachments
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.
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.
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.
Attachments
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
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.
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.
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.