Wie kann man Raspberry Pi mit einem Elektretmikrofon verbinden, um Schallpegel in dB zu erkennen?

Ich muss Geräuschpegel in einem geschlossenen Bereich erkennen, also dachte ich, dass dies die richtige Wahl sein könnte.

/*EDIT
Ich möchte Geräuschpegel von etwa 30-60 dB sammeln, normalerweise menschliche Gespräche oder einfach nur Umgebungsgeräusche. Was ich damit wirklich erreichen möchte, ist, Geräusche zu sammeln, die für Menschen wahrnehmbar sind.
*/

Ich habe ein Elektret-Mikrofon mit automatischer Verstärkung von Adafruit https://www.adafruit.com/product/1713 gekauft

Ich versuche, es mit einem Himbeer-Pi 3 zu verbinden, um Schallpegel zu erkennen, aber ich konnte keine Lösung dafür finden, da die meisten Tutorials für Arduino oder andere Breakout-Boards sind, hat jemand eine Lösung dafür?

Ich habe verstanden, dass der Ausgang des Mikrofons analog ist und ich einen ADC-Konverter ADS1115 und MCP3008 habe, die nützlich wären, aber ich konnte nicht nach der Lösung suchen, die mich zur Verwendung des Mikrofons und des Konverters führen würde.

// BEARBEITEN Ich konnte den Sensor an ADC und MCP anschließen, die Werte bleiben jedoch konstant und scheinen sich überhaupt nicht zu ändern, selbst das Spielen von Songs in das Mikrofon ändert die Werte nicht. Ich bekomme einen konstanten Wert von 200 bis 300 auf MCP und etwa 1056 auf ADC.

Befolgte Tutorials auf https://learn.adafruit.com/adafruit-microphone-amplifier-breakout/measuring-sound-levels , aber ich muss sie in Dezibel auf RPI ausgeben, ich muss die Daten an einen Server senden.

Ich habe die Bibliotheken von Adafruit auf MCP3008 und ADC1115 verwendet, mache ich das falsch?

Ich muss die Schallpegel in Dezibel erfassen und auf einem Server speichern.

Beifall

