Dank der netten Hilfe von approximate ist es mir gelungen einen ersten funktionsfähigen Prototypen zusammen zu löten.
[Blockierte Grafik: https://picload.org/thumbnail/dgrilwor/img_20170913_172005.jpg]
Das ganze besteht aktuell aus einem Arduino Nano, einem 16x2 LCD und einem MCP2515. Da das Ding nicht schön genung ist um fest im Auto zu bleiben, hab ich momentan einen OBD Stecker an einem alten Netzwerkkabel. Das Netztwerkkabel bietet sich wegen des "twistet-pair" an.
Ich muss noch viel programmieren denn momentan kann ich mir nur die Motortemperatur anzeigen lassen.
Mal schauen wie es weiter geht...

CAN Bus- KLine, PT und OBD2 - Arduino Projekt
-
-
Interessantes Projekt, auch wenn ich den Sinn noch nicht ganz sehe, approximates Lösung sollte das alles bereits ermöglichen? Oder bearbeitest du das Projekt um dich mit CAN-Nachrichten und Co einfach beschäftigen? Keine Kritik, wir machen sowas auch, aber beruflich
-
Ja einzig und allein aus privatem Interesse.
Ich finde das Datendisplay von awron ganz cool und will einfach wissen was ich selber so machen kann.Wenn es ein paar Leute interessiert kann ich Mal aufschreiben wie ich vorgegangen bin
-
Dann finde ich es gut, was du da machst
-
Hatte auch ähnliches vor, auch wie du einfach nur weil es mich interessiert.
Allerdings fehlt mir einfach die Zeit dazuWäre also cool, wenn du dein Projekt ein wenig dokumentierst.
Danke, schonmal -
Ich fände es auch gut, wenn du dokumieren würdest wie du was gelöst hast.
-
Sammlung von Can Bus Nachrichten (fett gibt immer die CAN ID an)
Alle Can Nachrichten sind in DEC (Dezimal)Schaltzentrale (Knöpfe 1-6 von links nach rechts) (Man kann die Knöpfe auch wenn man die Ausstattung nicht hat so mechanisch bearbeiten, dass sie funktionieren) evtl müssen Widerstände eingelötet werden:
1 Sitzheizung Fahrer
<487,253,255,>//Press
<487,252,255,>//Release2 PDC?
<791,253,255,>//Press
<791,252,255,>//Release
3 Heckrollo
<621,253,255,255,>//Press
<621,252,255,255,>//Release4
<794,253,255,>//Press
<794,252,255,>//Release5 Start/Stop
<405,253,255,>//Press
<405,252,255,>//Release
6 Sitzheizung Beifahrer
<488,253,255,>//Press
<488,252,255,>//Release
Vorfeldbeleuchtung genau wie beim aufschließen:Einschalten
<1777,114,4,48,47,7,1,0,100>//Die 100 gibt die dauer an wie lange das Licht an bleibt. In dem Fall 10 Sekunden.
Auschalten
<1777,114,4,48,47,7,1,0,0>Tacho:
Geschwindigkeitszeiger
<1777,96,5,48,32,6,0,0,100>//0 km/h
<1777,96,5,48,32,6,18,14,100>//260 km/h
<1777,96,3,48,32,0,13,227,100>//Steuern aus
Drehzahlzeiger
<1777,96,5,48,33,6,0,0,100>//0 rpm
<1777,96,5,48,33,6,18,55,100>//7500 rpm
<1777,96,3,48,33,0,2,109,100>//Steuern aus
Tankzeiger
<1777,96,5,48,34,6,0,0,100>//0
<1777,96,5,48,34,6,7,82,100>//100
<1777,96,3,48,34,0,2,109,100>//Steuern ausKVA (Momentanverbrauch)
<1777,96, 5, 48, 35, 6, 0, 0, 100>//0
<1777,96, 5, 48, 35, 6, 7, 21, 100>//10
<1777,96, 3, 48, 35, 0, 13, 227, 100>//Steuern aus
Schlüssel/Zündung:
Schlüssel drin
<304,65,...>//Kommt zyklischSchlüssel draußen
<304,64,...>//Kommt zyklisch
Zündung an
<304,69,...>//Kommt zyklisch
MFL (Multifunktionstasten am Lenkrad):
<470,192,12,...>//Keine Taste gedrückt kommt ca. alle 100ms
<470,192,13,...>//Sprechen Taste gedrückt
<470,192,28,...>//Stern Taste gedrückt
<470,192,76,...>//Raute Taste gedrückt
<470,200,...>//Vol + Taste gedrückt
<470,196,...>//Vol - Taste gedrückt
<470,193,...>//Telefonhöhrer Taste gedrückt
<470,224,...>//Pfeil Hoch Taste gedrückt
<470,208,...>//Pfeil Runter Taste gedrücktFernbedieung (Zentralverriegelung):
<304,64,...>//Aufschließen
<304,65,...>//Abschließen
<304,69,...>//Kofferraum für 3 Sekunden gedrücktGang:
Rückwärtsgang
<944,253,...>//Nicht Eingelegt
<944,254,...>//Eingelegt
Was noch kommen soll:
Testen:
- Alle Fenster komplett hochfahren ohne Zündung (so wie beim gedrückt halten der Fernbedienung)
Geht nur mit kleiner Unterbrechung beim Hochfahren:
<622,0,27,63,2,255,255,255,255,>//Hinten
<622,27,27,63,2,255,255,255,255,>//Vorne
- Das reagieren vom Auto auf MFL Tasten ausschalten wobei Tasten vom Schaltzentrum (Sitzheizung usw.) noch funktionieren
CCC Datenverkehr Einschalten
<1777,160,2,41,1,21,7,4,0,>//Ungetestet
CCC Datenverkehr Ausschalten
<1777,160,2,40,1,21,7,4,0,>//Klappt iDrive und Lautstärke Drehknopf werden auch abgeschaltet
- CCC Quelle umschalten (AUX/CD/RADIO)
Aux
<1777,160,4,46,249,2,9,4,0,>//Ungetestet
evtl. <1777,160,3,34,249,2...
Radio
<1777,160,4,46,249,2,1,4,0,>//Ungetestet
evtl. <1777,160,3,34,249,2...
CD
<1777,160,4,46,249,2,3,4,0,>//Ungetestet
evtl. <1777,160,3,34,249,2...- CCC Lautstärke
Mute
<1777,160,4,46,249,1,0,4,0,>//Ungetestet
15
<1777,160,4,46,249,1,15,4,0,>//Ungetestet
16
<1777,160,4,46,249,1,16,4,0,>//Ungetestet
18
<1777,160,4,46,249,1,18,4,0,>//Ungetestet
geht in 2er Schritten weiter bis 62
Lautstärke MAX gibt es auch noch
Herrausfinden/ToDo:- CCC Einschalten ohne Zündung bzw Schlüssel im Schloss
- Bordsteinfunktion der Seitenspiegel (Bei Rückwärtsgang Rechten Spiegel nach unten fahren) nachrüsten mit ein/ausschalten per Spiegelwahlschalter- Evtl. Hupen beim Auf-/Abschließen
- Autobahnlicht = Anhebung der LWR bei schneller Fahrt z.B. > 130km/h
- Alle Fenster Hochfahren wenn abgeschlossen wird per Fernbedienung, ohne das man sie gedrückt halten muss
- Tablet steuern per iDrive/MFL z.B. Lautstärke/Nächstes Lied usw. -
Hier ist mal eine kleine Anleitung um einen Arduino an den Can Bus anzuschließen.
Benötigt wird:
- Ein Arduino Controller (Dabei ist es relativ egal welchen man benutzt ich persönlich nutze einen Leonardo Micro, da er eine Maus/Tastatur für ein Android Tablet emulieren kann. Es geht aber auch ein Arduino UNO)
- Ein Can Bus Shield (Ich nutze das MCP2515)
- 5V Netzteil (z.B. einen Zigarettenanzünder Adapter zu USB und dann mit einem Micro USB Kabel zum Leonardo Micro)
- Ein paar Kabel (gut wäre ein Twisted Pair Kabel um die Störungen auf dem Can Bus zu minimieren)Man sucht sich nun eine Stelle aus, so man den Arduino einbauen möchte, dort sollte man auch an Strom und Can Bus kommen.
Ein Paar möglich Ort sind:
- Hinterm Radio am Quadlock Stecker
- Am Klimabedienteil Stecker (Links der Schwarze)
- Hinterm Handschuhfach
- Am iDrive Controller Stecker
- ...Die Kabel sind immer verdrillt und haben folgende Farben:
- Can High = Orange/Grün
- Can Low = GrünDie Stromversorung habe ich von der Taschenlampenvorbereitung im Handschuhfach genommen, dort liegt Spannung an sobald man das Auto aufschließt, bis es eingeschlafen ist so ca. 15 min nach dem Abschließen.
Das Can Bus Shield MCP2515 hat 6 Anschlüsse wovon wir 5 brauchen.
INT - wird nicht gebraucht
SCK - 15 SCLK
SI - 16 MOSI
SO - 14 MISO
CS - 10 (Pin 9 oder 10 je nach Arduino Board. Wird im Programm festgelegt)
GND - Masse vom Arduino
VCC - VCC vom ArduinoIch nutze folgende Library für das Can Bus Shield:
https://github.com/Seeed-Studio/CAN_BUS_ShieldIm Beispiel Code muss nun der CS Pin und folgende Zeile angepasst werden von 500 auf 200:
while (CAN_OK != CAN.begin(CAN_500KBPS))while (CAN_OK != CAN.begin(CAN_200KBPS))
Auf dem MCP2515 ist ein Quarz verbaut. Bei mir ist es 8000 MHz es kann aber auch 16000 MHz sein.
Wir brauchen eigentlich 100KBPS aber da wird von einem 16000Mhz Quarz ausgegangen
Hat man 8000 MHz muss man wie folgt rechnen: Statt 16 MHz : 8Mhz = 2 => 2 * 100KBPS = 200KBPS
Der Quellcode sieht nun wie folgt aus:C
Alles anzeigen// demo: CAN-BUS Shield, receive data with check mode// send data coming to fast, such as less than 10ms, you can use this way// loovee, 2014-6-13 #include <SPI.h>#include "mcp_can.h" // the cs pin of the version after v1.1 is default to D9// v0.9b and v1.0 is default D10const int SPI_CS_PIN = 10; MCP_CAN CAN(SPI_CS_PIN); // Set CS pin void setup(){ Serial.begin(115200); while (CAN_OK != CAN.begin(CAN_200KBPS)) // init can bus : baudrate = 500k { Serial.println("CAN BUS Shield init fail"); Serial.println(" Init CAN BUS Shield again"); delay(100); } Serial.println("CAN BUS Shield init ok!");} void loop(){ unsigned char len = 0; unsigned char buf[8]; if(CAN_MSGAVAIL == CAN.checkReceive()) // check if data coming { CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf unsigned int canId = CAN.getCanId(); Serial.println("-----------------------------"); Serial.print("Get data from ID: "); Serial.println(canId, HEX); for(int i = 0; i<len; i++) // print the data { Serial.print(buf[i], HEX); Serial.print("\t"); } Serial.println(); }} /********************************************************************************************************* END FILE*********************************************************************************************************/
Sorry für die Formatierung, klappt irgendwie nicht
-
586 steht nicht für den rückwärtsgang, sondern wird vom PDC steuergerät gesendet und gibt den status von diesem wieder!!!
-
Wenn du mir sagst was für den Rückwärtsgang steht, verbessere ich es.