Berechnung der Schallwellenlänge mit einem Arduino

Ich verwende einen Arduino Uno R3. Ich muss die Wellenlänge von Schall einer bestimmten (bekannten) Frequenz messen. Durch Einsetzen in die Gleichung:

Vschall = Frequenz * Wellenlänge

...Ich möchte die Schallgeschwindigkeit im Medium berechnen. Da ich neu in Arduinos und Elektronik bin, plane ich, einen Lautsprecher zu verwenden, um die (bekannte) Frequenz aus dem Arduino zu erzeugen. Ich habe auch ein ADMP 401 Mikrofon. Aber wie verarbeite / berechne ich die Wellenlänge des Schalls auf dem Arduino und drücke die Ausgangsgeschwindigkeit auf den seriellen Monitor?

BEARBEITEN: Ist es möglich, das vom ADMP 401-Mikrofon aufgenommene Audio einfach zu nehmen und über den seriellen Bus auf einen Computer zu übertragen?

Da haben Sie ein Problem: Sie haben zwei Unbekannte: Vsound und Wavelength . Könnten Sie einen Impuls vom Lautsprecher über eine bekannte Entfernung und Zeit senden, wie lange es dauert, bis Sie das Mikrofon erreichen?
Ich dachte zunächst an Zeitverzögerung! Aber ich hatte das Gefühl, dass dieser Ansatz genauer sein könnte (und ich habe die Möglichkeit, ein bisschen mehr über EE zu lernen). Wenn die Wellenlänge vom Arduino erhalten werden kann (ich glaube nicht, dass es an sich genau unbekannt ist), sollte es möglich sein, Vsound einfach zu berechnen.
Ich weiß nicht, wie genau diese Idee wäre, aber Sie könnten eine Röhre wie das Diagramm in Stehende Wellen in einer Luftsäule aufbauen und den Arduino einen Motor steuern lassen, der das Mikrofon in der Röhre bewegt, um das erste Maximum in der Röhre zu finden Amplitude. Bei 1KHz in Luft wären es ca. 30cm, also im Bereich physikalisch erreichbarer Apparate. Oder es könnte genauer sein, das erste (oder vielleicht zweite) Amplitudenminimum zu finden. Bei der Ping-Methode sollten Sie in der Lage sein, aus großer Entfernung eine angemessene Genauigkeit zu erzielen.
Ich könnte Ihnen eine nette Methode dafür geben (mit 2 Mikrofonen), aber bitte beantworten Sie zuerst diese Fragen. Würden Sie nur 1 Arbeitsfrequenz (wie 1 kHz) definieren? Welche Genauigkeit benötigen Sie für die Schallgeschwindigkeit? Welchen Geschwindigkeitsbereich möchten Sie (250 m/s bis 350 m/s)?
Ja, ich würde nur eine Arbeitsfrequenz definieren. Die Schallgeschwindigkeit kann eine Genauigkeit von +/- 5 m/s haben. Und ja, ein Geschwindigkeitsbereich von 300 - 400 m/s wäre perfekt :)
@RawBean was ist deine Idee?

Antworten (4)

Richten Sie den Eingangsverstärker so ein, dass die Audiowellenform in eine Rechteckwelle geclippt wird. Dann füttern Sie diese in einen Pin und verwenden Sie eine der Frequenzmessbibliotheken , z.

Interessant. Könnten Sie die Schaltpläne des oben genannten Eingangsverstärkers verlinken?

Andrew Morton hat es gesagt, ich werde es einfach sagen und weiter ausführen.

