¿Cómo conectar Raspberry Pi con Electret Microphone para detectar niveles de sonido en dB?

1

Tengo que detectar los niveles de sonido en un área cerrada, así que pensé que esta podría ser la elección correcta.

/ * EDITAR Deseo recopilar niveles de sonidos de aproximadamente 30-60dB, normalmente conversaciones humanas o solo ruido ambiental. Lo que realmente quiero lograr con esto es recolectar sonidos que puedan ser evidentes para los humanos.
* /

Compré un micrófono Electret con ganancia automática de Adafruit enlace

Estoy intentando conectarlo con una frambuesa pi 3 para detectar los niveles de sonido, sin embargo, no he podido encontrar una solución, ya que la mayoría de los tutoriales son para Arduino u otros tableros de ruptura. ¿Alguien tiene una solución? para esto?

Comprendí que la salida del micrófono es analógica y tengo un convertidor adc ADS1115 y MCP3008 que sería útil, pero no he podido buscar la solución que me guíe para usar el micrófono y el convertidor.

// EDITAR He podido conectar el sensor al ADC y al MCP, sin embargo, los valores permanecen constantes y parece que no cambian en absoluto, incluso cuando se reproducen canciones en el micrófono no cambian los valores. Obtengo un valor constante que oscila entre 200 y 300 en MCP y alrededor de 1056 en ADC.

Tutoriales seguidos en enlace pero debo enviarlos en decibelios en RPI, debo enviar los datos a un servidor.

He estado usando las bibliotecas de Adafruit en MCP3008 y ADC1115, ¿estoy haciendo esto mal?

Necesito recopilar los niveles de sonido en decibelios y colocarlos en un servidor.

Saludos

    
pregunta Ming Jin

3 respuestas

4

Has seleccionado una placa de micrófono con ganancia automática. Este es exactamente el OPUESTO de lo que necesita. No se pueden medir los niveles de audio reales cuando hay algo en la secuencia de salida UN-haciendo todos los cambios de nivel de audio ("auto-gain"). Así que primero, debe usar el módulo de micrófono adecuado que le proporcionará los niveles de audio reales, honestos y sin modificar.

Segundo, estás tratando de medir los NIVELES de audio, no la WAVEFORM de audio en sí. Eso significa que necesita promediar o integrar la señal de audio para producir la "envolvente" de los niveles de audio. Puede hacer esto en software muestreando el audio a una velocidad alta y hacer cálculos matemáticos con furia, o puede hacerlo mucho más simplemente en hardware al rectificar e integrar la señal de audio en una señal de CC en movimiento que representa el NIVEL de audio en cualquier momento. Luego puede muestrear y escalar este DC variable en deciBels o lo que sea.

Recomiendo encarecidamente que consiga una placa de micrófono diseñada esencialmente para hacer exactamente lo que está proponiendo. A saber, la placa del detector de sonido Sparkfun. Esta placa tiene la cápsula de micrófono electret, y también el preamplificador de micrófono, y un detector de pico y un amplificador de búfer de salida. Todo lo que necesita hacer es conectar la salida del detector de picos de esta placa a un pin de entrada analógica en su Arduino y recibirá el sobre de audio en una bandeja de plata. Fácil-peasy.

Ejemplo: enlace

    
respondido por el Richard Crowley
3

Tienes lo incorrecto, primero que nada

El control automático de ganancia (AGC) en su placa de micrófono existente no es lo que desea aquí: un detector de nivel de sonido se apagará por la acción del bucle AGC que cambia la ganancia en todo el lugar a medida que intenta mantener un nivel de salida constante (¿qué otra cosa esperaría de un bucle AGC?). También podrías obtener un micrófono electret barato, como Sparkfun's , y utilizarlo directamente en cualquier circuito que armes.

Los logaritmos analógicos son el camino a seguir aquí

Una de las verdades básicas de los ADC baratos y modernos, especialmente los proporcionados en sistemas altamente integrados, es que su rango dinámico está limitado por el ruido en el extremo inferior y la baja tensión de alimentación disponible en el extremo superior. Además, tomar sus logaritmos digitalmente hace un mal uso de los bits de ADC que tiene disponibles: los pequeños cambios en la señal en el extremo inferior causan un cambio relativamente grande en el registro, pero son difíciles de distinguir por el ADC debido a su resolución limitada .

