The Citroën C-Zero is an electric city card sold in the European market. It is a rebadged Mitsubishi i-MiEV, which is based on the Mitsubishi i kei car platform. Kei cars, in Japan, are a special class that receive government and insurance benefits for being so small. As a result, the C-Zero is tiny and cheap, unlike the Tesla electric cars that are so popular in the US. One way that Citroën cut corners was by omitting infotainment and dash screens, which means there isn’t any way for drivers to see detailed data on their battery status. Pierre Muth wanted that information and so he used an Arduino to add a new battery gauge to his Citroën C-Zero.
The Citroën C-Zero may not show drivers detailed battery information, but the car’s computer does have that data. As with the car’s various sensor readings, statuses, and commands, that data flows through the CAN (controller area network) bus.However, Citroën (like most automakers) uses a proprietary protocol for their CAN bus and doesn’t publish its specifics. Users can access the CAN bus, but can’t read or inject messages without understanding the protocol. Fortunately for Muth, enthusiasts of the C-Zero/i-MiEV reverse engineered the CAN bus protocol and posted the details online.
With that information, Muth was able to access the CAN bus with an Arduino Micro board and a CAN bus shield based on an MCP2515 CAN transceiver. That let him pull the data on the real-time battery output, voltages of the C-Zero’s 80 battery cells, and the overall charge percentage. Muth displayed that information on an OLED screen inside of a nice 3D-printed gauge pod enclosure that he mounted to his dash. With less than $75 worth of hardware, Muth was able to add a status display that Citroën couldn’t find room in their budget to implement.