CAN Bus: Volkswagen mit Arduino ansteuern

Endlich komme ich mal dazu dieses Projekt zu verbloggen… Anfang diesen Jahres habe ich mit einem Arduino ein Kombiinstrument eines VR Polos via CAN Bus angesteuert und mit Daten von Euro Truck Simulator 2 (ETS2) gefüttert.

Während des Spielens von ETS2 mit ein paar Freunden, kam uns die Idee, dass es doch interessant sei die Telemetrie Daten von dem Spiel auf Hardware anzuzeigen, die vor einem steht. Nach ein bisschen googeln, ist mir klar geworden, dass Cockpits für ETS2 Hardcore-Gamer häufig zum Einsatz kommen.
Außerdem bin ich dabei über ein Projekt bei Hackaday gestoßen mit dem Namen „Volkswagen CAN Bus Gaming„. Der Autor hat ein Volkswagen Polo 6R Kombiinstrument verwendet um ebenfalls die Daten aus ETS2 anzuzeigen. Da das Projekt recht gut Dokumentiert war, habe ich mich entschlossen das Projekt nachzubauen, daher auch der Hinweis, dass viel Wissen von dem Autor des Hackaday Projekt stammt.
Mein Kombiinstrument von einem „VW Polo 6R 1.2 TSI 63“ (6R0920860D) habe ich bei ebay für 49,99€ gekauft. Mehr besondere Hardware waren auch nicht notwendig.

Pinout und Ansteuerung des Kombiinstruments

Die Ansteuerung des Kombiinstrument durch den Bordcomputer im Auto läuft über den CAN Bus. Den „Bordcomputer“ für die Ansteuerung übernimmt in dem Projekt ein Arduino UNO. Da natürlich keine öffentlichen Datenblätter zu dem Kombiinstrument existieren, hat bereits Leon Bataille den Anschlussstecker sowie die CAN Adressen reverse engineered und der User Is0-Mick ein schönes Diagramm dazu gezeichnet. Bereits beim ersten Betrachten viel mir auf, dass es kein Standard 34 oder 30 Stecker Kabel ist, sondern ein 32er. Solch eine spezielle Anfertigung hat nicht mal Samtec vorrätig. Zum schnellen selber basteln habe ich vorsichtig ein altes Flachbandkabel eines Floppylaufwerks um zwei Pins gekürzt.

Das Kombiinstrument wird mit der typischen Autobatterie Spannung (12V) betrieben. Die Tankanzeige arbeitet mit verschiedenen Spannungen (siehe Schaltplan Tankanzeige Spannungsteiler). Die Temperatur wird mit 3 3k3 NTC Widerständen parallel errechnet.

Um die Ansteuerung über den CAN Bus zu testen, habe ich mir auf Ebay ein CAN Bus Modul bestellt basierend auf dem dem MCP2515. Die Auswahl ist auf das Modul gefallen, da hierfür die Schaltpläne online verfügbar sind, welche ich dann mit in meinen Schaltplan implementieren konnte. Für den Test habe ich die Codeschnipsel aus dem Hackaday Projekt verwendet.

Hinweise zur Ansteuerung: Während des Starten muss die Parkingbreak auf HIGH gezogen werden, um das Kombiinstrument korrekt zu starten. Um das Fernlicht/Nebellicht zu aktivieren muss der Pin auf HIGH gezogen werden.

Pinout

Temperatur Widerstände

Schaltplan und PCB Design

Glücklicherweise wurden auch die Schaltpläne für den Arduino Shield hochgeladen. Allerdings gefiel es mit nicht, dass ein zusätzlicher CAN Shield benötigt wird, daher habe ich mein eigenes Design erstellt mit einem MCP2515 CAN Controller, wie ich ihn vorher verwendet habe. Gerne hätte ich die Tankanzeige durch ein DIgitalpotentiometer ersetzt, jedoch habe ich kein Poti in so kleinen Schritten gefunden, weshalb ich die Variante mit der Widerstandsreihe dann dennoch gewählt habe.

Arduino Volkswagen Dashboard Shield Schematic

Arduino Volkswagen Dashboard Shield PCB

PCB Layout

Arduino Volkswagen Dashboard Shield 3D View

Software CAN Bus

Der Arduino Code ist nahezu identisch mit dem aus dem eigentlichen Projekt. Ich habe jedoch die Serielle Eingabe implementiert um die Telemetrie Daten Kommasepariert über den COM Port zu übertragen.
Die Telemetrie Daten werden durch das Open Source Projekt „ETS2 Telemetry Server“ gesammelt. Ein ungeschriebener Skin verbindet sich zu einem Websocket und sendet die Daten. Als Websocket Server dient ein Java Programm, welches die Daten dann an die Serielle Schnittstelle ausgibt. Über das Tool kann man auch zum testen manuell die Steuerung übernehmen.

Dabei ist ein Datensatz wie folgt aufgebaut.

<Geschwindigkeit>,<RPM>,<Tank>,<Rücklicht>,<Blinker links>,<Blinker rechts>,<Offroad>,<Wasser Warnung>,<Gurt Warnung>,<Batterie Warnung>,<Lampen Warnung>,<Tür offen>,<Nebellicht>,<Fernlicht>,<Handbremse>,<ABS>,<Öldruck Simulation aktivieren>,<Reifendruck niedrig>,<Kupplung>,<Kofferaum offen>;

Arduino Sketch: https://git.gurkengewuerz.de/Gurkengewuerz/VWPolo6R_Dashboard_CAN
Java Programm: https://git.gurkengewuerz.de/Gurkengewuerz/serialinterface

Probleme

Während des Projekts sind natürlich wieder einige Probleme aufgetaucht. Unter anderem konnte ich den Magic Smoke an dem MCP2551 leider nicht vermeiden, da ich VSS (-) VDD (+) verwechselt habe. Außerdem ist in der ersten Revision des PCB Design der 32er Pinheader zu nah vorne, weshalb er Kontakt mit der USB Buchse des Arduinos hatte.

Momentan zuckt auch noch die Geschwindigkeitsanzeige. Leider hat Leon Bataille dazu auch noch keine Lösung in seinem Projekt gefunden. Meine Idee wäre es, dass nicht häufig/schnell genug die Daten für die Geschwindigkeit gesendet werden, jedoch kam ich noch nicht dazu das in den Code einzubauen.

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.