Regenrate messen

Hallo Leute,

ich baue mal wieder an meiner Wetterstation herum.
Betrieben wird diese von einem Arduino (MKR 1010 Wifi). Im nachhinein würde ich für mein Projekt ein anderes board wählen, aber das ist nun mal verbaut und daran werde ich erst mal nichts ändern.

Mein Thema ist die Berechnung der Regenrate (Achtung nicht die Regen Menge) in Liter/h (oder mm/h)

Das "Messgerät" ist die klassische Schaufel, die Impulse zählt. (Über einen Interrupt) Um die Regenrate zu ermitteln benötigt man die Zeit zwischen zwei Impulsen. Soweit so klar. Problem ist nur, dass ich den Arduino nach einer Messung in den Deepsleep modus setze und damit auch millis() nicht nutzen kann, da dieser "timer" beim schlafen angehalten wird.

Gibt es eine Möglichkeit den timer weiterlaufen zu lassen? Oder kennt ihr eine andere Möglichkeit die Regenrate zu ermitteln?

Externe RealTimeClock benutzen. Die läuft weiter

Kennt Dein Arduino auch andere Schlafmodi? Meist gibt es da mehrere. Ein Regensensor könnte den µC dann soweit aufwecken, daß Impulse gezählt werden können.

Schau dir mal https://wolles-elektronikkiste.de/sleep-modes-und-power-management an. Besonders das Ende mit Timer 2. Bei jedem Aufwachen könntest du einen Zähler erhöhen.

Hallo Alle und danke für die Antworten.

Besonders das Ende mit Timer 2. Bei jedem Aufwachen könntest du einen Zähler erhöhen.

Das macht wenig Sinn, denn es geht nicht um die Menge, sondern um die Regenrate, oder wie meinst du das? Für die Regen Menge zähle ich bereits die Delta Impulse.

Kennt Dein Arduino auch andere Schlafmodi? Meist gibt es da mehrere. Ein Regensensor könnte den µC dann soweit aufwecken, daß Impulse gezählt werden können.

Ja, er kennt auch andere modi.
Es gibt:
deepSleep
sleep
idle

Ich verwende deepSleep um möglichst viel Energie zu sparen, da das Teil von einem LiPo Betrieben wird.

Externe Real Time Clock (RTC) habe ich bisher nicht im Projekt eingeplant.

Ohne Echtzeit Uhr wird es wohl ziemlich schwer werden, da ich zwar den Zeitpunkt des ersten Schaufelimpuls kenne, aber nicht den Zeitpunkt des zweiten Impuls, relativ zum ersten Impuls. Das klappt wohl nur wenn ich entweder den Arduino nicht komplett schlafen lege (vielleicht im sleep oder idle mode) oder ihn überhaupt nicht schlafen lassen.
Ich muss mal suchen, wo die Sleep Modi verständlich erklärt werden.

Da wird nicht viel gespart außer man hat alles ausgelötet und nur den µC gelassen, gerade das runm herum Frist den meisten Strom

Was meinst du?

Mal Datenblätter vom alles was auf der Platine drauf ist lesen, der SAMD21 Cortex nimmt sich am wenigsten.
Nicht nur ich muss lachen, wen man liest Stromsparren und nimmt ein Modul :wink:
Das Thema Stromsparren kommt sehr oft vor. und ja es ist machbar, sogar mit einer CR2032 über 5J daten senden, jedoch wird nicht mit keinem Arduino gemacht

Man wählt halt zwischen Komfort und Schmerz. Und ich hab den Komfort gewählt und habe nun später den Schmerz. Wobei selbst wenn ich gleich den Schmerz gewählt hätte, hätte ich die ganze Zeit Schmerz gespürt.
Für 95% meiner Anforderung hat der Komfort Weg nun funktioniert. Jetzt suche ich einen gangbaren Weg für die restlichen 5% ohne nochmal komplett von vorne zu beginnen und ohne den MKR bis auf den kleinsten Widerstand zu analysieren. :wink:

Ist halt nur so, dass es hier in diesem Thema um Zeit geht und nicht um Strom sparen. Ja, irgendwie ist das schon eine Folge von den bereits implementierten Prozessen, aber viele Wege führen nach Rom und ich suche gerade den steinigen Weg jetzt. :slight_smile:

Das Teil muss auch nicht 5 Jahre daten senden, sondern es reicht auch wenn er nur zwei bis drei Tage sendet. Um das Auffüllen des LiPos kümmere ich mich dann schon. Nur wenn ich ihn nicht in den Schlaf Modus setze, wird er wohl vermutlich nicht so lange durchhalten. Aber das müsste ich mir mal ausrechnen. Ich bin einfach davon ausgegangen, dass es schlauer ist (so suggeriert es ja auch Arduino), dass man bei Batterie Anwendungen in den Sleep Modus gehen soll.

Beim Überfliegen von Text benötigt wohl der SAMD21 wenig, während das WiFi-Modul mehr schluckt. Meine Schlußfolgerung: WiFi ausschalten und SAMD21 normal betreiben, wenn es regnet.

Oder eine ATtiny85 zählen lassen, während der SAMD21 schläft.

Aus der Doku werde ich auch nicht wirklich schlau.
Der Idle Modus kann entweder mit einer Millisekunden Angabe aufgerufen werden oder oder ohne Parameter. Beides führt bei mir jedoch zum gleichen Ergebnis und zwar, dass die Schleife einfach läuft.
https://docs.arduino.cc/libraries/arduino-low-power/

Das Wifi Modul ist aus. Ich aktiviere es nicht mal, oder ist das im Standard aktiv? Die Datenübertragung findet mit einem HC12 Modul statt.
Das ist auch der Grund, warum ich der Meinung bin, dass dieses Board nicht die beste Wahl war für meinen Anwendungszweck. Wenn ich mal viel Zeit habe, wird das Board gegen ein anderes ersetzt, aber das ist halt nicht einfach mal so raus und neues Board rein. :smiley:

Weiß ich leider nicht, eventuell findest Du im Artikel Powering MKR WiFi 1010 with Batteries etwas Erhellendes.

Ich überlege nun fürs erste einen anderen Ansatz. Wenn ich den Idle Modus verwende und den Arduino einfach laufen lasse, braucht das weniger Strom, wenn ich die Sensoren nur alle 20 Sekunden abfrage?

ja.

Genau dafür ja die RCT

Auf Wolles Seite

1 Like

Der erklärt aber den Sleep Mode zum ATmega mit der sleep.h Bibliothek. Ich habe auf meinem Board einen SAMD und nutze die ArduinoLowPower.h . Ich denke die sind unterschiedlich, oder?

Ich habe jetzt eine andere Idee. Ich könnte die Berechnung der Rate auf der Empfangsseite machen. Dort bin ich ja nicht im Sleep Modus und habe auch entsprechende Zeitstempel zur Verfügung.

Jetzt versuche ich erst mal die Lösung mit 20 Sekunden Idle Zeit.

Sehr interessant. Es sieht so aus, als ob der IDLE Modus, nicht wirklich viel mehr Strom verbraucht als der Sleep und DeepSleep Modus.

Immer gut, wenn man theoretische Annahmen auf den Prüfstand stellt :blush:

Es wird sogar noch spannender. Seit ich kein Sleep oder DeepSleep mehr verwende, funktioniert nun auch das Laden mit einem PV Panel (besser). Kann es sein, dass diese Sleep Modi auch den Laderegler deaktivieren? Falls das so ist, schon seltsam, dass davon nichts in der Doku zum Arduino steht.

Da die gesamte Schaltung geheim ist, ja, aber unwahrscheinlich