Haben Sie alle Anweisungen auf der verlinkten Seite genau und vollständig befolgt: learn.adafruit.com/adafruit-microphone-amplifier-breakout/…
@jonk Ich habe dieses Tutorial vollständig befolgt. Ich frage hier nach einer Lösung, die es mir ermöglichen würde, RPI zum Lesen der Werte zu verwenden, und die Werte, die ich von RPI lese, reagieren nicht auf die "Geräusche, die ich gemacht habe". In diesem Tutorial verwendet Adafruit nur Arduino, und ich konnte Spannungswerte erfassen, aber ich brauche Schallpegel. Vielleicht könnten Sie vorschlagen, wie ich diese Werte in Schallpegel usw. in Dezibel umwandeln könnte?
Spannungswerte sind das, was Sie erhalten. Um diese in etwas anderes umzuwandeln, z. B. Schallpegel, müssen Sie das Datenblatt für das von ihnen verwendete Mikrofon UND den von ihnen verwendeten IC mit AGC sorgfältig lesen, und Sie müssen die Mathematik selbst entwickeln. Das Mikrofon hat Spezifikationen bezüglich seines Verhaltens als Schalldruckwandler. Der IC wird mehr Spezifikationen haben. Wie auch immer, es ist das, was ich tun würde, wenn dies mein Projekt wäre. Setzen Sie sich mit dem Papierkram hin, ziehen Sie etwas Papier heraus, lesen Sie, bis ich es vollständig verstanden habe, entwickeln Sie dann die Mathematik und dann den Code. Das würde ich dir auch vorschlagen.
Haben Sie darüber nachgedacht, die Schallpegel-zu-dB-Umwandlung im analogen Bereich durchzuführen?
@jonk klingt fair genug, würde diese Lösung zuerst ausprobieren.
@ThreePhaseEel Das habe ich sicherlich nicht, könnten Sie diese vorgeschlagene Lösung näher erläutern?
Zunächst möchte ich eigentlich fragen, ob das, was ich vorschlage, die Verwendung des Mikrofons zur Messung von Schallpegeln, tatsächlich machbar ist?
Ich würde es nicht wissen. Ich habe keine Ahnung, welchen SPL-Bereich Sie wollen. Ich habe die AGC-Details des IC nicht gelesen. An das Mikro habe ich nicht gedacht. Und wenn Sie ernsthaft nach einem signifikanten Protokollbereich suchen, dann denke ich, dass ThreePhaseEel Sie in die richtige Richtung bewegt (analoge Domäne zuerst). Wenn Sie mehr geschrieben haben, ... Aber Sie haben es nicht getan. Ich habe also meistens das Gefühl, dass Sie etwas gekauft haben, das Sie nicht dorthin bringt, wo Sie hinwollen. Aber Sie könnten in Ordnung sein, wenn Ihr Sortiment klein und genau richtig für das ist, was Sie gekauft haben.
Denken Sie daran, dass die Elektretausgabe normalerweise linear mit Pascal skaliert. Also nicht, mit Dezibel, wobei 6 dB einen Faktor von 2 in Pascal bedeuten. Sie sollten Ihren eigenen gewünschten Bereich sorgfältig prüfen und spezifizieren und dann ebenso sorgfältig einen geeigneten Wandler auswählen, der diesen Bereich unterstützt. Dann müssen Sie herausfinden, welche Art von elektronischer Unterstützung und Konditionierung (Vorverstärker usw.) erforderlich ist, um die Dinge mit Ihrer ADC-Fähigkeit und Ihrem gewünschten Leistungsbereich in Einklang zu bringen. Angesichts Ihres Mangels an Informationen in Ihrem Q vermute ich, dass Sie nichts davon getan haben.
Haben Sie darüber nachgedacht, dass die AGC Ihre Ergebnisse tatsächlich durcheinander bringen könnte?
@ThreePhaseEel Das kam mir auch in den Sinn. (Ich habe gelesen, dass es auf dieser Platine einige manuelle Verstärkungsregler gibt.) Ich werde jetzt keine Datenblätter lesen. Das OP hat nicht einmal darüber nachgedacht, welche Art von SPL verarbeitet werden soll (0 dB wird referenziert 20 μ Pa .) 50 Mal so viel, 1 MPa , geht es um ein Flüstern. Ein Wecker kostet etwa das 100-fache. 100 Mal noch mehr und es wird schmerzhaft zu hören. Das alles könnte für das OP von Interesse sein. Aber welcher Elektret ist über 5 oder 6 Größenordnungen von Nutzen? Eine vollständige Offenlegung ist erforderlich, denke ich. (Sollte Absatz Nr. 1 von jedem Q hier sein.) Und selbst dann ...
@jonk Ich möchte Geräuschpegel von etwa 30-60 dB sammeln, normalerweise menschliche Gespräche oder nur Umgebungsgeräusche. Was ich damit wirklich erreichen möchte, ist, Geräusche zu sammeln, die für Menschen wahrnehmbar sind. Es ist wahr, dass ich diese Terminologien über die Daten, die ich sammeln möchte, wirklich nicht verstehe, und ich möchte Ihnen für Ihren Rat danken.
Also ein dynamischer Bereich von etwa 30-40 ... Welche Spannungswerte erhalten Sie bei den niedrigsten Pegeln? Welche Spannungswerte erhalten Sie am höchsten? Haben Sie ein separates, kalibriertes Gerät, mit dem Sie SPL zum Vergleich messen können? Liefert Ihnen die AGC im Chip zusätzliche Informationen, damit Sie die Spannungen interpretieren können?
Stellen Sie sicher, dass Sie eine gute Verbindung zum Mikrofon bekommen. Ich habe dieses Adafruit-Elektretmikrofon-Breakout-Board in einem einfachen Projekt verwendet und bekam schlechte Daten, bis ich den Header auf das Breakout-Board gelötet hatte.

Antworten (3)

Sie haben eine Mikrofonkarte mit automatischer Verstärkung ausgewählt. Das ist genau das GEGENTEIL von dem, was Sie brauchen. Sie können die tatsächlichen Audiopegel nicht messen, wenn etwas vorgeschaltet ist, das alle Audiopegel ändert ("Auto-Gain"). Also müssen Sie zuerst das richtige Mikrofonmodul verwenden, das Ihnen die tatsächlichen, ehrlichen, unveränderten Audiopegel liefert.

Zweitens versuchen Sie, Audio-LEVELS zu messen, nicht die eigentliche Audio-WELLENFORM selbst. Das heißt, Sie müssen das Audiosignal mitteln oder integrieren, um die "Hüllkurve" der Audiopegel zu erzeugen. Sie können dies in der Software tun, indem Sie das Audio mit einer hohen Rate abtasten und wild mathematische Berechnungen durchführen, oder Sie können dies viel einfacher in der Hardware tun, indem Sie das Audiosignal gleichrichten und in ein sich bewegendes DC-Signal integrieren, das den Audiopegel an einem bestimmten Punkt darstellt Moment. Dann können Sie diesen variierenden DC in Dezibel oder was auch immer abtasten und skalieren.

