Von einem Bekannten habe ich vor kurzem eine harte Nuss zum Knacken bekommen. Meine Aufgabenstellung bestand darin ein E46 Kombiinstrument mit SimHub zum Laufen zu bringen. Informationen zur Anbindung dieses Instruments gibt es im Internet nur wenige, daher waren viele Versuche nötig um ein Ergebnis zu bekommen.
ACHTUNG: Dieser Umbau erfolgt auf eigene Gefahr! Solltest du einen Fehler machen, kann sowohl das Kombiinstrument als auch dein Arduino oder sonstige Komponenten beschädigt werden! Ich übernehme keinerlei Haftung für entstandene Schäden!
Informations for english users, below the german part! Just scroll down until the blue colored part begins! 😉
Materialliste
- BMW E46 Kombiinstrument (Benziner) – Entsprechende Teilenummern sind auf dem Discordserver zu finden, da diese Liste ständig erweitert wird.
- Arduino Mega 2560
- Can-Bus Shield (ich habe ein Seedstudio Shield verwendet, andere benötigen Anpassungen im Arduino Sketch)
- Servo
- 3x Transistor PN2222A
- Widerstände mit folgenden Werten: 4x 1k Ohm, 2x 220 Ohm, 1x 10k Ohm
- Lochrasterplatine
- Lötpins und Buchsen zur Herstellung der Platinenverbindung mit dem Arduino
- Relais-Modul für Arduinos (mindestens drei Relais)
- Dupont-Kabel
Benötigte Kenntnisse
Natürlich solltest du dich schon einmal mit dem Arduino befasst haben und Grundkenntnisse vorweisen können. Du solltest wissen wie man Schaltpläne liest und wie du Libraries in der Arduino Software verwaltest. Außerdem solltest du dich mit SimHub auskennen und wissen wie du dort deinen Arduino anlegst bzw. verwaltest. Löten ist eine weitere Grundvoraussetzung für dieses Projekt.
Vorwort
Ich werde hier nicht jeden einzelnen Schritt erklären, sondern lediglich meine Schaltpläne und den Code mit Zielort veröffentlichen. Ich setze voraus das du die Grundkenntnisse hast um damit alles erforderliche umzusetzen. Für kleinere Probleme kann ich dir gerne im Forum oder den Kommentaren weiterhelfen, doch ich werde nicht bei jedem Handgriff nachhelfen. Dieses Projekt war für mich sehr lehrreich und wenn ich dir jeden Handgriff erkläre, bringt das bei dir keinen Lerneffekt 😉
Wichtige Information zum Can-Bus-Shield: Es gibt verschiedene Shields für diesen Anwendungsfall auf dem Markt. Es kann daher vorkommen das du den Arduinocode für die Library deines Shields anpassen musst! Bitte Informier dich auf der Seite des Anbieters deines Shields, welche Library benötigt wird!
E46 Kombiinstrument und seine Schnittstellen
Das Kombiinstrument hat auf der Rückseite zwei große Stecker. Die Belegung der Stecker ist auf dieser Seite aufgelistet, vielen Dank dafür! Wie der Belegung zu entnehmen ist, werden diverse Signale benötigt um alle Funktionen des Clusters zu nutzen:
- Can-Bus: Digitales Bussystem für eine Vielzahl von Signalen, Standartisiert (Drehzahl, Wassertemperatur, DSC, Batterieindikator, uvm.)
- K-Bus: BMW eigenes Bussystem zur Übertragung von nicht hoch relevanter Daten (Lichtindikatoren, Blinker, uvm.)
- PWM-Signal: Der Speedometer benötigt ein PWM-Signal gegen GND
- Relais: Einige Signale werden mit Relais geschaltet (ABS-Leuchte, Handbremsleuchte, Hintergrundbeleuchtung)
Leider gibt es wie bei den meisten Instrumenten mit der Anzeige des Tankfüllstands ein Problem. Tachos sind so aufgebaut, dass schnelle Abweichungen der Tankgeber ignoriert und erst mit extremer Verzögerung dargestellt werden. Das macht im Fahrzeug auch Sinn, denn sonst würde die Tanknadel während der Fahrt permanent schwanken. Im Simulator wird uns das jedoch zum Fallstrick, denn schnelle Wertänderungen bei einem Boxenstop oder ein hoher Verbrauch wird nicht korrekt dargestellt.
Dieses Problem umgehe ich, indem ich den originalen Antrieb der Tanknadel entferne und durch einen Servo ersetze. Dadurch kann ich immer sofort die Werte ansteuern, die direkt aus der Simulation kommen. Du solltest jedoch beim entfernen des Antriebs vorsichtig vorgehen, um die darunter liegende Platine nicht zu beschädigen. Ich empfehle dir den Tacho hierzu zu zerlegen, erst die Nadel von der Welle zu ziehen und anschließend von der Rückseite den Motor nach und nach zu zerlegen. Übrig bleibt eine Welle mit Zahnrad. Dieses entfernst du nun und klebst die Welle gerade in den Servo. Anschließend kannst du mit Heißkleber den Servo von der Rückseite auf die Platine kleben. Die Welle sollte dabei so weit auf der Vorderseite raus stehen, damit du die Nadel wieder anbringen kannst.
Schaltplan
Arduino Sketch
Der Sketch ist angepasst für die Spiele Euro Truck Simulator 2, American Truck Simulator, Project Cars und Assetto Corsa Competizione. Mit anderen Spielen die SimHub kompatibel sind wird der Sketch auch funktionieren, allerdings mit folgenden Einschränkungen:
– Keine Lichtindikatoren
– Keine Motorstörleuchte
– Kein Fernlichtindikator
– Keine Ölkontrolleuchte
Die restlichen Variablen sind immer von der jeweiligen Simulation abhängig. In der Variablentabelle in Simhub lässt sich hierzu einfach nachschauen welche Werte das jeweilige Spiel liefert.
Weitere Simulationen können im Sketch jedoch auch einfach nachprogrammiert werden. Ich habe den Code recht übersichtlich gestaltet, dadurch ist ein Anpassen problemlos möglich.
Nicht jede Simulation benötigt eine Anpassung.
SimHub Integration
Für SimHub habe ich zum Schalten der Beleuchtung ein kleines Plugin programmiert. Dieses Plugin sorgt für einige neue Variablen im System, welche von allen verschiedenen Quellen gelesen oder geschrieben werden können. Dadurch kann ich in meinem Touchdashboard eine Taste festlegen, welche die Variable steuert und diesen Wert anschließend auf den Arduino übertragen.
Das Plugin besitzt acht Bits, welche mit 1 oder 0 beschrieben werden können. Zusätzlich habe ich noch 4 Bytes eingefügt, um eventuelle Werte zu übertragen.
Nach dem Anschluss des Arduinos an den PC wird dieser im Arduino-Bereich von SimHub erkannt. Nach erfolgreicher Einbindung, stelle die Rate des Arduinos im Simhub auf „230400“. Dies ist notwendig um die Daten in einem schnelleren Takt zu übertragen, um den Can- und K-Bus nicht aufzuhalten. Anschließend gibst du folgenden Code in das Custom protocol ein:
Die aktuelle Version des CustomProtocol ist im Downloadfile als Textdatei zu finden.
Vergiss nicht die Änderungen mit „Apply“ zu bestätigen, denn sonst werden diese nicht ausgeführt.
Das war es auch schon. Wähle nun ein Spiel in Simhub aus und starte dieses um den Tacho zu testen.
Schlusswort
Insgesamt habe ich an die 60 Stunden in dieses Projekt gesteckt. Die Hauptarbeit war dabei die Hardware zu erarbeiten um alle Signale in den Tacho zu bringen.
Vorallem die Signale des K-Bus laufen bei vielen Daten etwas verzögert. Dadurch kommt das Blinksignal bei ETS2 manchmal nicht sofort an, sondern benötigt noch ein bis zwei Sekunden. Woran das nun genau liegt, konnte ich bisher nicht raus finden. Sollte dich das Problem extrem stören, könntest du es mit einem anderen Transistor oder Mosfet versuchen, der die Signale besser verarbeitet. Auf der oben beschriebenen Seite für die K-Bus Kopplung findest du außerdem noch weitere Möglichkeiten den K-Bus anzusprechen.
Ich hoffe ich konnte dir das Leben bei der Einbindung des E46-Tachos etwas erleichtern und wünsche dir viel Spaß und Glück mit deiner Umsetzung! 🙂
Kleinere Fragen können gerne im Forum gestellt werden. Jedoch ist mir eine größere Weiterentwicklung bezogen auf den E46 nicht mehr möglich, da ich die Hardware nun nicht mehr bei mir habe.
Some Informations in English
First things first: My english isn’t that good! It’s years ago since I have to write and talk in english, so if you find any faults in spelling / typing, you could take them and be happy with it 😀
Warning: This is for users with advanced knowledge! If you make a fault, it could destroy your instrument cluster, arduino or other components! Do this at your own risk! I do not accept any liability for your damages!
Here are some short informations for users which are not from germany 😉 This is not the easiest modification you can do for your simrig! You need advanced knowledge about soldering, arduinos and also simhub. You need to know how to read a circuit diagram and how you can install a library on your arduino ide. I will not descripe every step, with the informations in the circuit diagram and arduino sketch, you should make this by yourself. The cluster I used for this was from a friend of mine and I’m not able to develop more functions for this, because I couldn’t debug it on the hardware site.
In the sketch there should be a lot of games supported by native. Some simulations had special values, which are needed to be programed in the sketch as well. For the games ETS2, ATS, pCars and Assetto Corsa Competizione I already did that. If you need some special functions in other games, you have to code them by yourself. The sketch is well descripted with comments, so things aren’t too difficult 😉
At first a materiallist, you need the following parts for this project:
- BMW E46 Instrument Cluster (some possible serial numbers and the wiring for this part are descriped on this site)
- Arduino Mega 2560
- Can-Bus Shield (I used a Seedstudio Shield for this, others need some adjustments in the arduino code)
- Servo
- 3x Transistors PN2222A
- Restistors with following values: 4x 1k Ohm, 2x 220 Ohm, 1x 10k Ohm
- Perforated circuit board
- Arduino-Relay module with at least 3 relays
- Dupont wires
- Solder pins and sockets
You need the servo for replacing the original fuelgauge. Just look at the pictures above, it’s self explaining.
Download all the files in this article and wire the cluster as you can see in the circuit diagram. In Simhub you have to integrate the shareddataplugin. This gives you a eight bits for datasharing between all your simrig components. Also it provides four bytes for sharing analog data. For the background light of the cluster I used the bit two of that plugin.
If you don’t want to use this plugin, just change the wire for the background light and erase the needed code in the simhub values and arduino sketch.
The End 😉
I spend a lot of time with this cluster and just want to share my results. These should help you to get the cluster to run with simhub. If you have some questions, feel free to ask them in the board or in the comment section. I will try to help if my time allows it, but with all the informations given you should be able to get this to work by yourself ;D