Bei einer Einzelpunktmessung des momentanen Schalldrucks von einer Art Wandler ist das einzige, was Sie möglicherweise daraus ableiten können, die Frequenz. Die einzige Möglichkeit, die Wellenlänge unabhängig zu erhalten, besteht darin, Ihr Vergnügen zu verdoppeln, Ihren Spaß zu verdoppeln - Sie müssen entweder die genaue Entfernung zum sendenden Gerät kennen, oder Sie benötigen einen anderen Empfänger. Darüber hinaus müssen Sie bei nur zwei Empfängern diese immer noch in einer geraden Linie mit dem Sender platzieren, mit einem ziemlich großen Abstand zwischen ihnen, damit Sie eine sinnvolle Frequenzverzögerung zwischen den beiden erzielen können. Mit drei könntest du eine Richtwirkung herstellen, aber sie müssen immer noch weit genug voneinander entfernt sein, um eine merkliche Zeitverzögerung zu erzeugen, um die Geschwindigkeit festzulegen. Ab einer einzelnen Messeinheit müssen Sie auch berücksichtigen, wie lange es dauert, bis Sie die Proben erhalten. Von mehreren Einheiten benötigen Sie sehr genaue Zeitstempel.

Wellenlängenberechnungen hängen fast immer von der Verwendung eines bekannten Wertes der Übertragungsgeschwindigkeit durch ein gegebenes Medium ab. Die Big-Daddy-Experimente zur Bestimmung der Vibrationsgeschwindigkeit durch feste Materialien sind wirklich ziemlich mühsam einzurichten, aber dann bekommen wir schöne Tabellen mit bekannten Werten, mit denen wir auf unseren Schreibtischen spielen können.

Danke. Könnten Sie dann einen Weg vorschlagen, um die Frequenz des Schalls zu messen?
Die Sache mit der Frequenz ist, dass sie ein Maß dafür ist, wie oft etwas passiert. Die Frequenz kann ziemlich einfach gemessen werden, indem eine Audio-Wellenform gesampelt und mit einigen ziemlich einfachen Bibliotheken verarbeitet wird. Einzelne Sinuswellenquellen erfordern im Grunde keine Verarbeitung, sondern benötigen nur einen kurzen Algorithmus, um durch die Samples zu rollen, Peaks zu finden, sie mit der bekannten Samplingrate zu vergleichen und fertig! Frequenz. Aber zusammengesetzte Klänge, die die meisten sind, brauchen zuerst ein wenig Liebe von einer Sache, die als schnelle Fourier-Transformation bezeichnet wird.

Prinzip

Ich schlage Ihnen vor, 2 Mikrofone anstelle von einem zu verwenden. Die Idee ist, das Signal gleichzeitig (im Vergleich zur Signalperiode) an zwei verschiedenen Orten zu erfassen und zu multiplizieren, um die Wellenlänge zu extrahieren.

Geben Sie hier die Bildbeschreibung ein

Sie erhalten 1 Signal pro Standort. Das zweite Signal wird um eine bestimmte Zeit verzögert. Wir nennen es Delta δ . Nehmen wir an, bei Mikrofon Nummer 1 haben wir eine reine Sinuswelle M ich C 1 ( T ) = Sünde ( ω T + ϕ ) und bei Mikrofon Nummer 2 haben wir M ich C 2 ( T ) = Sünde ( ω T + ϕ δ )

Delta hängt nur von der Wellenlänge ab, weil wir den Abstand zwischen den beiden Mikrofonen festgelegt haben. Also, wenn wir Delta bekommen, bekommen wir die Geschwindigkeit.

Sehen Sie zum Beispiel, wenn der Abstand von 2 Mikrofonen genau einer halben Wellenlänge entspricht, dann hätten Sie solche Signale:

Geben Sie hier die Bildbeschreibung ein

Hinweis: Ich gehe davon aus, dass die Amplitude zwischen den beiden Mikrofonen gleich ist.

Ziehen Sie nun die Verwendung dieser Formel in Betracht

Sünde ( A ) Sünde ( B ) = 1 / 2 ( cos ( A B ) cos ( A + B ) )

  1. Führen Sie diese Multiplikation in der Firmware durch

