Problem: UltraSonic (e.g. HC-SR04) Metric

  • Ich versuche gerade eine universell einsetzbare und möglichst korrekte Klasse für'n HC-SR04 zu erstellen, aber scheitere gerade etwas an der Berechnung :longline:


    Der Grundwert der Schallgeschwindigkeit beträgt 34326 Meter pro Sekunde bei trockener Luft und 20°C.


    Bedeutet also: Zur korrekten Berechnung wie lange ein Signal unterwegs war hängt von sowohl Lufttemperatur als auch Feuchtigkeit ab. Ersteres mit aufzunehmen erscheint mir daher logisch, letzteres nicht unbedingt?


    Auch habe ich bei der allgemeinen Berechnung gerade einen Knoten im Kopf.... Irgendwie finde ich über Google unterschiedliche Werte und bin jetzt total verwirrt :dau1:


    Da der Echo gesendet und wieder empfangen wird werden die vergangenen Microsekunden (der relevante Teil) durch 2 geteilt um die Entfernung zum Objekt zu beziffern. Der Teil ist soweit klar, aber mit welchen Werten muss man da rechnen? Im Netz finden sich Angaben wo time_elapsed durch 0.000058 für cm geteilt wird und durch 0.000148 für inches - aber wieso, woher stammt dieser Wert?



  • Bedeutet also: Zur korrekten Berechnung wie lange ein Signal unterwegs war hängt von sowohl Lufttemperatur als auch Feuchtigkeit ab. Ersteres mit aufzunehmen erscheint mir daher logisch, letzteres nicht unbedingt?


    Beides beeinflusst die Dichte der Luft und dahingehend auch die Geschwindigkeit mit welcher sich die Schallwelle durch das Medium bewegt. Der Luftdruck spielt jedoch auch noch eine Rolle für die Berechnung Schallgeschwindigkeit.


    Woher der Umrechnungsfaktor 0.000058 kommt kann ich auch nicht wirklich nachvollziehen. Hast du da einen Link woher du den hast? Habe das mal selber nachgerechnet und komme auf einen Faktor von 171.63 um von Millisekunden auf Centimeter umzurechnen (Bei 343.26m/s Schallgeschwindigkeit).


    Edit: Du kannst auch direkt 343.26m/s * 0.1ms = 34.326cm rechnen (Zeit für einen Weg). Das Resultat wäre dann direkt in cm. Oder direkt mit der Totalzeit: (343.26m/s * 0.2ms)/2=34.326cm


    Grüsse

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

    Edited 3 times, last by Apop85 ().

  • Die Werte gelten für die Zeitangabe in Sekunden.


    Entfernung (m) = Zeit (s) * Schallgeschwindigkeit (m/s) / 2

    entspricht

    Entfernung (cm) = Zeit (s) * Schallgeschwindigkeit (m/s) * 100 / 2

    entspricht

    Entfernung (cm) = Zeit (s) * 343,26 * 100 / 2

    entspricht

    Entfernung (cm) = Zeit (s) * 17163 bzw. Zeit (µs) * 0,017163

    oder als Kehrwert

    Entfernung (cm) = Zeit (s) / (1/17163)

    entspricht

    Entfernung (cm) = Zeit (s) / 0,000058 bzw. Zeit (µs) / 58


    Da 1 inch = 2,54 cm


    Entfernung (cm) = Zeit (s) * 17163

    =>

    Entfernung (inch) = Zeit (s) * 17163 / 2,54

    entspricht

    Entfernung (inch) = Zeit (s) * 6757 bzw. Zeit (µs) * 0,006757

    oder als Kehrwert

    Entfernung (inch) = (Zeit (s) / (1/6757)

    entspricht

    Entfernung (inch) = Zeit (s) / 0,000148 bzw. Zeit (µs) / 148

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Guckst du hier: http://www.dl1glh.de/ultraschall-anemometer.html


    Mal davon abgesehen, dass bei so einem billigen Sensor der Messfehler viel zu groß sein dürfte, als dass eine Einbeziehung von Luftdruck, Luftfeuchtigkeit und Temperatur Sinn macht (außer bei relativ großen oder kleinen Werten), müsstest du korrekterweise noch den Wind mit einbeziehen ;)


    Ist auf der Seite alles erklärt, ein bisschen scrollen.

  • Die drei Faktoren beeinflussen alle die Dichte (p) der Luft welche dann in die Berechnung der Schallgeschwindigkeit einfliesst.


    • Temperatur beeinflusst die Brownsche Molekularbewegung. Heisst bei je wärmer umso mehr bewegen sich die Moleküle und umso mehr dehnt sich das Material/Gas (in diesem Fall die Luft) aus. (Dichte sinkt bei steigender Temperatur)
    • Die Luftfeuchtigkeit beeinflusst ebenfalls die Dichte da wenn die Luft mit Wasserdampf angereichert wird diese auch entsprechend Schwerer/Dichter wird.
    • Druck: Das Gas wird durch den Druck komprimiert und wird entsprechend dichter

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

    Edited once, last by Apop85 ().

  • Euch beide :D


    Naja, vermutlich hast du recht Linus ... Für so billige Sensoren wie den HC-SR04 dürfte das relativ wurscht sein, die paar mm Abweichung sind irrelevant :X


    https://github.com/meigrafd/Sample-Code/blob/master/robot.py


    Trotzdem Danke für eure Mühe :thumbup:

  • In Python kann ich dir leider nicht wirklich Helfen wie du dir denken kannst ;). Aber die Formel für die Dichte wäre wie folgt:


    Druck in Pascal / (Spezifische Gaskonstante x (Temperatur in Kelvin)) = Dichte in kg/m^3


    Beispiel Luft:


    Spezifische Gaskonstante Luft: 287.05 J/(kg.K)

    Temperatur: 20°C --> 20+273.15 = 288.15K

    Druck: 1013.15hPa bzw 101315Pa


    101315 / (287.05 x (273.15 + 20)) = 1225kg/m^3


    Was J/(kg.K) für eine Einheit ist kann ich auch ned sagen :conf:


    Was das Kompressionsmodul die bei der berechnung der Schallgeschwindigkeit angeht muss ich auch erst noch recherchieren. Aber denke den Teil mit der Dichte kannst du sicher einfach in Python einfliessen lassen.

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

    Edited once, last by Apop85 ().

  • Die entscheidenden Faktoren für die Schallgeschwindigkeit sind tatsächlich Temperatur und Druck. Den Druck kann man von vornherein in die Tonne treten.

    Bei einer Temperaturänderung von 5°C ändert sich die Geschwindigkeit um 3mm/ms (3m/s). Auf eine Entfernung von 100cm benötigt der Schall bei 20°C 0,0029s also 2,9ms. Bei 25°C 0,01ms länger. Also völlig irrelevant für normale Anwendungen. Die Qualität des Sensors ist nicht entscheidend, Zeit bleibt Zeit!

  • Die Qualität des Sensors ist nicht entscheidend, Zeit bleibt Zeit!

    Naja doch. Wer einen 2€ Sensor im Einsatz hat den interessieren 0,01ms Unterschied nicht. Wer aber 200€ ausgegeben hat der möchte auch möglichst präzise Messwerte.


    Bei der Vermessung kann die Luft-Temperatur also schon wichtig sein: ob ein Objekt 100 oder 101cm entfernt ist mag für das navigieren eines Roboters nicht wichtig sein, aber wer die Messdaten auch noch für was anderes verwenden will könnte sich über solche Abweichungen ärgern/wundern...

  • Hey meigrafd


    Du hast zwar das Thema als erledigt markiert aber rein aus persönlichem Interesse hab ich etwas weiter recherchiert ;)


    Auf Wikipedia (Siehe Abschnitt: Schallgeschwindigkeit im realen Gas) ist sonst eine Näherungsformel beschrieben welche die Temperatur miteinberechnet:


    [Blocked Image: https://wikimedia.org/api/rest…cfd46a13395f7937b13d0b388]


    Wären bei 20°C:


    (331.5 + (0.6 x 20 ) = 343.5m/s


    Zwischen -20°C und +40°C müsste diese Formel eine Genauigkeit von 99.8% aufweisen gemäss wiki.


    Das Kompressionsmodul für Luft habe ich inzwischen hier gefunden, jedoch ergibt die hier angegebene Formel keine 343.5m/s. Ich habe wie im Wiki beschrieben den adiabatischen Wert verwendet.


    [Blocked Image: https://wikimedia.org/api/rest…0eb9608af74e76bb888fcafa0]


    C = Wurzel aus (1.42 x 10^5 / 1125) = 11.23 (?)

    Hier stimmt also etwas noch nicht wirklich oder die Formel ist dazu ungeeignet und ich habe das aus der entsprechenden Beschreibung nicht richtig interpretiert...



    Weiter gibt es noch diese Formel welche wohl etwas genauer ist (keine %-Angabe über die Abweichung).

    [Blocked Image: https://wikimedia.org/api/rest…5bb7f39d095338be0c59133e9]


    [Blocked Image: https://wikimedia.org/api/rest…8036c29d3e1e8eadef486f2af]


    Was die Luftfeuchtigkeit angeht ist der Unterschied zwischen 0% Luftfeuchtigkeit und 100% Luftfeuchtigkeit +0.375%. Könnte man also auch mit einer entsprechenden Berechnung noch miteinfliessen lassen.


    Wäre Dann bei 50% Luftfeuchtigkeit 343.5087m/s * (1+(0.375 * 0.5) / 100) = 344.1527m/s


    Ich vermute genauer kannst du es kaum Messen ohne direkt noch ein Massenspektrometer mit anzuhängen um die durchschnittliche molare Masse der Umgebungsluft zu detektieren ^^


    Grüsse Apop


    EDIT: Wenns ganz genau sein muss empfiehlt sich wohl so oder so eine Messung mittels Laser da dort nicht x Umgebungsvariablen miteinfliessen sondern nur die Lichtgeschwindigkeit und die Zeit eine Rolle spielt. Da sind 200€ für die Entfernungsmessung mittels Schall eher für die Tonne mmn ^^

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

    Edited 2 times, last by Apop85 ().

  • Ich hab mal folgende Formel in Python versucht umzusetzen (inkl Feuchtigkeit + umrechnung in cm) ^^


    [Blocked Image: https://wikimedia.org/api/rest_v1/media/math/render/svg/724def73194c6878036c29d3e1e8eadef486f2af] x (0.2ms / 2) = 34.35cm x 1.001875 = 34.41cm


    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

    Edited 2 times, last by Apop85 ().

  • Konstanten schreibt man per Konvention groß. :bussi2:

    (zivile) Krankenhäuser dürfen per Konvention nicht angegriffen werden. Über die Schreibweise von Konstanten hab ich da nix gefunden ;) Die oft zitierte PEP8 ist bloss ein Guide *duckundwech*

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Über die Schreibweise von Konstanten hab ich da nix gefunden

    ist das nicht ein Substantiv? da sollte man die Schreibweise finden :lol:

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)