Ich würde sehr empfehlen, sich eine Mikrofonplatine zu besorgen, die im Wesentlichen genau das tut, was Sie vorschlagen. Nämlich das Sparkfun Sound Detector Board. Dieses Board verfügt über die Elektret-Mikrofonkapsel und auch den Mikrofonvorverstärker sowie einen Spitzenwertdetektor und einen Ausgangspufferverstärker. Alles, was Sie tun müssen, ist, den Peak-Detektor-Ausgang von dieser Platine mit einem analogen Eingangspin Ihres Arduino zu verbinden, und Sie erhalten die Audio-Hüllkurve auf einem Silbertablett geliefert. Kinderleicht.

Beispiel: https://www.sparkfun.com/products/12642

Eigentlich muss ich in der Lage sein, dies mit rpi zu verwenden, wenn ich bedenke, dass ich einen ADC / MCP habe. Kann ich den Sensor daran anschließen?
Es macht keinen Unterschied. Das SparkFun-Board liefert ein schönes DC-Hüllkurvensignal, das für JEDEN Mikrocontroller oder ADC geeignet ist.
Seltsamerweise habe ich Schwierigkeiten, dieses Produkt vor Ort zu finden, darf ich fragen, ob diese Alternative angemessen ist? sgbotic.com/index.php?dispatch=products.view&product_id=752 Breakout-Board für INMP401 (ADMP401) MEMS-Mikrofon
oder diese sgbotic.com/… Breakout Board für Elektret-Mikrofon
Das sgbotic-Board ist nur eine "rohe" Mikrofonkapsel. Sie müssten das an den Mikrofoneingang des RasPi anschließen und eine Software entwickeln, um das Mikrofonsignal zu nehmen und es in die Schallpegelhüllkurve zu integrieren. 10 US-Dollar scheinen als Breakout-Board für eine 1-Dollar-Mikrofonkapsel ziemlich teuer zu sein.
was ist damit? INMP401 (ADMP401) MEMS-Mikrofon?
Sie können entweder ein Mikrofon in den Mikrofoneingang des RasPi verwenden und alles in Software erledigen, oder Sie benötigen ein Mikrofon, einen Mikrofonvorverstärker, einen Spitzendetektor und einen Integrator. Es macht kaum einen Unterschied, welches Mikrofon Sie verwenden. Für diese Angelegenheit würde jedes "Computermikrofon" an den RasPi angeschlossen werden.

Du hast erstmal das Falsche

Die automatische Verstärkungsregelung (AGC) auf Ihrer vorhandenen Mikrofonplatine ist hier nicht das, was Sie wollen - ein Schallpegeldetektor wird durch die Aktion der AGC-Schleife abgeworfen, die die Verstärkung überall ändert, während sie versucht, sie aufrechtzuerhalten einen konstanten Ausgangspegel (was würde man sonst von einer AGC-Schleife erwarten?). Sie können sich auch einfach ein billiges Elektretmikrofon wie das von Sparkfun besorgen und es direkt in dem von Ihnen zusammengestellten Schaltkreis verwenden.

Analoge Logarithmen sind hier der richtige Weg

Eine der Grundwahrheiten moderner, billiger ADCs, insbesondere derjenigen, die in hochintegrierten Systemen bereitgestellt werden, ist, dass ihr Dynamikbereich durch Rauschen im unteren Bereich und die niedrige verfügbare Versorgungsspannung im oberen Bereich begrenzt ist. Darüber hinaus nutzt die digitale Logarithmierung die Ihnen zur Verfügung stehenden ADC-Bits schlecht aus - kleine Signaländerungen am unteren Ende verursachen eine relativ große Änderung im Protokoll, sind jedoch für den ADC aufgrund seiner begrenzten Auflösung schwer zu unterscheiden .

Als Ergebnis all dessen würde ich einen linearen RMS-DC-Wandlerchip in dB verwenden, um Ihre Toneingabe in dB umzuwandeln, und dann diese erkannte "Steuerspannung" zu Messzwecken an Ihren ADC speisen. Zum Glück ist das nicht schwer – der RMS-DC-Wandler eines THAT4316 läuft problemlos mit 3,3 oder 5 VDC und ist einfach anzuwenden – eine Beispielschaltung, die ihn verwendet, das oben verlinkte Sparkfun-Elektretmikrofon und das rauscharme Dual-Mikrofon LT1678 Operationsverstärker ist unten gezeigt.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

