Abfrage eines externen Schwimmerschalters

Hallo zusammen
Ich ich stelle eine Steuerung für eine Dampflok (Für eine Ausstellung) zusammen.

Mit:

  • Ardunio UNO R3
  • 4 Relay Shield V3.0 von seeed studio
  • RGB-LED Taster
  • 12v LED rot
  • Schwimmerschalter
  • Vernebler 220V
  • zwei 12V Lüfter

Ist der Wasserstand im Behälter gut, (Schwimmschalter HIGH) dann durchlaufe den Code. Soweit alles gut.

Ist der Wasserstand nicht gut (Schwimmschalter LOW)
schalte die rote 12v LED via Relay ein
die Farbe auf rot vom RGB-LED
blockiere den Code bis das Wasser aufgefüllt wurde

Ich möchte, dass sobald das Wasser aufgefüllt wurde, der Code wieder läuft.

Ich bekomm es einfach nicht hin. Springt ev. jemand den Fehler an?

int LEDrot = 9; //Das Wort „LEDrot“ steht jetzt für den Wert 9.
int LEDgruen = 10; //Das Wort „LEDgrün“ steht jetzt für den Wert 10.
int Taster = 11; //Das Wort „Taster“ steht jetzt für den Wert 11.
int Schwimmer = 12; //Das Wort „Schwimmer“ steht jetzt für den Wert 12.


int Tasterstatus = 0; //Das Wort „tasterstatus“ steht jetzt zunächst für den Wert 0. Später wird unter dieser Variable gespeichert, ob der Taster gedrückt ist oder nicht.
int Schwimmerstatus = 0; //Das Wort „Schwimmerstatus“ steht jetzt zunächst für den Wert 0. Später wird unter dieser Variable gespeichert, ob der Schwimmer HIGH ist oder nicht.


int Relay_1 = 7;  //Das Wort „Relay_1“ steht jetzt für den Wert 7. //Lüfter
int Relay_2 = 6;  //Das Wort „Relay_2“ steht jetzt für den Wert 6.  //LEDWarn
int Relay_3 = 5;  //Das Wort „Relay_3“ steht jetzt für den Wert 5.  //Nebel

int FanPin = 3;  //DatenPin für den Lüfter



void setup()
{
  TCCR2B = TCCR2B & 0b11111000 | 0x01; //Timer 2(PWM Pins 3 und 11)
  pinMode(FanPin, OUTPUT); //Setzt den Pin des Lüfters als Ausgang

  pinMode(LEDrot, OUTPUT); //Der Pin mit der LEDrot (Pin 9) ist jetzt ein Ausgang auf den LED vom Taster
  pinMode(LEDgruen, OUTPUT); //Der Pin mit der LEDgrün (Pin 10) ist jetzt ein Ausgang auf den LED vom Taster
  pinMode(Taster, INPUT); //Der Pin mit dem Taster (Pin 11) ist jetzt ein Eingang.
  pinMode(Schwimmer, INPUT); //Der Pin mit dem Schwimmer (Pin 12) ist jetzt ein Eingang.


  pinMode(Relay_1, OUTPUT); //Der Pin 7 ist ein Ausgang
  pinMode(Relay_2, OUTPUT); //Der Pin 6 ist ein Ausgang
  pinMode(Relay_3, OUTPUT); //Der Pin 5 ist ein Ausgang

  digitalWrite(LEDgruen, HIGH); //grüne LED ein
}


void loop()
{
  Schwimmerstatus = digitalRead(12); //Hier wird der Pin12 ausgelesen. Das Ergebnis wird unter der Variable „Schwimmerstatus“ mit dem Wert „HIGH“ für 5Volt oder „LOW“ für 0Volt gespeichert

  if (Schwimmerstatus == LOW)   //Ist der Schwimmerstatus LOW, dann wird das Programm so lange deaktiviert, bis dass Wasser nachgefüllt worden ist.
  {
    digitalWrite(LEDrot, HIGH);   //rote LED ein
    digitalWrite(Relay_2, HIGH); //WarnLED Relay ein
    digitalWrite(LEDgruen, LOW); //grüne LED aus
  }
  else
  {
    Tasterstatus = digitalRead(Taster); //Hier wird der Pin11 ausgelesen. Das Ergebnis wird unter der Variable „tasterstatus“ mit dem Wert „HIGH“ für 5Volt oder „LOW“ für 0Volt gespeichert

    if (Tasterstatus == HIGH)
    {
      digitalWrite(LEDrot, LOW);   //rote LED aus
      digitalWrite(Relay_2, LOW); //WarnLED Relay aus
      digitalWrite(LEDgruen, HIGH); //grüne LED ein

      digitalWrite(Relay_3, HIGH);
      delay(5000);

      digitalWrite(Relay_1, HIGH);

      analogWrite(FanPin, 70);
      delay(1000);
      analogWrite(FanPin, 180);
      delay(1000);
      analogWrite(FanPin, 225);
      delay(4000);

      digitalWrite(Relay_3, LOW);
      delay(5000);
      digitalWrite(Relay_1, LOW);

      delay(5000);

      digitalWrite(LEDrot, LOW);    //rote LED aus
      digitalWrite(LEDgruen, HIGH); //grüne LED ein
    }
  }
}