M ich C 1 ( T ) M ich C 2 ( T ) = 1 / 2 ( cos ( δ ) cos ( 2 ( ω T + ϕ ) δ ) )

  1. Durch Tiefpassfilterung (oder Mittelwertbildung) M ich C 1 ( T ) M ich C 2 ( T ) Sie würden nur den konstanten Teil erhalten, der ist

    1 / 2 cos ( δ )

  2. Berechnen Sie dann Delta

    δ = arccos ( 2 l Ö w P A S S ( M ich C 1 ( T ) M ich C 2 ( T ) ) )

  3. Konvertieren Sie schließlich in das Bogenmaß in Meter

    λ = δ / 2 π D

    Siehe dieses Bild, wo ich ein Delta von 1 rad und einen Butterworth-Tiefpassfilter 2. Ordnung nehme.

Geben Sie hier die Bildbeschreibung ein

Anforderungen

  • Sie müssen so eingestellt werden, dass sie mit der Schallquelle übereinstimmen
  • Der Abstand d zwischen ihnen muss genau gemessen werden, er wird Ihre Referenz im Raumbereich sein.
  • Der Abstand d zwischen ihnen muss kleiner als 1/2 Wellenlänge sein. Zu Ihrer Information, für ein 1-kHz-Signal wären es maximal ~ 17 cm

Realisierung

  • Verbinden Sie den Ausgang des Mikrofons mit den analogen Eingängen auf der Platine des Arduino.
  • Wenn Sie es sich leisten könnten, fügen Sie einen Bandpassfilter zwischen den Mikrofonen und den Arduinos hinzu. Die Grenzfrequenz liegt um die Quellwellenfrequenz herum.
  • Verwenden Sie die Funktion AnalogRead() des Arduino für mic1 und rufen Sie als nächste Anweisung die für mic2 auf. Da das Lesen 100 us dauert, ist es wichtig, dies zu berücksichtigen und eine Frequenz zu verwenden, die langsam genug ist (z. B. 100 Hz), um die Auswirkung dieser Latenz zu minimieren.
