Ausgangszustand:
Nach folgender Anleitung Entfernung messen mit Ultraschallsensor HC-SR04 habe ich relativ schnell einen HC-SR04 Ultraschall Entfernungs Sensor zum laufen gebracht und in meinem Brunnen installiert.
Der Brunnen ist nur ca. 4,5 Meter tief und wird zusätzlich über eine Drainage (Entwässerung Einfahrt, Hof) gespeist, was bedeutet, dass der Wasserspiegel bei Regen kurzfristig ansteigt.
Die Pumpe ist im Brunnen angebracht und sollte möglichst trocken bleiben.
Eine Anzeige wie hoch das Wasser steht ist dementsprechend sinnvoll.
Der Abstand zum Wasserspiegel beträgt je nach Wetterlage bis zu 3,5 Meter.
Es zeigte sich relativ schnell, dass die Messergebnisse stark schwanken.
Da der Sensor ca. 10 Meter von der Raspberry Pi angebracht ist, habe ich einen Digital Level Converter zwischen geschaltet, um diesen sauber mit 5 Volt ansteuern zu können.
An der Schwankung der Messergebnisse änderte das nichts.
Mir ist aufgefallen, dass die Messwerte genauer sind, sobald der Brunnendeckel offen ist, wodurch
- die Luftfeuchtigkeit sinkt
- die Reflexion des Schalls sich verändern könnte
Suche im Internet
- Beispiel Link mit den gleichen Problemen: Kennt das jemand ? HC-Sr04 messen Mist…
- Auswertung der Messgenauigkeit des Nachfolgesensors HY-SRF05 unter Ultra cheap ultrasonics with the HY-SRF05 ergibt wie nachfolgend dargestellt, dass der spezielle Sensor zwischen 20 cm und 80 cm Entfernung die genauesten Ergebnisse bringt.
Distance Signal Range Comments 10 cm 1383-1416 Unstable lots of fluctuations. 15 cm 1589-1652 Unstable reading 17.5 cm 1252-1277 First stable readings 20 cm 1301-1372 Stable 30 cm 1725-1742 Stable 40 cm 2338-2386 Stable 50 cm 2873-2892 Stable 60 cm 3180-3247 Stable 70 cm 3189-3289 Becoming Unstable 80 cm 3090-3287 Unstable - Der Einfluss der Luftfeuchtigkeit: Laut dieser Abhandlung http://www.schuelerkonferenz.edu.tum.de/fileadmin/w00brm/www/Facharbeiten_2011/viczian_jonas_2011.pdf auf Seite 16 wird das Ultraschall Signal bei steigender Luftfeuchtigkeit sigifikant gedämpft.
Ein Blick auf die Messergebnisse
Einzelwert1 = 117.4 cm
Einzelwert2 = 186.5 cm
Einzelwert3 = 118.0 cm
Einzelwert4 = 120.9 cm
Einzelwert5 = 121.3 cm
Einzelwert6 = 189.0 cm
Einzelwert7 = 118.1 cm
Einzelwert8 = 122.9 cm
Einzelwert9 = 188.1 cm
Die Grün dargestellten Werte zeigen den tatsächlichen Abstand, welchen ich auch mit dem Zollstock gemessen habe.
Zwei Drittel der Messwerte sind unbrauchbar.
Der Durchschitt über diese Werte liegt bei 142,47 cm, was immer noch über 40 cm am Ziel vorbei ist. Selten kommt es auch vor, dass es extreme Sprünge in Richtung 2 oder 2,5 Meter gibt.
Ich habe mich entschieden, jeweils 11 Werte hintereinander zu messen, diese nach Größe zu ordnen und den zweitgrößten Wert in eine Datenbank zu übernehmen.
Dies erfolgt alle 10 Minuten.
Jede volle Stunde hat eine extra Zeile in der Tabelle mit dem kleinsten gemessenen Wert und den größten gemessenen Wert innerhalb einer Stunde.
import time import numpy as np def LeseWasserstandBrunnen(): #Liefert den zweitgroessten Wert einer Messreihe aus 11 Werten zurück abstand = [] for i in range(0, 11): abstand.append(distanz()) #Die Funktion distanz() #liefert einen Messwert vom HC-SR04 time.sleep(0.1) abstand = np.sort(abstand) return "%.2f" % float(abstand[len(abstand) -2])
Die folgenden Grafiken zeigen Oben die Übernahme der Messwerte ohne Gewichtung und Unten Messwerte, bei denen ich den zweitgrößten Werte einer Serie angenommen habe.
Blau = minimal; Grün = maximal;
Beim betrachten des unteren Diagramms fällt auf, dass die Minimalwerte pro Stunde fast durchgehend genau sind.
Da ich die weiß, dass die Ausreiser nach oben und unten Messfehler sind, kann ich das Ergebnis der Tagesdarstellung auch recht gut bewerten.
Jetzt will ich diese Stundenwerte zu einem einzigen Tageswert konsolidieren, um so einen Zeitabschnitt von einem Monat darstellen zu können.
Da sollten dann auch Schwankungen des Wasserstands gut erkennbar sein.
Die ‚Blauen‘, also die Minimalen Stundenwerte erscheinen geeignet, aber ein Durchschnitt der Werte dann doch eher nicht.
Nach ein wenig suchen habe ich bei Youtube folgendes Video gefunden:
Der Zentralwert scheint für meine Ausreiser in den Minimalwerten der richtige Ansatz zu sein.