Most new cars at least come with the option to upgrade to a decent stereo. But, if your car is a base model, or simply a bit older, you’ve probably considered replacing the stereo with a modern unit—or you already have. The problem is that the new stereo won’t work with the buttons built into your steering wheel, which is infuriating for those of us of a certain mindset.
Ronny Hägerman has a 2002 Volvo V70, which is a sweet ride, but came with a tragically era-appropriate stereo. He replaced that with a shiny new Kenwood receiver, but, of course, his steering wheel buttons remained impotent and useless. There are adapters on the market that are supposed to solve that problem, but they don’t work with Hägerman’s particular year of V70.
Luckily, like many nice stereo receivers, the Kenwood has a 3.5mm input jack for remote control. Commands are registered by applying different resistances between the connectors. So, Hägerman’s first step was to setup some commands triggered by a series of specific resistances.
But, that’s only one piece of the puzzle. An Arduino can easily handle those resistance changes, but registering the button presses on the steering wheel is a little trickier. He could have torn apart the steering wheel and tied directly into the buttons. But, that’s sloppy and a bit dangerous.
Instead, Hägerman used a CAN shield on his Arduino to read the button presses from the car’s built-in CAN bus. First, he had to monitor the bus to find the messages being sent by the button presses. With that information, he built a custom board based on the same ATmega328 found in the Arduino Uno. That is then able to listen to the CAN bus messages, and then trigger the corresponding stereo remote commands.