Como resultado de todo esto, utilizaría un chip convertidor RMS-DC lineal en dB para convertir su entrada de sonido a dB, y luego alimentar esa tensión de control detectada a su ADC para fines de medición. Afortunadamente, esto no es difícil: el convertidor RMS-DC de un THAT4316 funciona felizmente con 3.3 o 5VDC, y es fácil de aplicar: un circuito de ejemplo que lo utiliza, el micrófono de electreto Sparkfun vinculado anteriormente y el LT1678 amp op dual de bajo ruido se muestra a continuación.

simular este circuito : esquema creado usando CircuitLab

OA1A, R5 y R6 son un amplificador no inversor de una fuente y ganancia = 100 que sirve como un preamplificador de micrófono con su entrada sesgada en el punto medio del rango de suministro por R2, que también desvía el micrófono. La ganancia se eligió porque el THAT4316 tiene un nivel de entrada mínimo de 100 nA, o 100 uV con la resistencia elegida, y con la sensibilidad de 5 mV / Pa del micrófono elegido, solo obtenemos 1 vu del micrófono para una entrada de 30 dB. C5 y R1 AC acoplan la señal de audio a U1 y la convierten en una corriente, respectivamente, mientras que C2 es el capacitor de temporización RMS-DC. R3, R4 y OA1B aumentan el swing de salida de +/- 300mV desde U1 para adaptarse mejor al rango de entrada del ADC. C1, C3, C4 y C6 proporcionan desacoplamiento de suministro de varios tipos.

Tenga en cuenta que C2 y C5 deben ser condensadores de película (no cerámicos, electrolíticos o tántalo), y R1, R3, R4, R5 y R6 deben ser 1% o mejores resistencias, preferiblemente película delgada o película metálica, ya que carecen de exceso de ruido. Además, C3 debe conectarse directamente entre el pin 8 de U1 y el extremo conectado a tierra de C2, lo que evita que los picos de corriente del convertidor RMS-DC de U1 estropeen el resto del funcionamiento del circuito. Finalmente, si no puede obtener un LT1678, deberá prestar atención a la oscilación de salida: necesita una parte que pueda jalar dentro de un par de cientos de mV aproximadamente del riel negativo, además de correr de un Suministro individual de 3.3 V con un rango de modo común decente y silencioso: el LT1678 puede eliminar el ruido de voltaje de 4,4 nV / raíz-Hz a 10Hz, y con el bajo Zin (dominado por R2) y los valores de resistencia elegidos (consejo: Rg domina Rf cuando se trata de cálculos de ruido), aquí estamos limitados en cuanto a ruido, aunque no mucho.

La señal resultante es un voltaje que oscila entre casi 0 V y casi 3,3 V, con una función de transferencia lineal en dB. El convertidor RMS-DC de THAT4316 tiene la propiedad de que la salida es de 6 mV por dB de nivel de entrada.

    
respondido por el ThreePhaseEel
-1

El fabricante del micrófono dice que su salida de amplificador "se puede usar fácilmente con cualquier convertidor analógico / digital que tenga una entrada de hasta 3.3 V. Condensador en serie (100uF suena mejor) ".

Tienes dos opciones aquí:

  • La opción más sencilla: conecte la tarjeta de sonido USB a la Pi y alimente la salida del amplificador a través de una capacidad de bloqueo de 100uF en la entrada de la tarjeta de sonido. Luego puede usar su programa de elección para procesar el sonido. Enlace a la tarjeta de sonido compatible con Pi: enlace
  • Si por alguna razón, la opción anterior no satisface sus necesidades, puede usar un convertidor analógico a digital (como el MCP3008 o ADS1x15 (ADS1015 / ADS1115)) y programar el código Python necesario para interpretar la salida de los convertidores. Aquí hay una guía completa sobre cómo hacerlo: enlace (detalla el cableado y las bibliotecas de Python que necesitas usar. ¡Espero que esto te ayude!
respondido por el thebunnyrules

Lea otras preguntas en las etiquetas