Hallo Leute,
mein Gewächshaus ist bisher mit einem Gartenschlauch und einem Kanal der Gardena-Steuerung Multicontrol Duo an die Wasserleitung angeschlossen. Feuchtesensor ist nicht verlegt. Jetzt ist das aber funktionell aber nicht optimal.
1. Mein Wasser hier 18dH
2. kostet es Geld
3. ist es mit einem Kanal nicht individuell steuerbar pro Seite (Gurke möchte vielleicht mehr wie Tomate mehr wie Chili)
Ich hätte gerne
1. Regenwasser (+ggf. Düngung)
2. autark (solar)
3. individuell mehrere Kanäle mit Erweiterbarkeit
4. Gießen nach Bedarf
4. Reporting+Charting, ggf. auch von anderen Sensorwerten
Im Job hab ich hier und da mit IT zu tun und mir gedacht, machste halt was selber. Anspruch ist aber -> muss funktionieren.
Also gut, alles über Wasserfälle, Scrum und Entwicklungsmodelle aus der Mottenkiste rausgekramt und mal Brainstorming gemacht. Und das Spiel beginnt...
Die Entwicklung möchte ich soweit kurz beschreiben, um ggf. noch Einfälle einfließen zu lassen oder zum eigenen Basteln anzuregen.
Ich bin kein Held in Elektronik und kein Freund von Objekten bei kurzem Code, daher nehme ich Verbesserungsvorschläge auch gerne an wenn sie mir taugen.
Phase 1: wir brauchen Hardware
Was brauchen wir fürs Erste?
Arduino (in meinem Fall vorhandener Nano wegen Breadboardkompatibilität)
TIP120 Darlington Transistoren https://www.exp-tech.de/zubehoer/halbleiter/6498/tip120-power-darlington-transistors-3-pack
1N4001 Dioden https://www.exp-tech.de/zubehoer/halbleiter/6499/1n4001-diode-10-stueck
Adafruit Solenoid Valves https://www.exp-tech.de/sensoren/wa.../plastic-water-solenoid-valve-12v-1/2-nominal
Widerstände 1kOhm
Durchfluss-Sensor https://www.exp-tech.de/sensoren/wa...seeed-studio-g1-2-water-flow-sensor-enclosure lag eh noch rum
Eine induktive Gleichstrom-Last zum Testen -> PC-Lüfter
Ergebnis war dann das hier:
Google ist Dein Freund, daher Infos zu den Komponenten gesucht und nen Quellcode gebaut. U.a.
https://www.bc-robotics.com/tutorials/controlling-a-solenoid-valve-with-arduino/
https://www.electroschematics.com/12145/working-with-water-flow-sensors-arduino/
-> Ich kann mittels serieller Verbindung über USB Ventile Steuern und denn Wasserdurchfluß messen.
Phase 2: wir benötigen Infrastruktur
Das schalten über Quellcode klappt gut. Aber es soll ja mal autark laufen mit einem Reporting.
Daher brauchen wir nen Algorithmus und ein Konzept bzw. Datenstrukturen für den Austausch.
Überlegung: VM auf dem vorhandenen HyperV-Server mit nem fertigen LAMP-ISO.
Grund: kein Stress beim Einrichten. VM kann ich einfach als Datei komplett backupen und läuft wieder woanders wenn notwendig. ISO gibts fertig irgendwo. Mit NodeJS usw. kenn ich mich nicht aus, Javascript is nicht mein Ding. PHP und MySQL (Maria) sind mir aus der Historie bekannt.
Das ist ein Turnkey Linux geworden. Schöne Sache. https://www.turnkeylinux.org/
Installiert, bissl konfiguriert und los gehts damit.
Phase 3: wir benötigen Strukturen (Teil1)
Und schon haben wir auch ein Austauschformat -> ein PHP-Serialize-String läd zum weiterverarbeiten ein und ist simpel erzeugt.
Was brauchen wir denn erstmal um universell alles loggen zu können.......
Eine Tabelle für Events mit ID, Timestamp, Name, Werte, "Legende" (Name für Chart später) und die Laufzeit des Microcontrollers zum Eventzeitpunkt wäre schön um durchgehende LAufzeiten erkennen zu können.
Das gibt dann folgendes
Spalte 5,6,7 sind dazu da, mit ner Chart-Library direkt an MySQL zu können, ohne erst rumzukonvertieren, sondern direkt den passenden Datentyp zu kriegen. Das gestaltet sich sonst eher schwierig. Gibt ja schöne Libraries inzwischen. Jemand Tips dafür? Ich hatte z.B. an Zingchart gedacht.
Phase 4: wir benötigen Strukturen (Teil 2)
Erzeugen wir mal bisschen Output vom Arduino, den wir nutzen können um später eine HTTP-Anfrage damit zu erzeugen....
a:2:{s:7:"Startup";i:1;s:7:"runtime";i:0;}
a:2:{s:10:"LiterTotal";d:0.00;s:7:"runtime";i:1;}
a:2:{s:11:"LiterAVG(5)";d:0.00;s:7:"runtime";i:1;}
a:2:{s:10:"LiterTotal";d:0.00;s:7:"runtime";i:2;}
a:2:{s:11:"LiterAVG(5)";d:0.00;s:7:"runtime";i:2;}
a:2:{s:10:"LiterTotal";d:0.00;s:7:"runtime";i:3;}
a:2:{s:11:"LiterAVG(5)";d:0.00;s:7:"runtime";i:3;}
a:2:{s:10:"LiterTotal";d:0.00;s:7:"runtime";i:4;}
a:2:{s:11:"LiterAVG(5)";d:0.00;s:7:"runtime";i:4;}
Heißt z.B. bei runtime 1 (1 Sekunde vergangen) sind gesamt 0.00 Liter Wasser durchgeflossen und gemittelt auf die letzten 5 Messzeiträume auch 0.00. Welch Zufall... hab auch nicht ins Röhrchen (Waterflow Sensor) gepustet.
Bei der Gelegenheit bau ich auch gleich noch ein Skript zum Einlesen in die Datenbank mit PHP.
Phase 5: wir brauchen Schleifen
Jetzt klappen die Einzelteile für die Basisfunktion schon mal gut. Aber wir brauchen einen Algorithmus um zumindest mal regelmäßig zu gießen, zu zählen und zu loggen.
Der Waterflow ist zum Glück über einen Interrupt realisiert und lässt sich dadurch nicht stören
Um später mal Strom sparen zu können für einen Solarbetrieb möcht ich das Teil bei Nicht-Betrieb schlafen legen. Daher auch Schleifen und später mal ein Interrupt zum Aufwachen.
Daher 1. Schleife jede Sekunde
if (currentTime >= (secondloopTime + 1000UL)) // every second do...
Durchfluß zählen wenn Durchfluß da, Laufzeit erhöhen.
2. Schleife jede Minute (ich brauch nicht jede Sekunde prüfen, ob ich gießen muss)
if (currentTime >= (minloopTime + 1000UL*60)) // every minute do...
Wässern der Ventile nacheinander
3. Schleife Einstellbare Zeit zum Logging
if (currentTime >= (logtime + logduration * 1000UL)) // every logduration do
Ein ESP8266 (billigste WLAN-Möglichkeit) braucht viel Strom für WLAN, daher nicht jede Minute notwendig.
Die wichtige Schleife ist Nummer 2, daher mal kurz im Detail was da passiert:
Wenn Zeit zum gießen,
Wasserdurchflußmesser an,
Pumpe an,
Alle Ventile nach der Reihe auf, wenn die entsprechenden Ventile zum gießen genutzt werden sollen. Sequentiell braucht weniger Strom und der Durchfluß ist einzeln planbar. Hier kann man später einen bzw. mehrere Sensoren hinzufügen um wirklich individuell zu gießen. Dies ist aktuell über ein Array regelbar um nicht im Code ändern zu müssen, wenn ich nen Kanal mal nicht brauchen sollte
Pumpe aus,
Durchflussmesser aus
Phase 6: Alles ist besser mit WLAN
Alles läuft soweit. Ich kann über Seriell sehen, was passiert bzw. am PC-Lüfter auch feststellen, was sich schaltet. Aber ich will ja wissen, was passiert und was passiert ist, also muss das über WLAN zum Server.
Was brauchen wir hierfür...
Einen bereits erwähnten ESP. Dumm nur, dass der kleine Wunderchip äußerst wiederborstig mit dem Arduino kommuniziert. Sprich: Ohne passende Stromquelle und Voltwandelung gar nicht bzw. genau einmal (und dann tot).
Daher brauchen wir einen Logic Level Converter, denn der ESP möchte 3,3V an den Eingängen, der Arduino spuckt aber 5V aus. Ein 3,3V Arduino kam übrigens nicht in Frage, da die Sensoren meist 5V möchten.
https://www.voelkner.de/products/1082896/MAKERFACTORY-3.3V-5V-TTL-Logic-Level-Umwandler-Modul.html
Weiterhin brauchen wir Strom. Da das ganze später mit nem Solarwandler und Batterie betrieben werden soll, haben wir später genau eine Spannung zur Verfügung. Diese wird wohl 9V (realisiert durch ein Stepdown-Modul) werden. Ladespannung sollte >12V liegen und das mögen die billigen Arduinos nicht, weil die Wandler sehr heiß werden.
Daher müssen wir von den 9V die der Arduino und die Ventile und die Pumpe bekommen auf 3,3V runter. Wie gut, dass der Arduino auch 5V mit hoffentlich genug Milliampere ausspuckt und ich ein Stepdown mit 5V -> 3,3V da hab. Damit verteilt sich etwas Hitzelast. Im warmen Gewächshaus sicher nicht verkehrt.
https://www.amazon.de/1117-3-3-Converter-Step-down-Regulator-Stromversorgung/dp/B07C1WSBL8
Und natürlich nen ESP8266. Ich nutze das ESP01-Modul, da ich nicht mehr brauche als seriellen Input und WLAN und das mit einen passenden Breakout-Modul mit aufs Breadboard geht.
https://www.amazon.de/esp8266-esp-01-esp-01s-Breakout-Breadboard-Transceiver-Netzwerk/dp/B01G6H46UK
Der ESP wurde von AT-Firmware auf NodeMCU umgestellt, weil ich die Firmware gleich mal mit Baudraten-Einstellungen gekillt hab (Achtung dabei, falsches Kommando IPR und keine Kommunikation mehr) und das das einzige war, was geholfen hat. (also neuaufspielen einer Firmware)
Jetzt ein kleines Programm erstellt und hochgeladen ala folgendes...
Ab ins WLAN
Schleife
Wenn Input von Seriell -> HTTP-Anfrage mit Input als Parameter absetzen und quittieren.
und zurück zu Schleifenanfang.
Phase 7 all together now...
Die Komplettschaltung sieht dann so aus
Statt der 9V Batterie kommt wie oben beschrieben, ein 30W Solar-Modul (schon da) + Charger (noch nicht da) zum Einsatz. Die hab ich zwar als Bildchen, macht das ganze aber unnötig groß.
Und statt der 3V-Batterie links kommt ein Stepdown an Arduino 5V Pin + Ground zum Einsatz. Aber der Rest ist soweit 1 zu 1 umgesetzt.
Phase 8: wir brauchen Wasser...
Mal weg von der IT brauchen wir auch noch etwas Wasser und ne Platte. Da bin ich dran.
Bisher sieht es so aus. Das kommt auf ne Platte und das Breadboard drüber. Durchfluss durch Gewächshausscheibe ist auch schon da. Pumpe auch. Daher demnächst gehts an den Praxistest. Bin gespannt, wieviel da nicht funktioniert...
Hier gehts demnächst weiter. Fragen und Kommentare sind gerne gesehen. Quellcode zeig ich auch gerne, sofern mich keiner wegen Oldschool-Prozeduralität veräppelt. Arduino bzw. C/C++ist in Sachen Stringhandling oder OOP viel zu altertümlich für mich. Eine wirklich moderne Hochsprache wäre da eine Wucht.
Soweit sogut und erstmal gute Nacht
Tylon
mein Gewächshaus ist bisher mit einem Gartenschlauch und einem Kanal der Gardena-Steuerung Multicontrol Duo an die Wasserleitung angeschlossen. Feuchtesensor ist nicht verlegt. Jetzt ist das aber funktionell aber nicht optimal.
1. Mein Wasser hier 18dH
2. kostet es Geld
3. ist es mit einem Kanal nicht individuell steuerbar pro Seite (Gurke möchte vielleicht mehr wie Tomate mehr wie Chili)
Ich hätte gerne
1. Regenwasser (+ggf. Düngung)
2. autark (solar)
3. individuell mehrere Kanäle mit Erweiterbarkeit
4. Gießen nach Bedarf
4. Reporting+Charting, ggf. auch von anderen Sensorwerten
Im Job hab ich hier und da mit IT zu tun und mir gedacht, machste halt was selber. Anspruch ist aber -> muss funktionieren.
Also gut, alles über Wasserfälle, Scrum und Entwicklungsmodelle aus der Mottenkiste rausgekramt und mal Brainstorming gemacht. Und das Spiel beginnt...
Die Entwicklung möchte ich soweit kurz beschreiben, um ggf. noch Einfälle einfließen zu lassen oder zum eigenen Basteln anzuregen.
Ich bin kein Held in Elektronik und kein Freund von Objekten bei kurzem Code, daher nehme ich Verbesserungsvorschläge auch gerne an wenn sie mir taugen.
Phase 1: wir brauchen Hardware
Was brauchen wir fürs Erste?
Arduino (in meinem Fall vorhandener Nano wegen Breadboardkompatibilität)
TIP120 Darlington Transistoren https://www.exp-tech.de/zubehoer/halbleiter/6498/tip120-power-darlington-transistors-3-pack
1N4001 Dioden https://www.exp-tech.de/zubehoer/halbleiter/6499/1n4001-diode-10-stueck
Adafruit Solenoid Valves https://www.exp-tech.de/sensoren/wa.../plastic-water-solenoid-valve-12v-1/2-nominal
Widerstände 1kOhm
Durchfluss-Sensor https://www.exp-tech.de/sensoren/wa...seeed-studio-g1-2-water-flow-sensor-enclosure lag eh noch rum
Eine induktive Gleichstrom-Last zum Testen -> PC-Lüfter
Ergebnis war dann das hier:
Google ist Dein Freund, daher Infos zu den Komponenten gesucht und nen Quellcode gebaut. U.a.
https://www.bc-robotics.com/tutorials/controlling-a-solenoid-valve-with-arduino/
https://www.electroschematics.com/12145/working-with-water-flow-sensors-arduino/
-> Ich kann mittels serieller Verbindung über USB Ventile Steuern und denn Wasserdurchfluß messen.
Phase 2: wir benötigen Infrastruktur
Das schalten über Quellcode klappt gut. Aber es soll ja mal autark laufen mit einem Reporting.
Daher brauchen wir nen Algorithmus und ein Konzept bzw. Datenstrukturen für den Austausch.
Überlegung: VM auf dem vorhandenen HyperV-Server mit nem fertigen LAMP-ISO.
Grund: kein Stress beim Einrichten. VM kann ich einfach als Datei komplett backupen und läuft wieder woanders wenn notwendig. ISO gibts fertig irgendwo. Mit NodeJS usw. kenn ich mich nicht aus, Javascript is nicht mein Ding. PHP und MySQL (Maria) sind mir aus der Historie bekannt.
Das ist ein Turnkey Linux geworden. Schöne Sache. https://www.turnkeylinux.org/
Installiert, bissl konfiguriert und los gehts damit.
Phase 3: wir benötigen Strukturen (Teil1)
Und schon haben wir auch ein Austauschformat -> ein PHP-Serialize-String läd zum weiterverarbeiten ein und ist simpel erzeugt.
Was brauchen wir denn erstmal um universell alles loggen zu können.......
Eine Tabelle für Events mit ID, Timestamp, Name, Werte, "Legende" (Name für Chart später) und die Laufzeit des Microcontrollers zum Eventzeitpunkt wäre schön um durchgehende LAufzeiten erkennen zu können.
Das gibt dann folgendes
Spalte 5,6,7 sind dazu da, mit ner Chart-Library direkt an MySQL zu können, ohne erst rumzukonvertieren, sondern direkt den passenden Datentyp zu kriegen. Das gestaltet sich sonst eher schwierig. Gibt ja schöne Libraries inzwischen. Jemand Tips dafür? Ich hatte z.B. an Zingchart gedacht.
Phase 4: wir benötigen Strukturen (Teil 2)
Erzeugen wir mal bisschen Output vom Arduino, den wir nutzen können um später eine HTTP-Anfrage damit zu erzeugen....
a:2:{s:7:"Startup";i:1;s:7:"runtime";i:0;}
a:2:{s:10:"LiterTotal";d:0.00;s:7:"runtime";i:1;}
a:2:{s:11:"LiterAVG(5)";d:0.00;s:7:"runtime";i:1;}
a:2:{s:10:"LiterTotal";d:0.00;s:7:"runtime";i:2;}
a:2:{s:11:"LiterAVG(5)";d:0.00;s:7:"runtime";i:2;}
a:2:{s:10:"LiterTotal";d:0.00;s:7:"runtime";i:3;}
a:2:{s:11:"LiterAVG(5)";d:0.00;s:7:"runtime";i:3;}
a:2:{s:10:"LiterTotal";d:0.00;s:7:"runtime";i:4;}
a:2:{s:11:"LiterAVG(5)";d:0.00;s:7:"runtime";i:4;}
Heißt z.B. bei runtime 1 (1 Sekunde vergangen) sind gesamt 0.00 Liter Wasser durchgeflossen und gemittelt auf die letzten 5 Messzeiträume auch 0.00. Welch Zufall... hab auch nicht ins Röhrchen (Waterflow Sensor) gepustet.
Bei der Gelegenheit bau ich auch gleich noch ein Skript zum Einlesen in die Datenbank mit PHP.
Phase 5: wir brauchen Schleifen
Jetzt klappen die Einzelteile für die Basisfunktion schon mal gut. Aber wir brauchen einen Algorithmus um zumindest mal regelmäßig zu gießen, zu zählen und zu loggen.
Der Waterflow ist zum Glück über einen Interrupt realisiert und lässt sich dadurch nicht stören

