Hallo liebes Forum. Ich habe eine automatische Bewässerungsanlage mit einem Arduino als Steuerung gebaut. Lief 2 Wochen ohne Probleme. Da mir gestern das Wohnzimmer vollgelaufen ist, habe ich beschlossen, zum Schutz des Fußbodens eine Ausschaltverzögerung einzubauen.
Ich bin Anfänger und beschäftige mich jetzt seit 2 Monaten mit dem Arduino.
Könnt ihr mir bei meiner Ausschaltverzögerung helfen? Ich bedanke mich im Vorraus.
Hier mein Code:
int S1 = 7; //Start Taster
int S0 = 6; //Stop Taster
int M1 = 2; //Pumpe 1 (Relais K1)
int M2 = 3; //Pumpe 2 (Relais K2)
int P1 = 4; //LED_1:"Anlage läuft"
int P2 = 5; //LED_2:"Bitte Wasser nachfüllen" | "Pegel n.I.O"
int Pegel = A0; //Sensor für den Wasserstand (B3)
int Feuchte1 = A1; //Sensor für die Bodenfeuchte (B1)
int Feuchte2 = A2; //Sensor für die Bodenfeuchte (B2)
bool Start = false; //Variable für den Anlagenstart
int count_M1 = 0; //Variable um die Einschaltzeit (s) der Pumpe "M1" zu zählen, wird nach erneutem Reinladen in den Arduino gelöscht.
int count_M2 = 0; //Variable um die Einschaltzeit (s) der Pumpe "M2" zu zählen, wird nach erneutem Reinladen in den Arduino gelöscht.
uint32_t previousMillis = 0; //Variable für die Ausschaltzeit.
uint32_t previousMillis1 = 0; //Variable für die Zweite Ausschaltzeit.
void setup() {
//Setup für die Eingänge:
pinMode(S1, INPUT_PULLUP);
pinMode(S0, INPUT_PULLUP);
//Setup für die Ausgänge:
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
pinMode(P1, OUTPUT);
pinMode(P2, OUTPUT);
digitalWrite(M1, LOW);
digitalWrite(M2, LOW);
digitalWrite(P1, LOW);
digitalWrite(P2, LOW);
Serial.begin(9600);
}
void loop() {
//Hier werden die Taster der Anlage abgefragt um die Variable "Start" zu schreiben. Die Led P1 "Anlage Eingeschaltet" wird hier geschaltet.
if (!digitalRead(S1) == true){
digitalWrite(P1, true);
Start = true;
}
if (digitalRead(S0) == true) {
digitalWrite(P1, false);
Start = false;
}
//Hier wird der Durchschnittswert vom Wasserstandssensor berechnet, um die Hysterese des Sensors möglichst klein zu halten.
int average = 0;
for (int i = 0; i < 8; i++) {
average = average + analogRead(Pegel);
delay (50);
}
average = average / 8; // Den Durchschnittswert durch die Anzahl der Schleifen nehmen. (Durch "8").
// Hier werden die Werte für den Wasserstand ausgewertet. Dafür muss die Anlage Eingeschaltet sein. Der Wasserstand soll immer im optimalen Bereich liegen, damit die Pumpen nicht Trockenlaufen.
if ((average < 418 ) && (Start == true)) { // Bei niedrigem Füllstand leuchtet die Meldeleuchte "P2", "Bitte Wasser auffüllen"
digitalWrite(P2, HIGH);
} else if ((average > 418 ) || (Start == false)){ //Die Meldeleuchte kann auch über den Taster S0 ausgeschaltet werden.
digitalWrite(P2, LOW);
}
// Hier wird nun der Sensor "B1" ausgelesen und die Pumpe "M1" für die Pflanze eingeschaltet, sobald die Anlage eingeschaltet ist.
if ((analogRead(Feuchte1) < 500 ) && (Start == true)) {
digitalWrite(M1, HIGH);
previousMillis = millis(); //Die Zeit speichern.
count_M1 = count_M1 + 1; //Anzahl der Sekunden, wie lange die Pumpe aktiv ist, wird hier gezählt.
}if (millis() - previousMillis > 3 * 1000UL && digitalRead(M1) == HIGH || analogRead(Feuchte1) > 500 || Start == false) {
digitalWrite(M1, LOW);
}
// Hier wird nun der Sensor "B2" ausgelesen und die Pumpe "M2" für die Pflanze eingeschaltet, sobald die Anlage eingeschaltet ist.
if ((analogRead(Feuchte2) < 500 ) && (Start == true)) {
digitalWrite(M2, HIGH);
count_M2 = count_M2 + 1; //Anzahl der Sekunden, wie lange die Pumpe aktiv ist, wird hier gezählt.
}if ((analogRead(Feuchte2) > 500 ) || (Start == false)) {
digitalWrite(M2, LOW);
}
Serial.println("Sekundenzähler M1:");
Serial.println(count_M1);
Serial.println("Sekundenzähler M2:");
Serial.println(count_M2);
Serial.println(previousMillis);
}