Wiring car instruments for fun
Car accessories as game controllers?
I got inspired by the CAN BUS Gaming Simulator post on hackaday, where Leon Bataille connected a VW Polo dashboard and switches to Euro Truck Simulator 2.
I’d like to do something similar, but with with parts from a slightly different vehicle. In this article I’ll describe my initial findings - how the things are wired together.
Instrument cluster as output
Volkswagen group parts tend to be cheap around here, so I scored an instrument cluster from a VW Transporter T5 for 10 €, part number 7H0 920 850 R
.
The donor vehicle looked probably like this.
The cluster has two 32-pin connectors that happen to be compatible pitch-wise with the standard breadbord jumper wires. I suspected that it won’t be necessary to connect all 64 pins
I’ve found a pinout on a German forum and converted it into tabular form, as I wanted to do the wiring next.
Green connector with the pin numbering, blue connector after the wiring
BLUE | GREEN | ||||||
---|---|---|---|---|---|---|---|
T32/17 Main beam warn | 17 | 1 | T32/1 Terminal 15, 12V ignition | T32a/17 Immobilizer reader coil | 17 | 1 | T32a/1 Radio clock receiver, + 5 V |
T32/18 vacant | 18 | 2 | T32/2 vacant | T32a/18 Oil level and temp. | 18 | 2 | T32a/2 Immobilizer reader coil |
T32/19 vacant | 19 | 3 | T32/3 Speed signal - out | T32a/19 CAN-H (drivetrain) | 19 | 3 | T32a/3 Radio clock receiver, sender |
T32/20 vacant | 20 | 4 | T32/4 vacant | T32a/20 CAN-L (drivetrain) | 20 | 4 | T32a/4 CAN |
T32/21 vacant | 21 | 5 | T32/5 Fuel gauge sender | T32a/21 vacant | 21 | 5 | T3a2/5 vacant |
T32/22 Coolang shortage warn | 22 | 6 | T32/6 Day lights warning | T32a/22 vacant | 22 | 6 | T32a/6 Washer fluid level warn |
T32/23 Terminal 30, 12V | 23 | 7 | T32/7 Terminal 31, GND | T32a/23 MFA - up | 23 | 7 | T32a/7 Brake pad warn |
T32/24 Terminal 31, GND | 24 | 8 | T32/8 vacant | T32a/24 MFA - down | 24 | 8 | T32a/8 CAN-H (Komfort) |
T32/25 Self diagnostics - K | 25 | 9 | T32/9 Terminal 31, GND | T32a/25 MFA 1/2 - reset | 25 | 9 | T32a/9 CAN-L (Komfort) |
T32/26 Right park. light - input | 26 | 10 | T32/10 Oil pressure switch | T32a/26 Ambient temp sensor | 26 | 10 | T32a/10 Radio clock receiver, GND |
T32/27 Left park. light - input | 27 | 11 | T32/11 vacant | T32a/27 CAN-H (out) | 27 | 11 | T32a/11 vacant |
T32/28 Speed signal - input | 28 | 12 | T32/12 vacant | T32a/28 CAN-L (out) | 28 | 12 | T32a/12 vacant |
T32/29 Brake system warn | 29 | 13 | T32/13 vacant | T32a/29 vacant | 29 | 13 | T32a/13 Handbrake warning - input |
T32/30 S-Kontakt | 30 | 14 | T32/14 Rear fog light warn | T32a/30 vacant | 30 | 14 | T32a/14 vacant |
T32/31 Belt switch warn | 31 | 15 | T32/15 vacant | T32a/31 vacant | 31 | 15 | T32a/15 CAN-H (Info) |
T32/32 vacant | 32 | 16 | T32/16 vacant | T32a/32 vacant | 32 | 16 | T32a/16 CAN-I (Info) |
I powered both 12V wires from an adapter and the cluster lit up - so at least that works :)
Steering column switches as input
To feed the simulator with external input I’d like to use a real steering column switches.
Again, to keep the project costs I’ve bought the steering column switches from Škoda Fabia for another 10 €, part numbers 8LO 953 513 G
and 4BO 983 503 G
for the left and right stalks. These parts are shared between Volkswagen, Audi, Seat and Škoda, so the pinout should also be well documented online.
I suspect this consists of passive components only - simple switches that should close a circuit / emit a signal whenever a button is pressed or a stalk is moved into a specific position. In that case we won’t need 12 volts, but whatever our microcontroller uses for the digital inputs.
The connectors are not the standard “needle” pins but some kind of flat pins, most probaly FASTON terminals .
I’ll buy some and update this article when they arrive.
As the left and right stalk are separate parts, they would be wired separately as well, so it makes sense to analyze them individually.
The left stalk with turn indicators and beam switch, the right stalk with wiper controls and board computer buttons
Turn indicator stalk
The left stalk 8LO 953 513 G
controls the turn indicators and the headlights. It has 11 pins with labels such as 56
, 56b
, PL
, PR
and so on.
It turns out these are standardized in DIN 72552 , which specifies the codes for many contacts in the automobiles.
The table with the signal listing:
Contact | Description | Contact | Description |
---|---|---|---|
56 | Spot light | 30 | 12V Battery |
56b | Low beam | 30 | 12V Battery |
PL | Parking lights left | L | Indicator lights left |
PR | Parking lights right | P | Parking lights |
R | Indicator lights right | 49a | Flasher unit out, indicator switch in |
56a | Headlamp high beam and indicator light | 71 | vacant |
To actually decode which position the switches are in, we need to follow the logic of the wiring, as described in this blog post .
High/low beam and flash
Position | State | Comment |
---|---|---|
Low beam | 56 -> 56b |
|
High beam | 56 -> 56a |
|
Flash | 30 -> 56a |
Flashing works even with lights switched off |
Note that the terminal
56
will be powered when the lights are on.
This means that we can need to connect the pins 56
and 30
as digital output and 56a
/56b
as digital input in our microcontroller.
Turn indicator
Position | State | Comment |
---|---|---|
Left signal | P -> PL |
|
Right signal | P -> PR |
Summary of signals we need to connect
Inputs | Outputs |
---|---|
PL |
30 |
PR |
56 |
56a |
P |
56b |
It seems that we don’t need to connect the pin 49a
.
Wiper stalk
The right stalk 4BO 983 503 G
controls the wiper and the board computer.
It has three connectors in total:
- straight long connector with pins labeled
1
to6
- L shaped connector with pins
HW
,53b
,INT
,53a
- L shaped connector with pins
53
,31
,53e
,53c
.
Using DIN 72552 as a reference shows that the 53x
are related to the window wiper/washer, 31
is ground.
INT
should be related to the intermittent wiper mode. HW
should be Front window cleaner.
Wiper connectors
Stalk positions:
Position | Connection |
---|---|
Wiper off | 53a -> none |
Intermittent | 53a -> INT |
Normal | 53a -> 53 |
Fast | 53a -> 53b |
Pulled | 53a -> 53c |
Down | 53a -> 53 |
Board computer connectors
I guess the long connector is be related to the board computer buttons (up, down, reset).
According to a workshop manual they should be:
Contact | Description |
---|---|
1 | Rocker up |
2 | Rocker down |
3 | Ground (A) |
4 | Reset |
5 | Relay for wash/wipe interval system |
6 | Ground (B) |
Probing the rocker up/down and reset buttons with the multimeter buzzer worked - I got a beep on the correct pin with the buttons pushed.
It also includes a 4-position rocker that controls the intermittent wiper speed. It acts as a potentiometer between the pins 5
and 6
, with the values of approximately 1.95 kΩ, 4.53 kΩ, 7.77 kΩ and 15.5 kΩ.
So more connectors required are:
Inputs | Outputs |
---|---|
1 |
3 |
2 |
|
4 |
Summary of the required connectors of the steering column switches
Overall, there are 17 signals to/from the switches. That’s still enough to handle with an Arduino Nano, which features analog and digital inputs.
Digital output | Digital input | Analog input |
---|---|---|
3 |
1 |
5 |
6 |
2 |
|
53a |
4 |
|
30 |
INT |
|
56 |
53 |
|
P |
53b |
|
53c |
||
PL |
||
PR |
||
56a |
||
56b |
Getting the inputs to a computer
Reading the switches and buttons should be easy with an Arduino. However, to make the inputs usable in a game, I’ll probably need a board that can act as USB HID device (keyboard or a gamepad), so I’ll probably look into ATmega32u4 board (Arduino Micro).
Another option is to send the events to the PC over a serial port and write a utility to convert them into key press/release to use in a game/simulator.
What’s next
There are several follow-up activities:
- Connecting an Arduino CAN bus shield to the CAN bus pins on the instrument cluster
- Lighting individual warning lamps on the instrument cluster
- Successfully processing the signals from the turn indicators with Arduino and communicating that back to the PC
- Making it all work with a driving simulator :)