ich habe eine kleine Frage zu if/else. Und zwar habe ich an meinen Arduino Uno + Base Shield mehrere Sensoren und zwei Grove Relais auf D2 und D3 angeschlossen.
Das erste if/else Statement soll überprüfen ob die Temperatur > 25 ist und dann einen Ventilator anschalten. Funktioniert auch tadellos.
Das zweite if/else Statement soll überprüfen ob die Bodenfeuchtigkeit (via soil moisture sensor) <300 ist und dann das Delay auf D3 durchhalten, daran ist eine kleine Wasserpumpe befestigt.
Wenn ich allerdings folgenden Code verwende (ich bin Neuling und froh um alle Tipps), schaltet das Real auf D3 an und sofort wieder aus, wieder an und aus ... und so weiter. Gibt es eine Möglichkeit zwei if/else hintereinander im loop laufen zu lassen?
was zeigt denn das Display an ? Welche Werte hat soil beim schalten? grundsätzlich sollte der Code funktionieren.
Packe den Skatch bitte als Code Tag und zeig mal deine Installation ... also ein Schaltplan wäre nicht schlecht.
Dein Code führt aktuell dazu, dass die Pumpe einschaltet und nach 1 Minute ausschaltet, falls die Feuchtigkeit genügend angestiegen ist. Wenn das Relais zappelt, dann liegt das nicht an dem if/else (sofern dein laufender Code dem entspricht, was wir hier sehen). Eher ist vielleicht dein OneMinute Intervall gar keine Minute und dein soil Messwert zappelt um die 300 rum.
Ich würde prinzipiell eher eine Lösung anstreben, die die Pumpe für eine bestimmte Dauer einschaltet, wenn die Feuchtigkeit den Schwellwert unterschreitet. Danach eine definierte Pause und dann wird erneut die Feuchtigkeit gemessen und falls immer noch zu trocken, wird der Pumpvorgang wiederholt.
Sonst hast du eventuell den Effekt, dass deine Pumpe läuft und das Wasser gelangt zu langsam zum Sensor. Somit läuft die Pumpe zu lange und schaltet erst ab, wenn genug Wasser am Sensor angekommen ist und du überflutest ungewollt.
Willst du ein Gewächshaus steuern oder soll das eine Klimaanlage werden?
Gibt es "OneMinute" schon vordefiniert oder wird oben im Sketch irgendwo OneMinute auf 60000 gesetzt?
Wenn das Relais flattert, ist wohl OneMinute nicht definiert.
Delay zu verwenden ist nicht wirklich schön oder elegant, aber sollte in dem Fall funktionieren.
Theoretisch dürfte das Relais bei diesem Sketch nur ein mal pro Minute schalten.
Stell bitte mal Deinen ganzen Sketch hier rein. Da fehlt bestimmt OneMinute = 60000
Ich hoffe ich beantworte alle Fragen die ihr mir noch gestellt habt.
Mein Display zeigt die Werte Temperatur, Humidity, Light und Soil an. Funktioniert einwandfrei. Auch das Relay, welches den Fan schaltet (temp > 25) funktioniert.
Das ganzer ist eine Spielerei, um eine Pflanze "automatisch" zu bewässern, wollte mich einfach mal an den Arduino ranwagen :). Der Wert ist derzeit ca. bei 180 also "zappelt" nicht herum.
Mein Fan ist über das Delay am 5V Pin am Arduino angeschlossen und die Pumpe am VIN, und natürlich beide auch am GND. Beide Relais laufen über die D2 und D3 Stecker am Base Shield.
"Ich würde prinzipiell eher eine Lösung anstreben, die die Pumpe für eine bestimmte Dauer einschaltet, wenn die Feuchtigkeit den Schwellwert unterschreitet. Danach eine definierte Pause und dann wird erneut die Feuchtigkeit gemessen und falls immer noch zu trocken, wird der Pumpvorgang wiederholt."
Das wäre natürlich ideal! Ich bin dankbar um alle Gedankenanstöße. Lässt sich sowas leicht als Code schreiben? Bzw. gibt es dafür irgendwelche Erklärungen im Internet, bin wie gesagt Neuling.
Hab den Fehler gefunden, das Relais gibt 3V aus, die Pumpe hat aber 12V, werde mir ein anderes Relais besorgen und es damit probieren. Trotzdem vielen Dank für die hilfreichen Tipps zwecks Ablaufsteuerung etc.
T7OM:
Hab den Fehler gefunden, das Relais gibt 3V aus, die Pumpe hat aber 12V, werde mir ein anderes Relais besorgen und es damit probieren. Trotzdem vielen Dank für die hilfreichen Tipps zwecks Ablaufsteuerung etc.
Grüße!
Haaaalt!!
Dein Relais schaltet nur das durch, was du reingibst. Wenn da 3V rauskommen, dann gibst du auch nur 3V rein. Du musst dann schon dafür sorgen, dass dein Relais mit 12V versorgt wird.
Und es sollte natürlich auch für min. 12V spezifiziert sein, das versteht sich von selbst.