Steering wheel remote audio control

Just been having a look at this thread. I'm intending to buy a Pioneer head unit. My Volvo XC70 has CAN BUS buttons, but I think I can find a way around that with a CAN transceiver chip and pattern recognition sketch.

However, relevant to this thread is the task of interfacing the Arduino to the head unit. Kudos to the poster that used a digipot, however I think there is a simpler way. Looks like the 'shift' function is purely digital - just pull the ring to ground to activate.

Internally, almost certainly what these resistors would do would be setting up a voltage divider on the tip connection, and the internal micro would use an A/D pin to measure the voltage. There would be an internal resistor from the input to Vcc (Ri), and the SWC resistor (Rs) goes to ground.

Vpin = Vcc * Rs/(Rs+Ri). If Ri = 10k, and the Rs values are as published in this thread, the Vpin voltages would look something like this:

(sorry, can't insert pic, you'll need to graph it yourself)

You could find out the internal resistor value easily enough - measure the open cct voltage on the tip connector with the unit powered up. Then put your DMM in mA mode, and measure the current draw. Ohms law (or more correctly Kirchoff's law for this one), V/I will give you the Ri value.

Not that it really matters, all we need to do now is use a D/A pin on the micro. However, this may not work directly, as the output impedance on the pin may not be able to drive the 10k internal resistance directly. I haven't checked the D/A specs yet. But all is not lost, simply use a PNP emitter follower configuration to improve the output impedance. That is, collector to ground, base to D/A pin and emitter to the tip connector. Note that there will be a 0.7V difference between the D/A output and the emitter voltage, so might not be able to get right down to the 1.2k resistance equivalent voltage, but should be able to hit the rest OK.

That's as much as I can say now without having purchased the head unit. That said, I'm actually more of a PIC man, so I probably wont actually try this on an Arduino board.

Cheers.