2 votos

¿Cómo conectar la Raspberry Pi con el Micrófono Electret para detectar los niveles de sonido en dB?

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

/*EDITAR
Deseo recoger niveles de sonido de unos 30-60dB, normalmente conversaciones humanas o simplemente ruido ambiental. Lo que realmente quiero conseguir con esto es recoger sonidos que puedan ser perceptibles para los humanos.
*/

He comprado un micrófono electret con ganancia automática en Adafruit https://www.adafruit.com/product/1713

Estoy tratando de interconectarlo con una raspberry pi 3 para detectar niveles de sonido, sin embargo, no he podido encontrar una solución para ello ya que la mayoría de los tutoriales son para Arduino u otras placas breakout, ¿alguien tiene una solución para esto?

Entendí que la salida del micrófono es de tipo analógico y tengo un convertidor adc ADS1115 y MCP3008 que me serviría, pero no he podido buscar la solución que me oriente sobre el uso del micrófono y el convertidor.

//EDIT He podido conectar el sensor al ADC y al MCP, sin embargo, los valores se mantienen constantes y no parecen cambiar en absoluto, incluso reproduciendo canciones en el micrófono no cambian los valores. Obtengo un valor constante que va de 200 a 300 en el MCP y alrededor de 1056 en el ADC.

Siguiendo tutoriales en https://learn.adafruit.com/adafruit-microphone-amplifier-breakout/measuring-sound-levels pero necesito que salgan en decibelios en RPI, necesito enviar los datos a un servidor.

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

Necesito recoger los niveles de sonido en decibelios y ponerlos en un servidor.

Salud

0 votos

¿Has seguido al pie de la letra todas las instrucciones que figuran en la página del enlace? learn.adafruit.com/adafruit-microphone-amplifier-breakout/

0 votos

@jonk He seguido ese tutorial completamente, lo que pregunto aquí es por una solución que me permita usar RPI para leer los valores, y los valores que estoy leyendo de RPI, no responde a los "sonidos que hice". En ese tutorial, adafruit sólo utiliza arduino, y pude recoger valores de voltaje, sin embargo, necesito niveles de sonido, tal vez usted podría proponer cómo podría convertir estos valores a niveles de sonido, etc en decibelios?

1 votos

Los valores de tensión son los que obtendrá. Para convertirlos en otra cosa, como niveles sonoros, tendrás que leer detenidamente la hoja de datos del micro que utilizan Y el CI con AGC que utilizan y tendrás que desarrollar tú mismo las matemáticas. El micro tendrá especificaciones sobre su comportamiento como transductor de presión sonora. El IC tendrá más especificaciones. En fin, es lo que yo haría si este fuera mi proyecto. Sentarme con el papeleo, sacar algún papel, leer hasta que lo entendiera completamente, luego desarrollar las matemáticas y después el código. Te propongo que tú también lo hagas.

4voto

noname Puntos 8

Has seleccionado una placa de micrófono con ganancia automática. Esto es exactamente lo OPUESTO a lo que necesitas. No se pueden medir los niveles de audio reales cuando hay algo aguas arriba que no hace todos los cambios de nivel de audio ("ganancia automática"). Por lo tanto, primero debes utilizar el módulo de micrófono adecuado que te proporcione los niveles de audio reales, honestos y no modificados.

En segundo lugar, estás intentando medir los NIVELES de audio, no la propia FORMA DE ONDA de audio. Eso significa que necesitas promediar o integrar la señal de audio para producir la "envolvente" de los niveles de audio. Esto se puede hacer por software, muestreando el audio a una velocidad alta y haciendo cálculos matemáticos, o se puede hacer de forma mucho más sencilla por hardware, rectificando e integrando la señal de audio en una señal DC móvil que represente el NIVEL de audio en cada momento. Entonces puedes muestrear y escalar esta DC variable en decibelios o lo que sea.

Yo recomendaría encarecidamente conseguir una placa de micrófono esencialmente diseñada para hacer exactamente lo que estás proponiendo. A saber, la placa Sparkfun Sound Detector. Esta placa tiene la cápsula de micrófono electret, y también el preamplificador de micrófono, y un detector de picos y un amplificador de búfer de salida. Todo lo que tienes que hacer es conectar la salida del detector de picos de esta placa a un pin de entrada analógica de tu Arduino y tendrás la envolvente de audio entregada en bandeja de plata. Muy fácil.

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

0 votos

En realidad, necesito poder usar esto con rpi, teniendo en cuenta que tengo un ADC/MCP, ¿sería capaz de conectar el sensor a él?

0 votos

No hay diferencia. La placa SparkFun entrega una bonita señal envolvente DC apropiada para CUALQUIER microcontrolador o ADC.

0 votos

