Hilfe bei Sicherheitssteuerung für Pumpe - automatisches Gewächshaus

Guten Abend zusammen,

ich bin neu hier im Forum und hoffe, bei euch Rat / Hilfe und Antworten zu finden.

Momentan baue ich ein automatisiertes Gewächs- /Anzuchthaus für Palmen, da meine Frau zu ihrem letzten Geburtstag Samen für diverse Palmen geschenkt bekommen hat, bereits einige Samen nach kurzer Zeit gekeimt sind und sie nun komplett angefixt ist.
Das Problem bei der ganzen Geschichte ist nur, dass Palmsamen grundsätzlich bis zu einem Jahr brauchen können, um zu keimen und das bei einer relativ konstant warmen und feuchten Umgebung. Die paar gekeimten Samen waren wohl Glückstreffer, vor allem, da seit nunmehr anderthalb Monaten nichts mehr mit den restlichen Samen passiert ist.

Da ich nun meiner Frau einen Gefallen tun wollte (und mir), habe ich zugesagt ein automatisiertes Gewächshaus zu bauen.
Als ambitionierter Bastler habe ich mich sofort ans Werk geschwungen und die "Hardware" geplant und ein paar Teile zum Experimentieren und Vormontieren gekauft.

Ein Freund brachte mich hier auf das Thema Mikrocontroller, genauer Arduino, um mein angestrebtes Projekt zu verwirklichen.
Ich habe mich also in das Thema eingelesen (grundlegendes Verständnis vom Programmieren habe ich), mir einen Arduino-Klon zum Ausprobieren bestellt und meine ersten Schritte unternommen.

Nun wende ich mich an euch, da ich nun einen Knoten im Hirn habe und einfach nicht weiterkomme.

Der Plan sieht so aus, dass das Gewächshaus eine automatisierte Lüftung besitzen soll, welche einschaltet, sobald bestimmte Werte der Temperatur und Luftfeuchtigkeit (gemessen durch einen DHT-22-Sensor) über-, bzw. unterschritten werden. Ein 12V-PC-Lüfter soll hierbei über ein Relais angesteuert werden und in einer späteren Erweiterung soll eine Lüftungsklappe eingebaut werden, welche per Servomotor geöffnet und geschlossen wird, sobald der Lüfter aktiviert, bzw. deaktiviert wird.

Darüber hinaus sollen auch die Samen regelmäßig automatisiert gegossen werden, sobald ein bestimmter Schwellenwert der Bodenfeuchtigkeit unterschritten wird.
Hierzu will ich eine Pumpe über ein Relais ansteuern und bei Unterschreitung des Schwellenwertes für eine bestimmte Zeit die Pumpe laufen lassen, sodass 'x'-Milliliter Wassser über eine kleine Sprinkleranlage zugeführt werden. Hierbei soll eine grüne LED leuchten.
Um eine "Überflutung" zu vermeiden soll hier nach einmaliger Bewässerung eine Sperrzeit von 'x'-Minuten ablaufen, in welchen die Pumpe nicht aktiviert wird. So soll einer zu starken Bewässerung aufgrund von verzögerten Messergebnissen oder langsam in den Boden sickernden Wasser vorgebeugt werden.
Außerdem soll der Wasserstand im Wasservorratsbehälter gemessen werden und die Pumpe nur aktiviert werden, wenn genug Wasser vorhanden ist, sodass die Pumpe keinen Schaden nimmt. Bei einem zu geringen Wasserstand soll noch eine rote LED aktiviert werden.

Alle Messergebnisse sollen auf einem LCD-Display angezeigt werden.

Ich bin relativ neu im Bereich Mikrocontroller und habe zwischenzeitlich alles hinbekommen, in einem Test läuft es soweit, allerdings habe ich es nicht geschafft den "Überwässerungsschutz" zu programmieren.
Die Pumpe läuft nun solange bis der Schwellenwert überschritten wird, sobald der Schwellenwert unterschritten wird.

Ich wollte allerdings, dass die Pumpe für z.B. 10 Sekunden läuft, sobald der Schwellenwert unterschritten wird und nach einmaliger Bewässerung vorerst für z.B. 30 Minuten nicht anläuft, auch wenn der Schwellenwert unterschritten wird.

Zwar habe ich schon von "blinkwithoutdelay" und "statemachines" gehört und gehe auch stark davon aus, dass mich dies zu meiner Lösung führt, allerdings habe ich gerade keine Idee dies zu programmieren.
Vor allem, dass die Pumpe für 10 Sekunden laufen soll und dabei der Rest des Programms (Messung von Boden- und Luftfeuchtigkeit & Temperatur und Anzeige der Werte auf dem Display sowie die Lüftersteuerung) in Kombination mit der Pause von 30 Minuten nach einmaligem Bewässern macht mir Kopfzerbrechen und ich hoffe, dass mir vielleicht hier jemand bei der Lösung oder der Lösungsfindung helfen kann.

Vielen Dank und liebe Grüße
Frosti :slight_smile:

Du solltest von "blinkwithoutdelay" und "statemachines" nicht nur gehört haben, sondern Dich darüber informiert und sie verstanden haben.

Gruß Tommy

Außerdem dürfen die anderen Teile deines Sketches natürlich auch nicht per delay() gesteuert werden.
Das ist ja gerade der Trick am BlinkWithoutDelay - Prinzip: andere Sachen können -mit dem gleichen Verfahren, aber eigenen Zeitmerkern- unabhängig laufen, weil ja alles immer wieder nicht blockierend dran kommt.

Beim Überfliegen deiner Aufgaben-Beschreibung sind mir keine Probleme aufgefallen. Scheint, dass man die verschiedenen Aufgaben schön voneinander trennen kann, so dass man eine Chance hat, den Überblick zu behalten.

Frosti94:
Ich wollte allerdings, dass die Pumpe für z.B. 10 Sekunden läuft, sobald der Schwellenwert unterschritten wird und nach einmaliger Bewässerung vorerst für z.B. 30 Minuten nicht anläuft, auch wenn der Schwellenwert unterschritten wird.

Das ist kein Problem. Ich hab mal was geschrieben (nicht lauffähig da mir Informationen fehlen), was dir einen Anstoß geben sollte.

const unsigned long GiessTimeout = 1800000;  // 30 Min
const unsigned long Giessdauer = 10000;  // 10Sek
const int soll_Feuchte = xx;
const byte PumpenPin = x;

void setup() {

  pinMode(PumpenPin, OUTPUT);
}

void loop() {

  static unsigned long Giessbeginn = 0; 
  static bool Giessen = false; 
  int Feuchte = analogRead(Ax);   // Feuchtesensor auslesen 

  if (Feuchte < soll_Feuchte && millis() - Giessbeginn >= GiessTimeout && Giessen == false) {

    Giessbeginn = millis();
    Giessen = true;
    digitalWrite(PumpenPin, HIGH);
  }

  if (millis() - Giessbeginn >= Giessdauer) {
    Giessen = false;
    digitalWrite(PumpenPin, LOW);
  }
}

Guten Abend zusammen,

entschuldigt die mehr als verspätete Antwort, es kamen ein paar persönliche Probleme dazwischen, aber jetzt geht es frisch ans Werk!

Vielen Dank für die Mühe, Mahimus! Das ist ja aber so gut wie fertig! Hat auf jeden Fall meinen Knoten im Hirn gelöst! :wink:
Setze mich dann morgen mal hin und implementiere alles!

Liebe Grüße