Das ist eigentlich eine sehr schöne Idee. Aber da habe ich Zweifel: δ=arccos(2∗low−pass(mic1(t)∗mic2(t))) Wofür steht der Tiefpassterm? Ist low−pass(mic1(t)∗mic2(t) dasselbe wie 0,5 cos (delta)?
Außerdem kann ich sehen, dass bei der Berechnung des Delta-Terms ein erheblicher Fehler auftreten kann (insbesondere ohne Bandfilter). Ich kritisiere Ihr Projekt nicht (ich denke immer noch, dass es eine wirklich gute Idee ist, weil 't' jetzt eliminiert wird), aber wie wäre dies der bloßen Messung der Zeitverzögerung überlegen?
Der von mir verwendete Tiefpass () ist eine Funktion, die nur den konstanten Wert (DC, wenn Sie es vorziehen) des Signals behält. Eine Mittelung wäre in Ordnung, wenn auch nicht die beste. Wenn Sie über einige Fähigkeiten in der Signalverarbeitung verfügen, können Sie einen IIR-Filter implementieren. Ja, die Berechnung des Tiefpasses (mic1(t)*mic2(t)) wäre dasselbe wie 0,5 cos(delta).
Entschuldigung, aber ich habe mir nicht die Mühe gemacht, den Fehler einzuschätzen. Ohne Bandpassfilter könnte der Fehler natürlich riesig sein. Dies hängt vom Signal-Rausch-Verhältnis Ihres Setups ab. Beim Vergleich meiner Lösung mit "bloßes Messen der Zeitverzögerung" sehe ich nicht, wie es möglich ist, nur die Zeitverzögerung zu messen. Die Zeitverzögerung zwischen was und was?
Ah ja. Die Zeitverzögerung zwischen den beiden Mikrofonen, die die Schallwelle empfangen.
Aus Hardware-Sicht sind beim Vergleich der beiden Lösungen mit niedrigem SNR die Komponenten gleich (2 Mikrofone). Aus Sicht der Algorithmusimplementierung ist meine Lösung einfach, da sie auf einer Stichprobenerfassung, einer Multiplikation und Akkumulation der Ergebnisse (zur Mittelwertbildung) basiert. Wenn Sie die Zeitverzögerung zwischen den 2 Sinus messen, wie würden Sie dies implementieren? Sie müssen die Verzögerung an einer festen Stelle der Sinuswelle messen. An welchen Stellen? Wann erreichte das Signal seinen Höhepunkt? seine Unterseite? wenn es die Null überquert, weil Sie das Signal abgeschnitten haben? Welche Robustheit gegenüber einer Rauschspitze?
Faire Punkte. Ich sehe auch, dass ein Bandfilter nicht allzu schwer herzustellen ist, also denke ich, dass dies praktikabel ist? Gibt es irgendwelche Vorbehalte, die Sie mir beim Bau geben können?
Natürlich ist es lebensfähig. Ich rate Ihnen, einen passiven RC-Filter herzustellen: Lesen Sie dies als Einführung electronic-tutorials.ws/filter/filter_4.html es sind 2 Widerstände und 2 Kondensatoren pro Filter. Sie könnten dann sogar auf einem Stripboard bauen und verschiedene Werte ausprobieren.
Sehr gut danke Ihnen. Ich werde Sie mit den Ergebnissen dieses Experiments +50 auf dem Laufenden halten :)
Ich brauche vielleicht etwas mehr Hilfe, um zu sehen: d
Gern geschehen. Und danke, dass du die Ergebnisse mit mir teilst :-)
Hey, entschuldige die späte Antwort, ich habe versucht, einen Tiefpassfilter mit einer 473-Kappe und einem 5,1-kOhm-Widerstand zu verwenden. Leider verzerrt der Tiefpass die Sinuswelle stark. Was denkst du sollte ich tun?
Hier ist ein Screenshot, der dasselbe zeigt. Das Wellenmuster links, das einer Rechteckwelle ähnelt, ist eine ungefilterte Sinuswelle, und das gezackte Muster rechts ist die gefilterte Ausgabe: i.imgur.com/teOnjY1.png für eine 500-Hz-Sinuswelle.
Schön dich wieder zu hören. In Bezug auf Ihr Filterproblem sieht es seltsam aus ... Auf dem Bild konnte ich bei Tick 3:15 sehen, dass das Signal wirklich wie ein tiefpassgefiltertes Signal aussieht. Es hebt sich schnell an und braucht dann Zeit, um sich zu stabilisieren. Aber nach Tick 3:30 sieht es verrückt aus. Ich frage mich, wie Sie Ihren Filter elektrisch anschließen, vielleicht haben Sie einfach einen schlechten Kontakt. Um Sie bei diesem Filterthema weiter zu unterstützen, können Sie eine neue Frage stellen. Oder finden Sie mein LinkedIn-Profil auf meiner SO-Profilseite und treten Sie mit mir in Kontakt.
Ah, ich fürchte, ich bin nicht auf LinkedIn. Aber sollte eine tiefpassgefilterte Ausgabe im Idealfall so aussehen? Ich sollte sagen, dass der Oszilloskop-Messwert vom A0-Pin des Arduino stammt und nicht sehr genau ist, also könnten es nur seltsame Messwerte sein ...
Nein nicht wirklich. Ich habe dort ein Beispiel für die Ausgabe verschiedener Tiefpassfilter eingefügt: imgur.com/a/Ev2gh Übrigens, was ist die Abtastfrequenz?

Die Geschwindigkeit ist auch leicht frequenzabhängig, daher können Sie für Annäherungen die Echorückkehrzeit eines Impulses für eine bekannte Entfernung messen oder Wavelets verschiedener Frequenzen mit höherem S/N-Verhältnis verwenden, die in Rx eingestellt sind, um Rauschen auszublenden. Alternativ können Sie an jedem Ende ein Mikrofon mit einem an einem Ende gekoppelten Lautsprecher verwenden, aber Sie benötigen immer noch die Entfernung oder eine andere Referenz, z. B. die Geschwindigkeit in der Luft bei bekannten Umgebungsbedingungen.