Extrañamente, estoy teniendo dificultades para encontrar este producto a nivel local, ¿puedo preguntar si esta alternativa es adecuada? sgbotic.com/index.php?despacho=productos.ver&producto_id=752 Placa Breakout para micrófono MEMS INMP401 (ADMP401)

3voto

ThreePhaseEel Puntos 651

Te equivocas, en primer lugar

El control automático de ganancia (AGC) de tu placa de micrófono actual no es lo que quieres en este caso: un detector de nivel de sonido se va a desviar por la acción del bucle de AGC cambiando la ganancia por todas partes mientras intenta mantener un nivel de salida constante (¿qué otra cosa esperarías de un bucle de AGC?). También podrías conseguir un micrófono electret barato, como Sparkfun's y utilízalo directamente en cualquier circuito que montes.

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

Una de las verdades básicas de los ADCs modernos y baratos, especialmente los que se suministran 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, al tomar los logaritmos digitalmente, se hace un mal uso de los bits del ADC disponibles: 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 para el ADC debido a su limitada resolución.

Como resultado de todo esto, yo usaría un chip convertidor RMS-DC lineal-en-dB para convertir tu entrada de sonido en dBs, y luego alimentar ese "voltaje de control" detectado a tu ADC para propósitos de medición. Afortunadamente, esto no es difícil - el convertidor RMS-DC de un ESO4316 funciona felizmente con 3.3 o 5VDC, y es simple de aplicar -- un circuito de ejemplo que lo utiliza, el micrófono electret de Sparkfun enlazado arriba, y el LT1678 amplificador doble de bajo ruido se muestra a continuación.

schematic

simular este circuito - Esquema creado con CircuitLab

OA1A, R5 y R6 son un amplificador no inversor de una sola fuente de alimentación que sirve como preamplificador de micrófono con su entrada polarizada al punto medio del rango de alimentación por R2, que también polariza el micrófono. La ganancia se eligió porque el THAT4316 tiene un nivel de entrada mínimo de 100nA, o 100uV con la resistencia elegida, y con la sensibilidad de 5mV/Pa del micro elegida, sólo obtenemos 1uV del micro para una entrada de 30dB. C5 y R1 AC acoplan la señal de audio a U1 y la convierten en corriente, respectivamente, mientras que C2 es el condensador de temporización RMS-DC. R3, R4 y OA1B aumentan la oscilación de salida de +/-300mV de U1 para ajustarse mejor al rango de entrada del ADC. C1, C3, C4 y C6 se encargan del desacoplamiento de la alimentación.

Ten en cuenta que C2 y C5 deben ser condensadores de película (no cerámicos, electrolíticos o de tantalio), y R1, R3, R4, R5 y R6 deben ser resistencias del 1% o mejores, preferiblemente de película fina o metálica, ya que no tienen exceso de ruido. Además, C3 debe conectarse directamente entre el pin 8 del U1 y el extremo conectado a tierra de C2 - esto evita que los picos de corriente del convertidor RMS-DC del U1 estropeen el resto del funcionamiento del circuito. Por último, si no puedes conseguir un LT1678, deberás prestar atención a la oscilación de la salida - necesitas una pieza que pueda tirar dentro de un par de cientos de mV más o menos del carril negativo, además de funcionar con una sola fuente de 3,3V con un rango de modo común decente, y ser silencioso - el LT1678 puede tirar de 4. 4nV/root-Hz de ruido de voltaje 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), estamos op-amp limitado en el ruido aquí, aunque no por mucho.

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

0voto

Kush Shukla Puntos 50

El fabricante del micrófono dice que su salida de amplificador "puede utilizarse fácilmente con cualquier convertidor analógico/digital que tenga una entrada de hasta 3,3V. Si quieres canalizarlo a una entrada de línea, sólo tienes que utilizar un condensador de bloqueo de 1-100uF en serie (100uF es lo mejor)".

Aquí tienes dos opciones:

  • La opción más sencilla: conectar la tarjeta de sonido USB a la Pi y alimentar la salida del amplificador a través de una capacidad de bloqueo de 100uF en la entrada de la tarjeta de sonido. A continuación, puede utilizar su programa de elección para procesar el sonido. Enlace a la tarjeta de sonido compatible con Pi: https://www.adafruit.com/product/1475
  • Si por alguna razón, la opción anterior no satisface tu necesidad, puedes utilizar un conversor analógico-digital (como el MCP3008 o el ADS1x15(ADS1015 / ADS1115)) y programar el código Python necesario para interpretar la salida de los conversores. Hay una guía completa sobre cómo hacerlo aquí: https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/overview (detalla el cableado y las librerías de python que necesitas usar.) ¡Espero que esto ayude!

0 votos

No creo que esto es lo que necesito, ya he intentado y la salida no es lo que necesitaba

0 votos

De acuerdo. No te preocupes.

0 votos

No obstante, esta respuesta es correcta.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X