Car Heads Up Display (Arduino + ELM327)

Introduction: Car Heads Up Display (Arduino + ELM327)

About: Electrical Engineer (Virginia Tech Alumnus)

Some years ago I had the chance to drive a C6 Corvette with a HUD and loved it. The ability to see your speed and RPM without taking your eyes off the road made driving much more enjoyable.

For a long, long time I've wanted to make a HUD for my own car. While doing some research about OBD2 and Arduino car hacking, I decided to make one from scratch and this instructable shows how you can make one, too!


Step 1: Print/Assemble 3D Printed Parts

Download link to 3D printable Files

Note, the OLED mount can be glued anywere you would like on the HUD as long as you have enough wire to connect the OLED to the custom PCB.

Step 2: Fab/Solder PCB

Download link to the custom PCB gerber files

You can use the above gerber files to order a PCB through a company such as JLCPCB.

Step 3: External Wiring

In order to control power to both the ELM327 and custom PCB without having to plug/unplug the OBD2 extension cable, you will need to rewire the power and ground signals. This will require you to open up the OBD scanner's case and access the device's wiring.

  1. Using the above OBD2 pinout, cut the 12V wire in the middle
  2. Strip both ends of the cut wire
  3. Cut and strip 2 red wires equal to the distance between the OBD2 12V pin and the power switch on the HUD
  4. Cut and strip 1 red and 1 black wire equal to the distance between the OBD2 power pins and the custom PCB's screw terminal
  5. Solder the 12V wires so that the HUD's switch controls power to both the ELM327 and the custom PCB
  6. Using the above OBD2 pinout, solder the black wire to the OBD2 GND pin and screw the other end of the black wire to the custom PCB's screw terminal

See the above project schematic for help.

Next, wire the 3 pins on the custom PCB labeled "LED PWR" to the potentiometer on the side of the HUD.

Lastly, wire the female JST connector wires to the OLED display.

Step 4: Prepare/Mount HUD Plastic

  1. Take the round plexiglass piece, reflective film sheet, sharpie, and scissors
  2. Use the plexiglass piece and sharpie to trace a circle on the reflective film sheet
  3. Use the scissors to cut out the circle
  4. Stick the cut-out reflective film onto one of the sides of the round plexiglass piece
  5. Insert the completed assembly into the display slot on the HUD (reflective film facing the driver)

Step 5: Upload Code

The code for the ESP32 and the Teensy 3.5 can be found here.

Note: Ensure you have inserted the SD card into the Teensy's SD receptacle. This will allow you to record your vehicle's speed/rpm data real-time in a CSV format. Also note that you can use the Python code to graph your vehicle's data from the SD card. See the graph above for an example of this.

Step 6: Video

Arduino Contest 2020

Participated in the
Arduino Contest 2020

Be the First to Share


    • Science Fair Challenge

      Science Fair Challenge
    • Cardboard Speed Challenge

      Cardboard Speed Challenge
    • Make It Modular: Student Design Challenge

      Make It Modular: Student Design Challenge


    Emanuel Cesar
    Emanuel Cesar

    1 year ago

    Awaresome Project !! Congratulations !!! Tks for Sharing , by the way could you teach , the newrest way to insert ( Vídeos ) onto " Instructables ??? I have some troubles trying do it , tks in advance ! Rdgs !


    1 year ago on Step 6

    Nice project, thank you. Can you elaborate on why the need for two microprocessors and how the code works?


    Reply 1 year ago

    Thanks! I really wanted to have an ESP32 on-board to serve up a webpage (via WiFi Access Point) with my car's speed/rpm values updated real-time. This would allow passengers who can't see the HUD still access and monitor the data. However, the ESP32 can't use all of it's pins when in WiFi mode, so I needed a Teensy to drive all the LED signals and log the data on an SD card.


    Reply 1 year ago

    Ah, that makes sense. I'll dig into the code - looks like a fun project. Thanks for doing this!!