Warnblinker-Blinker-Tagfahrlicht-Parklicht-Rechner im Saporoshez

Hallo zusammen,
nachdem ich jetzt seit 4 Jahren still mitlese und bisher mit dem Arduino Uno ein eher schlecht funktionierenden elektromechanischen Tacho für mein ukrainisches Auto gebaut habe, will ich euch mein erstes funktionierendes Projekt vorstellen: Den Warnblinker-Blinker-Tagfahrlicht-Parklicht-Rechner im Saporoshez.

Hier ist ein Link mit Bildern, Schaltplan und sogar einem mit Musik unterlegten Video:
https://saporoshez-968.de/2021technik/warnblinkparklicht-sapo2021.html

Vielen Dank an alle in diesem Forum, ohne euch hätte ich dieses Teil nicht bauen können.

Hier ist der Code:

//warnblinker-blinker-tagfahrlicht-parklicht-rechner
int a     = 300;             // Schwellenwert für Spannung an analogen Pins
int wbana =   0;             // Wert für Berechnung Warnblinker und Blinker
int zuena =   0;             // Wert für Berechnung Warnblinker und Blinker
int blila =   0;             // Wert für Berechnung Warnblinker und Blinker
int blilb =   0;             // Wert für Berechnung Warnblinker und Blinker
int blira =   0;             // Wert für Berechnung Warnblinker und Blinker
int blirb =   0;             // Wert für Berechnung Warnblinker und Blinker
const unsigned long onZeitb  = 400; //ms normales Blinken
const unsigned long offZeitb = 400; //ms normales Blinken
const unsigned long onZeitw  = 550; //ms Warnblinken
const unsigned long offZeitw = 250; //ms Warnblinken
void setup() {
  
  pinMode(4, OUTPUT);        // Ausgang Blinker links  
  pinMode(5, OUTPUT);        // Ausgang Blinker rechts   
  pinMode(6, OUTPUT);        // Ausgang Warnblinkkontrolllampe   
  pinMode(7, OUTPUT);        // Ausgang Standlicht vorne links
  pinMode(8, OUTPUT);        // Ausgang Standlicht vorne rechts 
  pinMode(9, OUTPUT);        // Ausgang Rückleuchte links  
  pinMode(10, OUTPUT);       // Ausgang Rückleuchte rechts    
  pinMode(11, OUTPUT);       // Ausgang Kennzeichenbeleuchtung 
  digitalWrite(4, HIGH);     // beim Einschalten der Autobatterie erst einmal alles ausschalten 
  digitalWrite(5, HIGH);     // beim Einschalten der Autobatterie erst einmal alles ausschalten  
  digitalWrite(6, HIGH);     // beim Einschalten der Autobatterie erst einmal alles ausschalten 
  digitalWrite(7, HIGH);     // beim Einschalten der Autobatterie erst einmal alles ausschalten 
  digitalWrite(8, HIGH);     // beim Einschalten der Autobatterie erst einmal alles ausschalten   
  digitalWrite(9, HIGH);     // beim Einschalten der Autobatterie erst einmal alles ausschalten 
  digitalWrite(10, HIGH);    // beim Einschalten der Autobatterie erst einmal alles ausschalten 
  digitalWrite(11, HIGH);    // beim Einschalten der Autobatterie erst einmal alles ausschalten  
  
//Serial.begin(9600);          // wird nur zur testweisen Anzeige am Bildschirm benötigt
}
void loop() {
int zuend = analogRead(A0);  // Eingang von Zündung
int licht = analogRead(A1);  // Eingang von Licht
int blili = analogRead(A2);  // Eingang von Blinkschalter links
int blire = analogRead(A3);  // Eingang von Blinkschalter rechts
int warnb = analogRead(A4);  // Eingang von Warnblinkschalter
int ruels = analogRead(A5);  // Eingang von Rücklichtschalter
if (warnb > a) {             // wenn Warnblinkschalter an ist
  wbana = 400;
  blila = 400;
  blira = 400;
  digitalWrite(6, (millis()%(onZeitw+offZeitw))<onZeitw);}
if (warnb <= a) {             // wenn Warnblinkschalter aus ist
  wbana = 0;
  blila = 0;
  blira = 0;
  digitalWrite(6, HIGH);}     // Warnblinkkontrolllampe ausschalten
zuena = wbana + zuend;        // Berechnung für Warnblinker
blilb = blila + blili;        // Berechnung für Warnblinker
blirb = blira + blire;        // Berechnung für Warnblinker
if (zuena > a && blilb > a ){  // Blinker links mit Zündung an normal
  digitalWrite(4, (millis()%(onZeitb+offZeitb))<onZeitb);}
if (zuena > a && blilb > a && warnb > a){  // Blinker links als Warnblinker
  digitalWrite(4, (millis()%(onZeitw+offZeitw))<onZeitw);}
if (zuena <= a || blilb <= a){ // Blinker links oder Zündung aus
  digitalWrite(4, HIGH);}
 if (zuena > a && blirb > a){   // Blinker rechts mit Zündung an normal
  digitalWrite(5, (millis()%(onZeitb+offZeitb))<onZeitb);}
if (zuena > a && blirb > a && warnb > a){  // Blinker rechts als Warnblinker
  digitalWrite(5, (millis()%(onZeitw+offZeitw))<onZeitw);}
if (zuena <= a || blirb <= a){ // Blinker rechts oder Zündung aus
  digitalWrite(5, HIGH);}
if (licht > a && blili <= a && blire <= a) { // Lichter komplett an ohne Blinker
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);  
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
}
if (licht > a && warnb > a) {               // Lichter komplett an bei Warnblinker
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);  
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
}
if (licht > a && zuend <= a) {               // Lichter komplett an auch wenn Zündung aus
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);  
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
}
if (licht > a && blili > a && zuend > a && warnb <= a) { // kein Licht vorne links beim Blinken links
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);  
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
}
if (licht > a && blire > a && zuend > a && warnb <= a) { // kein Licht vorne rechts beim Blinken rechts
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);  
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
}
if (licht <= a) {                             // Lichter komplett aus wenn Lichtschalter aus
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);  
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
} 
if (blili > a && zuend <= a && licht <= a) { // Lichter nur links wenn Lichtschalter aus und Blinker links ohne Zündung
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);  
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
}
if (blire > a && zuend <= a && licht <= a) {// Lichter nur rechts wenn Lichtschalter aus und Blinker rechts ohne Zündung
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);  
  digitalWrite(9, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
} 
if (blili > a && zuend <= a && licht <= a && warnb > a) 
// Lichter nur links wenn Lichtschalter aus und Blinker links und Zündung aus mit Warnblinker
{
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);  
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
}
if (blire > a && zuend <= a && licht <= a && warnb > a) 
// Lichter nur rechts wenn Lichtschalter aus und Blinker rechts und Zündung aus mit Warnblinker
{
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);  
  digitalWrite(9, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
}
//Serial.println(zuend); // wird nur zur testweisen Anzeige am Bildschirm benötigt
//Serial.print(licht);   // wird nur zur testweisen Anzeige am Bildschirm benötigt
//Serial.print(blili);   // wird nur zur testweisen Anzeige am Bildschirm benötigt
//Serial.print(blire);   // wird nur zur testweisen Anzeige am Bildschirm benötigt
//Serial.print(warnb);   // wird nur zur testweisen Anzeige am Bildschirm benötigt
//Serial.print(ruels);   // wird nur zur testweisen Anzeige am Bildschirm benötigt
}

