Schwimmer Schaltung macht nicht was sie soll

Hallo
Ich bin grade an einem Projekt am verzweifeln :confused:
Im Prinzip sollte es ganz einfach sein, aber ich übersehe irgendwas und währe Dankbar wenn sich das mal einer anschauen könnte .
Das Projekt besteht aus 2 Arduinos einmal eine Wasserstands Überwachung (um die es hier aber nicht geht)
Und um einen Arduino der über eine Wochen Zeitschaltuhr Läuft
einmal die Woche soll dieser über ein Relais die Überwachung Abschalten und Wasser abpumpen.
Wenn Der Wasserstand einen bestimmten Pegel erreicht hat wird ein Schwimmer ausgelöst.
Durch das Signal soll der Arduino das Relais ausschalten und so die Überwachung wieder einschalten ,die die pumpe abschaltet und wieder Wasser auffüllt.
Also schalten tut er ........
Nur schaltet er das Relais wieder ein sobald der Schwimmer keinen Kontakt mehr hat und somit die Überwachung wieder aus . und das soll er nicht. er soll das Relais auslassen.
Ich hab mittlerweile etliche Sketch Kombinationen versucht,wieder gelöscht, auskommentiert usw usw
aber entweder reagiert er gar nicht oder er macht eben aus bei Kontakt und wieder an wenn kein Kontakt da ist.
Vielleicht bin ich auch einfach zu doof um bei Google die richtige frage zu stellen, aber ich habe nirgendwo ein vergleichbares Problem gefunden :roll_eyes:

include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

int WS = 3; //Relais 
int Signal = 9;// Schaltung von WS
int lehr = 8; //Schwimmer
byte leds = 0;
void setup()
 
 {{

digitalWrite(WS, HIGH); //Relais 
pinMode(WS, OUTPUT); 
pinMode(Signal, INPUT_PULLUP);  //Verbindung zu WS
pinMode(lehr, INPUT_PULLUP); //Schwimmer
 

Serial.begin(9600); 
mySwitch.enableTransmit(10);
mySwitch.setProtocol(1);
mySwitch.send(5393 , 24); // Abpumpen ein
mySwitch.send (5471 , 24); // Abpumpen ein

delay(500);  }

digitalWrite(WS, HIGH); //Wasserstandsüberwachung aus
}}


void loop() 
{
 if (digitalRead(lehr) == HIGH)
 {
   digitalWrite(WS, HIGH);
   delay(1000);

 //  else ()
 }
 
// if (digitalRead(lehr) == LOW)
 //{
  // digitalWrite(WS, LOW);
   delay(1000);
 //}
}

Hi,
kannst Du noch ne Zeichnung liefern, auf der wir sehen wie alles verkabelt ist, inlusive dem Relais, der Schaltuhr, Schwimmer und auch die Wasserstandsüberwachung. Dann ist die Frage, schaltet der Schwimmer bei bei niedrigem Wasserstand ein, oder aus? Hängt der Schwimmer auch an der Wasserstandsüberwachung oder evt, auch an der Pumpe? So etwas kann das Signal vom schwimmer beinflussen, wodurch der Arduino den womöglich nicht korrekt aswerten kann.
Um Dir beim Sketch zuhelfen brauchen wir diese Angaben, denn ohne zu wissen, wie die komponenten Funktionieren / schalten, wird es sehr schwer den Sketch logisch richtig zu schreiben.

LG Stefan

