Automatische Bewesserung mit Ventile inklusiver Wassserzirkulation

Hallo liebe Freunde,
Ich habe mich hier gerade neu angemeldet.

Es geht um einen guten Kumpel von mir der bald auf Urlaub verreißen möchte und hat sich
Elegoo UNO R3 bestellt und versuche ihm das zu schreiben.

Es sind 4 Töpfe die von einem Sensor ausgelesen werden sollen ob die Feuchtigkeit passt oder eben nicht passt und zusätzlich das Wasser in der Box für alle 3 Stunden einmal Bewegt wird damit es nicht Modern anfängt.

Zu der Anlage:

Es gibt nur 1ne Pumpe mit 5 Ventilen. Das 5te Ventil wird als Bewegender Kreislauf gegen das Modern vom Wasser verwendet. 2 Wochen Urlaub ist doch ein wenig lange. Die anderen 4 Ventile zur Bewässerung.
4 Sensoren für die Feuchtigkeitsmessung in der Erde.

Meine Vorstellung wäre nun folgende für Ihn:

Sensor1 bis Sensor4 auf A1 bis A4 untersuchen der Reihe nach die Messwerte der Feuchtigkeit in der Erde, sollte A1 Feucht sein bleibt das Ventil geschlossen und untersucht A2, sollte A2 Trocken sein öffnet es das Ventil und geht über zu A3, sollte die trocken sein bleibt es zu, dann zu A4 sollte es feucht sein öffnet es das Ventil.
Dann öffnet erst Ventil 5 dass die Leitung frei ist zur Bewässerung und zur Zirkulation des Wassers.
Die Pumpe die auf den PIN 9 ist, sollte dann erst anspringen, etwas gießen, die Pumpe ausschalten für einige Minuten und die Ventile zur Sicherheit vor Überschwemmung schließen.
Dann soll es so lange dies wiederholen bis die Erde die gewünschte Feuchtigkeit hat.
Ventile danach auch schließen.

Ich stell mir das in einem 3 Stunden Intervall vor zum Feuchtigkeit Messen.
Die Pumpe sollte versetzt auch auf 3 Stunden die Zirkulation durchführen und nur da Ventil 5 aufmachen die das Wasser in einer Kreisbewegung immer wieder in den Tank zurück fließen lässt für 10min oder so.

Da mein Kumpel komplett ansteht und die Zeit knapper wird bei Ihm, versuche ich Ihm nun eine Freude zu bereiten und das Programm zu erstellen.Ich glaube es würden auch anderen eine große Hilfe sein wenn andere User nach dem später suchen.

Ich kann selbst nur HTML / CSS / und ein wenig JavaScript, doch kein C++.

Er hat einiges schon selbst geschrieben, doch die Pumpe läuft 24/7 durch und ist so nicht verwendbar da die Pumpe das Wasser zu stark erhitzt. Sonst funktioniert alles Tipp Topp nur die Pumpe geht halt null aus für eine gewisse Zeit.

Bräuchte Eure Hilfe/Unterstützung dabei bitte, vielen Dank.

