ED BMSdiag – Arduino CAN-BUS & OBD-II Diagnose-Kit
Komponenten und Zubehör
| Komponente | Menge | Hinweise |
|---|---|---|
| Arduino UNO | 1 | |
| SparkFun CAN-BUS Shield | 1 | |
| Male-Header 36-polig 1 Reihe – Lang (0,1") | 1 | für SparkFun CAN-Bus Shield |
| SparkFun OBD-II auf DSUB-9 Kabel | 1 | für internationale „Maker“ |
| OBD-II auf DSUB-9 Kabel | 1 | für deutsche (oder europäische) „Maker“ |
| CANdiy-Shield v2 CAN-Bus Shield | 1 | IO-Spannung wählbar zwischen 3,3 V und 5 V – auch für 3,3 V Boards nutzbar |
| Arduino Box für Arduino | 1 | im Arduino Store ausverkauft, aber noch bei manchen Händlern erhältlich |
Apps und Online-Dienste
- Arduino IDE
Über dieses Projekt
Intention
Ich fahre ein Elektroauto – einen Smart Fortwo Electric Drive. Der Zustand der Traktionsbatterie ist essenziell und wird von einem Batteriemanagementsystem (BMS) überwacht. Dieses überwacht alle 93 Zellen während des Ladens und Entladens und sorgt für eine gleichmäßige Spannungsbalance. Normalerweise können nur Service-Tools Informationen von diesem Steuergerät auslesen.
Das Auto ist mit einem GSM-Modem ausgestattet, um Statusdaten wie Ladezustand (SOC), verfügbare Reichweite und andere einfache Informationen abzurufen. Eine Zeit lang war der Modem im erweiterten Modus und sammelte Diagnosedaten. Aus Neugier versuchte ich, in den CAN-Bus hineinzuschnüffeln, um zu sehen, was übertragen wird.
Inspiriert von ähnlichen Projekten für andere Elektroautos – wie dem Nissan Leaf – zeichnete ich den kompletten CAN-Bus-Verkehr während der Fahrt und beim Laden auf. Die ersten aufgezeichneten Streams enthielten tatsächlich diese Diagnosedaten – aber wie decodiert man sie?
Details zum CAN-Bus-Sniffing und Reverse Engineering finden Sie in einem separaten Artikel.
Was wird benötigt
Beschaffen Sie die erforderliche Hardware. Bei modernen Autos erfolgt die physische Schicht über den CAN-Bus. Es sind mindestens zwei CAN-Bus-Shields verfügbar – siehe Komponentenliste. Sie müssen sich mit dem Diagnoseanschluss des Autos verbinden – dem OBD-Stecker –, also kaufen Sie ein Kabel oder bauen Sie selbst eines. Hinweis: Es gibt zwei Standards für OBD-auf-DSUB-9-Kabel – wählen Sie das richtige! Siehe Bilder unten:
Wenn Sie Ihr eigenes Kabel bauen, ist es ratsam, ein altes Twisted-Pair-Netzwerkkabel zu verwenden. Nutzen Sie eines der Adernpaare für CAN-H und CAN-L. Dies verbessert die Signalintegrität. Überschreiten Sie außerdem nicht 1 m Kabellänge, um Signalreflexionen zu minimieren.
Loslegen
Schritt 1: Hardware vorbereiten
Bereiten Sie die Hardware vor und finden Sie ein passendes Gehäuse für die Platinen.
Schritt 2: Software herunterladen und flashen
Laden Sie das Projekt von meinem GitHub-Repository herunter. Dort finden Sie Installationsdetails. Kompilieren Sie den Code und flashen Sie ihn auf den Arduino.
Schritt 3: Mit dem Auto verbinden
Verbinden Sie das Gerät mit dem Auto und schalten Sie die Zündung ein. Starten Sie die Diagnosesitzung und erhalten Sie nützliche Informationen über Ihren Batteriepack…
Schritt 4: Daten analysieren
Nutzen Sie ein Tabellenkalkulationsprogramm, um korrelierende Daten zu finden. Vergleichen Sie beispielsweise den SOC (State of Charge, vom Armaturenbrett) mit dem echten SOC vom BMS. Oder plotten Sie die Zellspannungen und sehen Sie, dass einige Zellen den Pack beim Laden limitieren, weil sie als erste den Abschaltgrenzwert erreichen…
Schritt 5: Erweitern und verbessern
Verbessern Sie den Code nach Belieben – machen Sie Ihr eigenes Hacking. Das SparkFun-Shield besitzt einen SD-Kartenleser, sodass Sie einen eigenen CAN-Bus-Logger bauen könnten. Oder Sie erstellen ein schickes Frontend / eine App zur Datenanzeige.
Ich hoffe, dieses Tool ist hilfreich – viel Spaß!
Code
ED_BMSdiag Arduino Software
https://github.com/MyLab-odyssey/ED_BMSdiag.git
Schaltpläne
Für SparkFun CAN-Bus Shield:
Für CANdiy-Shield:
Herstellungsprozess
- Professionelle Bitmap-Animation auf dem ILI9341 2,4″ TFT Touchscreen Shield mit Visuino
- Web-gesteuertes DMX-Lichtsystem – Arduino Master Controller
- Bluetooth-gesteuerter Arduino-Spybot bauen – Überwachungsroboter mit IP-Kamera
- FlickMote: Gestensteuerung per Ultraschall & IR für Smart Home (Arduino 101)
- DIY Arduino TV-B-Gone: Universelle TV-Aus-Fernbedienung
- Einen eigenen LED-Master-Clock mit Alarm bauen – aus 12 Metern Entfernung ablesbar
- HSV-Uhr: Lebendige, anpassbare Zeitanzeige für Arduino-Enthusiasten
- Android-gesteuertes Roboterfahrzeug mit Raspberry Pi Motor Shield
- Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
- Optimierte Stromversorgungslösungen für Arduino-Projekte