Um später mal Strom sparen zu können für einen Solarbetrieb möcht ich das Teil bei Nicht-Betrieb schlafen legen. Daher auch Schleifen und später mal ein Interrupt zum Aufwachen.
Daher 1. Schleife jede Sekunde
if (currentTime >= (secondloopTime + 1000UL)) // every second do...
Durchfluß zählen wenn Durchfluß da, Laufzeit erhöhen.
2. Schleife jede Minute (ich brauch nicht jede Sekunde prüfen, ob ich gießen muss)
if (currentTime >= (minloopTime + 1000UL*60)) // every minute do...
Wässern der Ventile nacheinander
3. Schleife Einstellbare Zeit zum Logging
if (currentTime >= (logtime + logduration * 1000UL)) // every logduration do
Ein ESP8266 (billigste WLAN-Möglichkeit) braucht viel Strom für WLAN, daher nicht jede Minute notwendig.
Die wichtige Schleife ist Nummer 2, daher mal kurz im Detail was da passiert:
Wenn Zeit zum gießen,
Wasserdurchflußmesser an,
Pumpe an,
Alle Ventile nach der Reihe auf, wenn die entsprechenden Ventile zum gießen genutzt werden sollen. Sequentiell braucht weniger Strom und der Durchfluß ist einzeln planbar. Hier kann man später einen bzw. mehrere Sensoren hinzufügen um wirklich individuell zu gießen. Dies ist aktuell über ein Array regelbar um nicht im Code ändern zu müssen, wenn ich nen Kanal mal nicht brauchen sollte
Pumpe aus,
Durchflussmesser aus
Phase 6: Alles ist besser mit WLAN
Alles läuft soweit. Ich kann über Seriell sehen, was passiert bzw. am PC-Lüfter auch feststellen, was sich schaltet. Aber ich will ja wissen, was passiert und was passiert ist, also muss das über WLAN zum Server.
Was brauchen wir hierfür...
Einen bereits erwähnten ESP. Dumm nur, dass der kleine Wunderchip äußerst wiederborstig mit dem Arduino kommuniziert. Sprich: Ohne passende Stromquelle und Voltwandelung gar nicht bzw. genau einmal (und dann tot).
Daher brauchen wir einen Logic Level Converter, denn der ESP möchte 3,3V an den Eingängen, der Arduino spuckt aber 5V aus. Ein 3,3V Arduino kam übrigens nicht in Frage, da die Sensoren meist 5V möchten.
https://www.voelkner.de/products/1082896/MAKERFACTORY-3.3V-5V-TTL-Logic-Level-Umwandler-Modul.html
Weiterhin brauchen wir Strom. Da das ganze später mit nem Solarwandler und Batterie betrieben werden soll, haben wir später genau eine Spannung zur Verfügung. Diese wird wohl 9V (realisiert durch ein Stepdown-Modul) werden. Ladespannung sollte >12V liegen und das mögen die billigen Arduinos nicht, weil die Wandler sehr heiß werden.
Daher müssen wir von den 9V die der Arduino und die Ventile und die Pumpe bekommen auf 3,3V runter. Wie gut, dass der Arduino auch 5V mit hoffentlich genug Milliampere ausspuckt und ich ein Stepdown mit 5V -> 3,3V da hab. Damit verteilt sich etwas Hitzelast. Im warmen Gewächshaus sicher nicht verkehrt.
https://www.amazon.de/1117-3-3-Converter-Step-down-Regulator-Stromversorgung/dp/B07C1WSBL8
Und natürlich nen ESP8266. Ich nutze das ESP01-Modul, da ich nicht mehr brauche als seriellen Input und WLAN und das mit einen passenden Breakout-Modul mit aufs Breadboard geht.
https://www.amazon.de/esp8266-esp-01-esp-01s-Breakout-Breadboard-Transceiver-Netzwerk/dp/B01G6H46UK
Der ESP wurde von AT-Firmware auf NodeMCU umgestellt, weil ich die Firmware gleich mal mit Baudraten-Einstellungen gekillt hab (Achtung dabei, falsches Kommando IPR und keine Kommunikation mehr) und das das einzige war, was geholfen hat. (also neuaufspielen einer Firmware)
Jetzt ein kleines Programm erstellt und hochgeladen ala folgendes...
Ab ins WLAN
Schleife
Wenn Input von Seriell -> HTTP-Anfrage mit Input als Parameter absetzen und quittieren.
und zurück zu Schleifenanfang.
Phase 7 all together now...
Die Komplettschaltung sieht dann so aus
Statt der 9V Batterie kommt wie oben beschrieben, ein 30W Solar-Modul (schon da) + Charger (noch nicht da) zum Einsatz. Die hab ich zwar als Bildchen, macht das ganze aber unnötig groß.
Und statt der 3V-Batterie links kommt ein Stepdown an Arduino 5V Pin + Ground zum Einsatz. Aber der Rest ist soweit 1 zu 1 umgesetzt.
Phase 8: wir brauchen Wasser...
Mal weg von der IT brauchen wir auch noch etwas Wasser und ne Platte. Da bin ich dran.
Bisher sieht es so aus. Das kommt auf ne Platte und das Breadboard drüber. Durchfluss durch Gewächshausscheibe ist auch schon da. Pumpe auch. Daher demnächst gehts an den Praxistest. Bin gespannt, wieviel da nicht funktioniert...

Hier gehts demnächst weiter. Fragen und Kommentare sind gerne gesehen. Quellcode zeig ich auch gerne, sofern mich keiner wegen Oldschool-Prozeduralität veräppelt. Arduino bzw. C/C++ist in Sachen Stringhandling oder OOP viel zu altertümlich für mich. Eine wirklich moderne Hochsprache wäre da eine Wucht.
Soweit sogut und erstmal gute Nacht
Tylon