Radar basierter WiFi-Niederschlagssensor für Regen, Hagel und Schnee

Begonnen von chunter1, 10 Juni 2017, 13:07:48

Vorheriges Thema - Nächstes Thema

chunter1

Zitat von: Maista am 10 August 2017, 15:13:44
Eventuell kann man den Trimmer an den Eingang Pin5 des OPs legen? Anstatt der Ub/2 ?
Damit sollte man den Offset auch eingestellt bekommen  (wenn ich mich recht an vergangene Schaltungen erinnere) :)

Im Grunde ist das alles richtig (wenn man C7 auch noch entfernt  ;) ).

Folgende Gründe haben mich aber die andere Variante wählen lassen:
-) Der OPV ist kein rail-to-rail output Typ und schafft damit die erforderlichen 0..2V am Ausgang nicht.
-) Der C7 in Kombination mit dem einstellbaren Spannungsteiler hat den Vorteil, dass man einen zusätzlichen Hochpass "gratis" dazu bekommt.
-) Keine Probleme mit driftendem Offset durch den OPV

Maista

Ach stimmt, den "blöden" Elko hab ich völlig vergessen ;)
Achja, den IPM-170 kann ich mir abholen kommen.
Falls er am Lager liegt.

Gruss Gerd

HCS

Genau zwei Tage UpTime mit der V0.8.2 und läuft noch.
Schickt alle 10 Sekunden "Compact" und "Bins count" rüber.
Entweder ist jetzt gut oder es will mich ärgen und wartet mit der Exception, bis es nicht mehr am Rechner dran ist.

chunter1

Kurzes Update bzgl. Preamp.
Wenn ihr die Störbeeinflussung eures Preamp-Aufbaus testen wollt, kann ich euch folgendes empfehlen:

Schließt einen Kopfhörer mit 100uF (Pluspol Richtung Preamp) in Serie an den Ausgang des Preamps an.
Achtung - kann laut werden.  ;)
Startet auf einem Linux Rechner folgenden Ping mit extrem kurzem Intervall von 10 ms.
ping x.x.x.x -i 0.01

Wenn ihr dann mit der ESP32 Antenne in die Nähe des Preamps/Einganges kommt, hört ihr die Transmit Bursts als "Knarren".
Ihr werdet feststellen, dass die Störungen nicht nur von der Entfernung, sondern auch extrem von der Ausrichtung der Antenne abhängig sind.

Maista

Moin,
ich bin bisher nicht dazu gekommen irgend etwas zu machen :(
Bisher habe ich nur ein Weissblech-Gehäuse gefunden das 50mm Breit ist.
Das passt dann aber nicht in ein Rohr rein. Muss ich suchen oder bestellen.

Zitatdass die Störungen nicht nur von der Entfernung, sondern auch extrem von der Ausrichtung der Antenne abhängig sind.
Gibt es den ESP32 nicht wie den ESP8266-07 mit Antennenanschluss?

Edit, Beantworte mir das selbst:
http://iot-bits.com/new-esp32-products-dev-boards-espressif/
Gibt es aber wohl noch nicht zu kaufen?!

Dann währe das Problem noch einfacher zu lösen und man kann auch eine gescheite Antenne dran machen.
Oder man lötet sich eine externe Antenne an. Wenn das einfach machbar ist...?

chunter1

Nachdem ich jetzt zwei Rohrvarianten mit unterschiedlichem Durchmesser (DN40 vs. DN70) mehrere Tage nebeneinander laufen hatte,
möchte ich kurz meine Beobachtung teilen.
Ursprünglich ging ich davon aus, dass die höhere Empfindlichkeit der kompakten Bauweise besser ist.
Die Messungen zeigen jedoch, dass bei der kompakten Version der peak-to-avg Wert deutlich höher ist.
Das heißt die nahe vorbei fliegenden/rinnenden Tropfen erzeugen eine überproportional große Amplitude.

Erklären würde ich das mit folgendem (nur schnell was skizziert um die Idee zu vermitteln) Diagramm.
In rot ist die Empfindlichkeit aufgetragen.
Grün ist das DN70, blau das DN40 Rohr.
Die schwarzen Pfeile markieren den "Peak-Wert" des direkt am Rohr vorbeifliegenden/rinnenden Tropfen.
Je schmäler also das Rohr ist, desto höher wird der Peak-Wert im Vergleich zur wesentlich größeren Menge der Tropfen die weiter entfernt sind.
So würde ich es zumindest interpretieren.
Ist zwar optisch weniger attraktiv, aber evtl. ist das DN70 Rohr die bessere Wahl?

Bleibt noch zu klären, wie weit das Rohr nach oben über den Sensor hinaus ragen muss, um die Verfälschungen durch die Tropfen auf den Deckel gering zu halten.

HCS

Zitat von: chunter1 am 13 August 2017, 14:32:27
Schließt einen Kopfhörer mit 100uF (Pluspol Richtung Preamp) in Serie an den Ausgang des Preamps an.
Das ist die Idee des Tages. Habe anstatt einem Kopfhöhrer einen kleinen Amp mit Lautsprecher angeschlossen.
Und dann das ganze mal mit einem 3.7V LiPo-Akku versorgt, ohne dass ein ESP32 mit auf dem Breadboard ist. Gut dass ich den StepUp für die 5V drauf habe.
Also kein WiFi, nichts was störend über die Versorgung kommt.
Und ich höre einen pulsierenden 50Hz Brumm und Geräsuche, die keinen Namen haben. Jetzt ist mir klar, warum ich mit und ohne WiFi immer das gleiche Rauschen in den Bins habe.
Zwei Meter weiter ist Stille. Wenn ich da dann einen ESP32 in die Nähe bringe, hört man das typische WiFi klickern.

Und man kann super ausloten, wo das Radar etwas "sieht". Einfach Bewegung erzeugen und schon "hört man die Bewegung".  8) ;D ;D
Das ganze übrigens mit einem auf Lochraster aufgebauten LME49729.

