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. Alternativ ist es auch möglich einen DS18B20 Sensor zur Messung der Temperatur zu verwenden.
Ü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.
Inhalt
- Neuerungen in v2
- Wichtigste Bauteile
- Aufbau der Hardware
- Bodenspieße zur Bewässerung
- Software
- Interpretation der Messwerte
- Konfiguration mit der Control-App
- RadioHead Datenpakete
- Das fertig installierte Bewässerungssystem
- Einbindung in ioBroker
- Einbindung in Pimatic
- Nachbauten
Neuerungen in Version 2
Mitte Mai 2020 ist nun die überarbeitete Version 2 des Bewässerungssystems fertig. Die Änderungen betreffen hauptsächlich die Software des Systems.
- Unterstützung von DS18B20 , DS18S20, DS1820 und DS1822 Sensoren zur Temperaturmessung als Alternative zum DHT-Sensor
- Aktives Abfragen der Daten (Polling Modus) und deaktivierung des automatischen Sendens der Daten sind nun möglich
- Temperaturabhängiger Schalter zur Steuerung von beispielsweise einem Lüfter oder einer Heizung
- Möglichkeit die Messung der Batteriespannung zu deaktivieren, wenn das System mit einer anderen Spannungsversorgung betrieben wird
- Erweiterte Einstellungsmöglichkeiten über die Control-App
- Control-App in Deutsch und Englisch mit Erklärungen für die einzelnen Einstellungen
- Angepasste und erweiterte RadioHead Datenpakete
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 Superheterodyne oder 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
- Optional: DHT22, DHT11 oder DS18x20 Sensor
Die Gesamtkosten der Bauteile belaufen sich auf etwa 50 bis 60 Euro.
Aufbau der Hardware
Die Hardware wird nach folgendem Schema aufgebaut:
![](https://crycode.de/wp-content/uploads/2018/05/Automatisches-Bewaesserungssystem-Schaltplan-1024x534.png)
![](https://crycode.de/wp-content/uploads/2018/05/Automatisches-Bewaesserungssystem-Steckplatine-1024x797.png)
Fertig zusammengebaut und in ein kleines Gehäuse gesteckt könnte es dann so aussehen:
![](https://crycode.de/wp-content/uploads/2018/05/Steuerung-01-839x1024.jpg)
![](https://crycode.de/wp-content/uploads/2018/05/Steuerung-02-1024x443.jpg)
![](https://crycode.de/wp-content/uploads/2018/05/Steuerung-03-1024x438.jpg)
![](https://crycode.de/wp-content/uploads/2018/05/Steuerung-04-1024x604.jpg)
![](https://crycode.de/wp-content/uploads/2018/05/Ventile-1024x471.jpg)
![](https://crycode.de/wp-content/uploads/2018/05/Sensoren-1024x717.jpg)
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.
![](https://crycode.de/wp-content/uploads/2018/05/watering-spikes.jpg)
![](https://crycode.de/wp-content/uploads/2018/05/Bodenbewaesserung-1024x782.jpg)
Oben wird auf beiden Seiten ein 1/2” Schlauch angeschlossen. Durch die Hohlräume im Inneren 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 Control-App zur Konfiguration des fertigen Systems direkt aus dem GitHub 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 können im EEPROM des Mikrocontrollers sicher gespeichert werden und werden dann bei einem Neustart wieder geladen.
Mit PlatformIO (empfohlen)
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 kommt 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,9 V ⇒ 0%
und U >= 4,2 V ⇒ 100%
.
Konfiguration mit der Control-App
Die gesamte Konfiguration des fertigen Systems ist über die 433 MHz Funkverbindung möglich. Hierzu wird lediglich ein Arduino (z.B. Arduino Nano) mit 433 MHz Funkmodulen benötigt, auf den der Serial-Radio-Gateway Sketch aufgespielt wird.
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.
Die Control-App kann auf Windows- und Linux-Systemen verwendet werden.
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:
npm install
Anschließend kann die Anwendung auch ohne Internetverbindung gestartet werden:
npm start
Nun einfach im Browser die Adresse http://localhost:3000/
aufrufen, den seriellen Port des Serial-Radio-Gateways auswählen und verbinden.
Die Control-App erkennt automatisch die Sprache des Nutzers über den Browser und stellt sich dementsprechend auf Deutsch oder Englisch ein. Alternativ kann vor dem Verbinden auch die Sprache manuell gewählt werden.
![](https://crycode.de/wp-content/uploads/2020/05/Automatisches-Bewaesserungssystem-Control-App-1.jpg)
![](https://crycode.de/wp-content/uploads/2020/05/Automatisches-Bewaesserungssystem-Control-App-2.jpg)
![](https://crycode.de/wp-content/uploads/2020/05/Automatisches-Bewaesserungssystem-Control-App-3.jpg)
Jeder der vier verfügbaren Kanäle kann einzeln aktiviert oder deaktiviert werden. Zudem können pro Kanal der Triggerwert und die Bewässerungszeit einzeln eingestellt werden. Standardmäßig ist nur der Kanal 0 mit einem Triggerwert von 512 und einer Zeit von 5 Sekunden aktiviert.
Weiterhin können die folgenden Einstellungen einzeln angepasst werden:
- RadioHead Adressen
- Prüfintervall für die Bodenfeuchtigkeit (Standard 5 Minuten)
- Abfrageintervall für den Temperatursensor (Standard 1 Minute)
- Schaltschwelle für den temperaturabhängigen Schalter
- Senden der ADC-Werte
- Automatisches Senden der Daten (Push-Modus)
Eine Beschreibung zu jeder einzelnen Option ist über das blau ℹ️ verfügbar.
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.
Betrieb ohne Zentrale
Für einen Betrieb des Bewässerungssystem ohne Zentrale (Headless Betrieb) sollte in den Einstellungen die Option Automatisches Senden der Daten deaktiviert werden. Andernfalls versucht das System regelmäßig seine aktuellen Daten erfolglos zu senden, wodurch unnötig Energie verbraucht wird und es außerdem zu Problemen mit den Wartezeiten kommen kann.
Optimale Einstellungen
Die optimalen Einstellungen sind von mehreren Faktoren abhängig und sollten einfach ausprobiert werden.
Bei mir haben sich ein Triggerwert 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.
Alle automatisch gesendeten Datenpakete werden an die in der Konfiguration hinterlegte Adresse gesendet.
Aktiv angefragte Daten, zum Beispiel durch eine Aktion oder Polling, werden immer an die Adresse des anfragenden gesendet. Somit ist beispielsweise möglich ein Bewässerungssystem, das als Zieladresse 0x01
definiert hat, über die Control-App mit der Adresse 0x02
zu bedienen.
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, Luftfeuchtigkeit und temperaturabhängiger Schalter
Dieses Datenpaket wird nach jeder Messung der Temperatur und gegebenenfalls Luftfeuchtigkeit, sowie der Status des temperaturabhängigen Schalters übertragen.
Bei Verwendung eines DHT-Sensors besteht es aus 10 Byte: 0x20
, gefolgt von 4 Byte Temperatur und 4 Byte Luftfeuchtigkeit, jeweils als Float Zahl im Little-Endian Format und als letztes Byte 0x01
oder 0x00
, welches den Zustand des Schalters anzeigt.
Bei Verwendung eines DS18x20-Sensores besteht das Datenpaket aus nur 6 Byte: 0x20
, gefolgt von 4 Byte Temperatur als Float Zahl im Little-Endian Format und als letztes Byte 0x01
oder 0x00
, welches den Zustand des Schalters anzeigt.
0x20 t t t t h h h h s
oder 0x20 t t t t s
Beispiel DHT: 0x20 0xcd 0xcc 0xd0 0x41 0xcd 0xcc 0x4e 0x42 0x00
Dies entspricht 26,1 °C, 51,7 % Luftfeuchtigkeit und einem nicht aktiven Schalter.
Beispiel DS18x20: 0x20 0xcd 0xcc 0xd0 0x41 0x01
Dies entspricht 26,1 °C und einem aktiven Schalter.
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
0x25 Status der Kanäle
Bei jedem Ein- und Ausschalten (öffnen bzw. schließen des Ventils) wird dieses Datenpaket bestehend aus fünf Byte mit dem Status der Kanäle gesendet.
Das erste Byte ist dabei immer 0x25
und anschließend folgen die Kanäle 0 bis 3 mit jeweils einem Byte. Status 0x00
steht dabei für ausgeschaltet (geschlossen) und 0x01
für eingeschaltet (geöffnet).
Beispiel: 0x25 0x01 0x00 0x00 0x00 0x00
Hierbei ist Kanal 0 eingeschaltet und Kanal 1 bis 3 sind ausgeschaltet.
0x50 Einstellungen
Dieses Datenpaket beinhaltet die aktuell auf dem System gesetzten Einstellungen. Es besteht aus insgesamt 28 Byte, beginnend mit 0x50
.
Das zweite Byte beinhaltet die aktivierten Kanäle in den Bits 0 bis 3. Bit 5 enthält ob der temperaturabhängige Schalter invertiert wird, Bit 6 ob das Pushen von Daten aktiviert ist und Bit 7 ob die ADC-Sensorwerte gesendet werden sollen.
Die Bytes drei bis zehn beinhalten die Triggerwerte der Kanäle 0 bis 3 mit jeweils zwei Byte als uint16_t
.
Die Bytes 11 bis 18 beinhalten die Bewässerungszeit der Kanäle 0 bis 3 mit jeweils zwei Byte als uint16_t
.
In Byte 19 und 20 ist das Intervall zum Prüfen der Bodenfeuchtigkeit als uint16_t
enthalten.
Bytes 21 und 22 beinhalten das Intervall zur Abfrage des DHT- beziehungsweise DS18x20-Sensors als uint16_t
.
Byte 23 ist die RadioHead Serveradresse und Byte 24 die RadioHead Adresse des Bewässerungssystems, jeweils als uint8_t
.
Die Bytes 25 und 26 beinhalten die die Wartezeit nach dem Senden jeder RadioHead Nachricht als uint16_t
.
Byte 27 ist der Schwellwert für den temperaturabhängigen Schalter als int8_t
und Byte 28 die zugehörige Hysterese in zehnteln als uint8_t
.
Beispiel: 0x50 0xC1 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x05 0x00 0x05 0x00 0x05 0x00 0x05 0x00 0x2C 0x01 0x3C 0x00 0x02 0xDC 0x0A 0x00 0x1E 0x14
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 28 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 0xC1 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x05 0x00 0x05 0x00 0x05 0x00 0x05 0x00 0x2C 0x01 0x3C 0x00 0x02 0xDC 0x0A 0x00 0x1E 0x14
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.
0x66 Daten holen (Polling)
Zum Abfragen der aktuellen Daten ohne eine erneutes Abfragen der Sensoren auszulösen kann dem Bewässerungssystem dieses Datenpakete mit dem einen Byte 0x66
gesendet werden.
Das System sendet daraufhin alle aktuellen Daten.
0x65 Kanäle ein- und ausschalten
Durch Senden dieses fünf Byte großen Datenpakets kann man das Bewässerungssystem dazu veranlassen unabhängig von der Automatik einen oder mehrere Kanäle einzuschalten (Ventil öffnen) beziehungsweise auszuschalten (Ventil schließen). Wird ein Kanal eingeschaltet, dann wird er automatisch nach seiner eingestellten Zeit auch wieder ausgeschaltet.
Das erste Byte ist immer 0x65
, gefolgt von je einem Byte pro Kanal für die Kanäle 0 bis 3. Zum Einschalten eines Kanals muss das entsprechende Byte auf 0x01
und zum Ausschalten auf 0x00
gesetzt werden. Andere Werte werden ignoriert, wodurch es möglich ist, beispielsweise den Status eines Kanals zu verändern, aber die anderen in ihrem aktuellen Status zu belassen.
Beispiel: 0x65 0x01 0x00 0x00 0x00
Kanal 0 einschalten, 1-3 ausschalten; 0x67 0xFF 0x00 0xFF 0xFF
Kanal 1 ausschalten, alle anderen nicht ändern
0x63, 0x64, 0x67 Pause und Fortsetzen
Zur Vermeidung von beispielsweise Ruhestörungen durch eine in der Nacht anspringende Pumpe, kann die Automatik des Bewässerungssystems über diese 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.
Bei beiden jeweils ein Byte großen Befehle 0x63
und 0x64
aktivieren beziehungsweise deaktivieren die Pause.
Der zwei Byte große Befehl 0x67
gefolgt von 0x01
oder 0x00
aktiviert oder deaktiviert die Pause, je nach zweitem Byte.
Beispiel: 0x63
Pause aktivieren; 0x64
Pause deaktivieren; 0x67 0x01
Pause aktivieren; 0x67 0x00
Pause deaktivieren
0x68 Temperaturabhängigen Schalter manuell schalten
Über diesen zwei Byte großen Befehl kann der temperaturabhängige Schalter auch manuell geschaltet werden.
Das erste Byte ist immer 0x68
gefolgt von 0x01
zum Einschalten oder 0x00
zum Ausschalten.
Beispiel: 0x68 0x01
einschalten; 0x68 0x00
ausschalten
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 0x02 0x03 0x00
Dies entspricht der Version 2.3.0
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 27 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 Triggerwerte ausgetestet werden mussten sind und die Tomaten- und Paprikapflanzen immer bestens versorgt 🙂
![](https://crycode.de/wp-content/uploads/2018/06/Automatisches-Bewaesserungssystem-2-1024x576.jpg)
![](https://crycode.de/wp-content/uploads/2018/06/Automatisches-Bewaesserungssystem-Steuerung-1024x576.jpg)
![](https://crycode.de/wp-content/uploads/2018/06/Automatisches-Bewaesserungssystem-Ventile-1024x576.jpg)
![](https://crycode.de/wp-content/uploads/2018/06/Automatisches-Bewaesserungssystem-Bodenspiesse-1024x576.jpg)
![](https://crycode.de/wp-content/uploads/2018/06/Automatisches-Bewaesserungssystem-Sensor-1024x576.jpg)
![](https://crycode.de/wp-content/uploads/2018/06/Automatisches-Bewaesserungssystem-Bodenspiesse-Sensor-1024x576.jpg)
Einbindung in ioBroker
In die Smarthome Software ioBroker kann das Bewässerungssystem mit Hilfe meines Adapters ioBroker.radiohead eingebunden werden.
Hardwareseitig wird hier wieder ein Arduino mit angeschlossenen 433 MHz Funkmodulen und dem Serial-Radio-Gateway Sketch benötigt.
In der Adapterkonfiguration in ioBroker können dann die einzelnen Datenpakete entsprechend eingetragen werden. Zur Erfassung der Batteriespannung in Volt kann der übertragene ADC-Wert mit dem Faktor 0.0048875855
verwendet werden.
![](https://crycode.de/wp-content/uploads/2020/05/Automatisches-Bewaesserungssystem-ioBroker-1-1024x510.jpg)
![](https://crycode.de/wp-content/uploads/2020/05/Automatisches-Bewaesserungssystem-ioBroker-2-1024x474.jpg)
![](https://crycode.de/wp-content/uploads/2020/05/Automatisches-Bewaesserungssystem-ioBroker-3-1024x494.jpg)
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.
![](https://crycode.de/wp-content/uploads/2018/06/Automatisches-Bewaesserungssystem_Pimatic-Device.jpg)
![](https://crycode.de/wp-content/uploads/2018/06/Automatisches-Bewaesserungssystem_Pimatic-Graph-1024x474.jpg)
Beispiel für ein entsprechendes RadioHeadCustomSensor-Device in der config.json
von Pimatic:
[...]
"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-2023 Peter Müller
Nachbauten
Hier noch ein Foto vom Nachbau von Kai Schillak für vier Kanäle:
![](https://crycode.de/wp-content/uploads/2020/06/diy-bewaesserungsystem-ks.jpg)
Wer mag kann mir gerne Fotos von seinem Aufbau zukommen lassen, um diese dann hier zu ergänzen. 🙂
1. Aug. 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. Aug. 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. Apr. 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. Aug. 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. Aug. 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. Aug. 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. Aug. 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. Aug. 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. Aug. 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. Aug. 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. Aug. 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. Aug. 2019 um 9:38
Hallo,
danke für die Info. Werde mich langsam rantasten. Wenn noch Fragen sind, werde ich mich wieder melden.
3. Okt. 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. Okt. 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. Okt. 2019 um 10:41
Hallo,
vielen Dank für die schnelle und ausführliche Antwort! Das hat mir sehr weitergeholfen! 🙂
4. Okt. 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. Okt. 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. Okt. 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. Okt. 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. Okt. 2019 um 19:56
Hallo Peter,
ich werd’s ausprobieren und hier eine Rückmeldung geben.
26. Okt. 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. Okt. 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. Okt. 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. Okt. 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. Okt. 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. Okt. 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. Okt. 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. Okt. 2019 um 18:23
Freut mich das zu lesen.
Immer wieder gerne. 🙂
5. Nov. 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. Nov. 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. Nov. 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. Nov. 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. Nov. 2019 um 21:08
Hallo Peter,
danke für die schnelle Antwort. funktioniert jetzt super.
19. Jan. 2020 um 19:57
Hallo Peter, ich habe auch diese kapazitiven Feuchtesensoren eingesetzt (gekauft bei Funduino). Allerdings habe ich schon einige Ausfälle nach wenigen Tagen. Der Einsatz war sowohl außen (Balkon – teilüberdacht) als auch danach in Zimmerpflanze. Jedesmal sieht man einen Anstieg des Strombedarfs des Sensors (L7805 wird heiß). Zwei Sensoren werden über eine 12V Autobatterie mit Spannungswandlung auf 5V mittels L7805 mit Stromversorgt. Desweiteren auch TMP36, SD-card, … Der Arduino wird über 9V Netzteil versorgt. Masse ist natürlich verbunden.
Ich frage mich, ob es besser wäre den Feuchtesensor mit 3,3V zu betreiben, um die Auswerteschaltung auf dem Sensor zu entlasten. Oder fehlen doch noch ein paar Schutzmassnahmen mittels Widerstand oder Kondensator in der Stromversorgung oder beim Einlesen?
Ich habe jetzt mal die Stromversorgung des Sensors über einen digital Out-Pin vom Arduino nur während der Messung realisiert. Damit vermindert sich die Dauer der tatsächlichen Nutzung des Sensors. Das hast du ja auch so umgesetzt, wenn ich das richtig gesehen habe.
Ich würde mich freuen, wenn du über deiner Erfahrung diesbezüglich berichtest.
Gruß, Leda
20. Jan. 2020 um 18:55
Hi Leda,
ja ich habe die Stromversorgung der Sensoren über einen digital Out-Pin vom Arduino gelöst. Normalerweise brauchen die Sensoren selbst auch nur sehr wenig Strom.
Wenn der L7805 heiß wird, dann müssen schon ein paar 100 mA fließen. Das ist bei den Sensoren definitiv nicht normal. Hast du darauf geachtet, dass die Sensoren nicht zu tief im Boden stecken und ggf. der obere Teil mit den Elektronikbauteilen feucht geworden ist? Nur der untere Teil darf mit Feuchtigkeit in Verbindung kommen.
Ich gehe mal davon aus, dass deine Beschaltung des L7805 richtig ist mit passenden Kondensatoren davor und danach?
Wieso überhaupt zwei Spannungsquellen? Den Arduino könntest du auch mit über die 5 V des L7805 betreiben.
Oder hast du einen Arduino der intern mit 3,3 V arbeitet? Dann müsste das Analogsignal vom Sensor noch über einen Spannungsteiler auf max. 3,3 V herunter geteilt werden.
20. Jan. 2020 um 20:54
Hallo Peter,
dafür nutze ich einen MEGA. Ich habe die L7805 Stromversorgung, da ich einige Sensoren, auch Temperatur, und auch SD-Card, das Relais und mittlerweile auch ein TFT nutze.
Da die Temperatur (TMP36) stark rauschte, wenn ich den Mega mit der externen Stromversogung verbunden habe, die ich bei Versorgung über Laptop+USB nicht hatte, nach Empfehlung eines Kollegen mit L7805 probiert. Der L7805 ist ordnungsgemäss mit 3 Kondensatoren und Diode abgesichtert.
Heiß war in dem Fall so 45°C. Also beim anfassen des Kühlkörpers, war der gut warm.
Die Ursache für den Ausfall vermute ich dann beim Feuchtwerden der Elektronik. Ich habe die Sensoren häufig hin-uind-her gesteckt. Dabei meist bis zu den zwei Kerben in die Erde gesteckt. Auf dem Balkon hatte ich eine kleine Plastiktüte mit Panzertape abgedichtet darübergestülpt.
Ist es besser die Elektronik komplett zu verkleben? Mit Heißkleber oder ähnlichem? Da gibt aber dann keine Temperaturprobleme der elektrischen Bauteile?
21. Jan. 2020 um 9:10
Tritt das Problem denn auch auf, wenn du testweise mal den Arduino auch über den L7805 versorgst? Nicht dass da irgendwo doch die beiden Spannungsregler gegeneinander arbeiten. Ich würde auf eine gemeinsame Spannungsquelle gehen.
Interessant wäre auch mal mit einem Multimeter zu messen, wo der Strom fließt (VCC zum Sensor, Ausgang vom Sensor, GND vom Sensor). Das dürfte überall eigentlich nicht viel sein.
Ein Rauschen beim ADC kommt meist durch eine unsaubere Versorgungsspannung und/oder unsaubere Referenzspannung (Aref). Wenn du als Aref VCC bzw. AVCC verwendest, dann sollte am Aref-Pin ein 100nF Kerko gegen Masse angeschlossen sein.
Zusätzlich kann ein 100nF Kerko direkt am 5 V Pin des Arduinos nicht schaden, wenn du ihn direkt mit 5 V versorgst.
Als Alternative zum Linearregler L7805, der die “überflüssige” Spannung in Wärme verbrät, kann ich dir die Schaltregler TSR 1-2405 (max. 1A) bzw. TSR 2-2405 (max. 2A) empfehlen. Diese Schaltregler sind Pinkompatibel zum L7805 und erfordern keine externe Beschaltung. Das wichtigste: Sie sind deutlich effizienter, haben sehr geringe Verluste und werden nicht warm. 🙂
Meine Sensoren habe ich mit Schrumpfschlauch isoliert (siehe Foto). Temperaturprobleme gibt es da keine, da die Sensoren im normalen Betrieb nicht warm werden.
Bis zu den Kerben ist definitiv zu weit (zumindest unisoliert), da dann die ersten Teile schon feucht werden können.
5. Feb. 2020 um 10:29
Hallo,
ich nutze selbst gerne Arduino, ESP32 & Co. Aber geht es hier nicht auch ohne Elektronik? Es gibt Leute die PET-Flaschen mit kleinen Öffnungen über Kopf zur Versorgung ihrer Tomaten nutzen – nach dem Prizip der “Durstkugel”. Mit dem hier vorgestellten Bewässerungssystem mit etwas kleineren Öffnungen und einem erhöhten Kannister als zentraler Monster-PET-Flasche müsste das doch auch gehen …
Hat das vielleicht schon jemand probiert?
Hoffentlich gelingt der Ausdruck der Spieße, da diese wegen der Rundung nur wenig Kontakt haben und ich keinen 3D-Drucker mit Heizplatte besitze. Als OpenSCAD-Fan freue ich mich natürlich über die Quellen. Ich könnte im Notfall über den Code die Kontaktfläche vergrößern.
5. Feb. 2020 um 12:34
Das könnte auch gehen, habe ich aber nie getestet. Mit Elektronik und Aufzeichnung der Daten dahinter ist einfach viel cooler. 😉
Den 3D-Druck habe ich mit den Spitzen nach oben und Support zum Druckbett hin gemacht. Im Inneren sollte kein Support sein, da man diesen nur schwer bis gar nicht wieder raus bekommt.
6. Feb. 2020 um 11:45
Ja cooler ist das !
Und hier geht es um Software & Elektronik und das ist auch gut so. Ich kann ja jederzeit upgraden …
Wie man Support partiell verhindern oder minimieren kann muss ich noch ergründen. Irgendwo wird Cura so einen Schalter haben. Aber das find ich schon.
Egal wie – deine Bewässerung ist eine pfiffige Lösung!
12. Feb. 2020 um 12:48
Hallo Herr Müller,
vielen Dank für dieses Projekt.
mit einer kleinen Änderung in der Software (Vertauschen von Ventil offen/zu wegen einer verwendeten Relais-Platine, die dummerweise invers schaltet) habe ich die Schaltung wunderbar zum Laufen bekommen, d.h. sie gießt wie gewünscht (default-Werte) auf dem Port 0.
Jetzt scheitert es aber an der Konfiguration über RadioHead.
Die Konfiguration soll ber einen Raspberry 4 laufen.
Hierzu habe ich mit einem Arduino nano, einem Receiver-, einem Transmitter-Modul (baugleich wie in der Giess-Schaltung MX-05V, also die ganz guten 😉 ) und dem Sketch rh_serial_ask_gateway.ino aus dem Examples-Ordner den Gateway gebastelt.
gemäß der Zeile RH_ASK radio(2000, 2, 4); habe ich das Sender-Modul auf D4, das Empfangsmodul auf D2 am Arduino verbunden.
– npm start läuft fehlerfrei an (es gibt es keine Fehlermeldung)
– im Browser auf der genannten Adresse 127.0.0.1:3000 kommt auch die (erste) Konfigurationsseite
– bei der Port-Eingabe steht auch /dev/ttyUSB0, das heißt, das Gateway wird erkannt.
– nach dem Klick auf Connect…:
kommt als erte Zeile connected to the serial-radio-gateway, (das klingt ja soweit gut)
danach nur noch error sending message , immer wieder…
wenn man auch einen der Buttons klickt, kommt die error-message mit dem entsprechenden anderen hex-code.
Werte werden auf der Konfig-Seite keine angezeigt,
Das heißt, daß die Funkverbindung irgendwie nicht so richtig mag…
Ich habe es auch schon mit anderen Funkmodulen versucht, das ändert aber nichts.
Wo liegt mein Fehler? Falsche .ino für diese Anwendung?
Habe ich die Funkmodule richtig am Arduino angeschlossen odeer müssen diese an MOSI/MISO wie in der Giess-Schaltung angeschlossen werden?
Viele Grüße
Peter
12. Feb. 2020 um 19:44
Hi,
das klingt soweit gut. Allerdings sind die MX-05V Funkmodule, genauer gesagt der Empfänger davon, nicht grad die besten. Nach nicht mal einem Meter ist bei denen oft Schluss und sie empfangen keine brauchbaren Daten mehr. Ich hatte diese Module auch mal an einem Arduino hängen, um damit mit dem Bewässerungssystem zu Kommunizieren. Damit die Verbindung klappte musste ich hier die beiden “Geräte” nahezu direkt nebeneinander stellen.
Die von dir beschriebenen Fehlermeldungen sind dann normal, da das Programm ständig versucht mit dem Bewässerungssystem zu Kontakt aufzunehmen und die Softwareversion auszulesen.
13. Feb. 2020 um 10:06
Hallo Herr Müller,
Vielen Dank für die schnelle Hilfe!
OK, Sie haben recht. bis zu etwa 30cm Abstand schafft es die Funkverbindung, darüberhinaus gibt es immer wieder error’s. Ab etwa 1m ist total Ende…
Bei meinen Versuchen vorher waren es etwa 2m Distanz.
Ich hätte nie erwartet, daß diese Funkmodule so schrottig sind. Und das trotz Helix-Antennen. (Spiral-Antennen sind doch keine Verhüterli?)
Welche Sende/Empfangsmodule (vielleicht auch auf einer anderen Frequenz) sind denn besser? Die 3400RF sind ja nur Empfänger, macht es Sinn, wirklich nur diese einzusetzen und bei den Sendemodulen zu bleiben? Oder gibt es vielleicht auch gute Transceiver-Module?
Trotz jetzt funktionierender Ultra-Nahfeld-Funkverbindung bekomme ich immer beim Button “Send Settings to Watering System” eine Fehlermeldung: “error sending message “, insgesamt 22 bytes.
Diesen Button (bzw. die Datenübertragung hierzu) hat das System bisher kein einziges Mal geschafft.
Viele Grüße,
Peter
13. Feb. 2020 um 14:32
Die Module vom Typ 3400RF gibt es auch als Set mit Empfänger und Sender zusammen. Die Sender der MX-05V sind auch brauchbar, nur halt die Empfänger nicht wirklich.
Erst kürzlich habe ich mir ein “433 MHz Superheterodyne-Empfänger und -Sender-Kit” inkl. Spiralantennen gekauft. Fürs erste machen diese Module einen sehr guten Eindruck.
Den Fehler beim Senden der “langen” Nachricht würde ich auch erst mal auf die schlechten Funkmodule schieben. Je länger die Nachricht, desto fehleranfälliger.
13. Feb. 2020 um 17:16
Hi!
Ich habe mir gerade zwei Empfänger RX-B8 in der Bucht geschossen, die sind auch Superheterodyne und kommen in diversen Rezensionen ganz gut weg. Leider kommen sie von ganz weit her und bringen auf ihrer langen Reise hoffentlich keinen Virus mit ;-).
Damit habe ich ja jetzt genügend Zeit für meine geplante Modifikation der Giess-Intelligenz. DHT brauche ich nicht unbedingt, der muss aus Analog-Pin-Mangel weichen, damit ich A4 und A5 für ein OLED freibekomme (d.h. A4 und A5 werden auf A0 und A3 verschoben, wahrscheinlich sortiere ich alle A’s ein wenig um, damit es hinterher wieder ordentlich aussieht . Der DHT-Code-Teil muss damit natürlich auch disintegriert werden und der OLED-Code dafür integriert. Eine Anzeige der aktuellen Erdfeuchte-Messwerte macht für mich mehr Sinn als die Luftfeuchte und Temperatur (ist bei mir kein Gewächshaus, sondern nur ein Wohnzimmer). Sobald es hierfür neue Erkenntnisse gibt, melde ich mich wieder.
Gruß und nochmals vielen Dank für die Hilfe und dieses Projekt!
Peter
21. Feb. 2020 um 15:21
Hallo Herr Müller,
kann es sein, daß die in der Config-Seite eingestellten Zeitwerte nicht unbedingt von der Schaltung eingehalten werden?
Ich habe die Einstellungen einfach mal so gelassen (außder der Aktivierung aller 4 Kanäle), wie das System default-mäßig vorgibt. Dabei kommt folgendes raus:
– Beim Drücken der Ventil-Tasten öffnen die Ventile fast genau die eingestellten 5 Sekunden.
– Wenn man das System selbsständig laufen läßt, werden die 4 Ventile nacheinander nur für etwa 3 Sekunden geöffnet.
– Wenn man die Vorgabezeit bei zwei Ventilen (ich habe eincah mal 0 und 1) auf 15 Sekunden (willkürlich) setzt, hält das System die 5 Minuten (300 Sekunden) Abfragezeit überhaupt nicht mehr ein, Irgendwann öffnet Ventil 0 für etwa 13 Sekunden, kurz dnach Ventil 1 für knapp 10 Sekunden, dnach folgen 2 und 3 mit wieder deutlich unter 5 Sekunden. Nach diesem “Zyklus” dauert es bis zur ersten Wiederholung nun schon 8 Minuten, dann öffnen die Ventlie mit annähernd den gleichen Zeiten wie vorher, dann dauert es über 10 Minuten bis zum nächsten Abfragezyklus. Auf dem WEB-Interface sehe ich zwar die meisten einlaufenden Meldungen, aber auch immer wieder “error….”, ok, das hatten wir ja geklärt, das sind die hochwertigen Funkmodule.
Woran kann dieses zeitliche Problem liegen?
Ach ja, noch kurz am Rande: Das Problem mit dem serial-Port (von Volker Bock) hatte ich unter Windows auch, das Problem lies sich leicht beheben, wenn man nodejs im vorgegebenen Standardpfad installiert, also nicht versucht, die Installation irgendwo anders hin abzulegen.
Viele Grüße und ein schönes Wochenende,
Peter
9. Mrz. 2020 um 19:00
Hi, sorry für die späte Antwort.
Eigentlich sollten die Zeiten recht gut eingehalten werden. Abweichungen von ein paar Sekunden bei den längeren Wartezeiten wären möglich, aber bei weitem nicht so extrem.
Das klingt fast so, als ob irgendein Zähler überläuft.
11. Mrz. 2020 um 5:42
Hallo!
Ich habe das Gefühl, dass das Problem mit dem RH-Funk zu tun hat. Wenn man die Anzahl der Sendeversuche erhöht, driften die Zeiten noch weiter davon. Ich werde in den nächsten Tagen den Funk mal per Schalter deaktivieren und dann mal testen, ob es besser wird. Ich habe den Empfang der Daten durch PC oder Raspberry nicht ständig aktiv, nur bei Konfigurationsbedarf. Ich vermute, dass sich die RH vielleicht verläuft, da der Arduino keine Empfangsbestätigung bekommt. Wenn man bei schlechter Funkverbindung vom PC aus immer wieder erfolglos versucht zu senden, dauert es irgendwann deutlich länger, bis die error-Meldung kommt.
Gruß, Peter
24. Mrz. 2020 um 15:27
Hallo Herr Müller,
ich versuche noch immer, ein OLED zum Laufen zu bringen (für eine Statusanzeige).
Da A4 und A5 (die das OLED für den i2C braucht) belegt sind, habe ich einfach mal nur spasseshalber die beiden SENSOR_0_ADC und SENSOR_1_ADC auf die gleiche Pins wie SENSOR_2_ADC und SENSOR_3_ADC gelegt. Damit sollten A4 und A5 frei für andere Nutzung sein (nur zum Test des Display, daß das erstmal sonst keinen Sinn macht, ist mir klar).
Hat leider nichts gebracht, das OLED ist nicht ansprechbar. Das OLED mit einem anderen Test-Progrämmchen zum Laufen zu bewegen, funktioniert ohne Probleme. Hardwaremäßig passt es also.
Ich nehme daher mal stark an, daß durch irgenetwas anderes in der Software den I2C (bzw. A4 und/oder A5) blockiert sind. Ich finde das Problem leider nicht. Gibt es dazu eine Idee?
Und noch ein anderes Problem habe ich:
Ich habe nun zwei dieser Giess-Automaten gebaut, in der Konfig-Software soll nur jeweils einer davon angesprochen werden, z.B. der eine auf 01, der zweite auf 02 hören.
Beim Abspeichern der Konfiguration, beim Anklicken der Ventile, eigentlich bei fast allem, fühlen sich beide nun gleichzeitig angesprochen, d.h. das System bekommt keine Entscheidung für den Richtigen auf die Reihe. In der Arduino-Software habe ich aber mit unterschiedlichen Adress-Kombinationen RH_OWN_ADDR und RH_SERVER_ADDR gespielt. Lediglich bei der Software-Stand-Abfrage funktioniert es zuverlässig. Danach wird es eher ein Zufallsprodukt.
Wenn ich einen der Beiden Giess-Intelligenzien komplett ausschalte, findet ihn die Weboberfläche beim Start (Versionsnummer, Einstellungen laden, …) mit der _falschen_ Adressierung nicht mehr, mit der richtigen schon…
Sind aber beide aktiv, fühlen sich beide auch teilweise parallel angesprochen (z.B. beim Abspeichern der Parameter, bei Valve on setzen, beim Aktivieren der Kanäle…)
Wie muß ich beide Adressen unterschiedlich einstellen (“Address of this node” UND oder ODER “Address of the watering system”, damit es mit der Unterscheidung sicher klappt? Oder geht das gar nicht?
Viele Grüße
Peter
10. Apr. 2020 um 19:00
Hi Peter,
habe eben noch mal den Code durchgeschaut. Blockiert werden die Pins A4 und A5 durch die Software nicht.
Zwei Ideen dazu:
1) Der ADC wird immer deaktiviert, solange er nicht benötigt wird. Eventuell wird dabei auch die Spannungsversorgung der beiden Pins mit abgeschaltet. Details dazu müsste im Datenblatt des ATMega328P zu finden sein.
Um das Abschalten des ADCs zu deaktivieren, müssen in der Datei `setup.cpp` die Zeile 67 sowie in `loop.cpp` die Zeile 119 (jeweils `ADCSRA &= ~(1<<ADEN);` ) auskommentiert werden.
2) Bei viele empfangenen Störungen durch den 433 MHz Empfänger wird durch RadioHead sehr oft der Interrupthandler zur Auswertung des Signals ausgerufen. Dies könnte das Timing des I²C Busses stören, da die Interrupts immer wieder dazwischen hauen.
Eventuell wäre es hilfreich mit einem Logik-Analysator zu schauen, was auf den Busleitungen SDA/SCL passiert.
Zum zweiten Problem:
Bei mehreren Systemen muss in der Datei `config.h` für jedes System über `RH_OWN_ADDR` eine andere Adresse vergeben werden. Die Adresse unter `RH_SERVER_ADDR` sollte bei allen Systemen gleich sein, da die Systeme ihre Daten ja wahrscheinlich zur gleichen Zentrale senden sollen. Damit sollte sich dann immer nur ein System angesprochen fühlen.
In der Control-App muss dann bei “Address of this node” der Wert von `RH_SERVER_ADDR` und bei “Address of the watering system” der Wert aus `RH_OWN_ADDR` rein.
Und zu guter Letzt noch zum Timingproblem:
Wenn kein Empfänger antwortet, dann kann es durchaus sein, dass die Zeiten (besonders bei kurzen Intervallen) leicht abweichen, da er beim Senden dann jede Nachricht mehrfach sendet und immer auf eine Antwort wartet.
Wenn der Funk eh nur zur Konfiguration benötigt wird, dann wäre es vielleicht noch eine Option einen Hardwareschalter dafür einzubauen, der von der Software abgefragt wird und bewirkt, dass Sendeversuche überhaupt erst unternommen werden, wenn der Schalter eingeschaltet ist. Oder alternativ vielleicht über die Control-App das Senden der Daten ein-/ausschaltbar machen.
Viele Grüße
Peter
7. Apr. 2020 um 21:21
Hallo Herr Müller
Ich bin total begeister von Ihrem Projekt und würde es sehr gern nachbauen.
Die benötigten Teile habe ich bestellt. Nun bin ich total am verzweifeln mit der
Programmierung des Arduinos. Kenne mich überhaupt nicht aus mit PlatfomIO.
Es klappt auch nicht mit ArduinoIDE, immer eine Fehlermeldung mit dht(dem Fühler)
Gibt es eventuell eine Anleitung für Einsteiger?? Hab auch keinen Plan wie die Funkverbindung aufgebaut werden soll. Was benötige ich da genau. Für eine Unterstützung bin ich sehr dankbar.
10. Apr. 2020 um 19:59
Hi,
was genau für eine Fehlermeldung kommt denn in der ArduinoIDE?
Sind die richtigen drei Libraries installiert?
Für PlatformIO gibt es z.B. auf heise.de einen Artikel. Nach dieser Anleitung muss Visual Studio Code installiert und da drin dann PlatformIO eingerichtet werden. Dann kann das Projekt in VS Code geöffnet und damit der Arduino programmiert werden.
Für die Funkverbindung zur Control-App wird im einfachsten Fall ein Arduino Nano mit einem Funkempfänger an Pin 2 und einem Funksender an Pin 4 benötigt. Auf diesen Arduino wird dann der Serial-Radio-Gateway Sketch geladen. Dann kann wie oben beschrieben das System über die Control-App konfiguriert werden.
14. Apr. 2020 um 16:53
Hallo Herr Müller, Sorry das ich mich jetzt erst melde. Habe es mit der Arduino IDE ans laufen bekommen. Jetzt kommt mein neues Problem. Das was ich hier schreibe wird über Putty angezeigt wenn ich den Arduino als Radiogateway am Rechner anschliesse. Das sieht nicht gerade viel versprechend aus oder??? Haben Sie da eine Lösung oder Tipp für mich? Aller besten Dank.
▒4#▒@”▒▒@”▒▒+s▒▒@+$▒▒@+$▒▒@+$▒▒▒>▒@▒▒▒@▒▒▒@▒▒▒!▒5▒@!]▒@!]▒”▒▒▒@”|▒▒4#▒@”▒▒@”▒▒@”▒▒4#▒@”▒▒@”▒▒@”▒▒5 W▒@5w7▒@5w7▒@5w7▒▒O_▒@▒▒Y▒@▒▒Y▒@▒▒Y▒!▒5▒@!]▒@!]▒”▒▒▒@”|▒▒@”|▒▒@”|▒▒!▒5▒@!]▒@”▒▒@”▒▒@”▒▒/▒b▒@/▒▒@/▒▒▒▒▒▒@▒m▒▒@▒m▒▒!▒5▒@!]▒@!]▒@!]▒”▒▒▒@”|▒▒@”|▒▒@”|▒▒▒▒▒@▒▒|▒@▒▒|▒@▒▒|▒▒▒2▒@▒i4▒@▒i4▒@▒i4▒o@▒N@▒N▒ ▒▒▒▒ @▒+▒▒ @▒+▒▒ @▒+▒▒4#▒@”▒▒@”▒▒@”▒▒0▒▒▒@0▒▒@0▒▒@0▒▒▒▒E▒@▒WC▒@▒WC▒!▒5▒@!]▒@!]▒@!]▒”▒▒▒@”|▒▒@”|
14. Apr. 2020 um 17:14
Das kann durchaus so Ok sein, da hier vom Radio-Serial-Gateway die RadioHead Datenpakete (also quasi Binärdaten) übertragen werden und keine ASCII Daten.
Dafür gibt es die Control-App, die auf dem Rechner gestartet werden muss. Diese kann die Daten auswerten und entsprechend anzeigen.
Für die Control-App wird auf dem Rechner Node.js benötigt.
14. Apr. 2020 um 22:13
Vielen besten Dank für die schnelle Antwort. Ich werde noch irre. Bekomme Node.js einfach nicht installiert. Versuche es noch auf einem anderen Rechner. Oder sollte man dazu lieber auf Linux umsteigen? Hätte noch einen Raspberry Pi frei.
16. Apr. 2020 um 13:44
Hallo Herr Müller
Habe es hin bekommen, Der npm Server startet und nach dem öffnen des Browsers auf localhost:3000 bzw 127.0.0.1:3000 bekomme ich nur Cannot Get /. Muss man nicht noch den USB bzw. Comport angeben wo der Arduino dran hängt??
16. Apr. 2020 um 15:10
Die Control-App ist für Windows und Linux ausgelegt.
Die Auswahl des COM-Ports, der Baudrate etc. folgt dann eigentlich im Browser.
Die Meldung `Cannot GET /` deutet darauf hin, dass im Verzeichnis `client` die Datei `index.html` nicht gefunden wird. In dem Verzeichnis sollten die drei Dateien `client.js`, `index.html` und `style.css` enthalten sein. Außerdem muss die Control-App vom Verzeichnis `control` aus mittels `npm start` gestartet werden.
17. Apr. 2020 um 0:37
Na wunderbar, jetzt hat es geklappt. Jetzt funzt es wie es soll. Vielen vielen lieben DANK. Bin total begeistert. Noch wird getestet und bald kommen die Tomaten in das Gewächshaus. Freue mich total auf das Ergebniss. Nochmal besten Dank für die Hilfe , die Gedult und das tolle Projekt.
17. Apr. 2020 um 7:30
Sehr schön. Freut mich, dass es nun klappt 🙂
Ich arbeite aktuell noch an einem Update für das System, welches ein paar neue Funktionen bringt (z.B. die Möglichkeit das Senden der Daten abzuschalten).
Wenn alles klappt, dann werde ich die neue Version nächste Woche hier veröffentlichen. Vorab gibt es bei Interesse hier im cryHost GitLab schon die Software im Branch `v2` zum Download.
17. Apr. 2020 um 13:48
Hallo Herr Müller
Das werde ich mir mal anschauen, was ich für einen Wunsch hätte ist, das man die Temperatur regeln könnte z.B. eine Heizung oder einen Lüfter bzw. einen Servomotor zum öffnen des Fensters. Liebe Grüße vom Neugärtner ;-)))
20. Apr. 2020 um 10:18
Am Adruino Pro Mini wäre hier noch der Pin A3 (=D17) frei. Damit könnte man z.B. noch einen Lüfter oder eine Heizung ein-/ausschalten.
Für einen Servomotor reichen leider die Anschlüsse am Pro Mini nicht aus.
Ich überlege mal, was ich davon in der neuen Version noch mit integrieren kann. 🙂
13. Mai. 2020 um 15:39
Statt den Step-Up Reglern würde ich eher zu einzelnen StepUp Modulen mit fester Spannungskonvertierung zurückgreifen. Zwar werden dann ein paar Kondensatoren und Spulen fällig, die Schaltung würde dann aber auch weniger Strom beanspruchen und qualitativ hochwertiger sein als die StepUp Module aus China 😉
15. Mai. 2020 um 19:12
Hallo Peter,
vielen Dank für die tolle Anleitung! Da der Sommer jetzt schon quasi da ist und ich mal wieder nicht mit den ganzen Projekten hinterher gekommen bin, möchte ich das System jetzt erstmal “Headless” betreiben und die Kontrollstation irgendwann nachrüsten.
Ich habe aber die Bewässerung gebaut wie von die oben beschrieben.
Leider funktioniert nur Ventil 0. Wenn ich in der config.h aber die Pins von Ventil 0 und eins tausche funktioniert nur Ventil 1. Daher weiß ich, dass alles richtig verkabelt ist.
Ich gehe davon aus, dass hinterher über die Kontrollstation angegeben wird, wieviele Ventile angeschlossen sind und dies standardmäßig auf 1 steht?
Kann ich dies irgendwie ändern und den Standard auf 2 stellen?
Liebe Grüße,
Lenni
15. Mai. 2020 um 20:26
Hallo Lenni,
ja, das System hat standardmäßig nur Kanal 0 aktiviert.
Die Aktivierung der anderen Kanäle und die Einstellung der Schwellwerte für die Bewässerung erfolgt über die Control-App. Um diese zu nutzen, brauchst du nur einen Arduino mit angeschlossenen Funkmodulen, auf den du den Radio-Serial-Gateway Sketch aufspielst. Dann kannst du vom PC aus das Bewässerungssystem konfigurieren.
Nach der Konfiguration ist ein Headless Betrieb in der v1.x grundsätzlich möglich, kann aber Problemen im Timing führen.
Ich habe inzwischen eine neue Version 2.2.0 fertig, die u.a. einen deutlich besseren Support für den Betrieb ohne Zentrale und einige zusätzliche Konfigurationsmöglichkeiten bringt.
Ich werde in den nächsten Tagen meine Anleitung hier entsprechend anpassen und dann auch die neue Version dazu freigeben. 🙂
16. Mai. 2020 um 15:30
Hallo zusammen, zur Info für alle Interessierten:
Ab sofort ist die neue Version 2.3.0 meines Bewässerungssystems mit einigen Verbesserungen der Software und ein paar neuen Hardwaremöglichkeiten verfügbar.
Die komplette Beschreibung des Systems habe ich an die neue Version angepasst.
Viel Spaß damit! Feedback ist wie immer gern gesehen. 🙂
24. Mai. 2020 um 22:00
Hallo Peter,
vielen Dank für Dein tolles Projekt und die neue Software. Ich bastel schon seit einiger Zeit daran. Bin Hardwareseitig grob fertig und habe mich zwischen durch immer mal wieder mit der Software beschäftigt. Leider bin ich ein blutiger Anfänger was das Thema Arduino angeht.
Ich möchte das ganze ohne DHT und ohne Radiohead betreiben. den DHT kann ich ja in der software einfach über Typ 0 deaktivieren. Du schreibst, dass für den Betrieb ohne RH das automatische senden der Daten deaktiviert werden sollte, leider finde ich den entsprechenden Punkt nicht, und wie deaktiviere ich ihn? Einfach auskommentieren?
Aktuell bin ich noch am überlegen, ob ich dazu noch eine Zeitabfrage einbaue, die eine Bewässerung nur zu bestimmten Uhrzeiten zulässt, z.B. nachts oder früh morgens, wobei ich mir da noch nicht schlüssig bin, das könnte ja mit Hilfe eines RTC Moduls gelingen. Vielleicht hat da ja jemand erfahrungen mit gemacht. Die Programmierung mit RTC wäre dann wohl eine Aufgabe für den nächsten Winter.
Gruß Eike
25. Mai. 2020 um 10:45
Hallo Eike,
ganz ohne RadioHead ist leider nicht so einfach möglich, da die gesamte Konfiguration inkl. der ADC-Schwellwerte zum Auslösen der Bewässerung darüber läuft. Ebenso wird in der Konfiguration (über die Control-App) auch die Option zum automatischen Senden gesetzt.
Um zumindest auf die Funkmodule verzichten zu können, sollte es gehen, dass du zur Konfiguration GND und die 433 MHz RX/TX Leitungen des Bewässerungssystems mit denen des Serial-Radio-Gateways direkt verbindest. Dabei dann RX und TX jeweils gedreht, also TX vom Gateway an RX vom System und andersherum.
Alternativ könntest du auch im gesamten Code alles was mit RadioHead zu tun hat auskommentieren und die Standardwerte in der Datei `settings.cpp` anpassen, was jedoch ein etwas größerer Aufwand wäre.
Für eine RTC bräuchtest du dann den I²C-Bus, welcher die Pins A4 und A5 beim Pro Mini belegt. Damit fallen dann die beiden Eingänge für Sensor 0 und 1 weg.
Ich habe bei mir das ganze so gelöst, dass die zeitliche Steuerung die Zentrale übernimmt und das Bewässerungssystem dann nachts in den Pausenmodus versetzt.
25. Mai. 2020 um 17:09
Hallo Peter,
ok, das klingt logisch. Dann werde ich den 433mhz Sender und Empfänger doch noch besorgen und mit anbauen.
Das Problem mit A4 und A5 war mir auch schon aufgefallen, da ich dann ja doch auf die Steuerung mit der Zentrale umstelle, kann ich das ganze dann ja auch darüber steuern.
Vielen Dank für die Schnelle Antwort und die Hilfestellung.
Gruß
Eike
5. Jun. 2020 um 23:38
Hallo Peter,
ich habe jetzt alles soweit zusammen, aber noch ein paar kleine Problemchen. Die 12V Spannungsversorgung funktioniert aktuell nicht, ich hatte es ganz zu anfank auf 12 V gestellt, nachdem die Ventile nicht geöffnet haben, habe ich die SPannung geprüft. Es kommen 9,8 V raus, ich kann es nicht über 10,7 V bringen, auch nicht angeschlossenem USB Kabel am Laderegler.
Ich dachte erst, dass es an den Transistoren liegt, da auch nicht alle LEDs geleuchtet haben. NAch dem drehen der Transistoren, haben 2 LEDs dauerhaft geleuchtet, nach einigen Versuchen die Ventile zum öffnen zu bekommen, habe ich mich nochmal mit den Transistoren beschäftigt. Sie waren ursprünglich richtig angeschlossen. Jetzt kann ich das Arduino Bord nicht mehr programmieren, es kommen nur noch Fehlermeldungen, wenn ich googel befrage, heit es ich müsste den bootloader neu brennen, was aber auch nicht funktioniert. Ich habe es damit bestimmt zerschossen.
Woran kann das Spannungsproblem liegen, und warum leuchten nicht alle LEDs? Zwei Stück haben funktioniert.
Über die Control App habe ich alle Tasterbetätigungen sehen können , ebenso die automatischen Abläufe, diese verbindet nun natürlich auch nicht mehr.
Hast Du zu den Problemen nochmal einen Tip?
Gruß
Eike
6. Jun. 2020 um 21:23
Oh, das klingt nicht gut…
Vermutlich hast du dir durch die gedrehten Transistoren den Arduino zerschossen. Möglich, dass der Arduino dadurch 12V (oder auch 9V) abbekommen hat und das mögen die ATMega Controller da drauf nicht so wirklich.
Dass die 12V Spannung beim Ansteuern der Ventile zusammen bricht deutet entweder auf einen zu schwachen Stepup oder einen Fehler in der Schaltung hin.
Die nicht leuchtenden LEDs klingen für mich erst mal nach einem Fehler in der Beschaltung. Eventuell sind die Anschlüsse der LEDs vertauscht, oder aber die Freilaufdioden verdreht?
11. Jun. 2020 um 7:31
Hallo Peter,
ich hatte irgendwie einen Wurm drin. Habe das ganze jetzt nochmal von Null neu aufgebaut. Siehe da, es waren zwei Fehler in der Schaltung. Die 12V Versorgung läuft jetzt. Die Ventile 1, 2, und 3 funktionieren wie sie sollen. Die LEDs sprechen an und die Ventile öffnen. Nur Ventil 0 reagiert nicht. In der Control-App wird es als aktivgeschaltet angezeigt, reagiert aber nicht. Da die Anschlüsse bei allen Ventilen identisch ist, sollte die Verkabelung passen. Muss ich da noch irgendwas separat aktivieren?
Gruß Eike
9. Jun. 2020 um 14:42
Hallo,
ich komme mit der Adressiererei über Radiohead nicht (mehr) klar.
Ich möchte 4 Systeme betreiben und diese einzeln ansprechen
Mit der alten Version habe ich es einfach hinbekommen, jedem System eine eigene Adresse zu geben und dann über diese Adresse jeweils einzeln anzusprechen. Die Softwareänderungen (in der config.h), die ich damals gemacht hatte, funktionieren nun leider nicht mehr.
Ich vermute, daß ich mich zu blöd anstelle oder einen Denkfehler habe.
Es ist dem System völlig egal, was ich in der config.h für Werte für RH_OWN_ADDR und RH_SERVER_ADDR eintrage. Es fühlen sich immer alle Systeme gemeinsam angesprochen. Ich brauche daher eine Idee, was ich wo eintragen muß, um jedes der 4 System einzeln anzusprechen.
Im Augenblick geht die “Konfigurationsoberfläche” nur, wenn ich jeweils nur ein System einschalte, dieses konfiguriere, danach nur das nächste einschalte (mit der gleichen Adress-Kombination), dieses konfiguriere, …..
Ich habe wohl irgendwie einen Corona-Blackout mit zugehörigem Hirnschwund Wahrscheinlich ist die Lösung ganz banal aber ich stehe gerade total auf der Leitung.
Gruß
Peter
9. Jun. 2020 um 20:03
Hi, in der Version 2 können die Adressen über die Control-App eingestellt werden.
Die Adressen aus der `config.h` sind die Standards, die beim ersten Start und beim EEPROM-Reset geladen werden. Bei jedem normalen Start des Controllers werden dann die eingestellten Adressen aus dem EEPROM geladen, auch wenn der Controller mit anderen Einstellung in der `config.h` neu geflasht wurde.
14. Jun. 2020 um 10:12
Hallo,
ich bekomme es absolut nicht hin, daß jedes meiner Bewässerungssysteme eine eigene Adresse erhält. Ich muß da irgendwo einen groben Denkfehler haben, über den ich jedes Mal stolpere.
Könntest Du bitte eine “Schritt-für-Schritt-Anleitung” schreiben, wie ich mehreren Systemen jeweils eine andere Adresse beibringe und diese im System speichere?
Ich schaffe es nur, eine Änderung der Adresse einzugeben um danach das System sofort nicht mehr ansprechbar zu haben. Auch ein kompletter Neuistart der Bedienoberfläche hilft leider nicht weiter. Nach einem Ausschalten und wieder einschalten ist das System wenigstens wieder unter der default-Adressen ansprechbar, also wenigstens nicht ganz tot…
Ich komme einfach nicht weiter.
Vielen Dank schonmal für die Hilfe!
Peter
16. Jun. 2020 um 18:59
Also…
1) Controller mit den Standardeinstellungen flashen.
2) Über die Control-App die Adressen anpassen und die Einstellungen senden. Daraufhin ist das System erst mal nicht mehr erreichbar, da die neue Adresse sofort übernommen wird. Nach einem Reset hat es wieder die alte, da die Einstellungen hier noch nicht in den EEPROM gespeichert werden.
3) In der Control-App die Verbindung trennen.
4) Adresse des Systems in der Control-App auf die neue Adresse ändern und wieder verbinden.
5) (optional) Einstellungen vom System laden und prüfen, dass alles passt.
6) Aktuelle Einstellungen in den EEPROM speichern, damit auch nach einem Neustart die geänderte Adresse erhalten bleibt.
Hoffe das hilft dir weiter. 🙂
12. Jun. 2020 um 20:15
Hallo Peter,
Ich hab versucht dein super Projekt nachzubauen.
Nur zwei Unterschiede: ich verwende nur zwei 18650 und verwende den NodeMcu mit Tasmota.
Nun hab ich leider das Problem das das ganze mit dem 12V nicht funktioniert. Der Step-up Wandler quietscht/piept und der NodeMcu stürzt aber oder startet nicht mehr . Strom sollte doch eigentlich reichen? Hast du evtl. Ideen?
16. Jun. 2020 um 19:07
Das klingt fast so, als ob du irgendwo einen Kurzschluss drin hast, oder die 12V irgendwo ankommen, wo sie nicht hingehören. Der Controller darf nur mit maximal 5V versorgt werden. Höhere Spannungen können ihn beschädigen.
19. Jun. 2020 um 13:11
Hallo Peter,
ich habe es von null auf nochmal neu aufgebaut, da hat es soweit . funktioniert, bis auf Ventil 0, alle anderen haben gearbeitet. Ventil null wurde in der Control-App aber als arbeitend angezeigt. Am Ventil kommt keine Spannung an. Ich habe nochmal einen neuen Arduino angeschlossen, weil ich befürchtet hatte, dass ich irgendwo einen kurzschluss hatte. Also alles nochmal durchgemessen und geprüft. Alles ok. Jetzt laufen Ventile 2 und 3. Bei Ventil 0 und 1 passiert nichts, die LEDs leuchten nicht und es schaltet nicht. In der Control-App kann ich sie arbeiten sehen, am Ventil messe ich keine Spannung. Hast Du eine Idee, was nicht passt? Den Arduino habe ich auf Stecksockeln zum schnellen Austausch. Ich habe das Programm schon zweimal neu aufgespielt, ohne Veränderung.
Gruß
Eike
20. Jun. 2020 um 21:55
Hmm… das klingt als würde der zugehörige Transistor nicht durchschalten.
Kannst du im eingeschalteten Zustand an der Basis des Transistors (mittleres Beinchen) eine Spannung gegenüber GND messen? Vor dem Basiswiderstand gemessen müssten das 5 V sein und direkt an der Basis ca. 0,7 V.
Alternativ könntest du mal die Ventile untereinander tauschen, um zu testen, dass diese normal funktionieren.
23. Jun. 2020 um 18:13
Hallo Peter,
klasse Projekt! Ich habe es tatsächlich geschafft es nachzubauen – trotz sehr beschränkter Elektronikkentnisse. Hier ist mal der Aufbau für vier Ventile und Sensoren. Funktioniert sogar (fast) alles. 🙂
https://imgshare.io/image/N5vR7d
Zwei Probleme habe ich noch:
– Der Temperatursensor meldet nix mehr zurück. (-99°) Ich hatte einen DHT11 dran, der ging eine Zeit lang, und dann kam nix mehr. Ich habe auch einen DS18B20 gestestet, auch nix. Mal den Datenpin gewechselt (der DHT11 hatte keine Pinbelegung, vlt haben meine Versuche ja den Pin am Pro Mini zerlegt), auch nix. Natürlich immer den passenden Sketch hochgeladen.
– Das Steuerprogramm meldet sehr oft “Error sending message”, führt dann aber trotzdem das Kommando aus. Meistens. Sehr verwirrend.
Und eine abschließende Frage:
Gibt es eine Möglichkeit den 433MHz Empfänger direkt an einen Pi anzuschließen? Ich würde nämlich gerne alle nötige Software auf den Pi packen, auch den Node Server. Dafür dann extra einen Arduino per USB an den Pi anzuschließen, nur um die Daten vom 433MHz Empfänger auszulesen finde ich etwas overkill.
Ich habe zwar WLAN Empfang aus meinem Garten, aber die 433MHz kommen nicht so weit. Dann könnte ich den Pi als Komplettserver im Garten laufen lassen.
Auf jeden Fall ein tolles Projekt. Habe viel geflucht, aber auch viel Spaß beim Zusammenbau gehabt. Danke dafür!
Kai
23. Jun. 2020 um 19:43
Ah. Ok. Wenn man den 10K Widerstand vergisst, scheint das nicht gut zu sein. Eingebaut, und zumindest der DS18B20 liefert eine Temperatur. Yay! Die DHT11 sind vermutlich tot. Egal, morgen kommt ein DHT22.
Jetzt noch das Pi Problem lösen, und ich bin glücklich wie eine Muschel bei Flut 🙂
24. Jun. 2020 um 8:43
Hallo Kai,
freut mich, dass es soweit bei dir funktioniert und dir Spaß gemacht hat.
Das sieht super aus! Darf ich das Foto von deinem Aufbau zusammen mit deinem Namen in den Beitrag oben mit einbauen? 🙂
Ja, die DHTs und auch die DS18B20 brauchen den PullUp für die Datenleitung. Sonst ist klar, dass es nicht funktioniert, wie du ja schon selbst festgestellt hast.
Der RadioHead Funk nutzt (in diesem Fall) eine bidirektionale Kommunikation, bei der jede gesendete Nachricht mit einem Ack bestätigt wird. Wenn der Befehl ankam, aber das Ack nicht zurück zum Sender der Nachricht kommt, dann wird der Befehl ausgeführt und in der Control-App erscheint die beschriebene Meldung “Error sending message”.
Vielleicht hilft es hier schon, die Antennen etwas anders auszurichten. Alternativ kann ich noch je eine meiner Dipol-Antennen für die Sender und Empfänge empfehlen, die ich nun schon ein paar Jahre in meiner Zentrale und seit kurzem auch an dem Bewässerungssystem einsetze.
Grundlegend sollte es möglich sein, die 433 MHz Module direkt an den Pi anzuschließen, jedoch hatte ich bei meinen Versuchen damit mehr Probleme als Erfolge. Deshalb habe ich dann die einfachere Variante mit dem Arduino Nano als Gateway gewählt.
In der RadioHead Library gibt es auch ein Beispiel für die Nutzung auf einem RasPi, allerdings für andere Funkmodultypen. Wenn du die Funkmodule direkt an Pi anschließen und weiter die Node.js Software nutzen möchtest, dann müsstest du dir in C++ ein kleines Gateway-Programm schreiben, dass die Funkmodule an den GPIOs handelt und die RadioHead-Nachrichten an eine virtuelle serielle Schnittstelle (Stichwort `socat`) weitergibt. Diese virtuelle Schnittstelle kannst du dann in der Control-App etc. nutzen.
25. Jun. 2020 um 20:14
Hallo Peter,
das Bild kannst du gerne mit meinem Namen verwenden. Freut mich, dass dir der Aufbau gefällt.
Die Empfänger habe ich gegen RXB6 ausgetauscht. Vorher waren H3V4F drin. Lustigerweise hat der Empfang auf dem Nano immer geklappt, nur Daten zum Pro Mini schicken war ein Krampf. Jetzt komme ich (je nach Lage der Antennen – 17 cm Drähte) gut 10 Meter weit. Das reicht mir völlig. Vielleicht gebe ich dem Sender mal 12V und schaue, ob es raucht.
Die “PurePi”-Lösung klingt interessant. Die werde ich mal in Angriff nehmen, wenn das System soweit läuft. Im Moment sind mir alle Feuchtesensoren verstorben. Der Beste hat 2 Stunden geschafft, dann kamen immer nur noch 0.3V zurück. Tja, wer billig kauft, kauft zweimal.
Pro Tipp: Bei nicht angeschlossenen Sensoren aber aktivierten Kanälen (falls man nur das Ventil testen will) die Datenleitung mit Masse verbinden. Sonst kommen da nur Zufallswerte raus.
27. Jun. 2020 um 18:09
Achtung: Nicht alle Sender vertragen 12 V.
Das “Problem” sind meiner Erfahrung nach auch meistens die Empfänger und nicht die Sender.
Mit den Sensoren hatte ich bis auf einen defekten Sensor in den nun fast drei Jahren keine Probleme. Ich habe die bei mir aber zur Sicherheit auch fast komplett in Schrumpfschlauch eingeschrumpft (siehe Foto der Sensoren oben), sodass der obere Teil der Elektronik vor Wasser geschützt sein sollte.
Dein Foto habe ich oben am Ende des Beitrags eingebaut. Vielen Dank dafür! 🙂
8. Aug. 2020 um 17:57
Hallo Peter
Cooles Projekt! Vor allem die Hardware habe ich als “Inspiration” für meine eigene Bewässerungsanlage benutzt.
Was sind deine/eure Erfahrungen bzgl. Einfluss der Temperatur bzw. des Wetters und der Kabellänge auf die Messwerte?
Meine Anlage ist komplett Outdoor, Sensoren bis ca. 1-2cm unter der Kerbe mit Schrumpfschlauch isoliert, alle anderen Komponenten in Kunststoffboxen vor der Witterung geschützt.
Eines der Sensoren hat ein ziemlich langes Kabel (>10m). Auch wenn der Boden voller Wasser ist, sind die Messwerte nie unter ca. 470.
Das stört mich weniger. Allerdings scheint die Temperatur (oder das Wetter i.A.) einen ziemlich grossen Einfluss auf die Messwerte zu haben.
An Tagen mit 17º-20º sind die Messwerte so hoch im Vergleich mit Tagen mit 30º und mehr, dass die Sensoren praktisch nie im Bereich “trocken” kommen.
Wenn ich die Werte für schlechtes Wetter anpasse, dann ist die Anlage an heissen Tagen praktisch ständig an.
Ich überlege gerade, noch einen Temperatursensor anzuschliessen und dann die Messwerte zu korrigieren. Vllt stimmt aber auch nur etwas mit meiner Verkabelung nicht.
12. Aug. 2020 um 11:44
Hallo Christian,
die Kabellänge sollte dabei nahezu keine Rolle spielen, solange es nicht mehrere zig Meter sind. Meinen Erfahrungen nach liefern die Sensoren teilweise auch sehr unterschiedliche Werte, selbst wenn sie direkt nebeneinander im Boden sind. Dies lässt sich aber in der Software recht gut mit unterschiedlichen Triggerwerten kompensieren.
Die Abhängigkeit von der Temperatur ist ein guter Punkt, wobei ich hier eher die Luftfeuchtigkeit im Verdacht hätte. Ich habe aktuell aber nur einen DS18B20 Temperatursensor im Einsatz, wobei hier aber auch eine gewisse Abhängigkeit erkennbar ist:
16. Aug. 2020 um 8:08
Hallo Peter
Unterschiedliche Triggerwerte für jeden einzelnen Sensor habe ich bereits vorgesehen. Vllt hast du aber recht und die Luftfeuchtigkeit spielt auch eine grosse Rolle. Zusammen mit deinem Diagramm (vielen Dank dafür) hat mich das jetzt überzeugt Ich werde noch einen Temperatur- und Feuchtigkeitssensor anbinden und das ganze beobachten.
2. Mai. 2021 um 18:17
Hallo Peter,
ich versuche, di eControl-App zu bauen, bekomme aber folgenden Fehler:
npm clean-install
npm WARN prepare removing existing node_modules/ before installation
> @serialport/bindings@8.0.8 install D:Downloadsauto-watering-mastercontrolnode_modulesserialportnode_modules@serialportbindings
> prebuild-install –tag-prefix @serialport/bindings@ || node-gyp rebuild
prebuild-install WARN install No prebuilt binaries found (target=14.16.1 runtime=node arch=x64 libc= platform=win32)
D:Downloadsauto-watering-mastercontrolnode_modulesserialportnode_modules@serialportbindings>if not defined npm_config_node_gyp (node “C:Program Filesnodejsnode_modulesnpmnode_modulesnpm-lifecyclenode-gyp-bin\….node_modulesnode-gypbinnode-gyp.js” rebuild ) else (node “C:Program Filesnodejsnode_modulesnpmnode_modulesnode-gypbinnode-gyp.js” rebuild )
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
Bibliothek “D:Downloadsauto-watering-mastercontrolnode_modulesserialportnode_modules@serialportbindingsbuildRe
leasebindings.lib” und Objekt “D:Downloadsauto-watering-mastercontrolnode_modulesserialportnode_modules@serialport
bindingsbuildReleasebindings.exp” werden erstellt.
bindings.vcxproj -> D:Downloadsauto-watering-mastercontrolnode_modulesserialportnode_modules@serialportbindingsbui
ldRelease\bindings.node
> serialport@8.0.7 postinstall D:Downloadsauto-watering-mastercontrolnode_modulesserialport
> node thank-you.js
Thank you for using serialport!
If you rely on this package, please consider supporting our open collective:
> https://opencollective.com/serialport/donate
> @serialport/bindings@2.0.8 install D:Downloadsauto-watering-mastercontrolnode_modules@serialportbindings
> prebuild-install –tag-prefix @serialport/bindings@ || node-gyp rebuild
prebuild-install WARN install No prebuilt binaries found (target=14.16.1 runtime=node arch=x64 libc= platform=win32)
D:Downloadsauto-watering-mastercontrolnode_modules@serialportbindings>if not defined npm_config_node_gyp (node “C:Program Filesnodejsnode_modulesnpmnode_modulesnpm-lifecyclenode-gyp-bin\….node_modulesnode-gypbinnode-gyp.js” rebuild ) else (node “C:Program Filesnodejsnode_modulesnpmnode_modulesnode-gypbinnode-gyp.js” rebuild )
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
d:downloadsauto-watering-mastercontrolnode_modules@serialportbindingssrcserialport.cpp(329): error C2661: “v8::Object
::Set”: Keine überladene Funktion akzeptiert 2 Argumente [D:Downloadsauto-watering-mastercontrolnode_modules@serialport
bindingsbuildbindings.vcxproj]
d:downloadsauto-watering-mastercontrolnode_modules@serialportbindingssrcserialport.cpp(330): error C2661: “v8::Object
::Set”: Keine überladene Funktion akzeptiert 2 Argumente [D:Downloadsauto-watering-mastercontrolnode_modules@serialport
bindingsbuildbindings.vcxproj]
d:downloadsauto-watering-mastercontrolnode_modules@serialportbindingssrcserialport.cpp(331): error C2661: “v8::Object
::Set”: Keine überladene Funktion akzeptiert 2 Argumente [D:Downloadsauto-watering-mastercontrolnode_modules@serialport
bindingsbuildbindings.vcxproj]
d:downloadsauto-watering-mastercontrolnode_modules@serialportbindingssrcserialport.cpp(378): error C2661: “v8::Object
::Set”: Keine überladene Funktion akzeptiert 2 Argumente [D:Downloadsauto-watering-mastercontrolnode_modules@serialport
bindingsbuildbindings.vcxproj]
gyp ERR! build error
gyp ERR! stack Error: `C:Program Files (x86)Microsoft Visual Studio2017BuildToolsMSBuild15.0BinMSBuild.exe` failed with exit code: 1
gyp ERR! stack at ChildProcess.onExit (C:Program Filesnodejsnode_modulesnpmnode_modulesnode-gyplibbuild.js:194:23)gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)
gyp ERR! System Windows_NT 10.0.19041
gyp ERR! command “C:\Program Files\nodejs\node.exe” “C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js” “rebuild”
gyp ERR! cwd D:Downloadsauto-watering-mastercontrolnode_modules@serialportbindings
gyp ERR! node -v v14.16.1
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @serialport/bindings@2.0.8 install: `prebuild-install –tag-prefix @serialport/bindings@ || node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @serialport/bindings@2.0.8 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
Kannst du mir da weiterhelfen?
2. Mai. 2021 um 18:36
Hallo Georg,
ich denke das hängt mit deiner Node.js Version 14.x und dem Modul `serialport` in Version 8.x zusammen.
Auf die Schnelle fallen mir zwei Möglichkeiten ein:
a) Im `control`-Verzeichnis folgendes ausführen, um neuere Versionen der Module zu installieren: `npm install -s serialport@9.0.7 radiohead-serial@4.2.0`
Anschließend noch mal `npm install` um die restlichen Module zu installieren.
b) Node.js v12.x nutzen.
Dann sollte es denke ich funktionieren.
2. Mai. 2021 um 18:53
Hallo Peter,
Option a) hat das Problem behoben, vielen Dank!
3. Mai. 2021 um 22:12
Hallo Peter,
jetzt muss ich doch um Hilfe bitten.
Hab alles aufgebaut und alles funktioniert bis auf die Magnetventile.
Diese schalten nicht frei.
Transistoren sind richtig herum drin.
Collector –> Ventil
Emitter –> Ground
Schalten auch frei, an der Base kommen so 0.6V an.
12V liegen an den Ventilen an wenn ich auf normalen Ground messe.
Ich benutze keine Batterie sondern ein 5V Netzteil mit 3A, sollte reichen.
Mein Problem ist, beim Schalten fließen über den Punkt vor dem Kollektor nur ~ 3V das reicht für die LED aber nicht fürs Ventil.
Kann es sein das der Transistor irgendwie nicht ganz aufmacht?
Bin auch nur ein begeisterter Bastler…
Für jegliche Hilfe bin ich sehr dankbar.
Grüße Thomas
5. Mai. 2021 um 10:27
Hallo Thomas,
das klingt als würden deine Transistoren nicht richtig durchschalten. Welchen Typ hast du hier verwendet? Ein einfacher BC337 z.B. sollte funktionieren.
Du kannst mal versuchen den Basiswiderstand vom Transistor von 4,7 kOhm auf z.B. 2,2 kOhm zu verkleinern. Dann sollte der Transistor auf jeden Fall mehr auf machen.
Funktioniert dein Ventil, wenn du den Transistor überbrückst, also das Ventil direkt an 12 V und GND hängst?
13. Mai. 2021 um 20:52
Hi Peter,
danke für deine Antwort, bin gerade erst wieder zum testen gekommen.
Ich denke ich hab das Problem, bräuchte aber dennoch Hilfe oder/und eine Empfehlung.
Also Das Magnetventil schaltet wenn ich den Transistor überbrücke.
Getestet mit einem 5V2A Netzteil und einem 5V3A und siehe da, 5V2A schaltet gar nicht.
–> kompletes System braucht insgesamt über 10W
Hab andere Ventile da ich mit Regentonne und Gravitation arbeiten möchte.
Dachte schon das die mehr Strom brauchen aber nicht über 10W (keine Angabe auf den Ventilen). Tun sie aber wie es scheint. Somit sollte der Transistor auch mindestens 1A können.
Habe im Augenblick die BC337 drin bräuchte aber vermutlich welche die ein wenig größer dimensioniert sind.?
Meiner Leihenkentniss nach müsste ich ja sonst nichts ändern oder?
Hast du eine Transistorempfehlung?
Hab einen parallelen Minimalaufbau ohne LED etc nur GND Transistor Arduino und 12V bzw. 5V aufgebaut und die Spannung ist beim Schalten wieder etwa 3V zwischen Transistor und GND.
Grüße Thomas
15. Mai. 2021 um 10:08
Über 1 A ist schon recht ordentlich. Sofern du einen Step-Up von 5 V auf 12 V verwendest, solltest du auch schauen ob der diese Leistung mitmacht ohne zu heiß zu werden.
Die BC337 Transistoren sind laut Datenblatt für einen Kollektorstrom von bis zu 0,8 A ausgelegt. Kurzzeitig geht sicherlich auch mehr, aber sollte vermieden werden.
In dem Bereich würde ich schon eher auf einen MOSFET zurückgreifen, da diese deutlich weniger Verluste haben. Spontan fallen mir hier der IRLZ 34N und IRLZ 44N ein. Die können bis zu 30 bzw. 47 A schalten.
Der Schaltplan dafür würde dann so aussehen:
.
Ansonsten musst du nichts weiter ändern.
21. Mai. 2021 um 14:41
Hallo Peter,
tausend Dank, funktioniert. Hab auch ein seperates 12V Netzteil.
Mit dem DC-DC Wandler, hat das Ventil zwar geschalten aber gleich wieder geschlossen 1-2 Sekunden.
Mit einem seperaten 12V 2A Netzteil funktioniert jetzt alles.
Danke!
Beste Grüße Thomas
20. Jun. 2021 um 11:45
Hallo Peter,
System nachgebaut mit Arduino Nano, soweit alles OK.
Ich scheitere an Control unter Win 10 ” npm start
Vieleicht gibt es eine einfache Lösung.
Herzlichen Dank in voraus
LG
Günter
> auto-watering-control@2.3.0 start
> node index.js
D:controlnode_modulesbindingsbindings.js:135
throw err;
^
Error: Could not locate the bindings file. Tried:
→ D:controlnode_modulesserialportnode_modules@serialportbindingsbuildbindings.node
→ D:controlnode_modulesserialportnode_modules@serialportbindingsbuildDebugbindings.node
→ D:controlnode_modulesserialportnode_modules@serialportbindingsbuildReleasebindings.node
→ D:controlnode_modulesserialportnode_modules@serialportbindingsoutDebugbindings.node
→ D:controlnode_modulesserialportnode_modules@serialportbindingsDebugbindings.node
→ D:controlnode_modulesserialportnode_modules@serialportbindingsoutReleasebindings.node
→ D:controlnode_modulesserialportnode_modules@serialportbindingsReleasebindings.node
→ D:controlnode_modulesserialportnode_modules@serialportbindingsbuilddefaultbindings.node
→ D:controlnode_modulesserialportnode_modules@serialportbindingscompiled16.3.0win32ia32bindings.node
→ D:controlnode_modulesserialportnode_modules@serialportbindingsaddon-buildreleaseinstall-rootbindings.node
→ D:controlnode_modulesserialportnode_modules@serialportbindingsaddon-builddebuginstall-rootbindings.node
→ D:controlnode_modulesserialportnode_modules@serialportbindingsaddon-builddefaultinstall-rootbindings.node
→ D:controlnode_modulesserialportnode_modules@serialportbindingslibbindingnode-v93-win32-ia32bindings.node
at bindings (D:controlnode_modulesbindingsbindings.js:126:9)
at Object. (D:controlnode_modulesserialportnode_modules@serialportbindingslibwin32.js:1:36)
at Module._compile (node:internal/modules/cjs/loader:1109:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1138:10)
at Module.load (node:internal/modules/cjs/loader:989:32)
at Function.Module._load (node:internal/modules/cjs/loader:829:14)
at Module.require (node:internal/modules/cjs/loader:1013:19)
at require (node:internal/modules/cjs/helpers:93:18)
at Object. (D:controlnode_modulesserialportnode_modules@serialportbindingslibindex.js:6:22)
at Module._compile (node:internal/modules/cjs/loader:1109:14) {
tries: [
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\build\bindings.node’,
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\build\Debug\bindings.node’,
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\build\Release\bindings.node’,
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\out\Debug\bindings.node’,
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\Debug\bindings.node’,
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\out\Release\bindings.node’,
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\Release\bindings.node’,
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\build\default\bindings.node’,
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\compiled\16.3.0\win32\ia32\bindings.node’,
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\addon-build\release\install-root\bindings.node’,
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\addon-build\debug\install-root\bindings.node’,
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\addon-build\default\install-root\bindings.node’,
‘D:\control\node_modules\serialport\node_modules\@serialport\bindings\lib\binding\node-v93-win32-ia32\bindings.node’
]
}
21. Jun. 2021 um 8:40
Hallo Günter,
das liegt bzw. lag an einer alten Version vom verwendeten `serialport` Modul.
Ich habe die Abhängigkeiten jetzt aktualisiert. Mit der aktuellen Version 2.3.1 (die du über den Link oben herunterladen kannst) sollte alles funktionieren. 🙂
22. Jun. 2021 um 19:20
Herzlichen Dank für die rasche Antwort. Werde es am Wochenende mal ausprobieren.
LG
Günter
23. Jun. 2021 um 19:41
Hallo Peter,
auch eine deinstallation von node und neuinstallation hat keinen Efolg gebracht.
npm start endet immer mit Fehler.
control ist die neueste Version (2.3.1)
für eine erneute hilfe währe ich dankbar,
Herzlichen Dank in voraus
LG
Günter
Log Datei von nodes (npm start)
24. Jun. 2021 um 8:27
Die Infos in der Logdatei sagen leider nichts über den eigentlichen Fehler aus.
Hast du vor dem `npm start` ein mal `npm install` ausgeführt, damit die Node.js Module installiert werden?
Ansonsten poste bitte mal die direkte Ausgabe von `npm start`. Da sollte der Fehler drin erkennbar sein.
26. Jun. 2021 um 17:38
Hallo,
kann es sein, dass die Bibliothek DHTStable Version 1.0.0 (also der aktuellsten Version) nicht richtig mit der aktuellen Version Deiner Software funktioniert? Wenn man diese Version verwendet (in das Projekt einbindet), läuft das kompilieren immer auf einen Fehler bei #include , gleich am Anfang der Datei globals.h.
Mit der Version 0.2.9 von DHTStable funktioniert es noch. Oder habe ich irgendetwas übersehen?
Vielen Dank für das Projekt!
Peter
27. Jun. 2021 um 19:45
Hi, ja scheinbar wurde mit der v1.0.0 von DHTStable der Name der Klasse geändert.
Danke für die Info! Ich schau mir das die nächsten Tage genauer an und passe meine Software entsprechend an.
28. Jun. 2021 um 14:33
Ab sofort ist die neue Version 2.3.2 verfügbar. Hier sind alle Libs auf dem aktuellen Stand und es sollte alles problemlos funktionieren. 🙂
14. Jul. 2021 um 10:48
Hallo Peter,
vielen Dank für deine Anleitung. Ich habe dein System nachgebaut. Leider kann ich die Magnetventile nicht steuern. Ich habe, wie in deiner Schaltung 2 DC-DC-Step up Converter (MT3608) für 12V und 5V mit 3X 18650 Zellen parallel (2600mAh). Nun wollte ich die Magnetventile testen. Diese müssten ja eigentlich öffnen, wenn ich direkt am Ventil 12V anlege. Leider tut sich hierbei nichts. Der Strom den ich aus dem Converter messe beträgt aktuell 130mA. Ich hoffe Du kannst mir weiterhelfen. Vielen Dank!
14. Jul. 2021 um 11:04
Hallo Thomas,
manche Magnetventile benötigen deutlich mehr Strom. Ein ähnlicher Fall ist weiter oben in den Kommentaren bereits beschrieben.
Versuch mal die Spannung zu messen, wenn du die 12V direkt am Ventil anlegst. Wenn diese dann deutlich kleiner wird, dann reicht der Strom vom DC-DC Konverter für deine Ventile leider nicht aus.
14. Jul. 2021 um 11:37
Hallo Peter,
die Spannung geht auf 4V runter. Kannst Du mir einen Konverter empfehlen mit dem es funktionieren sollte?
15. Jul. 2021 um 7:43
Direkte Empfehlungen dafür habe ich nicht. Generell müsstest du auf größere Leistungsangaben achten und vermutlich haben diese Konverter dann auch Kühlkörper.
Allgemein solltest du dabei aber auch beachten, dass der Strom aus den Akkus dann etwa 3 bis fast 4 mal so hoch ist, da die Leistung auf beiden Seiten vom Konverter die gleiche ist (wenn man die Verluste jetzt mal vernachlässigt). Hier wäre auf jeden Fall noch mal ein Blick in das Datenblatt deiner Akkus bzgl. des maximalen Entladestroms ratsam.
Alternativ wären vlt. andere Magnetventile eine Überlegung wert. 😉
16. Apr. 2023 um 15:44
Hallo Peter, ich habe das selbe Problem mit dem Spannungsabfall unter last auf 4V.
Meine Magnetventil wird geschaltet und auch die LED’s leuchtet auf. Jedoch wird mein StepUp Converter innerhalb sehr kurzer Zeit, extrem heiß.
Schließe ich das Magnetventil direkt an ohne Transistor schaltung, habe ich das selbe Problem.
Der Verwendete StepUp: XL6009
Magnetventil:
https://www.berrybase.de/kunststoff-wasser-magnetventil-12v-1/2-nominal
Batterien:
https://www.berrybase.de/search?sSearch=digibuddy+18650+Li-Ion+Akku+mi
16. Apr. 2023 um 16:05
Dann wird wohl zu viel Strom für den StepUp fließen. Hast du den Strom mal gemessen?
Im Datenblatt zu deinen Ventilen steht drin, dass die auch mit 6 V betrieben werden können und dann sogar weniger Strom (160 mA anstatt 320 mA bei 12 V) brauchen.
Regel doch mal deinen StepUp auf 6 V und schau was dann passiert.
16. Apr. 2023 um 18:22
Vielen Dank, mit 6Volt öffnen die Ventile sauber und alles bleibt kalt. Über den StepUp fließen jetzt nur noch 220 mA (Ventil + 2 LED’s).
Deine Anleitung hatt mir sehr geholfen bisher. Bin nemlich Fachfremd was Elektrotechnik betrifft, nur die Programmierung als Softwareentwickler fällt mir leicht.
1. Aug. 2021 um 21:00
Hallo Peter,
ich habe ein Problem mit der Funkverbindung. Im Browser kommt immer 2021-08-01T18:56:32.028Z error sending message , der Arduino des Bewässerungssystem blinkt Lang-Schnell-Schnell gefolgt von SehrSchnell-SehrSchnell. Wenn ich das Funkmodul am Pc deaktiviere und den Arduino neu starte, blinkt er dreimal Lang-Schnell-Schnell. Hast du eine Idee, was da der Fehler sein könnte oder wie ich ihn weiter eingrenzen kann?
3. Aug. 2021 um 8:16
Hi, lang-kurz-kurz bedeutet “Fehler bei Initialisierung des 433 MHz Funk”. Da klappt also was mit dem Funkmodulen nicht.
Zweimal sehr kurz heißt wiederum, dass der Arduino eine Nachricht (in deinem Fall vom PC) empfangen hat. Eigentlich sollte diese Kombination der beiden Meldungen nahezu unmöglich sein, da der Arduino bei einem Fehler im Init in eine Endlosschleife mit dem lang-kurz-kurz Blinkcode gehen sollte.
Hast du irgendwas an der Software geändert?
4. Aug. 2021 um 9:40
Hi,
ich habe jetzt mal die Blinkcodes in rh.cpp nacheinander auskommentiert und der lang-kurz-kurz scheint der Sendefehler zu sein, obwohl der eigentlich lang-kurz-lang sein sollte. Daraus schließe ich jetzt, dass der Bewäserungs-Arduino etwas empfängt, das Senden aber nicht klappt. Vermutlich funktioniert dann der Sender nicht oder der Empfänger vom Funkmodul am PC. Ich habe ein Ersatz-Empfänger-Sender-Paar bestellt, damit ich besser debuggen kann.
4. Aug. 2021 um 12:03
Hmm… also meinem originalen Code nach ist der Sendefehler eindeutig lang-kurz-lang. In der `rh.cpp` Zeile 261 wird bei einem Sendefehler `blinkCode(BLINK_CODE_RH_SEND_ERROR)` aufgerufen und in `actions.h` Zeile 16 ist die Definition `#define BLINK_CODE_RH_SEND_ERROR BLINK_LONG, BLINK_SHORT, BLINK_LONG`.
Als ganz einfache Idee: Lass dir vom Arduino über die Serielle Schnittstelle ein paar Infos augeben (z.B. bei einem Sendefehler). Dann siehst du direkt wo er Mist baut.
Zu den Empfängern: Besonders die billigen Empfänger sind meiner Erfahrung nach oft so schlecht, dass sie nur sehr starke Signale auswerten können und deshalb teilweise nur wenige Zentimeter an Reichweite schaffen.
5. Aug. 2021 um 16:42
Hallo,
kann es sein, daß es vor kurzem ein Update von Windows gab, das hier Probleme macht? Ich habe ähnliche Schwierigkeiten wie mein Vorredner, vor etwa einer Woche ging’s noch, jetzt kommt nur noch das nach dem “Connect” im Browser :
…
2021-08-05T14:25:50.778Z error sending message
2021-08-05T14:25:47.976Z error sending message
2021-08-05T14:25:45.448Z connected to the serial-radio gateway via COM6, baud 9600
Ich habe drei dieser Systeme im Einsatz, keines ist mehr ansprechbar. Es gab keine Änderungen am System bei mir.
npm (im DOS-Fenster) ist vorher (also vor etwa einer Woche) ohne Fehler gestartet, schreibt aber jetzt diesen Fehlertext:
> auto-watering-control@2.3.0 start
> node index.js
Control app started!
Now open http://127.0.0.1:3000/ in your browser.
2021-08-05T14:36:20.800Z connected to the serial-radio gateway via COM6, baud 9600
2021-08-05T14:36:23.795Z error sending message
2021-08-05T14:36:25.935Z error sending message
2021-08-05T14:36:29.133Z error sending message
…
Hast Du eine Idee?
Gruß, Peter
14. Aug. 2021 um 9:20
Hallo,
Fehler durch “probieren” gefunden. Die Sender sind meist mit einer Versorgung von 3,3V angegeben, aber es gibt wohl verschiedene Modelle: anderer Hersteller gleiche Bezeichnung, aber andere Versorgungsspannung. Meine Sendermodule brauchen mindestens 5V. Dann funktioniert es auch. Jetzt weiß ich auch, was mit “ähnlich” in der Produktbeschreibung gemeint ist.
Gruß, Peter
16. Aug. 2021 um 19:18
Danke für deine Rückmeldung. Bin leider bisher nicht dazu gekommen zu antworten. 🙁
Meine Sendemodule brauchen auch 5V, manche sind auch mit 5 bis 12V angegeben. Die ganz einfachen Module habe ich bislang noch nicht mit 3,3V gesehen.
Hauptsache es geht jetzt 😉
17. Aug. 2021 um 8:14
Hallo Peter,
es handelt sich um diese Module (die gibt es von verschiedensten Anbietern):
https://www.ebay.de/itm/252713861056?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649
Ganz unten in der Beschreibung ist die Spannungsangabe:
Sender: 2.0V-3.6V
Empfänger: 3.0V-5.0V
Reichweite bzw. Zuverlässigkeit der Module ist sehr “wechselhaft”. Ich habe insgesamt 6 Paare in verschiedensten Bastelprojekten im Einsatz, manche funktionieren ganz gut, andere mittelprächtig. Es scheint eine große Streuung zu geben. Es sind aber auch unterschiedliche Module (also von unterschiedlichen Verkäufern), die allerdings wirklich identisch aussehen aber wohl unterschiedlich sind, sowohl in der Angabe der Versorgungsspannung wie auch in der Qualität.
In Ebay sind aber aktuell fast nur die Module mit der niedrigeren Versorgungsspannung zu finden.
Gruß,
Peter
26. Feb. 2023 um 23:07
Hallo Peter und andere Projektbegeisterte
Zuerst muss ich Dir ein Kompliment machen, denn das ist wirklich ein tolles Projekt von Dir.
Für uns ist Dein Projekt ideal, da es einen autake Bewässerung erlaubt.
Das ist für unser Ferienhäuschen ideal, da wir gerne den Strom abstellen, wenn wir nicht vor Ort sind.
Gerne hätte ich ein paar Fragen zu den Bauteilen:
– 5V 4W Solarzelle
– Kapazitive Bodenfeuchtigkeitssensoren
– DC-Boost-Konverter
– Transistoren
Hättest Du bitte einen Bauteilvorschlag resp. einen Link?
Wie lange können die Kabel der kapazitive Bodenfeuchtigkeitssensoren sein?
Hättest Du oder jemand Interesse uns eine komplette, zusammengebaute und aufgesetzte Steuerung (inkl. Box, 4x 12 V Magnetventile, 4x Feuchtigkeits- und 1x Temperatursenor, Batterien, Solarzelle , …) zu bauen?
Was wäre der Gesamtpreis?
Gruss & Dank
Dario
7. Mrz. 2023 um 19:10
Hallo Peter,
ich habe versucht, Dein Versuch zu bauen, leider bekomme ich diesen Fehler:
”
2023-03-07T17:59:26.234Z connected to the serial-radio gateway via /dev/ttyUSB0, baud 9600
2023-03-07T17:59:28.694Z error sending message ”
1. ich habe den RadioHeader mit Raspberry angeschlossen.
2. für meinen Zweck habe ich arduinon nano genommen. für die Anschlüsse des Radioheaders habe ich Pin 14 (D11) als RX und Pin 15(D12) als TX genommen.
Leider weiß ich nicht woran das liegt?
hast eine Idee, woran das liegen könnte?
Gruß El Omari
11. Mrz. 2023 um 19:46
Hallo El Omari,
oftmals sind grade die billigen 433 MHz Empfängermodule sehr schlecht.
Versuche mal den Abstand zwischen zwischen Bewässerungssystem und dem Serial-Radio-Gateway auf wenige Zentimeter zu verringern. Wenn es dann klappt, dann weißt du, dass es an der Funkverbindung (bzw. den Modulen) liegt.
Ansonsten noch mal genau die Verkabelung und Konfiguration prüfen.
14. Mrz. 2023 um 14:49
Hallo Peter,
das war wirklich die 433 Modulen. Jetzt funktioniert. Ich habe erst am Samstag die neuen 433 Modulen bekommen.
ich bin dabei eine PCB-Platine zu fertigen, die auch ein ‘Wemos’ beinhaltet. Die Idee ist, einfach einen mini Webserver zu bauen, damit man unterwegs auch das System zugreifen zu können.
Dabei möchte ich Dich fragen, ob man einfach dein Control-app anwenden kann oder hast du eine bessere Idee?
Gruß El Omari
21. Mrz. 2023 um 9:22
Für die Control-App brauchst du ein System, auf dem Node.js laufen kann. Das ist meines Wissens nach bei dem Wemos nicht der Fall.
Was aber funktionieren sollte, wäre ein Raspberry Pi (Zero). Auf diesem kannst du Node.js und die Controll-App laufen lassen.
Alternativ könntest du natürlich auch selbst eine Anwendung für den Wemos schreiben, die quasi das gleiche macht wie die Control-App. Der genaue Aufbau des Protokolls und der nötigen Befehle ist oben ja beschrieben.
28. Mrz. 2023 um 16:37
werde ich versuchen, danke
26. Apr. 2023 um 19:30
Hallo Peter,
meine 5V Spannung aus dem StepUp werden zu 25V sobald der Transistor schaltet. Solange keine Spannung an der Basis anliegt, bleibt es auch bei den 5V. Liegt Spannung an, steigt diese sofort auf 25. Nach dem 4,7 kOhm wiederstand, liegen 0,8 V an der Basis des Transisors an. Das Ventil öffnet sich und die LED leuchtet.
Hättest du eine Idee woran das liegt ? Habe schon einen Arduino zerschossen weil dieser die Spannung natürlich nicht verträgt.
Viele Grüße
Simon
27. Apr. 2023 um 16:26
Huch… das dürfte natürlich nicht passieren. Scheint als würde da irgendwas den StepUp beeinflussen bzw. durcheinander bringen.
Überprüfe noch mal ganz genau deine Verkabelung, besonders die Masse/GND-Verbindungen.
0,8 V direkt an der Basis des Transistors sind richtig so. Zwischen Basis und Emitter eines NPN Transistors fallen immer ~0,7 V ab.
Testen kannst du das Ganze zur Sicherheit auch ohne Arduino, indem du direkt die 5 V auf den Vorwiderstand des Transistors gibst.
27. Apr. 2023 um 17:35
Die Verkabelung hab ich geprüft, hab extra alles nochmal auf enem Steck Board nachgebaut. Dort auch, selbes Problem.
Ich habe dann herausgefunden das die Spannung von der Batterie von 3,7 auf 3 Volt absinkt sobald der Transistor schaltet.
Während des Ladevorgangs mit einem Netzteil kann ich das Problem nicht nachstellen. Ich vermute das die Akkus zu stark entladen waren.
13. Mai. 2023 um 23:24
Hallo Peter,
ich habe dein Skript modifiziert und mqtt eingebaut. Das funktioniert wunderbar. Ich kann jetzt alle Daten in Openhab visualisieren. die nächste Hürde ist, Befehle an das AWS zu erteilen.
Meine Frage an Dich, in welcher Format kann man per Serial die Befehle senden? Allein z.B. für Polling den command 0x66 klappt nicht.
Ich teste gerade mit dem Adapter (arduino nano), Daten an das System zu schicken, leider ohne Erfolg. Hast du eine Idee, wie ich es machen kann?
Danke im Voraus
El Omari
14. Mai. 2023 um 15:26
Grundsätzlich musst du eigentlich nur die entsprechenden Bytes an die Adresse des Systems senden.
Leider sind die günstigen Funkmodule (besonders die Empfänger) oft sehr schlecht, was es zu einer Herausforderung machen kann, eine stabile Funkverbindung in beide Richtungen hinzubekommen. Hast du mal versucht testweise beide Teile sehr nahe zueinander zu bringen?
14. Mai. 2023 um 19:40
es sind nah nebeneinander. Das System funktioniert sehr gut und stabil.
Nun möchte ich via Openhab Befehle schicken, deshalb habe ich gefragt, wie man per COM-Port die Befehle erteilt.
Ich spreche jetzt von dem Arduino-Adapter(Client) mit deinem Radiohead Gateway. Innerhalb der Loup-Funktion sind zwei Abfragen, eine betrifft das Radio(radio.available() (alle nachkommende Nachrichten bzw. vom AWS gesendeten Nachrichten) werden hier behandelt. Die Zweite handelt die Client-Abfragen und die meine ich jetzt. Wie kann ich außerhalb des Systems mit irgendeinem COM-Port befehle an das System schicken? Geht das überhaubt?
14. Mai. 2023 um 20:15
Ah ok, glaube jetzt habe ich es verstanden.
Das Gateway macht nur die Umsetzung vom COM-Port auf den Funk.
Du musst auf dem COM-Port also auch schon das RadioHead-Protokoll “sprechen”.
Für Node.js habe ich das Modul radiohead-serial (https://www.npmjs.com/package/radiohead-serial) geschrieben, was das für dich macht. Genau das Modul nutzt auch die Control-App. Beispiele sind in der Beschreibung auf NPM oder GitHub zu finden.
Ansonsten könntest du auch den Arduino-Sketch für das Gateway ändern und dort von Text-Befehlen auf dem Seriellen Port zu RadioHead (und zurück) umsetzen, aber ich denke das wäre etwas mehr Arbeit.
14. Mai. 2023 um 21:36
ich dachte, es ist einfacher, wenn ich den Serial anspreche mit dem Read()-Funktion. Wie ich vorher erwänt habe, die LOUP besteht aus zwei Anfragen
1. radio.available() (vom Radiohead angesprochen)
2. serial.available() (auch vom Radiohead angesprochen)
3. Serial.available() was ich integrieren möchte und die wird gleich wie die Zweite aussehen mit der Unterschied, dass jeder Client Befehle direkt über COM-Port senden kann. Dafür brauchen wir zwei Parametern:
1. ADD die kennen wir
2. Commands: die hast Du schon definiert.
18. Mai. 2023 um 17:51
Das wäre dann quasi die zweite Variante, dass du im Arduino die Umsetzung vom RadioHead Protokoll auf irgendwas anderes machst. Dann musst du in dem Arduino Sketch alle Commands einbauen und auf dem Serial entsprechend empfangen/senden.
8. Jun. 2023 um 20:29
hallo Peter,
ich komme nicht weiter. Ich habe den Serial Binding eingebaut, ich kann die Daten lesen. Jetzt möchte Daten hinschicken bzw. abfragen( z.b. Daten Pollen abfragen). Geht das per http-request oder per cmd serial port? Du hast es unter IOBroker eingebaut, wahrscheinlich geht auch unter openhab. Was meinst Du?
Gruß El Omari
9. Jun. 2023 um 21:29
jetzt hat es geklappt!!!
10. Jun. 2023 um 12:03
Super 🙂
24. Jun. 2023 um 19:43
Hallo Herr Müller
Meine Festplatte im Laptop ist leider kaputt gegangen und nun ist Node.js und die Funkverbindung damit nicht mehr möglich, der Laptop ist wieder ok aber ich bekomme es nicht mit Node und der Controll App installiert, gibt es da eine Anleitung die auch ein Laie versteht? Bin schon am verzweifeln.
25. Jun. 2023 um 11:05
Hi,
eigentlich musst du nur die Software von GitHub herunter laden (https://github.com/crycode-de/auto-watering-system/archive/refs/heads/main.zip) und dann im Verzeichnis “control” einmalig “npm install” ausführen. Anschließend kannst die Control-App mittels “npm start” starten und dann den angezeigten Link im Browser öffnen.
Was ist die Ausgabe von “node -v” und “npm -v”? Gibt es irgendwelche Fehlermeldungen?
27. Jun. 2023 um 21:40
so, ich habs hin bekommen. Es lag am Visual Studio. ;-)))
19. Dez. 2023 um 15:07
hi peter, I was wondering in hindsight, over time, and your experience, if the Watering Spikes kept their promise. Does PLA support this humid life well? thank you for this great work.
19. Dez. 2023 um 19:50
Hi Flo,
my watering spikes (made from PLA) lasted two years. Then the material became brittle and I had to replace them.
11. Jan. 2024 um 12:32
Hallo Peter,
die 433 MHz-Funkmodule sind alle so gut in Reichweite (maximal 30 cm bekomme ich hin), daß sie praktisch unbrauchbar sind.
Ich möchte daher gerne 868 MHz-Module, z.B. CC101 oder ähnliche verwenden.
Diese brauchen aber wohl deutlich mehr Beschaltung als nur MOSI und MISO, zumindest haben sein einige Pins mehr, die wohl auch irgendwie beschaltet werden müssen, laut den Datenblättern teilweise ziemlich aufwändig. Hast Du eine Idee, welche 868 MHz-Module einfach zu beschalten sind (und wie), ohne riesigen Beschaltungsaufwand und Programmierarbeit treiben zu müssen?
Vielen Dank + Gruß
Marina
12. Jan. 2024 um 20:13
Hallo Marina,
die meisten (alle?) 868 MHz Module sind da etwas intelligenter und kommunizieren per SPI (4 Leitungen) oder ähnlichem. Die Beschaltung dürfte dabei eigentlich auch kein Problem sein.
Für z.B. die CC1101 gibt es im Netz auch diverse Arduino Beispiele und von der RadioHead Library werden die Module auch unterstützt, soweit ich das eben gesehen habe. (siehe http://www.airspayce.com/mikem/arduino/RadioHead/ unter Drivers)