Ich hab es geschafft!
Eine Nachbildung des Blinkrelais mit dem
Arduino Pro Mini (AT168 old Bootlader)
ACS712 5A
Relais
... wenn zwischen Anschluss 49 und 49A Strom fließt, dann
lass es 0,5 Sekunden laufen
schalte es 0,5 Sekunden ab
neuer Messwert, ob Strom fließt.
Ergänzt wird das durch einen Spannungswandler 12V -> 9V (für den Arduino Pro mini)
Spannung gibt es über Kontakt 49 (Zündung ein oder Warnblinker) und Masse.
Das Relais unterbricht bei Stromfluss für 0,5 Sekunden den Stromfluss von 49 nach 49a.
der Sketch:
/*
https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink
Blinkrelais für Fahrzeuge unter verwendung von:
Arduino Pro mini
Relaisbord
Stromstärkemessmodul ACS712 (hier 5A)
Programmiert für einen MB 709 Bachert / altes Feuerwehrfahrzeug
Unabhängig anwendbar, da die Relais genauso funktionieren:
Fließt Strom, unterbrechen sie nach einer Zeif für eine Zeit.
*/
#define REL_OUT 10 // Relais-Kontakt an/aus (über Stromzufuhr)
int Sensor = A0; // Der Stromstärkesensor wird am Pin A0 (Analog "0") angeschlossen.
int VpA = 185; // Millivolt pro Ampere 5A Modul (100 für 20A Modul und 66 für 30A Modul)
int sensorwert= 0;
int Nullpunkt = 2500; // Spannung in mV bei dem keine Stromstärke vorhanden ist
double SensorSpannung = 0;
double Ampere = 0;
// the setup function runs once when you press reset or power the board
void setup() {
// Serielle Verbindung starten, damit die Daten am Seriellen Monitor angezeigt werden.
Serial.begin(9600);
// initialize digital pin REL_OUT as an output.
pinMode(REL_OUT, OUTPUT);
digitalWrite(REL_OUT, HIGH); // Gibt Relaismodul "Ruhe-Schaltung"
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
}
// the loop function runs over and over again forever
void loop() {
// analog lesen
sensorwert = analogRead(Sensor);
SensorSpannung = (sensorwert / 1024.0) * 5000; // Hier wird der Messwert in den Spannungswert am Sensor umgewandelt.
Ampere = ((SensorSpannung - Nullpunkt) / VpA); // Im zweiten Schritt wird hier die Stromstärke berechnet.
// Ausgabe der Ergebnisse am Seriellen Monitor
Serial.print("Sensorwert = " ); // Ausgabe des reinen Sensorwertes
Serial.print(sensorwert);
Serial.print("\t Sensorspannung in mV = "); // Zeigt die Sensorspannung an
Serial.print(SensorSpannung,3); // Die "3" hinter dem Komma erzeugt drei Nachkommastellen
Serial.print("\t Ampere = "); // shows the voltage measured
Serial.println(Ampere,3); // Die "3" hinter dem Komma erzeugt drei Nachkommastellen
// wenn Wert > 536
if(sensorwert > 536) // Lampen an, Strom fließt
{
delay(300); // wait for "a second" (restliche 300ms)
digitalWrite(REL_OUT, LOW); // Gibt Relaismodul "Spannung an" / Lampen aus
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
Serial.print("Relais eingeschaltet /");
delay(500); // wait for "a second" (500ms Lampen aus)
digitalWrite(REL_OUT, HIGH); // Gibt Relaismodul "Spannung aus" / Lampen an
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
Serial.println("Relais ausgeschaltet /");
}
delay(200); // wait for "a second" - Standardwartezeit zwischen Abfragen
}
// Nach der Programmierung wird der Serielle Monitor geöffnet.
// Dort werden nun abhängig von der gemessenen Stromstärke die Messwerte
// und Ausgaben angezeigt.```
Wenn durch Schalter 49 auf 49a über Blinklampen durchgeschaltet wird, tritt der Blinkzyklus in Kraft.
Ist kein Stromfluss mehr vorhanden, wird das Relais über D10 auf HIGH in Ruhestellung gebracht und alle 200 ms geprüft.
Eine Erweiterung ist angedacht, wenn der Strom abweicht aus einem Normalbereich für 3 oder 6 Lampen, Ausgabe über Buzzer
§ 54 StVZO - Einzelnorm - Gesetze im Internet
Die Fahrtrichtungsanzeiger müssen nach dem Einschalten mit einer Frequenz von 1,5 Hz ± 0,5 Hz (90 Impulse ± 30 Impulse in der Minute) zwischen hell und dunkel sowie auf derselben Fahrzeugseite