Da ist Abschirmung unabhängig vom WiFi unabdingbar. In SMD auf einem PCB ist das aber bestimmt schon mal besser.

Das Test-Radar mit der 0.8.2 hat jetzt drei Tage Uptime. Zu ärgerlich, dass es auf dem Schreibtisch liegt, bei dem aktuellen Regenwetter.

chunter1

#352
Eine neue Software Version 0.9.0 steht auf GitHub zum Download bereit.
Die Threshold-factor Tabelle ist für einen ersten Test sehr grob auf das aktuelle Preamp-Design (bei Raumtemperatur) abgestimmt.
Ihr müsst im Web-Frontend euren bisherigen Threshold-Wert wie folgt anpassen:
Threshold_neu = Threshold_alt / 38

Das neu hinzugekommene Reading "GroupMagAVGkorrThresh" solltet ihr mitloggen.
Im Gegensatz zum bisherigen Ansatz ("detections"), sind diese Werte "nicht" nach oben hin begrenzt, was eine Regenmengenabschätzung erst möglich macht.

Achtung!
Da es bei mir momentan an Regen mangelt, sind die Funktionen nur rudimentär getestet.
Wie immer wichtig ist, den Threshold richtig zu wählen!

Per

Zitat von: HCS am 12 August 2017, 22:15:22Entweder ist jetzt gut oder es will mich ärgen und wartet mit der Exception, bis es nicht mehr am Rechner dran ist.
Vllt. ein Problem mit der Luftfeuchtigkeit oder anderen Einflüssen außen?

Zitat von: chunter1 am 13 August 2017, 14:32:27einen Kopfhörer
In meiner Jugend :D waren Kopfhörer recht hochohmig. Gilt das hier auch?


HCS

Zitat von: Per am 14 August 2017, 13:11:17
Vllt. ein Problem mit der Luftfeuchtigkeit oder anderen Einflüssen außen?
Aktuell gibt es zwei gravierende Änderungen:
1. Das Rohr liegt auf dem Tisch
2. Eine weitestgehend neu geschriebene Publish-Routine

Wenn es wieder draußen ist, werden wir es wissen.

networker

Ich habe versucht die aktuell im GitHub liegende V0.9.0 zu compilieren.