Na ja Zeichnung von der Schaltung im Prinzip so wie HIER vom NANO nur das die LED eben das Relais ist und der Taster der Schwimmer.
Pumpe wird über 433 Mhz sender und Funk Steckdosen gesteuert.
Wenn der der Schwimmer den gewünschten Pegel erreicht hat bekommt er Kontakt und ist auf HIGH
Die Stromversorgung kommt von einem 12 Netzteil ,die beiden Arduinos sind nicht direkt miteinander verbunden.
das Relais soll ja die Stromzufuhr zur Überwachung unterbrechen
Die Schaltung Funktioniert ja eben nur das das Relais Einschalten soll sobald Die Zeitschaltuhr angeht(strom von der Überwachung Aus) und wenn der Pegel weit genug abgesunken ist geht der Schwimmer auf HIGH und schaltet das Relais wieder aus und somit die Überwachung ein .
Diese schaltet dann per 433MHZ die pumpe aus und ein Magnetventil ein .
Allerdings Schaltet der Schwimmer des Arduinos der zuvor Abgepumpt hat, das Relais viel zu früh wieder ein und somit die Überwachung wieder aus.
was ich möchte ist im nur das der Schwimmer einmal das Relais aus schaltet (eingeschaltet wird er ja im SETUP ) und es nicht wieder einschaltet wenn der Schwimmer auf LOW geht

OK, jetzt wird es klarer, ist im Prinzip ein flankengesteuertes RS-Flipflop mit zwei Tastern,bei dem es egal ist, wie lange ein Taster gedrückt ist. Werde mir das genauer ansehen.

LG Stefan

Noch eine Letzte Frage: der PIN 'Signal' // Verbindung zu WS (Schaltung von WS) Ist das ein Signal von der SchaltUhr? Und was hat dieses für einen Pegel, wenn abgepumpt werden soll?

LG Stefan

Fals dieser Arduino, der an der Schaltuhr hängt nur eingeschaltet wird, wenn Abgepumpt werden muss, kanst Du es so machen:

include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

int WS = 3; //Relais
int Signal = 9;// Schaltung von WS
int lehr = 8; //Schwimmer
byte leds = 0;
void setup()
 
 {

digitalWrite(WS, HIGH); //Relais
pinMode(WS, OUTPUT);
pinMode(Signal, INPUT_PULLUP);  //Verbindung zu WS
pinMode(lehr, INPUT); //Schwimmer
 

Serial.begin(9600);
mySwitch.enableTransmit(10);
mySwitch.setProtocol(1);
mySwitch.send(5393 , 24); // Abpumpen ein
mySwitch.send (5471 , 24); // Abpumpen ein

delay(500);  }

digitalWrite(WS, HIGH); //Wasserstandsüberwachung aus
}

void loop()
{
 if (digitalRead(lehr) == HIGH)
 {
   digitalWrite(WS, LOW);            // RELAIS AUS Überwachung ein.
   mySwitch.enableTransmit(10);
   mySwitch.setProtocol(1);
   mySwitch.send(5393 , xx); // Abpumpen aus < anstelle der xx den Code für 'AUS' einfügen
   mySwitch.send (5471 , xx); // Abpumpen aus < anstelle der xx den Code für 'AUS' einfügen
  }
}

ACHTUNG! DA dein Schwimmer nach HIGH schaltet, MUSST Du von PIN 8 nach GND einen PULL_DOWN Widerstand (ca. 10 kOhm) anschliessen. Wenn ein Schalter nach HIGH schlisst, kannst Du den Internen PULL-UP NICHT verwenden, da der Eingang so IMMER auf HIGH bleibt!
sorry war vorher in grad aufm Sprung ud hab das übersehen.
Ansonsten, wenn er die ganze zeit läuft, müssen wir noch das Signal der Schaltuhr auswerten.

@Jan2381

Aus dem Sketch werde ich nicht schlau, sorry.

Du startest im Setup zwei mal das Funksignal mit unterschiedlichem Funkcode.

mySwitch.send(5393 , 24); // Abpumpen ein
mySwitch.send (5471 , 24); // Abpumpen ein

Warum im Setup ?
Warum 2 mal ?
Warum unterschiedliche Funkcode ?
Aber beide mit "Abpumpen ein".

