Introduction: Car Heads Up Display (Arduino + ELM327)

About: Electrical Engineer

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