Hallo, ich wollte eine relaisschaltung bauen in der 2 signale das relais steuern und 1 signal welches BEIDE signale ungültig macht...
signal 1 soll das relais sperren bzw dafür sorgen dass es nicht angesteuert wird
signal 2 soll das relais für 30 sekunden ansteuern
signal 3 soll das relais für 5 minuten ansteuern
alle 3 signale wollte ich vom kfz bordnetz abgreifen (12v(bzw auch ca.13v-14.6v) und die mit einem Spannungssensor als signal umwandeln.
habe ein andruino mega 2560, 5 relais und 5 spannungssensoren/-wandler zum realisieren.(hab auch versucht
bin dazu noch kompletter neueinsteiger und habe zu meinem thema auch noch kein passendes/verständliches video gefunden.
außerdem habe ich mit folgender schaltung ein komisches problem... die kontrollLEDs leuchten schwach, aber die relais sind nicht geschaltet während die angeschlossen sind am adruino
const int relaisPin = 10;
const int relaisPin1 = 11;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.0);
Serial.println(voltage);
digitalWrite(relaisPin1, analogRead(A0));
{ int sensorValue1 = analogRead(A1);
Serial.println(voltage);
digitalWrite(relaisPin, analogRead(A1));
delay(30000);
{ int sensorValue2 = analogRead(A2);
Serial.println(voltage);
digitalWrite(relaisPin, analogRead(A2));
delay(300000);
Das ist Murks
analogRead() liefert kaum jemals den Wert 0, damit wird der relaisPin immer auf HIGH gesetzt. Also für digitalWrite() ein digitalRead() benutzen.
Für die Zeitsteuerung bitte zuerst das Beispiel BlinkWithoutDelay verstehen!
signal 1 soll jegliche ansteuerungen sperren (aber erst ab 13-13.5v)
signal 2 soll das relais für 30 sekunden ansteuern
signal 3 soll das relais für 5 minuten ansteuern
in der reihenfolge soll das passieren und alle signale sind 12v bzw bis 14.5v
da das auch nicht funktioniert und ich mit der sprache wenig bis garnicht klar komme und ich auch mittlerweile einfach die lust verloren hab mich damit zu befassen... wer würde mir das für mich programmieren gegen geld?
// Forensketch https://forum.arduino.cc/t/relaisschaltung-nor/854559
// gebastelt - kompiliert
const byte sigInputPIN1 = A0;
const byte sigInputPIN2 = A1;
const byte sigInputPIN3 = A2;
const int schwellwert = 600; //ab dem Wert wird auf dem analogInput "Spannung" erkannt
const byte relOutputPIN1 = 10; // angeschlossen wird ein Relaisboard
enum {ein, aus}; // Relais sind lOW aktiv
bool signal1, signal2, signal3 = false;
unsigned long signal2startTime = 0;
unsigned long signal3startTime = 0;
const unsigned long sekunden30 = 1000 * 30; // Angabe in ms
const unsigned long minuten5 = 1000 * 60 * 5; // Angabe in ms
void setup()
{
Serial.begin(115200);
Serial.println(F("Start...."));
digitalWrite(relOutputPIN1, aus);
pinMode(relOutputPIN1, OUTPUT);
}
void loop()
{
if (analogRead(sigInputPIN1) > schwellwert) // Wenn hier Spannung anliegt
{
digitalWrite(relOutputPIN1, aus); // Schluss mit allem
signal1 = true;
signal2 = false;
signal3 = false;
}
if ((analogRead(sigInputPIN2) > schwellwert) // Wenn hier Spannung anliegt ...
&& (signal1 == false) // ... und das signal nicht gekappt ist ...
&& (signal2 == false) // ... und bisher nicht aktiviert ...
&& (signal3 == false)) // ... und das andere Signal ebenfalls nicht
{
digitalWrite(relOutputPIN1, ein); // Schalten
signal2startTime = millis(); // Merke die Zeit wann gestartet
signal2 = true; // setze Merker
}
if ((analogRead(sigInputPIN3) > schwellwert) // Wenn hier Spannung anliegt
&& (signal1 == false) // ... und das signal nicht gekappt ist ...
&& (signal2 == false) // ... und das andere Signal ebenfalls nicht ...
&& (signal3 == false)) // ... und bisher nicht aktiviert
{
signal3startTime = millis(); // Merke die Zeit wann gestartet
signal3 = true; // setze Merker
}
if ((millis() - signal2startTime > sekunden30) && (signal2)) // Wenn Zeit abgelaufen ...
{
signal2 = false; // Merker zurücksetzen
if (signal3 == false) // Wenn der andere Zweig nicht aktiv
{
digitalWrite(relOutputPIN1, aus); // Schalten
}
}
if ((millis() - signal3startTime > minuten5) && (signal3)) // Wenn Zeit abgelaufen ...
{
signal3 = false;
if (signal2 == false) // Wenn der andere Zweig nicht aktiv
{
digitalWrite(relOutputPIN1, aus); // Schalten
}
}
}
Da ist natürlich noch ein Hänger drin, wenn der Wert wieder zurück kommt.
Aber für 5 Euro Spende an einen Verein/Organisation Deiner Wahl sollte es reichen.
Sollte Dir spontan nichts einfallen: netzpolitik.orgposteo.demailbox.orgccc.de oder irgend sowas....