@HotSystems,
ja das ist mir auch aufgefallen, dachte aber, das muss 2x mit unterschiedlichem Code. Er schaltet ja Funksteckdosen, vlt sind es ja mehrere, die er 'gleichzeitig' schaltet.
im Setup hab ich es erstmal gelassen, weil ich vermute, dass er mit der SchaltUhr das Netzteil für diesen Arduino ein- /aus-schaltet, so dass der Arduino nur läuft, wenn er abpumpen will, und einige Zeit danach wieder ausschaltet. dann fuktioniert das so. ansonsten, wenn der Arduino immer läuft, und die Schaltuhr nur sagt, wenn abgepumpt werden soll, dann müsste man tatsächlich die Pumpe und das Relais komplet in der Loop schalten, in abhängigkeit eines Signals von der Schaltuhr.
Aber Dise Frage wurde vom TO noch nicht eindeutig beantwortet.

LG Stefan

Deltaflyer:
@HotSystems,
ja das ist mir auch aufgefallen, dachte aber, das muss 2x mit unterschiedlichem Code. Er schaltet ja Funksteckdosen, vlt sind es ja mehrere, die er 'gleichzeitig' schaltet.

Ok, hatte den TO damit gemeint und nicht gemerkt, dass du auch zur selben Zeit geantwortet hast.

Hier ist wie immer das Problem, zu wenig oder schlechte Informationen und schlechte oder keine Dokumentation im Sketch.

Hi HotSystems,
ich bin schon davon ausgegangen, dass Du den TO gemeint hast und fühle mich auch nicht von Dir kritisiert.
Ich weiss, dass Du mir was Arduino und dessen Programmierung angeht um Welten voraus bist und ich noch gewaltig viel lernen muss. Darum wollte ich Dir darlegen, WARUM ich es in meinem Beispiel-Code auch so gemacht/belassen habe, wie es der TO gepostet hatte.

LG Stefan

Deltaflyer:
Hi HotSystems,
ich bin schon davon ausgegangen, dass Du den TO gemeint hast....

Kein Problem, ich hatte es auch so gesehen.

Vielen dank .
Ich musste jetzt komischerweise die "HIGHs" durch "LOWs" austauschen aber so funktioniert das .
Ich sehe im Moment allerdings nicht den Unterschied zu meinem Sketch.
Muss ich mir später noch mal genauer anschauen.

Der Schwimmer schaltet jetzt das Relais aus ,und es bleibt aus und das ist alles was ich wollte,
deshalb fand ich die Erklärungen zur Fernbedienung nicht so wichtig. Aber ich erzähl es gerne :smiley:
Also 2 Funkcodes stehen da weil ich mit der Fernbedienung die bei den Steckdosen dabei war unterschiedliche Codes ausgelesen habe ,und deshalb hab ich einfach beide reingesetzt einfach nur um sicherzugehen das die Steckdose schaltet.
Die Schaltung um die es im Sketch wird durch die Zeitschaltuhr mit Strom versorgt und ist meistens aus.
einmal die Woche bekommt sie strom für ca 1-2 Stunden .
Die Wasserstands Überwachung ist auf 12 V über das Relais an ein Netzteil angeschlossen .
Wenn die Zeitschaltuhr einschaltet dann bekommt der hier behandelte Sektch Strom und schaltet das Relais (womit die Überwachung keinen Strom mehr bekommt) und Schaltet eine Pumpe über eine Funk Steckdose ein. Deshalb hab ich das ins Setup geschrieben damit es eben nur einmal passiert
an einem bestimmtem punkt soll der Schwimmer das Signal Lehr geben woraufhin das Relais wieder ausgeschaltet wird und die Überwachung wieder mit Strom versorgt wird.
Damit hat der Zeitschaltuhr gesteuerte Arduino eigentlich fast seine Aufgabe erledigt
Die Überwachung Schaltet jetzt die Pumpe aus und öffnet ein Magnetventil (alles über 433MHZ)
Die Überwachung hat insgesamt 3 Schwimmer bei dem sie verschiedene Aktionen Startet wie z.b das Magnetventil wieder ausschalten (Ultraschall hab ich auch schon versucht aber die Wasserdichten sind für meine Zwecke zu ungenau und liefern oft Falsche Werte,zumindest die 4 die ich habe)