Geh mal in deinen Post unten mit dem Bleistift, dann markiere das, was code sein soll und klicke oben auf das </> Symbol - speichern fertig.
Sonst ist das nicht lesbar.

Zwei Sachen

  1. Ganzen Sketch in </> setzen.
  2. Deine Relais sind nicht geeignet für 220V egal was da drauf steht, wen die feucht werden und Du anpackst dein UNO bist weg vom Fenster, für 220V besser SSR Relais nehmen so was z.B.
    SSR-40DA 40A Solid State Relais Modul Für Arduino DC3-32V bis AC 24-380V 250V | eBay

Er ist guter Pilot 21sek im Blindflug :wink:

230V ist der europäische Standard

Und was hart das zu Sagen? Ist halt erst ein parr Jahre alt (genau seit 1987)
und egal Deine Spielzeug Relais sind auch nicht für 230V geeignet

Danke für Deine Anregungen.
Ich habe es neu reinkopiert.

Ich habe das Ganze in einem Wasserfestem Gehäuse montiert

Sehr schön.
Ich wurde vorschlagen erst die delay rauswerfen, den über 21 sek reagiert kein Taster, kein Schwimmer, es werden nur die Relais geschaltet+ der Fan
Lese das mall

Bitte zeichne einen Schaltplan.
Hast du bei deinen Taster und deinem Schwimmschalter auch jeweils einen Pulldown-Widerstand gesetzt?
Siehe dazu auch die Anmerkungen von:
[url]https://www.arduino.cc/reference/de/language/functions/digital-io/digitalread/[/url]
Weiters würden dir Ausgaben auf der Seriellen Schnittstelle helfen zu erkennen weswegen dein Programm nicht macht was du willst.
--> Verwende Serial.Print Ausgaben um Festzustellen welcher Eingang nicht so ausgelesen wird wie du glaubst.

Wenn ich das Recht im Bild sehe, fehlt der PullDown am Schwimmer. Am Taster ist ein PullDown angeschlossen (pink Mitte).

Nach Einbau des Schalters rechts, nicht mehr :wink:

Die Steuerbox wird sich nicht in der Nähe der Verneblerbox befinden :roll_eyes:. Macht euch keine Sorgen. Aber danke für die Anteilnahme :grinning:.

Ich habe den Wiederstand für den Schwimmer gesetzt.
Das "if (Schwimmerstatus == LOW) " erkennt er zwar, bleibt da aber hängen. Auch wenn ich den Schwimmerschalter auf HIGH setze.

Das "if (Schwimmerstatus == HIGH) " erkennt er bei neustart erst gar nicht.

Der Witz ist, ich hatte den Code eigentlich schon, aber in der Müdigkeit hatte ich ihn überspiel. Ich grüble schon seit Tagen wieder daran, aber ich bekomm ihn nicht zum laufen :woozy_face:

Schaltet der Schwimmer sauber? was für einer ist das?
wen er schon zicht mall 230V geschaltet hat ist er ein wenig "eingebrannt" und schaltet den geringen Strom nicht sauber, hängt von der Kontaktbeschichtung.

Wurden die ganzen delay() entsorgt? je nach dem wie der Schwimmer steht wartest Du halbe Minute

Was schaltest du mit dem Schwimmerschalter ?
Dein Relais und 230 Volt AC ?
Hast du an den Relaiskontakten ein Snubber dran ?
Hat die Relaisplatine eine Freilaufdiode ?

Der Schwimmerschalter wird "nur" abgefragt ob noch genug Wasser im Behälter ist.
HIGH für genug und LOW wenn zu niedrig.

Ist er LOW, sollte die 12v LED via Relay angehen beim Taster das rote Licht an.
Dann alles auf stopp, bis der Schwimmer wieder auf HIGH ist (Wasser wurde nachgefüllt)

Die anderen Fragen kann ich nicht beantworten.


Damit ihr eine bessere Vorstellung habt, um was es geht. Das war der erste Versuch.

Ok, Freilaufdioden sind je Relais auf dem Board vorhanden.
Snubber kann ich nicht erkennen. Diese sind an den Relaiskontakten wichtig, damit da Funken, die den Arduino zum Absturz bringen können, verhindert werden.

Ich hoffe ihr sitzt alle gut. Ich habe den Fehler gefunden.

Zuvor hatte ich alle Kabelverbindungen getestet, alle waren in Ordnung.

Dann habe ich jeden Befehle einzeln getestet. Dabei stellte ich fest, dass die Farben beim Taster nicht immer leuchteten.

Es waren die Stiften vom obersten Board. Einzelne hatten so knapp kontakt. :crazy_face:

Nachdem ich jeden runtergedrückt hatte und die Lötpunkte meiner Wiederständen und Kabel an der Unterseite in der Höhe minimiert hatte, "Funzt" alles wie es soll.

Ich danke allen vielmals, für eure Unterstützung. Ich habe habe einiges dazugelernt.
Grüsse aus der Schweiz :switzerland: