I’m a happy user of a Citroën C-Zero. A small electric car, and when it was still produced, one of the lowest power consumption per kilometer. This model was build by Mistubishi and branded by Citroën and Peugeot in EU.
By searching on different forums, in particular myimiev.com, I was amazed by people able to find how to interpret the CAN-bus data in order to get the individual lithium cells voltages of the battery. There are several android applications able to access OBD2 data as well. So the source code of OBDZero gives a lot of insights.
Let’s take an Arduino based on a ATmega32u4, a CAN-bus board based on a MCP2515, and an OLED screen based on SSD1305. For the software I used plateformIO for Arduino, where the libraries for the screen and MCP2515 are easy to use. Wiring diagram and details below.
Information on the screen are
– The instant power delivered from / or received / by the battery, and a short history
– A chart representing the 80 battery cell voltages, minimum and maximum
– The state of charge in percent.
I used again Fusion360 to design a case for the gauge, I iterated from the Absurd Notifier design. I used PETG for the enclosure, PLA cannot sustain the heat when the car is on sun light.
I’m not sure I will leave this project in that state. The refresh rate of the data from the CAN bus plus the drawing on the screen seems to push the arduino to the limit. Some data are skipped, so I might try with an ESP32 in a future iteration.
I took the 12v from the car radio, such as the power is cut when the key is removed. At the opposite the 12V present on the OBDII plug is always there and I don’t what to drain out all the 12V battery.
The radio block can be removed just by pulling it.
From there it is quite easy to reach the ODBII plug, where only the 2 CAN lines are wired