Der PIN Signal ist eher noch ein versuch ob das geht weiß ich noch nicht
Ein Schwimmer der Überwachung soll diesen auslösen und dann ein Signal an den schicken der das Relais steuert ,der Gedanke dabei ist das ich evtl noch ein 2tes Relais anschließe die dann noch etwas anderes steuert .Ich könnte es auch über 433MHZ machen aber so würde ich mir den Verbau eines Empfängers sparen.getestet habe ich das allerdings noch nicht

Ok...danke für die Erklärung, ich hoffe ich habe alles verstanden.
Ich würde sicher einiges anders lösen.

Deine Schaltung solltest du noch mal überdenken, speziell die Steuerung von Pumpen über 433 MHz.
Ich hoffe, dir ist bewusst, dass 433 MHz eine Jedermannfrequenz ist. Soll heißen, da tummeln sich sehr viele Sender (große und kleine) rum.
Was passiert, wenn dein Funksignal durch ein Störsignal überlagert wird und keine Pumpe startet ?
Da solltest du unbedingt Sicherheit einbauen.

Was dein Problem mit dem wasserdichten Ultraschall-Sensor angeht, verstehe ich nicht.
Ich setze einen an meiner Wasserzisterne ein, der zeigt mir zentimetergenau den Füllstand an.
Eine weitere Möglichkeit ist die Verwendung von V2A-Fühler die elektronisch gemessen werden.
Alles Dinge um es vollelektronisch zu lösen.

Wenn keine pumpe startet das ist nicht weiter wild, da sich die Zeitschaltuhr eh nach einer gewissen zeit wieder abschaltet und die Überwachung dann automatisch wieder aktiv ist.Dann müsste der Wasserwechsel eben wieder von Hand betrieben werden bis der Fehler gefunden ist. Was ich damit sagen will es währe zwar ärgerlich aber kein Weltuntergang.
Fataler währe es wenn das Magnetventil nicht mehr abschalten würde . Allerdings habe ich daran auch schon gedacht und einen Schwimmer Installiert der die 220v zum Magnetventil kappt kurz über dem anderem Schwimmer . Das es bessere Wege gibt als 433 mhz sagtest du mir vor ein paar Monaten schon mal allerdings hatte ich leider noch keine zeit mich mit Arduino und W-Lan auseinanderzusetzen
Oder gibt es mittlerweile noch etwas besseres ?
bei dem Ultraschall Sensor hast du denke ich mal etwas höher wertiges als ich . hast du evtl mal nen link ?
Bei mir ist das problem das er alle paar messungen eine völlig wahnwitzige zahl anzeigt
z.b. so :
20
20
20
1785
20
20
1785

und das würde ja jedes mal meine if abfragen auslösen , deshalb hab ich ihn weggelassen
Was meinst du mit

V2A-Fühler die elektronisch gemessen werden

Meinst du das wo oben und unten im Wasser eine Stange angebracht ist ?

Jan2381:
....Allerdings habe ich daran auch schon gedacht und einen Schwimmer Installiert der die 220v zum Magnetventil kappt kurz über dem anderem Schwimmer....

Ist da denn bei der Anzahl Schwimmer auch noch Platz für Wasser ? :wink:

Das es bessere Wege gibt als 433 mhz sagtest du mir vor ein paar Monaten schon mal allerdings hatte ich leider noch keine zeit mich mit Arduino und W-Lan auseinanderzusetzen
Oder gibt es mittlerweile noch etwas besseres ?

Es muss nicht WLan sein, kann auch Funk, aber auf 868 MHz oder 2,4 GHz, da tummeln sich noch nicht so viele. Ist aber auch abhängig von der zu erzielenden Reichweite.

bei dem Ultraschall Sensor hast du denke ich mal etwas höher wertiges als ich . hast du evtl mal nen link ?
Bei mir ist das problem das er alle paar messungen eine völlig wahnwitzige zahl anzeigt
z.b. so :
20
20
20
1785
20
20
1785

und das würde ja jedes mal meine if abfragen auslösen , deshalb hab ich ihn weggelassen

Das kann aber auch an deinem Sketch liegen.
Mein US-Sensor ist da auf jeden Fall sehr stabil.

....Meinst du das wo oben und unten im Wasser eine Stange angebracht ist ?

