go seven !

Smart 450 CityCoupe mit Startknopf ausrüsten

Ja, ich habe es wieder getan. In meinem Smart steckt wieder ein Startknopf.

IMG_20150416_193513032

Doch diesmal habe ich mich gegen eine “analoge” Variante entschieden und das Ganze mit einem Mikrocontroller verbunden. Hier seht Ihr den Prototyp:

IMG_20150327_201120128

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:

auto_eingebaut_Steckplatine

Der Schaltplan sieht wie folgt aus:

auto_eingebaut_Schaltplan

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.