Ja, ich habe es wieder getan. In meinem Smart steckt wieder ein Startknopf.
Doch diesmal habe ich mich gegen eine „analoge“ Variante entschieden und das Ganze mit einem Mikrocontroller verbunden. Hier seht Ihr den Prototyp:
In dem Taster ist auch ein LED-Ring (5V) – dieser zeigt die unterschiedlichen Funktionszustände an. Eine grobe Übersicht über meinen Aufbau habe ich hier mit Fritzing dargestellt:
Der Schaltplan sieht wie folgt aus:
Zu beachten ist hierbei, dass Taster und LED getrennt (also Symbolisch) vorhanden sind. Die Relais steuern die beiden Pole an, die ich hier beschreibe.
Den Quellcode für den Mikrocontroller gibt es auch noch:
const int zuendung_relay = 4; //Zündungs-Relay-PIN const int starten_relay = 5; //Start-Relay-PIN const int led_pwm = 6; //Taster-LED per PWM int count = 0; int scount = 0; const int taster = 7; boolean zuendung = false; //TRUE=EIN / FALSE=AUS boolean starten = false; //TRUE=Startet gerade / FALSE=wurde gestartet oder ist aus boolean gestartet = false; //TRUE=Motor läuft / FALSE=MOTOR AUS boolean ladespannung = false; //TRRUE=größergleich 13,5V / FALSE=unter 13,5V boolean halten = false; // boolean countreset = false; boolean startprozess = false; #include elapsedMillis tasterdruck = 0; elapsedMillis startwait = 0; elapsedMillis serialsend = 0; elapsedMillis blinker_standby = 0; elapsedMillis fader_starten = 0; elapsedMillis warten_befehl = 0; void setup() { pinMode(zuendung_relay, OUTPUT); pinMode(starten_relay, OUTPUT); pinMode(taster, INPUT_PULLUP); //WICHTIG Serial.begin(9600); } void loop() { //Taster-halten-Zeit messen if (digitalRead(taster)==LOW && halten==false) { tasterdruck=0; halten = true; } //Taster-halten zurücksetzen if (digitalRead(taster)==HIGH && halten==true && tasterdruck > 10) { //&& tasterdruck < 500 halten = false; tasterdruck=0; count = count + 1; } //Zähler Zurücksetzen & Schieben if (tasterdruck > 2000) { //zeit seit letzten tasterdruck > 2s if (count!=0) { //wenn da ist eine zahl... scount = count; //schieben & nullen } count = 0; //sonst 0 bleiben } //Zündung if ((scount==1 && zuendung==false)/* || (do_befehl1==true && zuendung==false)*/ ) { zuendung = true; Serial.println("Zuendung AN"); scount=0; do_befehl1=false; checksummeok=false; } //Zündung und Start if (scount==2 && zuendung == false) { zuendung = true; startwait = 0; startprozess = true; scount=0; Serial.println("Zuendung AN"); } if (scount==2 && zuendung == true) { startwait = 0; startprozess = true; scount=0; Serial.println("Zuendung AN"); } if (startwait > 1000 && startprozess < 2000 && startprozess == true) { starten = true; Serial.println("Starten AN"); } if (startwait > 2000 && startprozess == true) { startprozess = false; starten = false; Serial.println("Starten AUS"); } //Ausschalten if ((scount==3 && zuendung == true) /*|| (do_befehl3==true && zuendung == true)*/) { zuendung = false; Serial.println("Zuendung AUS"); scount=0; analogWrite(led_pwm, 0); do_befehl3=false; checksummeok=false; send_off=true; } /* RELAY-BEREICH */ //Zündungs-Relay-Einschalten if (zuendung==true) { digitalWrite(zuendung_relay, LOW); } //Zündungs-Relay-Ausschalten if (zuendung==false) { digitalWrite(zuendung_relay, HIGH); } //Start-Relay-Einschalten if (starten==true) { digitalWrite(starten_relay, LOW); } //Start-Relay-Ausschaten if (starten==false) { digitalWrite(starten_relay, HIGH); } /* DIAGNOSE-BEREICH */ if (serialsend > 1000) { Serial.print(count);Serial.print(" ");Serial.println(scount); serialsend = 0; } /* LED-BEREICH */ if (blinker_standby > 9800 && blinker_standby < 10000 && zuendung == false) { analogWrite(led_pwm, 10); } if (blinker_standby > 10000 && zuendung == false) { analogWrite(led_pwm, 0); blinker_standby = 0; } if (zuendung == true && starten == false) { analogWrite(led_pwm, 255); } if (starten == true) { for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { analogWrite(led_pwm, fadeValue); delay(10); } for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=10) { analogWrite(led_pwm, fadeValue); delay(10); } } }
Und nun noch den Prototyp als Video:
Nun noch einen rechtlichen Hinweis:
Das hier vorgestellte hat, wenn es von euch gebaut wird, keine E-Nummer und ist nicht in der STVO zugelassen. Durch eine Einzelabnahme des TÜV könnt ihr dies ändern. Eventuelle Schänden oder getötete Kätzchen habt ihr zu verantworten, ich übernehme weder Garantie oder Haftung.
Hi.
Wie machst du das mit der Ladespannung?
Ich würde auch gerne die Blinker in den Arduino einbinden.
Jedoch werden diese mit 12V angesteuert und der MC verträgt nur 5V.
Evtl. kann man das auch über OBD abfragen?
Gruss Daniel
Also wenn du die Blinker auslesen willst, ist der einfachste Weg ein Spannungsteiler (Einfach googlen). Möchtest du die Blinker ansteuern (wovon ich abrate), musst du Relais oder Transistoren oder MOSFETs nehmen.
Beachte bitte: Ein Auto hat in den seltensten Fällen wirklich 12V. Bei fahren sind es gern 14,X V, im Winter beim Start auch mal nur 10V.
Fehler beim überprüfen/Kompilieren des Sketch
sketch_jan16d:46: error: ‚do_befehl1‘ was not declared in this scope
do_befehl1=false;
^
sketch_jan16d:47: error: ‚checksummeok‘ was not declared in this scope
checksummeok = false;
^
sketch_jan16d:74: error: ‚do_befehl3‘ was not declared in this scope
do_befehl3=false;
^
sketch_jan16d:75: error: ‚checksummeok‘ was not declared in this scope
checksummeok=false;
^
sketch_jan16d:76: error: ’send_off‘ was not declared in this scope
send_off=true;
^
exit status 1
‚do_befehl1‘ was not declared in this scope
Grüße aus Köln!
ich habe eine kleine aber dennoch wichtige Frage an dich.
Habe deinen Code per Copy Paste durchspielen lassen für meien Smart 450 allerdings zeigt das Arduino-Programm mir einige Fehler an.
Könntest du mir ggf. den Code nochmal (Überarbeitet) zusenden?
Wäre dir Mega Dankbar dafür!!!
Hallo Mark,
vielleicht postest du mal die Fehler, die angezeigt werden. Dann kann ich nachvollziehen, wo das Problem liegt.
Gruß
Pascal
Danke vorab für die schnelle Rückmeldung.
Also erstmal zur Ausgangssituation:
Wenn ich deinen Code 1:1 so kopiere und das Arduino-Programm durchspielen lasse zeigt er zunächst folgenden Fehler an:
#include expects „FILENAME“ oder
Dann füge ich (Beispielshalber, damit er weiter prüft) hinter #include ein „stdio.h“ ein. Dann lasse ich es nochmal abspielen und die nächste Fehlermeldung ist dann folgende:
‚elapsedMillis‘ does not name a type.
und so ziehen sich die Fehlermeldungen durch den ganzen Code.
Leider habe ich zuvor keine berührungspunkte mit Arduino oder Codes schreiben, daher wäre ich dir dankbar wenn du den Code mir „fehlerfrei“ zukommen lassen könntest. Somit könnte ich es einmal durchspielen lassen und sofern korrekt, dann in mein Arduiono einspielen.
Mein Ziel ist es meinen Smart 450 so wie deinen mit einen Starknopf auszustatten.
Hallo Mark,
ich habe mal eine aktualisierte Version hier hochgeladen: https://pastebin.com/f7zdAc5P
Achtung: Du musst die elapsedMillis Bibliothek über den Bibliothekmanager einbinden!
Hallo Pascal,
Nach der Einbindung von elapsedMillis in die Bilbiothek hat dein Code wunderbar geklappt! Besten Dank dafür!
Wie genau schließe ich die 3 Leitungen (2x dick Rot, 1x Blaues) nun an? Anhand deines Videos bzw. des Schaltplans ist das für mich schwer nachzuvollziehen.
Könntest du mir das ausfühlich erklären? oder Zeichnen? 🙂
Beste Grüße
Mark
„2 dicke rote, und ein kleines (oft blaues) Kabel. Mit den beiden roten schaltet man die Zündung ein, mit dem kleinen startet man den Motor“
Eines der Roten ist das Dauerplus, das andere das geschaltete Plus. Bitte aber unbedingt selber messen oder wenn du nciht weiter weißt an einen Fachmann wenden! Wir wollen nicht, dass irgendwer zu schaden kommt.
kast du den link noch eimal neu hochladen wollte mir so einen startknopf bauen