Was sagt der TüV dazu?

Gruß Tommy

Tommy56:
Was sagt der TüV dazu?

Gruß Tommy

Dem TÜV ist es egal. Vor einem möglichen TÜV-Termin kann man den Code ja ändern.
Viele Grüße, Sapo-Peter

sapo-peter:
Dem TÜV ist es egal.

Das wäre mir neu.

Hallo Tommy, hallo Dieter,
ich möchte mich nicht bei meinem ersten Posting direkt mit zwei alten Hasen im Forum streiten, die zusammen mehr als 34.000 Posts getätigt haben. Schließlich werde ich vermutlich in diesem Jahr noch ein paar Fragen zum PID-Regelkreis stellen müssen und auf eure Mithilfe hoffen….
Macht euch bitte um den TÜV keine Sorgen. Ich persönlich kenne nur vernünftige TÜV-Prüfer, die wissen, was das allerwichtigste an einem Oldtimer ist: Fahrgestellnummer, Bremsen, Lenkung, tragende Teile, Kraftstoff- und Ölsystemdichtigkeit, Gurte (wenn vorhanden) und auch die Beleuchtung.
Alle Oldtimer, die bereits über elektrische Blinker verfügen, müssen auch einen Warnblinker haben. Dieser Warnblinker muss, sofern noch nicht vorhanden, nachgerüstet werden. Ob sich allerdings hinter dem rot blinkenden Warnblinkschalter irgendein Warnblink-Relais (vielleicht elektronisch) oder ein Arduino mit ein paar Relais verbirgt, wird der TÜV-Prüfer nicht kontrollieren müssen.
Viele Grüße, Sapo-Peter

