Regenmesser zu Ethernet oder USB - mein erstes Arduino-Projekt?

Jul 18, 2019 Last reply: 7 years ago 119 Replies

First reply

Sebastian Suchanek

Das mit dem Auf-Null-Setzen bei jeder Auslösung würde ich nicht machen. Ich habe inzwischen zwei Komplettwetterstationen jeweils incl. Regenmesser im Einsatz, die ich jeweils per USB mit einem Raspi auslese. Beide Wetterstationen zählen beim Regenmesser jeweils im Impulse und…

Read the full reply

Hallo,



ich habe einen Regenmesser aus China mit einer Wippe mit einem Impulsausgang. Der Ausgang hängt an einem Reedkontakt, die Wippe hat einen Magneten, und beim Umschlagen der Wippe schließt der Reedkontakt einmal kurz. In beiden Endstellungen der Wippe ist der Kontakt offen.



Ich habe vor, die Auffangfläche des Regenmessers mit einem auf dem Dach des Gartenhauses befestigten U-Profil so zu vergrößern, dass pro



20 ml pro m² Niederschlagsmenge ein Klick erzeugt wird. Die Waage bekommt drei Klicks pro Sekunde noch hin, das bedeutet also, dass der so vergrößerte Regenmesser bis zu einem Jahrhundertwolkenbruch von 3,6 Litern pro Minute pro m² noch mitkommt (vgl. Hamburg 2011-06-06 mit
1,7 l/m² laut Wikipedia).

Nun muss ich aber die Impulse irgendwie erfassen. Meine aktuelle Idee wäre ein Arduino, der die Impulse zählt und über eine IP-Schnittstelle (am besten über Kabel-Ethernet) die Anzahl der seit der letzten Abfrage gezählten Impulse ausgibt (und dann diese Anzahl auf Null setzt).



Was brauch ich denn dafür?



Ein W5100 Ethernet Shield

formatting link
einen Arduino Uno R3
formatting link
?



Würde ich auf die Ethernetanbindung verzichten und wäre mit WLAN zufrieden, käme ich dann mit einem NodeMCU

formatting link
?



Komme ich mit dieser Hardware aus, wenn ich das Protokoll aufbohre und nicht nur die Anzahl, sondern die Zeitstempel der seit der letzten Abfrage aufgelaufenen Impulse haben möchte? Dann brauche ich irgend eine Art Uhr in dem Gerät, die man mit einer Übertragung bei der Abfrage mit dem Client synchronisieren könnte.



Oder gibt es einen anderen Lösungsansatz?



Grüße Marc


Am 18.07.2019 um 19:43 schrieb Marc Haber:

Das mit dem Auf-Null-Setzen bei jeder Auslösung würde ich nicht machen. Ich habe inzwischen zwei Komplettwetterstationen jeweils incl. Regenmesser im Einsatz, die ich jeweils per USB mit einem Raspi auslese. Beide Wetterstationen zählen beim Regenmesser jeweils im Impulse und geben via USB den aktuellen Gesamtzählerstand aus (ohne den auf Null zu setzen).

Das hat IMHO den Vorteil, dass man sich eine gewisse Redundanz schafft um "Übertragungslücken" zwischen Wetterstation bzw. Arduino und nachgeschalteter Auswertung zu erkennen, für den Fall, dass die nachgeschaltete Auswertung aussteigt sowie für den Fall, dass sich der Arduino just im Moment des Auslesens irgendwie "verschluckt".

Das \Delta V / \Delta t zu bilden muss man dann natürlich in die nachgeschaltete Auswertung verlagern.

Tschüs,

Sebastian

Wenn ich die Sache mit den Zeitstempeln implementiere, braucht das aber (nichtflüchtigen?) Speicher. Und wenn der Arduino neu gestartet wird geht der Zähler wieder bei Null los?

Grüße Marc

Am 18.07.2019 um 20:10 schrieb Marc Haber:

Serielles EEProm wie 25LC256 der als Ringpuffer beschrieben wird? Zeitstempel und geänderter Füllstand, maximal z.B. 1x pro Minute. Wenn man auf den Zeiger verzichtet, muß man den beim Start einmal ermitteln.

Bernd

Weit jenseits meiner Kenntnisse.

Grüße Marc

Irgendeine Art von Speicher brauchst Du ja sowieso, Du willst ja die

danach wieder nullst oder nicht ist aus Hardware-Sicht erstmal egal.

Problem sein.

Sebastian

Am 18.07.2019 um 19:43 schrieb Marc Haber:

Mein Vorschlag wäre ENC8266. Der hat allerdings WLan. Da gibt es aber die Möglichkeit, direkt eine MySQL Datenbank auf einem Server anzusprechen. Einer meiner Azubis hat sowas als Projektarbeit in der Schule gemacht, allerdings für Temperatur und Luftdruck.

Da würde ich eher zu esp8266 tendieren, ist aber Geschmackssache. Ich mag auch die Arduino Entwicklungsumgebung nicht.

Genau das wäre mein Vorschlag

Die Zeit kann man vom Server erfragen.

Klingt im Prinzip schon ganz vernünftig. Wobei ich wie andere Poster schon geschrieben haben den Zähler nicht zurücksetzen würde. Man könnte die Telegramme auch etwas verlängern, also z.B. jeweils zwei Zeiten und zwei Zählerstände übermitteln. Also T1,n1,T2,n2. Aber egal.

Gruß

Stefan

Den find ich bei Amazon nicht.

Eigentlich sollen die Daten in eine InfluxDB, und nochmal eigentlich hätte ich es gerne etwas generischer.

Per ntp oder wie ginge das?

