Since the beginning of 2024 — together with my two partners in crime, Loïc and Thibault, at our company Spin42 — we started a project that aims to tackle vendor parts lock-in in transportation by redesigning the embedded systems in a vehicle. We want parts from different brands to seamlessly talk together and create an abstraction layer on top of them that we can standardize and use to extend a vehicle’s capabilities, or simply monitor them.
That’s how the Open Vehicle Control System was born. And because we wanted to use Elixir for this project, we decided to do as much as we could with Nerves. Since such a project requires a platform to experiment with, we used a 2007 Volkswagen Polo that we had at our disposal and started “hacking” it.
We thought it would be fun to convert it to an EV, so we started by getting the second hand electric motor we received to spin with the original gas pedal — our first big milestone. This was done using our “plank” prototype.
Then we reassembled the mechanical parts in the car (engine and gearbox) and got the wheels turning. This is what we explained in our ElixirConfEU 2024 talk back then — another big milestone for us.
In order to really drive the car, we needed to iterate on this first prototype, make it as safe as possible, and put everything back in the car. We eventually ended up with a more reliable setup. However, back in February, when we gave an update on our project at FOSDEM 2025, we didn’t have the battery fully completed. We could, however, show a moving car — powered by a very long extension cord
The whole embedded system we have in the car has several parts:
- The Vehicle Management System (Nerves on rpi4) — it’s the car’s new brain. It translates and orchestrates all car parts and seamlessly makes them work with the original ones. For instance, the RPM on the original VW cluster comes from the Nissan Leaf engine we put in the car. We wanted to keep as much as we could from the Polo while making the integration as seamless as possible.
- The infotainment system, which allows us to select the gear and get information about the car’s equipment status as well as our own OVCS components. It’s also a Nerves system, with a frontend built in Flutter that runs on a nice 10-inch touchscreen.
- Several generic controllers, which are built using Arduinos. No Elixir here, but they get their configuration from the Vehicle Management System through an adoption process we designed over the CAN network we created between OVCS components.
- The remote control bridge (Nerves on rpi0), which allows us to control the car using a Mavlink compatible transmitter.
There were, of course, lots of things not Elixir- or Nerves-related in this project, such as:
- Fabricating and welding junction pieces to fit the Leaf motor to the original VW gearbox
- Fabricating and welding new supports for the Leaf motor on the Polo chassis
- Building and wiring the new battery from Nissan NV200 used cells, which we put in custom-made aluminum boxes
- 3D printing all components, boxes, pieces, and cases, plus fitting pieces in the car
- Redesigning and rebuilding the cooling circuit
- Swapping the old brake system with a Tesla iBooster
- Welding a new Polo steering column onto the old one and swapping the original servo motor with a new one we can control
- And many more smaller things…
But since May, we can finally say that the first Nerves car actually works and can be driven both manually and remotely. We managed to create a new embedded vehicle system from scratch using Raspberry Pis and Arduinos, powering the whole thing using Elixir and Nerves — all without prior experience working on a significant embedded computing project. We think it speaks volumes about what you can do with Elixir and Nerves in the embedded world
We won’t be able to bring the car to NervesConfEU for obvious logistics reasons but here’s a small teaser we made to give you a heads up of what we will be talking about.