Was den Code angeht: wenn er das tut was Du willst, dann ist es guter Code. Und guter Code muss nicht schön sein :smiling_imp:

Dein Anliegen kann ich gut nachvollziehen: anna dazumal wollte ich bei meinem C-Kadett eine Wischintervallsteuerung haben - also habe ich auch Strippen durchtrennt, Löcher gebohrt und meine kleine Elektronik in einem Karton mit Schaumstoffpolsterung irgendwo in einen Zwischenraum reingestopft. Würde ich heute auch nicht mehr machen, aber ich war jung und hatte kein Geld :smiley:

Natürlich sind Hinweise auf Sicherheitsaspekte legitim, aber letztlich bist Du verantwortlich, auch für Fremdschäden. Möge der Fall nie eintreten!

Es muss aber auf jeden Fall ausfallsicher sein. Auch EMV-technisch. Ein starker Sender darf das Ding nicht aus dem Tritt bringen.
Ist blöd wenn man (wie ich) mit rund 80 km/h nachts auf einer kurvenreichen Landstraße unterwegs ist und wegen einem Fehler auf dem CAN-Bus ein Reset des Systems ausgeführt wird. Ergebnis war 3 Sekunden Blindflug, weil sich auch die Scheinwerfer abgeschaltet haben. War mein Peugeot 307 SW. Der hatte einen fehlerhaften Chip auf dem Instrumententräger.

Du solltest mindestens einen Watchdog haben der einen Reset macht falls irgendwas schief geht. Es fehlt auch die Anforderung das der Blinker schneller blinkt wenn eine Glühbirne ausfällt oder es erfolgt die Meldung durch eine andere Anzeige! Diese Funktion muss gegeben sein, ohne gehts nicht. Wenn das geprüft wird, ist das Fahrzeug schon durchgefallen.

Wir haben ein Gehbehindertenfahrzeug gebaut und einen normalen Blinkgeber eingebaut, aber LED Blinker. Die blinken dann zu schnell weil zu wenig Last. Also Widerstand parallel. Blinkfrequenz war dann richtig, aber der Prüfer hat einen Blinker ausgesteckt und schon war Ende der Prüfung. Durchgefallen!

Gruß, Jürgen

Hallo Klaus, hallo Jürgen,

die Frontscheinwerfer mit Abblend- und Fernlicht laufen über gesonderte Relais und Sicherungsautomaten im Auto, auch bei einem Totalausfall meiner gestern vorgestellten Schaltung kann ich notfalls noch rechts ranfahren und das Warndreieck aufstellen.

Ihr habt schon Recht. Eine Überwachung auf defekte Blinkerbirnen sollte sein, zumal mein Auto auch noch eine Anhängerkupplung hat.
Jetzt bin ich schon wieder beim Nachdenken:
Blinker Zugfahrzeug links: Wenn bei Spannung > 10 V der Strom > 3A
und
Blinker Zugfahrzeug rechts: Wenn bei Spannung > 10 V der Strom > 3A
und
Blinker Anhänger links: Wenn bei Spannung > 10 V der Strom > 1A
und
Blinker Anhänger rechts: Wenn bei Spannung > 10 V der Strom > 1A
und
über Dioden verbundenes Rücklicht links, Kennzeichenbeleuchtung und Rücklicht rechts bei Spannung > 10 V der Strom > 2A ( oder anderer errechneter Wert )
dann bleibt die Warnlampe aus, ansonsten blinkt die Warnlampe

OK, dann lese ich mich mal ins Thema "Strommessung mit Arduino" ein.

Viele Grüße, Sapo-Peter

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.