Tag für Tag die Pflanzen im heimischen Gewächshaus per Hand gießen? Das muss nicht sein! 😉
Im Folgenden beschreibe ich den Selbstbau eines automatischen Bewässerungssystems auf Basis eines Arduino Pro Mini, kapazitiven Bodenfeuchtigkeitssensoren und Magnetventilen. Als Stromversorgung dienen Li-Ion Akkus und eine kleine Solarzelle, wodurch das System ohne externe Stromversorgung völlig autark laufen kann.
Das Bewässerungssystem misst eigenständig in regelmäßigen Abständen die Bodenfeuchtigkeit und bewässert bei Bedarf den Boden durch das Öffnen von Magnetventilen. Es sind ein bis vier getrennt gesteuerte Kanäle möglich. Zusätzlich können über einen DHT22 oder DHT11 Sensor die Temperatur und Luftfeuchtigkeit gemessen werden.
Über 433 MHz Funk kann das System aus der Ferne konfiguriert und gesteuert werden. Ebenso werden Statusinformationen und Messwerte gesendet. Hierfür kommt das Protokoll RadioHead zum Einsatz.
Wichtigste Bauteile
- Ein Arduino Pro Mini 5 V, 16 MHz
Alternativ kann auch ein anderer Arduino verwendet werden, wobei der Pro Mini jedoch den geringsten Stromverbrauch hat. - Ein bis vier kapazitive Bodenfeuchtigkeitssensoren
- Ein bis vier 12 V Magnetventile
- Li-Ion/LiPo Akku(s)
Zum Beispiel drei Akkus vom Typ 18650 mit je 2600 mAh. - Li-Ion/LiPo Laderegler TP4056 mit integriertem Schutz vor Tiefentladung
- 5 V Solarzelle
- Zwei einstellbare DC-Boost-Konverter (StepUp)
Eingestellt auf 5 V für die Steuerung beziehungsweise 12 V für die Magnetventile. - 433 MHz Funksender und -empfänger
Empfänger vom Typ 3400RF sollten vorzugsweise verwendet werdet werden, da diese eine deutlich höhere Reichweite als die XY-MK-5V ermöglichen. - Gehäuse, Transistoren, Taster, Widerstände, Steckverbinder
Die Gesamtkosten der Bauteile belaufen sich auf etwa 50 bis 60 Euro.
Aufbau der Hardware
Die Hardware wird nach folgendem Schema aufgebaut:
- Fritzing Zeichnung
- Schaltplan
Fertig zusammengebaut und in ein kleines Gehäuse gesteckt könnte es dann so aussehen:
- Das Gehäuse
- Vorne
- Hinten
- Innen
- Ventile
- Sensoren
Bodenspieße zur Bewässerung
Damit das Wasser nicht nur oberflächlich auf der Erde verteilt wird, sondern direkt an die Wurzeln der Pflanzen gelangt, habe ich ein 3D-Modell für Bodenspieße entworfen und mit einem 3D-Drucker ausgedruckt.
- 3D-Modell
- Ausgedruckte Bodenspieße
Oben wird auf beiden Seiten ein 1/2” Schlauch angeschlossen. Durch die Hohlräume wird das Wasser bis ca. 10 cm Tiefe direkt in Boden geleitet.
Die Vorlagen für den 3D-Druck habe ich auch auf Thingiverse veröffentlicht: Watering Spikes
Software
Heruntergeladen werden kann die Software für den Mikrocontroller (Arduino Pro Mini) sowie die Konfiguration des fertigen Systems direkt aus dem cryHost GitLab Repository als .zip oder .tar.gz Archiv.
Mögliche Anpassungen an die eigene Hardware etc. können in der Datei src/config.h
vorgenommen werden.
Einige Variablen können zur Laufzeit über Funk gelesen und angepasst werden. Siehe hierzu den Abschnitt “Konfiguration” weiter unten. Änderungen an diesen einstellbaren Variablen werden im EEPROM des Mikrocontrollers sicher gespeichert und bei einem Neustart wieder geladen.
Mit PlatformIO
Die Software für den Mikrocontroller basiert auf PlatformIO. PlatformIO ist ein Open Source Ecosystem für IoT-Anwendungen mit integrierter Verwaltung von verschiedensten Boards und Libraries. Als IDE kommen Atom oder Visual Studio Code zum Einsatz.
Beim Build und/oder Upload kümmert sich PlatformIO automatisch um alle benötigten Abhängigkeiten.
Mit ArduinoIDE
Als Alternative zu PlatformIO kann auch die ArduinoIDE zum Programmieren des Mikrocontrollers genutzt werden.
Hierbei müssen jedoch die folgenden Bibliotheken per Hand zuvor in der ArduinoIDE installiert werden:
In der ArduinoIDE muss dann die Datei src/src.ino
geöffnet werden.
Blink-Codes
Über die LED des Arduinos werden Fehler und Informationen über eine Blinkfolge von kurzen und langen Impulsen dargestellt. Die Bedeutungen der Blink-Codes können der folgenden Tabelle entnommen werden.
Blink-Code | Bedeutung |
---|---|
kurz, kurz, kurz | EEPROM-Reset erfolgreich, Standardeinstellungen geladen |
lang, kurz, kurz | Fehler bei Initialisierung des 433 MHz Funk |
lang, kurz, lang | Fehler beim Senden einer RadioHead-Nachricht (kein ACK empfangen) |
lang, lang, kurz | Fehler beim Abfragen des DHT-Sensors |
sehr kurz, sehr kurz | RadioHead-Nachricht empfangen |
Interpretation der Messwerte
Die Bodenfeuchtigkeit und die Akkuspannung werden über den 10-Bit Analog-Digital-Converter (ADC) des Mikrocontrollers gelesen. Dabei ergeben sich Messwerte zwischen 0 (0 V) und 1023 (5 V).
Bei den Bodenfeuchtigkeitssensoren bedeutet ein höherer Messwert einen trockeneren Boden. Bei einem sehr trockenen Boden ergeben sich Werte von etwa 500, bei nassem Boden etwa 300.
Die aktuelle Batteriespannung kann aus dem ADC-Wert mittels U = adc * 5 / 1023
berechnet werden.
Die Software des Mikrocontrollers berechnet intern direkt einen prozentualen Akkustatus. Dabei gilt (bei Standardconfig) U <= 2,5 V ⇒ 0%
und U >= 4,2 V ⇒ 100%
.
Konfiguration
Die gesamte Konfiguration des fertigen Systems ist über die 433 MHz Funkverbindung möglich.
Das Softwarepaket enthält im Verzeichnis control
eine kleine Anwendung auf Basis von Node.js, über die die gesamten Einstellungen komfortabel über einen Webbrowser vorgenommen werden können.
Vor dem ersten Start müssen hierfür die benötigten Node.js Module (node_modules) installiert werden, wobei eine Verbindung zum Internet benötigt wird:
1 |
npm install |
Anschließend kann die Anwendung auch ohne Internetverbindung gestartet werden:
1 |
npm start |
Nun einfach im Browser die Adresse http://localhost:3000/
aufrufen, Port auswählen und verbinden.
Jeder der vier verfügbaren Kanäle kann einzeln aktiviert oder deaktiviert werden. Zudem können pro Kanal der Trigger-Wert und die Bewässerungszeit einzeln eingestellt werden. Standardmäßig ist nur der Kanal 0 mit einem Trigger-Wert von 512 und einer Zeit von 5 Sekunden aktiviert.
Weiterhin können die Intervalle zum Prüfen der Bodenfeuchtigkeit (Standard 5 Minuten) und Abfragen des DHT-Sensors (Standard eine Minute) einzeln angepasst werden.
Geänderte Einstellungen können in den EEPROM des Mikrocontrollers gespeichert werden, wodurch sie auch bei einem Neustart wieder geladen werden.
Zum Zurücksetzen der gespeicherten Einstellungen muss der EEPROM-Reset-Taster beim Start des Controllers gedrückt gehalten werden, bis die LED drei Mal kurz blinkt.
Optimale Einstellungen
Die optimalen Einstellungen sind von mehreren Faktoren abhängig und sollten einfach ausprobiert werden.
Bei mir haben sich ein Trigger-Wert von 350 und eine Bewässerungsdauer von 8 Sekunden als gut herausgestellt.
RadioHead Datenpakete
Die folgenden Datenpakete werden vom Bewässerungssystem gesendet beziehungsweise empfangen. Das jeweils erste Byte eines Datenpakets kennzeichnet dabei die Art.
0x00 Startmeldung
Dieses Datenpaket wird einmalig beim Start des Mikrocontrollers übertragen.
Es besteht aus nur einem Byte mit dem Wert 0x00
.
0x02 Batteriestatus
Dieses Datenpaket besteht aus 4 Byte, beginnend mit dem Code 0x02
, gefolgt vom Batteriestatus in Prozent (0 bis 100) und zwei Byte mit dem reinen ADC-Wert (0 bis 1023).
Beispiel: 0x02 0x4E 0x0F 0x03
Dies entspricht 78%, einem ADC-Wert von 15 + (3*256) = 783
und umgerechnet 783 * 5V / 1023 = 3,82V
Batteriespannung.
0x10 Sensorwerte
Das Datenpaket für die Sensorwerte beinhaltet 9 Byte, beginnend mit dem Code 0x10
. Anschließend folgen die jeweils zwei Byte großen Sensorwerte für Sensor 0 bis 3, wobei es sich um die reinen ADC-Werte handelt. Bei deaktivierten Kanälen sind die beiden Bytes auf null gesetzt.
Das Datenpaket wird nur gesendet, wenn in der Konfiguration das Senden der ADC-Werte aktiviert ist.
Beispiel: 0x10 0x51 0x01 0xC7 0x02 0x00 0x00 0x00 0x00
Für Kanal 0 wurde 0x51 0x01
übertragen, was in dezimaler Darstellung 81 und 3 entspricht. Umgerechnet ergibt dies 81 + (1*256) = 337
als ADC-Wert und 337 * 5V / 1023 = 1,647V
als Spannung am Ausgang des Sensors.
0x20 Temperatur und Luftfeuchtigkeit
Dieses Datenpaket wird nach jeder Messung der Temperatur und Luftfeuchtigkeit übertragen. Es besteht aus 9 Byte: 0x20
, gefolgt von 4 Byte Temperatur und 4 Byte Luftfeuchtigkeit, jeweils als Float Zahl im Little-Endian Format.
0x20 t t t t h h h h
Beispiel: 0x20 0xcd 0xcc 0xd0 0x41 0xcd 0xcc 0x4e 0x42
Dies entspricht 26,1°C und 51,7% Luftfeuchtigkeit.
0x21 Kanal ein / 0x22 Kanal aus
Bei jedem Ein- und Ausschalten (öffnen bzw. schließen des Ventils) wird für den entsprechenden Kanal dieses Datenpaket bestehend aus zwei Byte gesendet.
Beispiel: 0x21 0x00
Kanal 0 eingeschaltet; 0x22 0x01
Kanal 1 ausgeschaltet
0x50 Einstellungen
Dieses Datenpaket beinhaltet die aktuell auf dem System gesetzten Einstellungen. Es besteht aus insgesamt 22 Byte, beginnend mit 0x50
.
Das zweite Byte beinhaltet die aktivierten Kanäle in den Bits 0 bis 3 sowie in Bit 7 die Einstellung, ob die Sensor-Werte gesendet werden sollen.
Die Bytes drei bis zehn beinhalten die Trigger-Werte der Kanäle 0 bis 3 mit jeweils zwei Byte.
Die Bytes 11 bis 18 beinhalten die Bewässerungszeit der Kanäle 0 bis 3 mit jeweils zwei Byte.
In Byte 19 und 20 ist das Intervall zum Prüfen der Bodenfeuchtigkeit enthalten.
Die letzten beiden Bytes 21 und 22 beinhalten das Intervall zur Abfrage des DHT-Sensors.
Beispiel: 0x50 0x83 0x5E 0x01 0x5E 0x01 0x00 0x02 0x00 0x02 0x05 0x00 0x05 0x00 0x05 0x00 0x05 0x00 0x2C 0x01 0x3C 0x00
0x51 Einstellungen lesen
Damit das Bewässerungssystem seine aktuellen Einstellungen sendet, muss ihm dieses Datenpaket von nur einem Byte mit dem Code 0x51
geschickt werden. Das System sendet daraufhin seine aktuellen Einstellungen.
0x52 Einstellungen setzen
Über dieses Datenpaket mit einer Länge von 22 Byte werden neue Einstellungen an das Bewässerungssystem gesendet. Der Aufbau des Datenpaketes ist identisch mit 0x50 Einstellungen, jedoch beginnt es mit dem Code 0x52
.
Die neuen Einstellungen werden auf dem System sofort aktiv, jedoch noch nicht EEPROM gespeichert. Somit sind beispielsweise nach einem Reset wieder die alten Einstellungen aktiv.
Beispiel: 0x52 0x83 0x5E 0x01 0x5E 0x01 0x00 0x02 0x00 0x02 0x05 0x00 0x05 0x00 0x05 0x00 0x05 0x00 0x2C 0x01 0x3C 0x00
0x53 Einstellungen in den EEPROM speichern
Um die aktuellen Einstellungen des Bewässerungssystems in den EEPROM zu speichern, sodass diese auch nach einem Reset erhalten bleiben, muss dem System dieses Datenpaket von nur einem Byte mit dem Code 0x53
geschickt werden. Das System schreibt daraufhin seine aktuellen Einstellungen in seinen EEPROM.
0x60 Jetzt Prüfen
Durch ein Senden dieses Datenpaketes mit dem einen Byte 0x60
kann man das Bewässerungssystem dazu veranlassen sofort die Sensoren abzufragen und gegebenenfalls die nötigen Ventile zu öffnen. Dabei beginnt die Wartezeit bis zur nächsten automatischen Prüfung erneut zu zählen.
0x61 Kanal einschalten / 0x62 Kanal ausschalten
Durch Senden dieser jeweils zwei Byte großen Datenpakete kann man das Bewässerungssystem dazu veranlassen unabhängig von der Automatik einen Kanal einzuschalten (Ventil öffnen) beziehungsweise auszuschalten (Ventil schließen). Wird ein Kanal eingeschaltet, dann wird er automatisch nach seiner eingestellten Zeit auch wieder ausgeschaltet.
Beispiel: 0x61 0x00
Kanal 0 einschalten; 0x62 0x03
Kanal 3 ausschalten
0x63 Pause / 0x64 Fortsetzen
Zur Vermeidung von beispielsweise Ruhestörungen durch eine in der Nacht anspringende Pumpe, kann die Automatik des Bewässerungssystems über diese beiden jeweils ein Byte großen Datenpakete in einen Pause-Modus versetzt werden. Während der Pause werden die Bodenfeuchtigkeitssensoren nicht abgefragt. Sonstige Funktionen, wie beispielsweise die Temperaturmessung oder manuelle Bedienung bleiben weiterhin aktiv.
Beispiel: 0x63
Pause aktivieren; 0x64
Pause deaktivieren
0xF0 Version abrufen
Zum Abfragen der Softwareversion des Bewässerungssystems kann dem System dieses Datenpaket mit dem einen Byte 0xF0
gesendet werden. Das System sendet daraufhin seine Softwareversion.
0xF1 Version
Dieses Datenpaket beinhaltet die Softwareversion des Bewässerungssystems. Es besteht aus vier Byte, wobei das erste Byte der Code 0xF1
ist. Die Bytes zwei bis vier entsprechen in der Reihenfolge Major-, Minor- und Patch-Version.
Beispiel: 0xF1 0x01 0x00 0x02
Dies entspricht der Version 1.0.2
auf dem Bewässerungssystem.
0xF2 Ping
Über dieses Datenpaket kann ein Ping an das Bewässerungssystem gesendet werden. Es besteht aus mindestens einem Byte, beginnend mit dem Code 0xF2
.
Auf einen Ping antwortet das System mit einem Pong.
Optional können dem Ping bis zu 21 Byte zusätzliche Daten mitgegeben werden. Diese Daten werden eins zu eins dem Pong angehängt.
Beispiel: 0xF2 0x13 0x37
0xF3 Pong
Dieses Datenpaket ist die Antwort auf einen Ping. Es besteht aus mindestens einem Byte, beginnend mit dem Code 0xF3
.
Ein Pong hat immer dieselbe Länge wie der auslösende Ping. Die zusätzlichen Daten sind ebenfalls mit dem Ping identisch. Damit kann geprüft werden, ob zu einem Ping der richtige Pong empfangen wurde.
Beispiel: 0xF3 0x13 0x37
Das fertig installierte Bewässerungssystem
Das fertige Bewässerungssystem läuft nun völlig autark (bis auf die Wasserzuleitung) bei uns Zuhause im kleinen Gewächshaus im Garten.
Nach der anfänglichen Testphase, in der noch die passenden Trigger-Werte ausgetestet werden mussten sind und die Tomaten- und Paprikapflanzen immer bestens versorgt 🙂
- System im Gewächshaus
- Solarzelle und Steuerung
- Ventile
- Bodenspieße
- Bodensensor
- Bodenspieße und Sensor im Boden
Einbindung in Pimatic
In die Heimautomatisierung Pimatic kann das Bewässerungssystem recht einfach über mein Plugin pimatic-radiohead eingebunden werden. Als Hardware wird auf der Empfängerseite (Pimatic) lediglich ein Arduino Nano mit 433 MHz Funkempfänger benötigt, der als Funk-Seriell-Gateway dient.
- Das Device in der Übersicht
- Der Graph zum Device
Beispiel für ein entsprechendes RadioHeadCustomSensor-Device in der config.json
von Pimatic:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
[...] "devices": [ { "radioHeadSerialPort": "rh-serial", "fromAddress": "0xDC", "data": [ [ "0x02", "b", "br", "br" ], [ "0x20", "t", "t", "t", "t", "h", "h", "h", "h" ], [ "0x10", "s0", "s0", "s1", "s1", "*", "*", "*", "*" ] ], "battery": "8bit Integer", "customValues": [ { "id": "temperature", "indecator": "t", "unit": "°C", "acronym": "T", "displaySparkline": true, "recvDataType": "32bit Float LE" }, { "id": "humidity", "indecator": "h", "unit": "%", "acronym": "RH", "displaySparkline": true, "recvDataType": "32bit Float LE" }, { "id": "sensor_links", "indecator": "s0", "unit": "", "acronym": "SL", "recvDataType": "16bit Integer LE" }, { "id": "sensor_rechts", "indecator": "s1", "unit": "", "acronym": "SR", "recvDataType": "16bit Integer LE" }, { "id": "batteryV", "indecator": "br", "unit": "V", "acronym": "B", "displaySparkline": true, "recvDataType": "16bit Integer LE", "processing": "$value * 5 / 1023" } ], "customBooleans": [ { "id": "ventil_links", "acronym": "VL", "dataTrue": [ "0x21", "0x00" ], "dataFalse": [ "0x22", "0x00" ], "labelTrue": "✔", "labelFalse": "✘" }, { "id": "ventil_rechts", "acronym": "VR", "labelTrue": "✔", "labelFalse": "✘", "dataTrue": [ "0x21", "0x01" ], "dataFalse": [ "0x22", "0x01" ] } ], "id": "gewaechshaus-bewaesserung", "name": "Gewächshaus Bewässerung", "class": "RadioHeadCustomSensor" }, { "radioHeadSerialPort": "rh-serial", "buttons": [ { "id": "check", "text": "Jetzt prüfen!", "send": true, "sendToAddress": "0xDC", "dataSend": [ "0x60" ], "receive": false, "dataReceive": [] }, { "id": "venil-0-auf", "text": "Links auf", "send": true, "sendToAddress": "0xDC", "dataSend": [ "0x61", "0x00" ], "receive": false, "dataReceive": [] }, { "id": "ventil-1-auf", "text": "Rechts auf", "send": true, "sendToAddress": "0xDC", "dataSend": [ "0x61", "0x01" ], "receive": false, "dataReceive": [] } ], "id": "gewaechshaus-aktionen", "name": "Gewächshaus Aktionen", "class": "RadioHeadButtonsDevice" } ] [...] |
Lizenz
Lizenziert unter GPL Version 2
Copyright (c) 2018 Peter Müller
1. August 2018 um 20:15
Hallo Peter,
wie dein Projekt mit den Wettersensoren auch, ist dieses sehr toll beschrieben, ansehnlich und sehr praktisch 🙂
Hat es insgesamt auf Dauer so funktioniert, wie du wolltest? Was macht denn die Ernte? 🙂
Bin leider immer noch nicht zur Vollendung der Funkgeschichte gekommen – aber der nächste Winter kommt 😉
Viele Grüße,
DER Norman
2. August 2018 um 14:59
Hallo Norman,
funktioniert tadellos 🙂
Lediglich die Trigger-Werte musste ich ein mal etwas nachjustieren.
Die Pflanzen wachsen super und wir haben Tomaten ohne Ende 🙂
2. April 2019 um 13:51
Danke für diesen interessanten Artikel über ein automatisches Bewässerungssystem. Könnte man dieses mit einer Bodensensorik kombinieren? Dafür hab ich die Bauanleitung nämlich schon da.
4. Mai 2019 um 15:58
In dem Projekt werden doch bereits kapazitive Bodenfeuchtigkeitssensoren verwendet?!
15. August 2019 um 17:51
Hallo Peter,
ein wunderschönes Projekt, was Du auch sehr ausführlich beschrieben hast. Ich bin mir allerdings nicht sicher, ob ich eventuell überlesen habe, welche Pumpen und Ventile eingesetzt worden. Kannst Du eventuell die Bezeichnungen und Bezugsquellen posten?
Vielen Dank!
Beste Grüße,
Andreas
17. August 2019 um 17:03
Hallo Andreas,
als Pumpe habe ich ein normales Hauswasserwerk im Einsatz. Damit steht der Druck permanent an den Ventilen an und die Pumpe springt bei Bedarf selbstständig an.
Die Ventile sind recht günstige 12V DC Magnetventile wie diese: eBay Link
18. August 2019 um 14:18
Hallo Peter,
vielen Dank für Deine Antwort. Schade, ich habe leider keinen Hauswasserautomaten zur Verfügung und wollte das Projekt mit einer Regentonne realisieren. finde aber keine passende Pumpe.
Gruß, Andreas
19. August 2019 um 14:49
In dem Fall könntest du beispielsweise solche Pumpen anstelle von den Magnetventilen versuchen.
Extra Ventile brauchst du dann nicht.
Pumpe an -> Wasser kommt, Pumpe aus -> kein Wasser
Du müsstest dabei aber beachten, welchen maximalen Strom deine DC-Boost-Konverter vertragen. Einige 12V Pumpen ziehen durchaus mehrere Ampere Strom.
21. August 2019 um 19:38
Moin verstehe den zusammenhang mit dem empfänger nicht so ganz und der steuerung kannst du den teil nochmal etwas nähert beschreiben sonst eine super anteilung
26. August 2019 um 18:37
Hallo Tobi,
das Bewässerungssystem kann einerseits eigenständig arbeiten, aber auch Steuerbefehle von einer Zentrale erhalten bzw. aktuelle Daten zur Zentrale senden. Für diese bidirektionale Verbindung ist jeweils ein Funksender und -empfänger verbaut.
Zur Integration in die Heimautomatisierungssoftware Pimatic habe ich das Plugin Pimatic RadioHead erstellt. Für ioBroker ist es der Adapter ioBroker.radiohead.
25. August 2019 um 16:58
Hallo, ich habe bisher etwas mit LINUX “gespielt”, also nicht sehr viel Ahnung! Habe auf einem Rechner mit Linux eine Temperatur Messkette mit DS11820 Temperatursensoren laufen und optimiere mit den erfassten Temperaturen meine Heizungsanlage. (digitemp-1.3) Ich möchte jetzt den “großen” Rechner aufgeben und versuche das Programm auf einem Raspbery Pi 3 Model B V1.2 zu installieren. Soweit meine “Vorgeschichte”!
Würde gerne mit dem beschriebenen Bewesserungssystem mein Gewächshaus automatisieren. Können sie mir sagen, was so ein System kosten würde und was ich wo beziehen könnte. MfG Peter Breithaupt
26. August 2019 um 18:49
Hallo Herr Breithaupt,
die Einzelteile für das System, so wie ich es hier beschrieben habe mit je zwei Sensoren und Magnetventilen, kosten so ca. 50 bis 60 Euro.
Die Teile sind alle beispielsweise bei eBay zu bekommen.
27. August 2019 um 9:38
Hallo,
danke für die Info. Werde mich langsam rantasten. Wenn noch Fragen sind, werde ich mich wieder melden.
3. Oktober 2019 um 20:09
Hallo Herr Müller,
welchen Transistor verwendest du bei deiner Schaltung um mit dem Arduino das Relais zu steuern? Du hast echt da was tolles Gebaut und will es auch gerne für mich nachbauen! 🙂
LG Simon
4. Oktober 2019 um 8:26
Hallo 🙂
Das sind ganz normale NPN-Transistoren vom Typ BC337-25.
Diese haben laut Datenblatt einem maximalen Collector-Strom von 800 mA, was bei den rund 250 mA der von mir verwendeten Magnetventile mehr als ausreichend ist.
Viel Erfolg beim Nachbauen! 🙂
4. Oktober 2019 um 10:41
Hallo,
vielen Dank für die schnelle und ausführliche Antwort! Das hat mir sehr weitergeholfen! 🙂
4. Oktober 2019 um 13:57
Hallo nochmals, eine Frage hätte ich noch. Lassen die Ventile, die du verwendet hast, viel Wasser durch (L/min) oder eher nur sehr wenig und langsam das Wasser herauströpfeln? Bzw braucht es sehr viel Druck in der Leitung, damit gut das Wasser fließt?
5. Oktober 2019 um 11:09
Genaue Mengen habe ich nie gemessen, aber der Durchfluss ist recht gut.
Unser Hauswasserwerk im Garten liefert rund 4 Bar Wasserdruck. Den Kugelhahn für die Zuleitung zum Gewächshaus habe ich dabei immer nur etwa 1/4 weit auf, da es mir sonst die Erde wegspülen würde.
6. Oktober 2019 um 21:30
Hallo Peter, vielen Dank für die super Anleitung. Dein Projekt kommt meinen Anforderungen am nächsten. Ich möchte allerdings die Wasserversorgung mit Pumpe und Regenfass realisieren. Die Frage kam bereits. Deine Antwort hast du verlinkt auf eine Membranpumpe. Ich habe mehrere Beete, wobei die max. Entfernung Fass zum Beet 20 m beträgt. Im Beet kämen dann noch ca. 12 m Tropf- bzw. Sprühschlauch dazu. Würde das mit einer solchen Pumpe funktionieren? Das ganze befindet sich in einer leichten Hanglage, wobei das letzte Beet ca. 2 m tiefer liegt. Zweite Frage: Meine vorerst 3 Beete möchte ich mit 3 getrennten Wasserkreisläufen versorgen. Bräuchte ich dann nicht auch 3 Magnetventile?
Vielen Dank vorab für eine Antwort und viele Grüße
Peter
7. Oktober 2019 um 16:02
Hallo Peter,
ich denke dafür wird diese Membranpumpe zu klein sein, aber wenn du keinen hohen Durchfluss brauchst, dann vielleicht einfach ausprobieren.
Hast du vor Ort 230V zur Verfügung? Dann wäre hier wahrscheinlich eine Tauchpumpe ganz gut, die du dann von der Steuerung aus bei Bedarf über ein Relais einschaltest.
Für drei Beete, die getrennt voneinander bewässert werden sollen, brauchst du dann natürlich auch drei Sensoren und drei Magnetventile (oder drei Pumpen).
Meine Software ist für bis zu vier Bewässerungskreise ausgelegt.
8. Oktober 2019 um 19:56
Hallo Peter,
ich werd’s ausprobieren und hier eine Rückmeldung geben.
26. Oktober 2019 um 18:02
Hallo Herr Müller,
ich habe ein Problem mit Ihrer Schaltung bei der Steuerung der Magnetventile mit dem Transistor den Sie bereits dem Herrn Müller empfohlen haben. Ich habe bei mir einen Arduino Mega aus einem vorherigen Projekt noch herumliegen und wollte das Projekt mit diesem machen und nur ohne die Solarzelle nachbauen. Jedoch schaltet der Transistor das Ventil leider nicht obwohl ich alles genauso und mit den gleichen Widerständen wie bei Ihrem Schaltplan gelötet habe. Ich habe mittlerweile schon viel überlegt und kam zu keiner Lösung, haben Sie vielleicht eine Lösung, da Sie Ihre Schaltung mit Sicherheit besser verstehen als ich.
26. Oktober 2019 um 18:25
Hallo,
das lässt sich so nur schwer sagen.
Haben Sie die LED mit parallel zu dem Magnetventil verbaut? Wenn ja, leuchtet diese abhängig vom Schaltzustand?
Zur Fehlersuche wäre es interessant zu messen, welche Spannung zwischen Magnetventil-Transistor (blau-weiße Leitung in der Fritzing-Zeichnung) und GND (blaue Leitungen in der Fritzing-Zeichnung) jeweils bei geschaltetem und nicht geschaltetem Transistor anliegt. Im nicht geschalteten Zustand sollten hier ca. 12 V anliegen und im geschalteten ca. 0,7 V.
26. Oktober 2019 um 18:56
Ja Die LED ist parallel zum Magnetventil verbaut und flackert nur sehr minimal und kaum sichtbar leicht mal auf wenn die Kabel von der Batterie mit dem eingezeichneten Plus- und Minuspol verbunden werden. Wenn ich allerdings die Batterie von dem 12 Volt Punkt zum Kollektor (also den Minuspol vor dem Transistor) setzte schaltet das Ventil und die LED leuchtet. Daher denke ich, dass irgendetwas mit den Einstellungen des Transistor nicht passen könnte da dieser im Test bei 5 Volt LEDs an einem Breadboard so wie er soll an und ausschaltet.
Vor dem Transistor (bei der Blau weißen Linie habe ich ca 12 Volt, und 0 Volt dahinter. Im geschalteten Zustand kann ich es gar nicht sagen, da der Transistor komischerweise gar nicht schaltet. Ich habe auch schon andere niedrigere Widerstände als Basiswiderstand ausprobiert um zu testen, ob es dann schaltet aber der Transistor schaltet dennoch nicht.
Vielen Dank auf jeden Fall für deine schnelle Antwort!
26. Oktober 2019 um 19:22
Das klingt fast, als wären am Transistor Kollektor und Emitter vertauscht.
In dieser Schaltung muss der Kollektor an das Magnetventil und der Emitter an GND.
26. Oktober 2019 um 19:47
Das kann ich leider ausschließen. Habe gerade interessehalber mal den Arduino mit seinen 5 Volt und Gnd als Spannungsversorgung anstatt der Batterie und ohne das Relais (nicht, dass mir der Arduino kaputt geht) angeschlossen und dann schaltet der Transistor komischerweise und die LED geht so wie sie soll an und aus.
Ist echt mega merkwürdig, dass die Schaltung unter 5 Volt schaltet und bei 12 Volt nicht mehr schaltet.
26. Oktober 2019 um 20:35
Bei Verwendung der 12 V Batterie ist dann aber ein 5 V Spannungsregler vor dem Arduino oder?
Sind alle Massen (GND) miteinander verbunden?
30. Oktober 2019 um 17:13
Das war der Fehler, die Masse vom Arduino war nicht mit der Batterie verbunden. Vielen Dank für Ihre Hilfe!
30. Oktober 2019 um 18:23
Freut mich das zu lesen.
Immer wieder gerne. 🙂
5. November 2019 um 21:55
Hallo Peter,
vielen Dank erstmal für die klasse Anleitung. Allerdings habe ich ein Problem bei der Installation des “Serialport 4.0.7” unter Win10.
Python 2.7.17 ist installiert.
Beim Ausführen von “npm install” im “control” Verzeichnis bekomme ich die Fehlermeldung:
D:wathersystemauto-watering-mastercontrol> npm install
> serialport@4.0.7 install D:wathersystemauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialport
> node-pre-gyp install –fallback-to-build
node-pre-gyp info it worked if it ends with ok
node-pre-gyp verb cli [
node-pre-gyp verb cli ‘C:\Program Files\nodejs\node.exe’,
node-pre-gyp verb cli ‘D:\wathersystem\auto-watering-master\control\node_modules\radiohead-serial\node_modules\serialport\node_modules\node-pre-gyp\bin\node-pre-gyp’,
node-pre-gyp verb cli ‘install’,
node-pre-gyp verb cli ‘–fallback-to-build’
node-pre-gyp verb cli ]
node-pre-gyp info using node-pre-gyp@0.6.32
node-pre-gyp info using node@12.9.1 | win32 | x64
node-pre-gyp verb command install []
node-pre-gyp info check checked for “D:wathersystemauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportbuildReleaseserialport.node” (not found)
node-pre-gyp http GET https://github.com/EmergingTechnologyAdvisors/node-serialport/releases/download/4.0.7/serialport-v4.0.7-node-v72-win32-x64.tar.gz
node-pre-gyp http 404 https://github.com/EmergingTechnologyAdvisors/node-serialport/releases/download/4.0.7/serialport-v4.0.7-node-v72-win32-x64.tar.gz
node-pre-gyp ERR! Tried to download(404): https://github.com/EmergingTechnologyAdvisors/node-serialport/releases/download/4.0.7/serialport-v4.0.7-node-v72-win32-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for serialport@4.0.7 and node@12.9.1 (node-v72 ABI) (falling back to source compile with node-gyp)
node-pre-gyp http 404 status code downloading tarball https://github.com/EmergingTechnologyAdvisors/node-serialport/releases/download/4.0.7/serialport-v4.0.7-node-v72-win32-x64.tar.gz
node-pre-gyp verb command build [ ‘rebuild’ ]
node-pre-gyp ERR! Tried to download(undefined): https://github.com/EmergingTechnologyAdvisors/node-serialport/releases/download/4.0.7/serialport-v4.0.7-node-v72-win32-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for serialport@4.0.7 and node@12.9.1 (node-v72 ABI) (falling back to source compile with node-gyp)
node-pre-gyp http Connection closed while downloading tarball file
node-pre-gyp verb command build [ ‘rebuild’ ]
Die Projekte in dieser Projektmappe werden nacheinander erstellt. Um eine parallele Erstellung zu ermöglichen, müssen Sie den Schalter “/m” hinzufügen.
Die Projekte in dieser Projektmappe werden nacheinander erstellt. Um eine parallele Erstellung zu ermöglichen, müssen Sie den Schalter “/m” hinzufügen.
serialport.cpp
serialport_win.cpp
win_delay_load_hook.cc
serialport.cpp
serialport_win.cpp
win_delay_load_hook.cc
C:Program Filesnodejsnode_modulesnpmnode_modulesnode-gypsrcwin_delay_load_hook.cc : fatal error C1083: Datei (v
om Compiler generiert) kann nicht geöffnet werden: “D:wathersystemauto-watering-mastercontrolnode_modulesradiohead
-serialnode_modulesserialportbuildReleaseobjserialportwin_delay_load_hook.obj”: Permission denied [D:wathersyst
emauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportbuildserialport.vcxproj]
d:wathersystemauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportsrcserialport.cpp(9
0): error C2661: “v8::Value::ToInt32”: Keine überladene Funktion akzeptiert 0 Argumente [D:wathersystemauto-watering-
mastercontrolnode_modulesradiohead-serialnode_modulesserialportbuildserialport.vcxproj]
d:wathersystemauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportsrcserialport.cpp(9
4): error C2661: “v8::Value::ToBoolean”: Keine überladene Funktion akzeptiert 0 Argumente [D:wathersystemauto-waterin
g-mastercontrolnode_modulesradiohead-serialnode_modulesserialportbuildserialport.vcxproj]
d:wathersystemauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportsrcserialport.cpp(9
8): error C2661: “v8::Value::ToString”: Keine überladene Funktion akzeptiert 0 Argumente [D:wathersystemauto-watering
-mastercontrolnode_modulesradiohead-serialnode_modulesserialportbuildserialport.vcxproj]
d:wathersystemauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportsrcserialport.cpp(1
02): error C2661: “v8::Value::ToNumber”: Keine überladene Funktion akzeptiert 0 Argumente [D:wathersystemauto-waterin
g-mastercontrolnode_modulesradiohead-serialnode_modulesserialportbuildserialport.vcxproj]
d:wathersystemauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportsrcserialport.cpp(1
11): error C2661: “v8::Value::ToString”: Keine überladene Funktion akzeptiert 0 Argumente [D:wathersystemauto-waterin
g-mastercontrolnode_modulesradiohead-serialnode_modulesserialportbuildserialport.vcxproj]
d:wathersystemauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportsrcserialport.cpp(1
11): error C2512: “v8::String::Utf8Value::Utf8Value”: Kein geeigneter Standardkonstruktor verfügbar [D:wathersystemau
to-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportbuildserialport.vcxproj]
d:wathersystemauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportsrcserialport.cpp(9
0): error C2661: “v8::Value::ToInt32”: Keine überladene Funktion akzeptiert 0 Argumente [D:wathersystemauto-watering-
mastercontrolnode_modulesradiohead-serialnode_modulesserialportbuildserialport.vcxproj]
d:wathersystemauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportsrcserialport.cpp(1
18): error C2661: “v8::Value::ToObject”: Keine überladene Funktion akzeptiert 0 Argumente [D:wathersystemauto-waterin
g-mastercontrolnode_modulesradiohead-serialnode_modulesserialportbuildserialport.vcxproj]
d:wathersystemauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportsrcserialport.cpp(9
4): error C2661: “v8::Value::ToBoolean”: Keine überladene Funktion akzeptiert 0 Argumente [D:wathersystemauto-waterin
g-mastercontrolnode_modulesradiohead-serialnode_modulesserialportbuildserialport.vcxproj]
d:wathersystemauto-watering-mastercontrolnode_modulesradiohead-serialnode_modulesserialportsrcserialport.cpp(1
41): error C2661: “v8::Value::ToObject”: Keine überladene Funktion akzeptiert 0 Argumente [D:wathersystemauto-waterin………………..
und so weiter.
Ich habe keine Idee wo da der Fehler liegt. Könnte es sein, dass die Nodes version nicht zum serialport 4.0.7 passt?
Vielen Dank vorab für eine Antwort
Grüße Volker
9. November 2019 um 21:27
Hallo Volker,
das Problem ist, dass es für deine Node.js Version keine pre-build Binaries für Serialport v4.0.7 gibt und der Build, den NPM dann selbst versucht, fehl schlägt.
Ich habe alle Abhängigkeiten der Control-App jetzt mal im Repository aktualisiert, wodurch u.a. Serailport v7.1.5 verwendet wird. Dafür sollten dann auch die pre-build Binaries vorhanden sein und die Installation sollte klappen.
Falls es dennoch nicht klappt kannst du das NPM-Paket windows-build-tools installieren. Wenn das vorhanden ist, dann müsste auch der Build von Serialport funktionieren.
13. November 2019 um 23:33
Hallo Peter,
danke erstmal für die Antwort. Der Build von “serialport” funktioniert irgendwie nicht.
Die Windows -build-tools sind installiert.
Die Installation mit “npm install” scheint auch ohne Fehler zu laufen.
Nach “npm start” bekomme ich Fehlermeldung serialport nicht gefunden.
D:wathersystemauto-watering-mastercontrol> npm start
> auto-watering-control@1.0.2 start D:wathersystemauto-watering-mastercontrol
> node index.js
internal/modules/cjs/loader.js:775
throw err;
^
Error: Cannot find module ‘serialport’
Require stack:
– D:wathersystemauto-watering-mastercontrolindex.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:772:15)
at Function.Module._load (internal/modules/cjs/loader.js:677:27)
at Module.require (internal/modules/cjs/loader.js:830:19)
at require (internal/modules/cjs/helpers.js:68:18)
at Object. (D:wathersystemauto-watering-mastercontrolindex.js:10:20)
at Module._compile (internal/modules/cjs/loader.js:936:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:947:10)
at Module.load (internal/modules/cjs/loader.js:790:32)
at Function.Module._load (internal/modules/cjs/loader.js:703:12)
at Function.Module.runMain (internal/modules/cjs/loader.js:999:10) {
code: ‘MODULE_NOT_FOUND’,
requireStack: [ ‘D:\wathersystem\auto-watering-master\control\index.js’ ]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! auto-watering-control@1.0.2 start:
node index.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the auto-watering-control@1.0.2 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:UsersBockAppDataRoamingnpm-cache_logs2019-11-13T22_19_31_765Z-debug.log
Wenn ich versuche “serialport” zu installieren, wird Serialport V8.0.5 installiert. Ich kann dann zwar den Browser öffnen, kann jedoch keinen Port auswählen.
14. November 2019 um 11:21
Ups… da fehlte noch eine Referenz auf das Serialport Modul in der package.json.
Wenn du es jetzt neu aus dem Repository herunter lädst sollte alles klappen.
Die Control-App war auf Serialport v7 ausgelegt. In v8 gab es eine Änderung beim Abfragen der verfügbaren Ports, weshalb bei dir dann keine Ports erkannt wurden.
Ich habe das jetzt so angepasst, dass es mit Serialport v7 und v8 gleichermaßen läuft und das ganze in einer Windows 10 VM mit Node.js v12.13.0 erfolgreich getestet. 🙂
20. November 2019 um 21:08
Hallo Peter,
danke für die schnelle Antwort. funktioniert jetzt super.