OA1A, R5 und R6 sind ein nicht invertierender Verstärker mit Einzelversorgung und Verstärkung = 100, der als Mikrofonvorverstärker dient, dessen Eingang auf den Mittelpunkt des Versorgungsbereichs durch R2 vorgespannt ist, der auch das Mikrofon vorspannt. Die Verstärkung wurde gewählt, weil der THAT4316 einen minimalen Eingangspegel von 100 nA oder 100 uV mit dem gewählten Widerstand hat und wir mit der 5 mV/Pa-Empfindlichkeit des gewählten Mikrofons nur 1 uV vom Mikrofon für einen 30-dB-Eingang erhalten. C5 und R1 AC koppeln das Audiosignal an U1 und wandeln es jeweils in einen Strom um, während C2 der RMS-DC-Zeitkondensator ist. R3, R4 und OA1B erhöhen den Ausgangshub von +/-300 mV von U1, um ihn besser an den Eingangsbereich des ADC anzupassen. C1, C3, C4 und C6 bieten eine Versorgungsentkopplung verschiedener Art.

Beachten Sie, dass C2 und C5 Filmkondensatoren sein sollten (keine Keramik-, Elektrolyt- oder Tantalkondensatoren) und R1, R3, R4, R5 und R6 1 % oder bessere Widerstände sein sollten, vorzugsweise Dünnfilm- oder Metallfilm, da sie kein übermäßiges Rauschen aufweisen. Außerdem sollte C3 direkt zwischen Pin 8 von U1 und dem geerdeten Ende von C2 angeschlossen werden - dies verhindert, dass Stromspitzen vom RMS-DC-Wandler von U1 den Rest des Betriebs der Schaltung durcheinander bringen. Schließlich, wenn Sie keinen LT1678 bekommen können, sollten Sie auf den Ausgangshub achten - Sie brauchen ein Teil, das innerhalb von ein paar hundert mV oder so von der negativen Schiene ziehen kann, zusätzlich zum Laufen von a einzelne 3,3-V-Versorgung mit einem anständigen Gleichtaktbereich und leise - der LT1678 kann 4,4 nV/Wurzel-Hz-Spannungsrauschen bei 10 Hz und mit dem niedrigen Zin (dominiert von R2) und den gewählten Widerstandswerten (Tipp:

Das resultierende Signal ist eine Spannung, die von fast 0 V bis fast 3,3 V schwingt, mit einer linearen Übertragungsfunktion in dB – der RMS-DC-Wandler des THAT4316 hat die schöne Eigenschaft, dass der Ausgang 6 mV pro dB Eingangspegel beträgt.

Der Hersteller des Mikrofons sagt, dass sein Verstärkerausgang "leicht mit jedem Analog/Digital-Wandler verwendet werden kann, der bis zu 3,3 V Eingang hat. Wenn Sie es in einen Line-Eingang leiten möchten, verwenden Sie einfach einen 1-100uF-Sperrkondensator in Reihe (100uF klingt am besten)."

Sie haben hier zwei Möglichkeiten:

  • Die einfachste Möglichkeit: Schließen Sie eine USB-Soundkarte an den Pi an und speisen Sie den Verstärkerausgang über eine Sperrkapazität von 100 uF in den Eingang der Soundkarte. Sie können dann das Programm Ihrer Wahl verwenden, um den Ton zu bearbeiten. Link zur Pi-kompatiblen Soundkarte: https://www.adafruit.com/product/1475
  • Wenn die vorherige Option aus irgendeinem Grund Ihre Anforderungen nicht erfüllt, können Sie einen Analog-Digital-Konverter (wie den MCP3008 oder den ADS1x15 (ADS1015 / ADS1115)) verwenden und den Python-Code programmieren, der zum Interpretieren der Konverterausgabe erforderlich ist. Eine vollständige Anleitung dazu finden Sie hier: https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/overview (es beschreibt die Verkabelung und welche Python-Bibliotheken Sie verwenden müssen.) Hoffe das hilft!
Ich glaube nicht, dass ich das brauche, ich habe es bereits versucht und die Ausgabe ist nicht das, was ich brauchte
OK. Kein Problem.
diese Antwort ist trotzdem richtig.