ChargeMate
EV charging planner reading live battery state over CAN bus
/images/chargemate/obd-setup.webp
Peugeot iOn parked in a carport, the car ChargeMate reads over Bluetooth OBD-II
- Context
- Programming Intelligent Vehicles and Mobile Applications, DTU
- Year
- 2023
- Role
- Software developer
- Team size
- 2
- Tools
- Python · tkinter · OBD-II · CAN bus · Bluetooth serial
- Contribution
- Team of 2, wrote all software: OBD-II, threading and charge planning
A desktop application that reads live battery state from a Peugeot iOn over a Bluetooth serial OBD-II connection to the car's CAN bus, and then computes which days of the week to charge in order to keep the state of charge inside the 30–80% band.
The work
The application reads the live battery state from the car itself rather than from a manual entry, and it then computes which days of the week to charge in order to keep the state of charge inside the 30–80% band, since this is the range where lithium battery degradation is lowest. Data acquisition runs on a separate thread, which means that the interface stays responsive while the car is being polled.
What I built
I wrote the software side, being the serial OBD-II communication with the car's CAN bus, the threading, and the planning logic itself, while the project was carried out with one other student.
What testing changed
Usability testing led to reordering the control panel and adding an explicit generate plan action, since users did not reliably understand that the plan updated on its own. Here it is worth noting that the change was not to the algorithm at all, and instead to making the moment of output visible, which seems to be a fairly common outcome when a tool computes something quietly in the background.
/images/chargemate/hero.webp
Desktop application window showing live battery charge read from the car over OBD-II
/images/chargemate/interface.webp
Charging planner window with a day-by-day trip plan and a generate plan button
/images/chargemate/flow-diagram.webp
Software flow diagram of the app: threading, serial commands, and the charge-planning logic