Car Heads Up Display

Today I finished printing a mount/enclosure for the HUD and tested it in a parking lot. Here's a video of the test:

Ok, how in the world do you embed youtube vids in posts?

I am still following actively! This is just great! My projects lasts for years,I don't have anything to share, followers would die for natural causes before my projects ends...

Cheers,
Kari

Ok, this is cooler than all get out! Something I've been wanting to do for a while now.

I've vaguely following this. You tried to use the built in CAN bus stuff from the teensy but backed away and went with the blue tooth thing? Am I getting this right? If so why did you back away from using the teensy? Maybe I'm wrong because I see you have on on your PC board.

I use Teesnys for pretty much all my projects. I see the CAN bus stuff on there and always wanted to try it out.

-jim lee

jimLee:
Ok, this is cooler than all get out! Something I've been wanting to do for a while now.

Coming from someone who designed an all-out Arduino Cell phone, this is high praise; thank you!!!

jimLee:
I've vaguely following this. You tried to use the built in CAN bus stuff from the teensy but backed away and went with the blue tooth thing? Am I getting this right? If so why did you back away from using the teensy? Maybe I'm wrong because I see you have on on your PC board.

Almost correct.

I did originally try to access the CAN port directly via the Teensy (plus CAN transcievers), but after accidentally resetting my car's diagnostics computer two or three times I decided to use the COTS bluetooth OBDII device. Since implementing the bluetooth device, I have yet to have a problem with it like I did when directly using the CAN port.

I still, though, use the Teensy to interface with the bluetooth device and drive the LED displays.

All in all, I've found the documentation on how to hook-up, interface, and (ESPECIALLY) develop code for the Teensy's CAN ports to be vague and nearly non-existant. I did find a CAN library for my T3.5, but the library code mixed with a lack of direction on how to use it caused my car's diagnostics computer to reset when using one of the example sketches (and that's pretty scary when it happens in your Charger R/T :slight_smile: ).

If someone were to do an in-depth look at how Teensy <--> Automotive CAN works and create a super comprehensive tutorial, I'd be interested in trying it out again ( :wink: )

Power_Broker:
Coming from someone who designed an all-out Arduino Cell phone, this is high praise; thank you!!!

Wow thanks! I'd actually gotten the feeling that very few even noticed. I was amazed at how little the feedback was on that. And none whatsoever when I did the RPN calculator.

Anyway, my issue is that, although I know CAN bus is used as a little network in cars, I know nothing about it works or how they are using it. Id' have to get to grips with, er.. the "theory" of CAN bus first. Heck, I don't even know the voltage levels.

What's going on is that, I just bought this little 1999 Miata. It was a cheap thrasher and the last couple owners had been trying to make a race car out of it. Racing stripes, big tires, loud, roll-bars, attracts police like flies to.. Well.. The issue is that right now I have no Speedo or Tach. and really no way to debug where the problem is. So it would be really nice to be able to see what the heck is buzzing around on its little CAN bus. Is there any Tach or Speed packets on the bus? Or is it the instrument cluster that's broken? Things like that.

Also, it would be totally cool to build a little HUD for the thing.

But I have to get my current project finished up before digging into it. (Way over designed plant watering system.)

-jim lee

Big update:

Finally sat down and finished updating the code for this project. Till now, I had some issues with syncing to the ELM327 and keeping sync. With this new update, I immediately sync up to the ELM327 and stay synced. I'm also getting ~3.5 Hz refresh rate for RPM and Speed (mph).

Here's a link to the updated library. I'm going to put in a request for this library to be added to the Arduino IDE's Libraries Manager tonight, so look for it in your IDE in a week or so!

Hopefully I can get around to posting a video of it working soon...

Here is a video of the HUD in operation!

Been a while since I've given an update, but currently I bought an ESP32 and have decided use it in this project. Specifically, I'm going to replace the Teensy 3.5/HC-05 combo with the new ESP32 since it has built-in bluetooth and WiFi capabilities.

With this change, I the project needs an updated library, sketch, and PCB design. I've already updated the ELMduino library to be compatible with the ESP32 and am almost finished with the new PCB design - details to follow. Work on the sketch, however, will take some time considering the new feature I plan to implement: a diagnostics webpage. I can use the ESP32's WiFi capabilities to setup an "access point" for my phone to connect to. Then, the ESP will serve a webpage that contains diagnostics and telemetry information about my car (realtime).

More updates soon!

Here are the details/gerber files for the updated PCB design:

Car_HUD_2020-02-08.zip (131 KB)

Idea of the circuit is nice, but that limits us using mph only, with km/h we would need three digits.

Well, the core of your design probably is easy to change to use other displaying methods.

Cheers,
kari

True, I don't plan on going over 99mph or driving in kph, but it shouldn't bee too hard to add a new LED display. If you use an ESP32, you might run out of pins, but then again, maybe not.

Also, I tested some recent updates to ELMduino and verified everything still works! Looks like max throughput of the ELM327 is 13 total queries per second. This means, if I'm querying for both speed and rpm, I should expect a sample rate of about 6.5Hz - not bad! :smiley:

I also was able to setup a very simple Access Point webserver with dynamic content (AJAX).

Currently printing the new HUD enclosure - pics soon!

Turns out that you can't use all pins on the ESP32 for digital IO. Because of that, I need to add another MCU to the board for LED driving and SPI communication. I decided to pair up the Teensy I had on the old HUD PCB with the ESP on the new PCB.

Attached are the pics and gerber files

Car_HUD_2020-02-17.zip (156 KB)

And attached are the .obj files for 3D printing

HUD_3D_Print_Files.zip (87 KB)

If you're really getting fussy about digits, units etc. Just replace it with an OLED and have at it showing whatever you like.

-jim lee

True, but is an OLED screen as bright as LEDs at full power? I'm concerned I won't be able to see the OLED screen on a sunny day

OLEDs are typically small, so LED displays are nicer. Of course there is plenty of substitutes
for this design, so everyone should find suitable for them purposes.

I like to use TM1638s.

Cheers,
Kari

It wouldn't be as bright. And, sadly, OLEDs have limited lifespan. But, if they turned out to be bright enough, it could look really cool for awhile. Kinda' like the ones on the Chevy Camaros, where you get a color tach seemingly floating over the hood of the car.

-jim lee

Update: Because I didn't realize some of the LED control wires were routed to non-digital pins on the Teensy (DAC0 and DAC1) as well as one LED control wire to D13, I had to revise the PCB design and order another set. The new PCBs should get here tomorrow or Friday.

I also added the ability to connect a color OLED screen to the PCB that will be controlled via the Teensy.

Attached are the PCB gerber files.

Car_HUD_2020-02-29.zip (156 KB)

Also, I made some massive improvements in the ELMduino.h library!

Now you can use the library for custom PID queries in addition to standard queries. I also listed all available AT commands in the header.