mfg Kontrust`

> int sensor_pin1 = A0;
> int sensor_pin2 = A1;   //dein analoger Pin für den Sensor
> 
> int output_value1;
> int output_value2;
> 
> void setup() {
>   pinMode(2, OUTPUT);
>   pinMode(3, OUTPUT);
>   pinMode(4, OUTPUT);
>   pinMode(5, OUTPUT);
> }
> 
> void loop() {
> 
>   digitalWrite(2, HIGH);
>   digitalWrite(3, HIGH);
>   delay(90000);
> 
>   output_value1 = analogRead(sensor_pin1);
>   output_value1 = map(output_value1, 585, 285, 0, 100); // hier Sensor-Werte eingeben
> 
>   if (output_value1 < 30 ) //Der Wert kann angepasst werden
>   {
>     digitalWrite(2, LOW);
>     delay(2000); //Pumpe 2 Sekunden an
>     digitalWrite(2, HIGH);
>     delay(40000); //warten um überwässerung zu verhindern
> 
>     output_value1 = analogRead(sensor_pin1);
>     output_value1 = map(output_value1, 585, 285, 0, 100); // hier Sensor-Werte eingeben
>   }
> 
>   else
>   {
>     digitalWrite(2, HIGH);
>   }
>   output_value2 = analogRead(sensor_pin2);
>   output_value2 = map(output_value2, 590, 310, 0, 100); // hier Sensor-Werte eingeben
> 
>   if (output_value2 < 30 ) //Der Wert kann angepasst werden
>   {
>     digitalWrite(3, LOW);
>     delay(2000); //Pumpe 2 Sekunden an
>     digitalWrite(3, HIGH);
>     delay(40000); //warten um überwässerung zu verhindern
> 
>     output_value2 = analogRead(sensor_pin2);
>     output_value2 = map(output_value2, 590, 310, 0, 100); // hier Sensor-Werte eingeben
>   }
> 
>   else
>   {
>     digitalWrite(3, HIGH);
>   }
> 
>   output_value1 = analogRead(sensor_pin1);
>   output_value1 = map(output_value1, 585, 285, 0, 100); // hier Sensor-Werte eingeben
> 
>   output_value2 = analogRead(sensor_pin2);
>   output_value2 = map(output_value2, 590, 270, 0, 100); // hier Sensor-Werte eingeben

Irgendwie geht mir die Pumpe auf platz 9 ab, oder?

> int sensor_pin1 = A0;
> int sensor_pin2 = A1;   //dein analoger Pin für den Sensor
> 
> int output_value1;
> int output_value2;
> 
> void setup() {
>   pinMode(2, OUTPUT);
>   pinMode(3, OUTPUT);
>   pinMode(4, OUTPUT);
>   pinMode(5, OUTPUT);
> }
> 
> void loop() {

es scheint nur 4 Ausgänge (3 Ventile, 1 Pumpe???) und zwei Sensoren zu geben.
Ich denke ohne einer schematischen Zeichnung und einer Überprüfung deinerseits was da wirklich vorliegt, ist es komplett sinnlos hier rumzudoktern.
Genau aufzeichen:
Welcher Sensor - zu welchem Ventil?
Wo ist die Pumpe angeschlossen?
Wo ist dieses "Rücklaufventil" angeschlossen?

Die Pumpe am umbekannten Pin läuft durch, weil sie im loop immer wieder eingeschaltet wird.

Pins als Konstanten mit sprechenden Namen würden helfen. Gibt es auch in JavaScript.

Poste bitte den Code so dass man den auch verwenden kann, diese > gehören weg!
Und außerdem ist er unvollständig, da fehlt unten was - mindestens ein schließendes }

Ja, so wie mein Freund es gemacht hat sind es 4 Ventile und 1 Pumpe, Richtig, und 2 Sensoren.
das Programm funktioniert einwandfrei wie er es geschrieben hat mit Ausnahme der pumpe halt die 24/7 durchläuft.

hier die Teile was er hat:

Uno_R3

und

4 Relay Module

Hier gerne nochmals sein Programm wie er es geschrieben hat.

int sensor_pin1 = A0;
int sensor_pin2 = A1;   //dein analoger Pin für den Sensor

int output_value1;      //Ventile
int output_value2;

int output_value9;      //Pumpe

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() {

  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  delay(90000);

  output_value1 = analogRead(sensor_pin1);
  output_value1 = map(output_value1, 585, 285, 0, 100); // hier Sensor-Werte eingeben

  if (output_value1 < 30 ) //Der Wert kann angepasst werden
  {
    digitalWrite(2, LOW);
    delay(2000); //Pumpe 2 Sekunden an
    digitalWrite(2, HIGH);
    delay(40000); //warten um überwässerung zu verhindern

    output_value1 = analogRead(sensor_pin1);
    output_value1 = map(output_value1, 585, 285, 0, 100); // hier Sensor-Werte eingeben
  }

  else
  {
    digitalWrite(2, HIGH);
  }
  output_value2 = analogRead(sensor_pin2);
  output_value2 = map(output_value2, 590, 310, 0, 100); // hier Sensor-Werte eingeben

  if (output_value2 < 30 ) //Der Wert kann angepasst werden
  {
    digitalWrite(3, LOW);
    delay(2000); //Pumpe 2 Sekunden an
    digitalWrite(3, HIGH);
    delay(40000); //warten um überwässerung zu verhindern

    output_value2 = analogRead(sensor_pin2);
    output_value2 = map(output_value2, 590, 310, 0, 100); // hier Sensor-Werte eingeben
  }

  else
  {
    digitalWrite(3, HIGH);
  }

  output_value1 = analogRead(sensor_pin1);
  output_value1 = map(output_value1, 585, 285, 0, 100); // hier Sensor-Werte eingeben

  output_value2 = analogRead(sensor_pin2);
  output_value2 = map(output_value2, 590, 270, 0, 100); // hier Sensor-Werte eingeben

//  if (output_value1 < 35)
//  {
//    digitalWrite(4, LOW);
//    digitalWrite(5, LOW);
//  }
//  else
//  {
//    digitalWrite(4, HIGH);
//    digitalWrite(5, HIGH);
//  }
}

Dinge dir mir nicht gefallen bei seiner schreib weiße:

  • Das Delay -> gibt es dazu was besseres als nur milli?
  • Natürlich die Konstanten - bin ich auf der selben Meinung die umzuschreiben.
  • auch dem Aufbau, di Ventile will ich smarter öffnen lassen, dass alle Sensoren abmessen und erst dann die Ventile der reihe nach aufgehen und am Ende gepumpt wird.
  • das die Pumpe aufhört für XY Stunden jedoch die Sensoren (sagen wir mal ) jede Stunde Messen tut.

Da ich nicht der beste bin, hab ich mich hier angemeldet im Forum, das mich jemand Unterstützt und über die Finger schaut. Ist halt doch Wasser und sein Wohnzimmer sollte nicht überflutet werden ^^ :D.

Was ich ihm noch sagen werde , ob er sich den Timer vl. kaufen kann und ein Sensor der den Wasser Pegel ausließt das die Pumpe nicht überhitzt wenn kein Wasser da ist.

Da ich Arbeite und vorgestern auf gestern durchgemacht habe, schreibe ich erst jetzt.

Ich hab die Teile nun bei mir zuhause, außer die Pumpe, kann ich allerdings bei Ihm überprüfen.
Eine Zeichnung schicke ich heute Abends, was ich über Paint versuche hinzubekommen,
dass wir was Bildliches vor uns haben, das es jeder versteht.
Beschrieben hab ich es doch , versuch es ausführlicher hinzubekommen.

Danke vorerst für euer Interesse, ich gehe nun in die Arbeit.

mfg Kontrust

Das ist viel Text aber keine neue Information und keine Frage beantwortet.

Ich würde es nur zusammenräumen und die Code-Duplikate eliminieren.
Wenns mit delay "einwandfrei" funktioniert ... wozu dann groß ändern.

// https://forum.arduino.cc/t/automatische-bewesserung-mit-ventile-inklusiver-wassserzirkulation/1028693/

constexpr byte sensor_pin1 = A0;
constexpr byte sensor_pin2 = A1;   //dein analoger Pin für den Sensor

constexpr byte ventil_pin1 = 2;
constexpr byte ventil_pin2 = 3;
constexpr byte ventil_ruecklauf = 4;
constexpr byte pumpe_pin = 5;

void setup() {
  Serial.begin(115200);
  pinMode(ventil_pin1, OUTPUT);
  pinMode(ventil_pin2, OUTPUT);
  pinMode(ventil_ruecklauf, OUTPUT);
  pinMode(pumpe_pin, OUTPUT);
}

void loop() {
  kreis (sensor_pin1, ventil_pin1, 585, 285);    // blockierend
  kreis (sensor_pin2, ventil_pin2, 590, 310);    // blockierend
  antimoor();  // blockierend
}

void antimoor()
{
  static uint32_t previousMillis = 0;                // Merker für die Ein/Ausschaltzeit
  if (millis() - previousMillis > 2 * 60 * 1000UL)   // langer Intervall
  {
    Serial.println(F("antimoor start"));
    // einschalten
    digitalWrite(ventil_ruecklauf, LOW);
    digitalWrite(pumpe_pin, LOW);
    delay(1 * 60 * 1000UL); //kurzer Intervall
    digitalWrite(pumpe_pin, HIGH);
    digitalWrite(ventil_ruecklauf, HIGH);
    previousMillis = millis(); // letzte Schaltzeit merken
    Serial.println(F("antimoor stop"));
  }
}

void kreis(byte sensor_pin, byte ventil_pin, int mapA, int mapB) 
{
  int output_value = analogRead(sensor_pin);
  output_value = map(output_value, mapA, mapB, 0, 100); // hier Sensor-Werte eingeben

  if (output_value < 30 ) //Der Wert kann angepasst werden
  {
    Serial.print(F("start ventil pin=")); Serial.println(ventil_pin); 
    digitalWrite(ventil_pin, LOW);
    digitalWrite(pumpe_pin, LOW);
    delay(2000); //Pumpe bleibt diese Zeit an
    digitalWrite(ventil_pin, HIGH);
    digitalWrite(pumpe_pin, HIGH);
    delay(40000); //warten um überwässerung zu verhindern
    Serial.print(F("stop ventil pin=")); Serial.println(ventil_pin); 
  }
}

Klar kann man das alles umbauen auf millis(), oder schön in Strukturen oder Klassen migrieren, aber so verstehts vermutlich der Anwender noch.

Was für Pumpe ist das?

ja der Anwender versteht es mit // doch viel Schreiberein halt
doch dein Link gerade,, ich lerne gerade dazu, alles kenne ich noch nicht.
genjal, macht gerade spaß , doch wie heute morgen versprochen meine Skizze zuerst vor deiner Antwort von gestern. (meine schreib weiße sieht zur zeit ähnlich aus doch anders) danke dafür. nun gelöscht und teste es irgendann die tage. ascheinend habe ich nicht den stress egen urlaub, nimmt mir den druck raus gerade.

doch zuerst was futtern ^^ lol. bin game over, war ein 14 stunden job heute ^^

Die Pumpe kommt sobald er mir sie schickt, hab es vorher geschrieben und schaue nun auf mein Handy.

Wen die nicht arbeitet mit 230V ist kein Problem mit den Relais, wen aber doch wurde Finger weit weg lassen.

EXLECO Super Eco Teichpumpe Filterpumpe 3000L/H 10Watt Energiespar Wasserpumpe Koiteich Bachlaufpumpe CTP-2800

sind 10 Volt. doch der Anbiter hat einen großen Preiß und von mein kumpel 36,74€ preis. beinahe 12 euro gespart gegen meinen link ^^ also suchen. ich such hier nicht ich will ihm nir was nettes programmieren ^^

er will ja später auch was gröseres machen, dies ist nur eine Testung gerade. haubtsache ich muss nicht jeden 2ten Tag zu Ihm bewässern. wärend dem urlaub. sollte alles minnimal nur 2 wochen laufen können ohne fehlern.

Nicht 10Volt nur 10Wat bei 230V
Auszug aus Bedienungsanleitung
" Die auf dem Typenschild des Gerätes angegebene Spannung von 230 Volt Wechselspannung
muss der vorhandenen Netzspannung entsprechen.
 Das Gerät niemals am Netzkabel anheben, transportieren oder befestigen.
 Stellen Sie sicher, dass die elektrischen Steckverbindungen im überflutungssicheren Bereich
liegen, bzw. vor Feuchtigkeit geschützt sind.
 Vor jeder Arbeit am Gerät Netzstecker ziehen."
Genaue Angaben hier

und es funktioniert seit Monaten, leider hat er fast 50 Grad beim Wasser da die pumpe durchläuft 24/7 um dies geht es eigentlich ^^

doch würde es so umschreiben das es ein Programm wirklich ist. denn ich kenne
mich nur mit Browser aus, OOB leider noch nicht und mein erster versuch nun.

so wäre der plan, absichtlich 2


thats it

später wärte eine testung im tank gut und mehreres. da kann mann echt spaß daran haben ^^

Fony hat es dir schon geschrieben:
Die Pumpe braucht zum Betrieb 230Volt AC. Die kannst du nicht direkt am Uno anschließen. Leider kann ich auf deinen Bildern nicht genau erkennen, wie du was und wo anschließt. Du solltest besser richtige Schaltbilder posten, auf denen man deutlich alles erkennen kann.
Da die Pumpe mit 230Volt arbeitet, ist es besser wenn das ein Elektriker macht, der etwas davon versteht und das anschließen darf. 230Volt sind lebensgefährlich.

Da wir sehr gute Freundeskreise haben, wir ein Haus bauen können, haben wir auch den Elektriker, der die Pumpe am laufen hat. Deswegen Funktioniert ja das ganze schon sehr gut.
Doch meine Kolleg:in wäre im IT Bereich, doch was die uns zusammen gewurstelt hat, funktioniert absolut nicht :smiley: deswegen versuch ich es nun als Hobby.

Er hat mir 2 Bilder gesendet, einmal in schön und einmal nicht so schön.
Da sich nun alles ein wenig verändert hat, sieht der Schaltplan nun anders aus als wie meine Aufzeichnung.

*Pumpe wird über das Relais Modul gesteuert.
*Mv5 wird gegen ein "Bypass Ventil" getauscht.
*( mein Kumpel denkt zur zeit darüber nach, alle Pflanzen zu bewässern , sobald 1ne pflanze durstig ist).

Nun die Bilder vom Elektriker:

Ich hoffe Ihr könnt vom Elektriker und von dem was sich die Automatische Bewässerung wünscht euch nun was Bildlich vorstellen.
Da ich das ganze live mit denen abgesprochen habe, ist es logisch in mir seit Anfang an, nun müsste es für euch auch viel leichter sein.

Die Woche war eine extreme Arbeitswoche für mich und freue mich bis nächsten Sonntag was schickes zu Programmieren für ihn mit euch.
Vor allem, können andere USER die sich so was wünschen , hier alles mitverfolgen und eventuell auch für sich zuhause machen.

Danke an euch. Have a nice day!

mfg Kontrust

Wenn das die normalen Arduino-Relais sind (und da diese direkt vom Arduino angesteuert werden, ist die Wahrscheinlichket dafür sehr hoch), dann ist deren Platine nicht für 230V geeignet, auch wenn auf dem Relais 250V steht.
Der Plan soll von einem Elektriker sein? Der sollte das eigentlich wissen oder hat dem keiner die Relaisplatine gezeigt?.

Gruß Tommy

keine Ahnung wie er es geschafft hat, doch die Pumpe lauft mehrere Monate.
Ich schreib Ihm dein Text. vl. hat er was dazwischen getan das es funktioniert.

Ich hab eine kleine Relay bei mir zuhause die er mir geliehen hat.

die hier:
Relay Module