HC-SR04 dauerhafte Messwertabweichungen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo

    ich messe Abstand mit dem HC-SR04 US Sensor in 10 sek. Abständen.

    Das klappt ganz gut jedoch ist jede 7 - 10. Messung völlig von der Realität entfernt. Kennt das jemand, ist das normal?

    Meine Kurve sieht so aus - da sieht man die Aussetzer. Bevor ich jetzt Mittelwerte berechne um die Ausreißer zu eleminieren wollte ich fragen ob das Messverhalten von dem Ultraschallempfänger allgemein manchmal abweichend ist.

    wasserstand_daily.png

  • Hallo 4zap,
    Wie prüfst du den Messwert denn ab? (Code)
    Generell kann der "falsche" Meßwert 2 Ursachen haben, entweder der Sensor liefert falsche Daten, oder deine Auswertung kann die Daten des Sensors nicht richtig lesen.

    Die Grafik zeigt aktuell die Ungefilterten Messwerte?

    Gruß
    Chris

    Einmal editiert, zuletzt von ChrisvA (29. August 2016 um 17:22)

  • Hi Chris

    ich mess das so simple wie möglich und schreibs in eine Round Robin Datenbank. Der jeweilige Aufruf sieht so aus:


    Wobei ich mir hier noch die Differenz zum max. Wasserstand im Gefäß berechne und ausgebe. Die regulären Abweichungen sind soweit tolerierbar aber die Außreißen dazwischen stören .... optisch. Mir gings auch darum ob andere die gleichen Erfahrungen mit dem Sensor gemacht haben. Dann würde ich die Ausreißer einfach nicht berücksichtigen und ausklammern. Wenn nicht gehts weiter zur Fehlersuche.

    Viele Grüße
    Rainer

  • Hallo Rainer,
    die Abweicher können systembedingt (der Raspberry hat im allgemeinen kein Echtzeitsystem und Python kann manchmal kurz pausieren (z.B. Garbage collector) kommen.
    Das könntest du z.B. mal testen, indem du in einer unendlichen (while-)Schleife immer Messungen ausführst und diese anschließend auf der Konsole ausgibst. Dann Logge dich mal mit einer 2. SSH-Verbindung auf dem Pi ein und mache irgendwas, was etwas Rechenleistung braucht, z.B. apt-get update && apt-get upgrade
    Wenn meine Theorie richtig ist, solltest du bei Last mehr falsche Werte sehen, als ohne Last.

    Zur Lösung würde ich eine Strategie mit mehreren Messwerten nehmen. (z.B. 5 Messungen machen, dann den höchsten/tiefsten Wert wegwerfen und aus den restlichen 3 Werten den Mittelwert bilden)

    Gruß
    Chris

    PS: Nur mal so am Rande, eine Abweichung von <10cm finde ich nicht viel, das entspricht einem Zeitfehler <10^(-5)s = 0.00001s

    Einmal editiert, zuletzt von ChrisvA (29. August 2016 um 19:24)

  • Hallo Rainer,
    Ich nutze auch einen solchen Sensor mit praktisch identischem Code und komme auf die gleichen Ausreißer. Habe mittlerweile die besten Erfahrungen mit einem Median aus jeweils 5 Messungen gemacht und kann auch dabei die Vermutung von ChrisvA bestätigen:
    Eine Zeit lang sind die Ergebnisse so relativ stabil, zwischendurch können aber immer noch Ausreißer auftreten.
    Für meinen Öltank-Inhalt ist es aber jenau jenuch!

    rasray

  • Ich wuerde zur Verwendung von PIGPIO raten. Das sollte bessere Ergebnisse liefern, weil es die GPIOs mit einem DMA-Kanal einliest, und so Probleme des Prozess-Schedulers ausgeglichen werden. Dazu muss man natuerlich den tick auswerten, den PIGPIO mitliefert.


  • Hallo Rainer,
    die Abweicher können systembedingt (der Raspberry hat im allgemeinen kein Echtzeitsystem und Python kann manchmal kurz pausieren (z.B. Garbage collector) kommen.
    Das könntest du z.B. mal testen, indem du in einer unendlichen (while-)Schleife immer Messungen ausführst und diese anschließend auf der Konsole ausgibst. Dann Logge dich mal mit einer 2. SSH-Verbindung auf dem Pi ein und mache irgendwas, was etwas Rechenleistung braucht, z.B. apt-get update && apt-get upgrade
    Wenn meine Theorie richtig ist, solltest du bei Last mehr falsche Werte sehen, als ohne Last.

    Zur Lösung würde ich eine Strategie mit mehreren Messwerten nehmen. (z.B. 5 Messungen machen, dann den höchsten/tiefsten Wert wegwerfen und aus den restlichen 3 Werten den Mittelwert bilden)

    Gruß
    Chris


    Hallo Chris

    sowas hab ich mir schon fast gedacht und werde ich mal testen.

    Zitat

    PS: Nur mal so am Rande, eine Abweichung von <10cm finde ich nicht viel, das entspricht einem Zeitfehler <10^(-5)s = 0.00001s


    Eine Abweichung von 10cm bei einer Gesamthöhe des Gefässes von 22cm find ich schon nicht mehr so wirklich tolerierbar. :D
    Automatisch zusammengefügt:


    Hallo Rainer,
    Ich nutze auch einen solchen Sensor mit praktisch identischem Code und komme auf die gleichen Ausreißer. Habe mittlerweile die besten Erfahrungen mit einem Median aus jeweils 5 Messungen gemacht und kann auch dabei die Vermutung von ChrisvA bestätigen:
    Eine Zeit lang sind die Ergebnisse so relativ stabil, zwischendurch können aber immer noch Ausreißer auftreten.
    Für meinen Öltank-Inhalt ist es aber jenau jenuch!

    rasray


    Hallo rasray

    Macht Sinn. Werde ich wohl machen wenn ich keine Lösung finde. Bei mir es ein flacher Eimer, kein Öltank. :D


    Ich wuerde zur Verwendung von PIGPIO raten. Das sollte bessere Ergebnisse liefern, weil es die GPIOs mit einem DMA-Kanal einliest, und so Probleme des Prozess-Schedulers ausgeglichen werden. Dazu muss man natuerlich den tick auswerten, den PIGPIO mitliefert.

    Hai Deetz
    schau ich mir an. Werde berichten.

    Danke @Alle.

    Einmal editiert, zuletzt von 4zap (29. August 2016 um 22:01)

  • Hallo,

    ich benutze einen anschlussgleichen Ultraschallsensor an einem RasPi (B+) seit ca. 2 Jahren um den Inhalt von Öltanks (4.500 Liter) über die Füllhöhe zu messen. (Heizöl-Tankstand-(oder Verbrauchs) Fernablesung mit RasPi [gelöst -> Beitrag #21])

    Da ich auch den Verbrauch pro Tag aus der Differenz der ermittelten Füllhöhe wissen möchte, wollte ich die Messung so genau wie möglich haben.

    Auch in meinem Fall habe ich recht hohe Mess-Ungenauigkeiten des Sensors im Laufe der Zeit festgestellt.
    Meines Erachtens liegt es an:

    1.) Einbauten im Tank. In den Tanks sind Aussteifungen und Einbuchtungen, damit diese stabil stehen. Je nach Höhe des Ölspiegels gibt es eine Reflexion der Ultraschallwellen daran und diese verwirren den Sensor bzw. führen zu Differenzen in den Messungen.

    2.) Den Tankwänden. Wenn der Sensor nicht präzise ausgerichtet ist, gibt es Reflexion der Ultraschallwellen von den Wänden. Ich habe sehr lange daran getüftelt den Sensor auszurichten. Manchmal hat schon eine kleine Drehung um Millimeter komplett andere Ergebnisse gebracht.

    3.) Der Wartezeit zwischen den Messungen. 4zap verwendet in seinem Script zuvor den Code: „time.sleep(0.00001)“. Ich habe den Verdacht, dass bei zu kurzen Abständen zwischen den Messungen noch Echos in meinem Tank der vorhergehenden Messung „rumgeistern“, welche den Sensor verwirren.

    4.) Der Stromversorgung des RasPi. Das Netzteil meines RasPi ist vor kurzem verstorben. Seit dem ich den RasPi nun mit einem 2,4A Netzteil und einem dickeren USB-Kabel versorge, habe ich den Eindruck, dass die Messergebnisse genauer geworden sind.


    Nachdem ich den fast identischen Ur-Code des Scripts mit numerischen Methoden zur Filterung von Ausreisermessungen und statistischen Methoden zur Verbesserung der Ergebnisse ergänzt habe, habe ich die Ergebnisgenauigkeit in meinem Fall auf ca. unter einen Millimeter drücken können. Dazu nutze ich aber hunderte von Einzelmessungen mit einer gesamten Ausführungsdauer von ca. 50-500 Sekunden um letztlich eine Höhe des Heizölstands als ein einzelnes Ergebnis zu ermitteln. Da der RasPi sonst nichts anderes zu tun hat und es keine Rolle spielt, wie lange der RasPi messen tut, stört mich dies jedoch nicht.

    Gruß Bracew

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!