Leider wirft er mir einige Fehler im publish.ino ... bin noch ergebnislos am suchen!!!  :-[ :-\

Arduino: 1.8.2 (Windows 10), Board: "DOIT ESP32 DEVKIT V1, 80MHz, 921600, Error"

C:\Users\networker\FHEM\precipitationSensorESP32-master\precipitationSensorESP32\publish.ino: In function 'void header_short(char*)':

publish:29: error: 'serverIP' was not declared in this scope

   if (!client.connect(serverIP, serverPORT))

                       ^

publish:29: error: 'serverPORT' was not declared in this scope

   if (!client.connect(serverIP, serverPORT))

                                 ^

C:\Users\networker\FHEM\precipitationSensorESP32-master\precipitationSensorESP32\publish.ino: In function 'void header(char*)':

publish:47: error: 'snapshotCtr' was not declared in this scope

   url += String(snapshotCtr);

                 ^

publish:53: error: 'clippingCtr' was not declared in this scope

   url += String(clippingCtr);

                 ^

publish:60: error: 'ADCpeakSample' was not declared in this scope

   if (ADCpeakSample > 2048)

       ^

publish:62: error: 'ADCpeakSample' was not declared in this scope

   url += String((100 * ADCpeakSample) / 2048);

                        ^

publish:68: error: 'totalDetectionsCtr' was not declared in this scope

   url += String(totalDetectionsCtr);

                 ^

publish:74: error: 'ADCoffset' was not declared in this scope

   url += String(ADCoffset);

                 ^

publish:80: error: 'RBoverflowCtr' was not declared in this scope

   url += String(RBoverflowCtr);

                 ^

publish:86: error: 'magPeak' was not declared in this scope

   url += String(magPeak);

                 ^

publish:92: error: 'magAVG' was not declared in this scope

   sprintf(str, "%.4f", magAVG);

                        ^

publish:99: error: 'magAVGkorr' was not declared in this scope

   sprintf(str, "%.4f", magAVGkorr);

                        ^

C:\Users\networker\FHEM\precipitationSensorESP32-master\precipitationSensorESP32\publish.ino: In function 'void footer()':

publish:115: error: 'serverIP' was not declared in this scope

   client.print(String("POST ") + url + F("&XHR=1 HTTP/1.1\r\n") + F("Host: ") + serverIP + F("\r\n") + F("Connection: close\r\n\r\n"));

                                                                                 ^

C:\Users\networker\FHEM\precipitationSensorESP32-master\precipitationSensorESP32\publish.ino: In function 'void publish_compact(char*)':

publish:138: error: 'binGroup' was not declared in this scope

     url += String(binGroup[binGroupNr].detections);

                   ^

publish:152: error: 'binGroup' was not declared in this scope

     url += String(binGroup[binGroupNr].magPeak);

                   ^

publish:167: error: 'binGroup' was not declared in this scope

     sprintf(str, "%.4f", binGroup[binGroupNr].magAVG);

                          ^

publish:182: error: 'binGroup' was not declared in this scope

     sprintf(str, "%.4f", binGroup[binGroupNr].magAVGkorr);

                          ^

C:\Users\networker\FHEM\precipitationSensorESP32-master\precipitationSensorESP32\publish.ino: In function 'void publish_binGroups(char*)':

publish:203: error: 'binGroup' was not declared in this scope

     if (binGroup[binGroupNr].magPeak > magPeak)

         ^

publish:226: error: 'binGroup' was not declared in this scope

         if ((x < ((NR_OF_BARS * binGroup[binGroupNr].magPeak) / magPeak)) && (magPeak > 0))

                                 ^

publish:233: error: 'binGroup' was not declared in this scope

       url += String(binGroup[binGroupNr].magPeak);

                     ^

C:\Users\networker\FHEM\precipitationSensorESP32-master\precipitationSensorESP32\publish.ino: In function 'void publish_bins_count(char*)':

publish:258: error: 'bin' was not declared in this scope

     if (bin[binNr].detections > countMax)

         ^

publish:285: error: 'bin' was not declared in this scope

           if (x < ((NR_OF_BARS * bin[binNr].detections) / countMax))

                                  ^

publish:295: error: 'bin' was not declared in this scope

       url += String(bin[binNr].detections);

                     ^

C:\Users\networker\FHEM\precipitationSensorESP32-master\precipitationSensorESP32\publish.ino: In function 'void publish_bins_mag(char*)':

publish:317: error: 'bin' was not declared in this scope

     if (bin[binNr].magPeak > magPeak)

         ^

publish:344: error: 'bin' was not declared in this scope

           if (x < ((NR_OF_BARS * bin[binNr].magPeak) / magPeak))

                                  ^

publish:354: error: 'bin' was not declared in this scope

       url += String(bin[binNr].magPeak);

                     ^


'serverIP' was not declared in this scope

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

networker

Meine Teststellung verwendet noch den alten Preamp --> sollte ich trotzdem auf V0.9.0 umsteigen?

HCS

Zitat von: networker am 15 August 2017, 15:46:06
Ich habe versucht die aktuell im GitHub liegende V0.9.0 zu compilieren.
Leider wirft er mir einige Fehler im publish.ino
Es gibt überhaupt keine publish.ino mehr.
Hast Du das als ZIP runtergelden und es einfach über das alte Verzeichnis drüber kopiert?
Falls ja, wäre aufräumen angesagt.

networker

Zitat
Es gibt überhaupt keine publish.ino mehr.
Hast Du das als ZIP runtergelden und es einfach über das alte Verzeichnis drüber kopiert?
Falls ja, wäre aufräumen angesagt.
Danke, trifft vollinhaltlich zu!!

Das erleichtert das compilieren ungemein wenn vorher aufgeräumt ist.

networker

#359
Habe heute meinen Sensor wieder in den Garten übersiedelt.

Aufgrund des sehr heißen Wetters ab ich jetzt eine schöne temp- abhängige Rauschkurve.

14:45  Eingeschalten mit getrennten 5V Reglern für ESP32 und Sensor (Wohnzimmer 25°)
14:50 Übersiedlung in den Garten und damit direkt in die Sonne ( 30.8° im Schatten)
16:15 Reboot des Raspi --> dauer ca. 1 Min.
ESP über internen Webserver weiterhin erreichbar, liefert aber keine Daten an FHEM
17:20 Reboot des ESP32 über das WebIF
18:50 Sonne verschwindet hinter dem Nachbarhaus

Version 0.8.0 da der Upload der 0.9.0 über OTA derzeit nicht funktioniert
Mounting angle: 0
Publish interval: 15
Detection threshold: 20
Publish: Compact
WiFi: -69 dBm
Rohr: DN50 (2 x 50 cm)
Radarsensor 165 inkl. Preamp (Poti auf 16k)
Sensor & Preamp 50 cm von oben
Der Rest 50 cm darunter
Spannungsversorgung aus einem 12 V Steckernetzteil (Transformator)
5V Regelung über 2 LM7805