Relaisschaltung NOR

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 :frowning:
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!

zerlege deine Arbeit in mehrere Teile:

  • Das elektrische Auslesen von KFZ Signalen
  • Die Zeitsteuerung eines Relais
  • Die Logikerweiterung

Zur Zeitsteuerung habe ich mal das geschrieben:
https://werner.rothschopf.net/202003_arduino_retriggerbares_nachlaufrelais.htm

es beschreibt wie man ohne delay arbeiten kann.

Hallo
beschreibe in einfachen Worten und Sätzen wie die Funktion wirken soll und das ganz einfach.

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

Hallo
Welche physikalischen Eigenschaften hat das Signal 1--3.
Analog oder digital?

2 und 3 sind digital und 1 ist analog von ca. 12v bis 14.5v

Hallo
im setup() fehlen die pinMode()´s für die digitalen Ein- und Ausgänge.

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.org posteo.de mailbox.org ccc.de oder irgend sowas....

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