Speed HeadUp Display





Introduction: Speed HeadUp Display

Easy and cheap HeadUp display under 15 $.

First - English is not my native language - so sorry for bad grammar :-)

Second - My first Instructable. Please, be patient... :-)

I´ve started thinking about HeadUp diplay in summer, when I left piece of paper on my car , near front window.

I´ve been surprised when reflection of this paper has been perfectly readable - so I decided to try to mirror something more usefull than just sheet of paper.
And when I found prices of GPS modules and LED matrix displays for Arduino, I was sure - I need GPS driven HeadUp speed display.

So, what we need?

Used material -

Arduino - Arduino Pro Mini 5V/16Mhz ... (Aprox. $ 1,8 )

GPS module - Ublox Neo-M8N module chip UART TTL Smart GPS gnss antenna dual GLONASS receiver (Aprox. $ 6.90)

LED matrix display - MAX7219 Dot Matrix Module For Arduino Microcontroller 4 In One Display (Aprox. $ 3,75)

Photoresistor - 5549 Light Dependent Resistor LDR 5MM (Aprox. $ 0.70 (20pcs))

StepDown Voltage convertor - Mini360 DC-DC Buck Converter Step Down Module (Aprox. $ 0.33)

Some resistors


Optional: LEDs

Arduino can be used any type - I´ve choosed this small chinese clone. It works on 5V TTL logic. - If you use the same type as me, you will need USB to TTL convertor for loading code into arduino. It is just for loading, for normal operation is not necessary.

GPS module - So there are plenty of cheap GPS modules on eBay or AliExpress. Most of them works on 3,3V.... I decided to pay little bit more and buy 5V TTL logic module. So, I need no level shifters for Rx/Tx communication and I need only one DC stepDown module for 12V to 5V conversion. Integrated antena is benefit :-) And can receive GPS, GLONASS and BAIDOU satellites.

Display - For our pusposes is purchased module too big - for correct speed information is needed to display three digits. There is so few drivers, who can reach more than 999 km/h :-) So... Half of this display module is enough. Fotrunatelly pcb is modular and can be divided, for example, by fret saw. Carefully :-)

Display brightness is regulated according to ambient light. More bright in sunny afternoon, less in highway tunnel. Voltage divider is created by LDR 5549 and 150k resistor - voltage according to light is measured on analog port A0 of Arduino.

There is optional use of two, or one LED for indication GPS lock. In case of two LEDs there are Green and Red LED connected to pin D8 and D9. Green means 2D fix, Red means 3D fix... After aprox. 5 month use i can say, that they are not necessary :-) But, if you want to know... There is also possible to use Pps pin from GPS module - if GPS is locked there is appearing 5V pulses (one second duration if fixed).

A few words about power - All components are powered by 5V. So we need make 5V from 12V (or 24V) from board power. I have good experience with DC-DC converter mentioned above. It is small, cheap and can handle current up to 2A. Which is much more than we need. Device has consumption around 150mA. Output voltage of converter is regulated by small screw - Make sure, that is 5V before connect Arduino and rest of device.

Input voltage you can take, for example, from cigaret lighter socket in your car, or from power socket of your radio... But, be carefull. If you do not know, where take your 12V, use lighter socket!

About code -

Library for serial communication should be common SoftwareSerial library, I´ve used NeoSWSerial library because is little smaller. You can even use Rx/TX pins of Arduino and avoid SoftwareSerial, but in this case, you have to accordingly change code.

Library for matrix display is brilliant PAROLA https://github.com/MajicDesigns/MD_Parola It allow us to display mirrored text just in one command :-) So, thanks to author.

GPS - Module gives in text mode straight informations about time, position, fix, number of satelites, speed and more... It is defined by NMEA protocol. I´ve tried some of GPS parser libraries, but finally I decided to directly parse NMEA messages to get required informations. Mainly because all tried libraries has been too big and provide lot of unwanted informations.

Speed is displayed in km/h. If you want to use miles per hour, please make changes in code. Comment conversion from knots to km/h and uncomment conversion to mph

rychlost = rychlost*1.852; //Original speed from NMEA is in KNOTS... So we have to convert it to km/h

//rychlost = rychlost*1.15077945; //This is conversion for mph

So... That´s all...

I hope, that all is written in clear way and your device will work on first attempt :-)

Feel free to write me at ludek.talian@gmail.com if you have any problems.



    • Space Challenge

      Space Challenge
    • Microcontroller Contest

      Microcontroller Contest
    • Spotless Contest

      Spotless Contest

    We have a be nice policy.
    Please be positive and constructive.




    This is a neat project and not too difficult. I did have some problems with it to begin with but Ludek and I worked it out. The most recent code is version 7. Can't guarantee anything before that. First my receiver wouldn't lock on to satellites I found out that it was, I just didn't know what information is contained in a GPS sentence. A google of GPS sentence breakdown helped a lot. Secondly, Your supposed to get a $ at the beginning of the sentence. I never got one. third and this was the biggest problem I had. My 8x16 display was offsetting too far to the right and the display was not inverted to make a readable display on the windshield. After trying to run some of the other MD_Parola examples and finding they were garbled. I found an article on the internet that told how to run a test program and adjust the MD_Parola and MAX72xx include files to correct the issues I was having.That did it.

    I´ve removed text part of code from article, because internal Instructables editor changed some rows and made it unusable.

    Please use attached file...

    I´ve made some minor updates in code - mainly translated names of variables to English.

    This is of great help to me, I'm making a HUD using an OLED display, I've been having issues with getting speed info from TinyGPS, I think it was just an issue that I wasn't waiting for the GPS to be available. I'm going to try your code though, I think it will work more efficiently anyway. Theoretically I can add more functionality later.


    Very nice project !

    I wonder if I can use some GPS a bit less expensive.

    What do you think ?

    Sorry for delay - I´ve been ill :-)

    Of course - you can use any GPS module which have serial (Rx/Tx) communication a his output is NMEA sentences... But I have bad experiences with cheap GPS -around 3-4$ on AliExpress, because all I´ve used has been not so much reliable... Mostly problem with external antenna.
    And second - these cheap modules use 3,3V TTL logic. I´ve seen some people connect them directly to 5V Arduino, but I think that this is not correct - you have to use level shifter...

    I think, that difference 3 or 4$ is not so big and there is less problems, than if you use cheap module...

    Nice instructable! I live in the US, near the Canadian border. I frequently visit my sister who lives in Canada. I’m wondering if it’s possible to change the display from KPH to MPH with say a push button? This could be very handy for me and my family.

    Sure! There is possibility to change this... I can even imagine to make automatized switch based on geographical location... If you cross for example N48.99870, northern direction, device automatically switch to km/h :-) And vice versa - in Southern direction it will switch to mp/h...

    Great idea!!.. I would add blinking or color changing (if possible) when speed goes over some limit. Congratulations on your well done first instructable.

    Color changing is possible if you use more expensive dot matrix - This, which I've used, is just red...

    I understand idea you mean - if you are "over limit" - do some warning...

    Maybe using of different colors LED should work.

    Blinking should be distrupting, don't you thing?

    Exactly. Blinking is disruptive which exactly what I want. In my area you will get a big ticket from the police and the idea is exactly that the display helps me avoid that.