Ja, du kannst da auch mehrere "Stangen" einsetzen. Die unterste ist der Bezugspunkt und die darüber liegenden lösen dann die entsprechende Funktion aus.
Ich verwende hier 4 Fühler, von unten gesehen: 1 x Bezugspunkt, 1 x Pumpe aus, 1 x Pumpe ein, 1 x Alarm. Das arbeitet so schon einige Jahre.

Hierbei ist wichtig, das ganze mit einer "Wechselspannung" zu betreiben. Aber dafür gibt es fertige IC's.

HotSystems:
Ist da denn bei der Anzahl Schwimmer auch noch Platz für Wasser ? :wink:

Ja, eine Kaffeetasse dann is es voll ;D

HotSystems:
Ja, du kannst da auch mehrere "Stangen" einsetzen. Die unterste ist der Bezugspunkt und die darüber liegenden lösen dann die entsprechende Funktion aus.
Ich verwende hier 4 Fühler, von unten gesehen: 1 x Bezugspunkt, 1 x Pumpe aus, 1 x Pumpe ein, 1 x Alarm. Das arbeitet so schon einige Jahre.

Hierbei ist wichtig, das ganze mit einer "Wechselspannung" zu betreiben. Aber dafür gibt es fertige IC's.

Hmm...... was meinst du is daran jetzt besser bzw. sicherer als ein Schwimmer ?
ich benutze diese HIER
wie nennt sich diese Schaltung die du meinst bzw wie ist der Name von so einem System? ich hab zwar schon mal sowas auf Bildern gesehen allerdings nie weiter beachtet. Gibt es da Projekte hier die so gebaut sind ? ich würd ja suchen nur ohne Namen is das doof :slight_smile:
Der Sensor den du hast is im übrigen der selbe den ich habe . Der Sketch den ich benutzt habe war der selbe wie bei den anderen nicht wasserdichten bei denen Funktioniert alles soweit.
Ich werde den sketch die Tage mal Posten im mom fehlt mir leider etwas die zeit dazu

Jan2381:
Ja, eine Kaffeetasse dann is es voll ;D

Hmm...... was meinst du is daran jetzt besser bzw. sicherer als ein Schwimmer ?

Das hängt ganz von der gesamten Konstruktion ab.
Für deine Schwimmerschalter musst du Löcher durch den Behälter bohren.
Meine Fühler werden von oben in den Behälter eingeführt.

wie nennt sich diese Schaltung die du meinst bzw wie ist der Name von so einem System? ich hab zwar schon mal sowas auf Bildern gesehen allerdings nie weiter beachtet. Gibt es da Projekte hier die so gebaut sind ? ich würd ja suchen nur ohne Namen is das doof :slight_smile:

Ich setze dazu die LM1830, leider ist der nicht mehr lieferbar, aber du kannst nach einem Nachfolger googeln.

Der Sensor den du hast is im übrigen der selbe den ich habe . Der Sketch den ich benutzt habe war der selbe wie bei den anderen nicht wasserdichten bei denen Funktioniert alles soweit.
Ich werde den sketch die Tage mal Posten im mom fehlt mir leider etwas die zeit dazu

Dann hast du im Sketch sicher einen Fehler, wie geschrieben, funktioniert der bei mir problemlos und zeigt mir immer zentimetergenau die Tankfüllung an.

Ja gut die Schwimmer könnte man auch an einer Stange oder einem Rohr befestigen (womit man dann gleich noch eine Kabeführung hätte) das man in den Behälter einführt, das alleine wäre für mich jetzt kein Grund das so zu machen. Davon mal abgesehen das das es bei einem kleineren Behälter dann noch den nachteil der Luftfeuchtigkeit. Bei einem abgedecktem Behälter das wenn die Luftfeuchtigkeit zu hoch ist sich Kondenswasser bildet das dann die Messergebnisse verfälscht . Und das der Fließende Strom die Messergebnisse der anderen Sonden die da evtl noch im Wasser sind eben auch verfälschen könnte. Oder liege ich da jetzt falsch? ist jetzt nur so ein Gedankengang von mir.