Detektion eines Reset wäre dann wenn neuer Wert < alter Wert? Vermutlich fehleranfällig, also besser die Uptime dazuschreiben?

Hat ein laufender Arduino eine halbwegs genaue Echtzeituhr?

Grüße Marc

Nein. Man kann zwar mittels millis() erfragen, wie lange in ms der Arduino schon eingeschaltet ist, aber es dürfte kaum zwei Arduinos geben, deren millis()-Ticker synchron laufen. Für genaue Messungen über minutenlange Dauer sind die nicht geeignet.

Wenn Du die Uhrzeit brauchst, nimmst Du wohl am besten eine I²C-RTC - die ist dann auch Knopfzellen-gepuffert.

Gruß

Gregor

Am 18.07.19 um 22:20 schrieb Marc Haber:

Echtzeit brauchst Du im Sensor nicht - ob der Starkregenwert jetzt von

0:30:30 oder 0:30:32 ist spielt keine Rolle. Umlaufender (überlaufender) Zähler und ein relativer Zeitstempel seit der letzten Messung (! Nicht Messwert-Übertragung) reichen für ein genaues Ergebniss insofern Dein übergeordnetes System in geeigneten Zeitabständen die Werte bekommt und mit Echtzeitstempel versieht.

Gerald

Hi Stefan,

Aber nur, wenn er irgendwo einen MQTT Server laufen hat oder der Stromverbrauch keine Rolex spielt. Beim Deep-Sleep kommt der 8266 nur mit einem Reset wieder raus, der alles ausser dem RTC-Bereich alles vergißt.

Da gibts im Netz gefühlte 1000+ freie Codebeispiele

Wenns nicht in Stückzahlen geht, nimm den ESP32, der habe weniger Ratten an Bord ;-)

Marte

Es gäbe eine regelmäßige Abfrage von einem System mit synchronisierter Uhr, diese Abfrage könnte man zur synchronisierung nutzen (Client liefert seinen Zeitstempel mit, der Arduino interpoliert).

Jetzt sind wir aber schon lange auf der Softwarebene (die ich beherrsche); ob die von mir ausgesuchte Hardware das bringt was ich brauche hat noch keiner gesagt.

Grüße Marc

Erklär bitte.

Grüße Marc

--

-------------------------------------- !! No courtesy copies, please !! ----- Marc Haber | " Questions are the | Mailadresse im Header Mannheim, Germany | Beginning of Wisdom " | Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834

Hi Marc,

Dann tipp mal ESP8266 in ebay und such Dir den aus, der mechanisch am Besten zu Deinen Vorstellungen passt. Ich schwenke gerade auf ESP8285 um, ist im Prinzip der direkte Nachfolger. Der ESP-09 ist einfach zu schwer zu bekommen und dann zu teuer. Die ESP-01F oder auch die ESP-M1 sind einfach schöner und noch einen TUC sparsamer... Wenns nicht ganz so klein sein muss und Di kaum externe Pins brauchst, dann schau nach ESP-01 oder ESP-12.

Mit Arduino gehen die auch, wie die ESP8266.

Eine gute Zusammenfassung für den Umgang damit findest Du bei

formatting link
Viel Spaß

Marte

Zur Eichung lässt sich dann diese Webseite hervorragend verwenden:

formatting link
Bundesland, Ort, und Datum.

Grüße, H.

Kaum, dafür wohl eher diese Seite:

formatting link

Wenn es Dir nicht auf absolute Genauigkeit im ms-Bereich ankommt, ist das absolut ausreichend. Wenn Du auch mit dem Arduino entwickelst, der auch im Endprodukt eingesetzt wird, kannst Du bei Bedarf eine Korrektur in Software vornehmen.

Ich würde einen ESP8266 nehmen (z. B. auf NodeMCU), dazu eine I²C-RTC. Abgesehen von Kleinstteilen (Widerstände oder so) hast Du dann alles, was Du benötigst. Die Netzanbindung wäre dann halt über WLAN.

Gruß

Gregor

Ich denke, ein Zeitstempel ist auf dem Arduino überhaupt nicht nötig. IMO reicht es, bei jeder Abfrage eine Sequenznummer zu übertragen und diese auf dem Arduino danach zu inkrementieren.

Von dem der Arduino Uno 32k in Form von Flash und nochmal 1k als EEPROM hat

formatting link
). Du mußt den EEPROM ja nicht bei jedem Impuls (kaputt)schreiben, sondern evtl. in regelmäßigen Zeitabständen, falls sich am Zähler was geändert hat oder nur dann, wenn ein beginnender Brown-Out erkannt wird. Letzteres könnte man mit einen ADC-Eingang an der Betriebsspanung bewerkstelligen. Die Schwelle muß dann aber so komfortabel über dem Brown-Out-Reset liegen, daß EEPROM.write() noch fertig wird.

formatting link
könnte weiterhelfen.

Ciao, Volker

Die von Dir ausgesuchte Hardware

- Regenmesser aus China mit 1 Impuls*m^2/20ml,

- Arduino Uno R3 und

- W5100 Ethernet Shield bringt, was Du brauchst. Dazu reicht sogar ein Nano mit ENC28J60.

Natürlich tut es die NodeMCU ESP8266 auch, die restlichen 11 I/O-Ports werden sich zu Tode langweilen.

Und natürlich gibt es 1001 anderer Lösungsansätze, der u. A. von der Betriebsspannungsversorgung abhängt und wie Du die aufgelaufen Regenmenge angezeigt und weiterverarbeitet haben willst, bis hin zur guten alten

7490/7447-Familie mit ein bißchen Hühnerfutter außenrum *).

Ciao, Vol"seit ich einen Hammer besitzte, sieht für mich alles wie ein Nagel aus"ker

*)
formatting link

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required