Hallo Fitze,
Ultraschall folgt gut bekannten und meßbaren Naturgesetzen. -Sollte man nicht unterschätzen! Änderungen der Umgebungstemperatur haben Einfluß auf die Messung. Feuchte und Luftdruck sind gut vernachlässigbar.
(1)
Nehmen wir 40kHz, mit einer Wellenlänge Lambda = c / f = 8,5 mm in T = 1/f = 25µsec Laufzeit.
(2)
Nehmen wir weiter, den 40kHz China Ultraschall-Entfernungssensor HC-SR04, der sich gerne von einer, zur nächsten Messung um ganzzahlige Vielfache von T = 25µsec vertut...
(2)
Und wir messen mit dem Timer1 eines 16MHz Arduinos, ohne Prescaler, mit einer Taktzeit von 62,5nsec.
Heißt, die 8,5 mm Wellenlänge können wir mit 25µsec/62,5nsec = 400 Teile, bzw. 21,25µm = 0,02125mm auflösen.
(3)
Dem Laufzeit-Meßprinzip des HC-SR04 folgend, mißt er die doppelte Strecke, also das hinlaufende Signal plus dem Reflektiertem. Das verdoppelt die Laufzeit und damit auch die Auflösung auf 0,010625.
Wenn Du also während der Messung alle Luftbewegung minimierst, die Temperatur mißt und den systematischen Fehler vom Vielfachen von 8,5mm/2 (Wegen hin und zurück-Welle) programmatisch neutralisieren kannst, sind die Überlegungen doch mehr als ermutigend.
Ich habe geschildertes schon praktiziert, wobei die Objektabstandsmessungen eher durch ein unmerklich kippelndes Objekt beeinträchtigt wurden, als durch andere Randbedingungen.
Wenn Du Anstrengungen in diese Richung unternehmen möchtest, lohnt sich ein Studium zu Timern und Interrupts des Arduino. Goggle mal danach, in Verbindung mit Heise. Dr. Stahl heißt er, glaube ich, der dazu gut verständlich schrieb. Dann brauchts Detailkenntnisse über Arduino Portoperationen und Bitoperationen.
Markus hier will Frequenzen und Phasenverschiebungen messen. Er muß sich dazu mit den selben Arduino-Detailkenntnissen auseinandersetzen.
Ich helfe gerne, wenn Du Dich ernsthaft daran gibst.
MfG,
und rechne immer mit dem fliesskomma