Zu dem US Sketch. Das merkwürdige ist mit dem Standard Sensor (also der mit den 2 runden Öffnungen ,ich komm jetzt nicht auf die genaue Bezeichnung) funktioniert er wunderbar .
Deshalb bin ich davon ausgegangen das es am Sensor liegt.
Hier mal der Sketch

#include <RCSwitch.h>
#include <Wire.h> 
RCSwitch mySwitch = RCSwitch(); // Transmitter is connected to Arduino Pin 9 
 



#include <LiquidCrystal_I2C.h>

#include <OneWire.h>
#include <DallasTemperature.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 
#define ONE_WIRE_BUS 10 /* Digitalport Pin 10 definieren */
 #include <NewPing.h>

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);




OneWire ourWire(ONE_WIRE_BUS); /* Ini oneWire instance */

DallasTemperature sensors(&ourWire);/* Dallas Temperature Library für Nutzung der oneWire Library vorbereiten */
void setup() {
  Serial.begin(9600);
 lcd.begin(16,2); 
delay(1000);
 mySwitch.enableTransmit(9);
sensors.begin();/* Inizialisieren der Dallas Temperature library */
 {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight(); // finish with backlight on  

//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0  
  lcd.setCursor(0,0); 
  lcd.print("Reset");
  delay(1000);


// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
  lcd.clear();
  lcd.setCursor(7,0); //Start at character 0 on line 0
  lcd.print("Use Serial Mon");
  lcd.setCursor(0,1);
  lcd.print("Type to display");  


}
 
void loop() 

{ delay(50);                      // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
  Serial.print("Ping: ");
  Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance in cm and print result (0 = outside set distance range)

     lcd.clear();
  lcd.setCursor(0,0); //Start at character 0 on line 0
  lcd.print( sensors.getTempCByIndex(0));
   lcd.setCursor(5,0);
   lcd.print("C ");
  lcd.setCursor(0,1);
  lcd.print(uS / US_ROUNDTRIP_CM);  
   lcd.setCursor(4,1);
   lcd.print("Wasserstand");
   delay(500);
  }

    
 


 

 
  if (uS / US_ROUNDTRIP_CM > 25 )
    {
     mySwitch.send(267537, 24); //Ein wasser
    
     
 Serial.print ("Wasser ein");
 delay( 250);
   
    }
if (uS / US_ROUNDTRIP_CM < 10 ) 
    {
     mySwitch.send(267540, 24); //Aus wasser
  
  Serial.print("Wasser Stop");
  delay (250);  
    }



 


Serial.print(sensors.getTempCByIndex(0) );
Serial.print(" C  ");
Serial.println();

Serial.print (uS / US_ROUNDTRIP_CM);
 Serial.println ("cm");
 delay (1000) ;

sensors.requestTemperatures(); // Temp abfragen


  if ( sensors.getTempCByIndex(0) < 18 )
 {
      mySwitch.send(4195665, 24); //Heizung Ein
      mySwitch.send(4199767, 24); //Heizung Ein
 } 

else if  ( sensors.getTempCByIndex(0) > 18 ) 
  {    mySwitch.send(4195668, 24); //Heizung AUS
  }
     



 
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];

  while(ourWire.search(addr)) {
    Serial.print("\n\r\n\r1-Wire-Device gefunden mit Adresse:\n\r");
    for( i = 0; i < 8; i++) {
      Serial.print("0x");
      if (addr[i] < 16) {
        Serial.print('0');
      }
      Serial.print(addr[i], HEX);
      if (i < 7) {
        Serial.print(", ");
      }
    }
    if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC is not valid!\n\r");
      return;
    }
  }
  Serial.println();
  ourWire.reset_search();
  return;

  delay (1000);
}

Ich Persönlich finde die Lösung mit den Schwimmern allerdings mittlerweile etwas besser, auch wen ndie an der Wasserstands und Temperatursteuerung schon wieder nicht ganz so wollen wie ich ,aber das bekomme ich schon raus was da der Fehler ist