Usando un micrófono con un Arduino

18

EDIT : he estado investigando este problema durante bastante tiempo. Resulta ser un proyecto mucho más difícil de lo que pensaba y no algo para principiantes. Esto requiere hardware costoso (micrófono y amplificador) y algunos análisis de audio sofisticados en el microcontrolador. Incluso un micrófono completo con un circuito más amplio no proporciona los resultados deseados (según los comentarios sobre este producto)

Soy completamente nuevo en Arduino (pero estoy familiarizado con la programación). Para construir un VU meter , quiero poner un micrófono en el pin analógico 0 del Arduino y mostrar el valor a través de la conexión serial.

Busqué en Google y encontré este circuito:

...eintentéconstruirloconesteresultado:

(AhoraestoyusandoelcircuitosugeridoporOliGlaserensurespuesta)

Los valores en el monitor serie no cambian según el volumen de la música.

¿Cuál es la forma más fácil de medir el volumen en la entrada analógica del Arduino?

Además, tengo un TDA2822M , pero no sé si es útil para esto proyecto. La leyenda del micrófono dice XF-18D .

Editar: Mi código arduino:

void setup() {
  Serial.begin(9600); 
}

void loop() {
  Serial.println(analogRead(0));
  delay(300);
}

La salida en serie: 1023 1022 1022 1022 1022 1023 1022 y así sucesivamente

¿Cómo puedo verificar si el micrófono funciona? ¿Es direccional?

Editar: Ahora estoy usando un transistor S9014. El ADC y la conexión en serie funcionan (los probé con un potenciómetro).

La salida en serie ahora es de alrededor de 57.

Además, no tengo un multímetro o un osciloscopio . Tengo un multímetro ahora.

    
pregunta Toast

3 respuestas

14

La forma "más fácil" es simplemente aplicar la señal y la muestra con el ADC. Almacene los resultados en un búfer y luego visualícelos como desee (en su caso, envíelos a la PC a través de RS232)
Si desea el nivel RMS de la señal, deberá calcularlo en algún momento, ya sea antes de enviarlo a la PC o después.

Su circuito de amplificación como se muestra no es ideal, pero debería funcionar razonablemente para un medidor VU básico. EDITAR - Acabo de notar C2, elimínelo ya que bloqueará la polarización de CC del transistor y la señal oscilará por debajo del suelo.

EDITAR: aquí hay un mejor circuito para el transistor amplificador:

Estonodeberíapreocuparsedemasiadoporeltransistorutilizado,elsesgodesalidadeberíaserdealrededorde2.5V.
Losvaloresexactosparaeldivisordeentrada(R3yR4)nosondemasiadoimportantes,eslarelaciónde1:4queesmás.Asíquepuedesusar,porejemplo.400ky100k,o40ky10k,etc.(tratedenoirporencimaopordebajodeestosvaloresrespectivos).C2debeser>10uF.C1deberíaser>1uF(reemplazaaC1ensuesquema)
Sinembargo,R1yR2debenserestosvalores.
Todoloquenecesitaeselelectretoconsuresistenciadepolarización(R1ensuesquema)

UnpuntodepreocupaciónesquelaslíneasArduino3.3Vy5Vparecenestarunidasentresí.Supongoqueestoesunerroresquemático,perosiesteeselcasoenelcircuitoreal,nofuncionaráypodríadañaralgo..
Paraidentificarel(los)problema(s),seríaútilversucódigoyloqueestáviendoenelladodelaPC.¿Tambiénquétransistorestásusando?

Sitieneunosciloscopio,puedeverificarsisumicro/transistorestáfuncionandocorrectamente.Delocontrario,sepuedeusarunmultímetropararealizaralgunaspruebasmásbásicas(p.Ej.,Confirmar+5Vpresente,confirmarquelabasedeltransistorestáa~0,6V,probarelcolectorparaasegurarsedequenoestéconectadoa+5Votierrasinunaseñalpresente)

TambiéndebeasegurarsedequeelRS232estéfuncionandocorrectamente,porloqueescribiruncódigosimpleparaenviaralgunosvaloresdepruebaseríaunabuenaidea.

Sipuedeproporcionarlainformaciónsolicitadaeinformarnosquéherramientastienedisponibles,selepuededarunaayudamásespecífica.

EDITAR-siestátomandomuestrastanlentamente,entoncesnecesitaráuncircuitodedeteccióndepicoscomoeste:

Deberías poner este circuito entre el transistor y el pin Arduino (menos C2)

El diodo puede ser casi cualquier diodo. Los valores de la tapa y la resistencia son solo una guía, se pueden cambiar un poco. Sus valores determinan cuánto tiempo tomará la tensión para cambiar con el nivel de la señal. Puede calcular esto utilizando la constante RC (es decir, R * C - en el ejemplo anterior, la constante RC es 1e-6 * 10e3 = 10 ms. La tensión tomará alrededor de 2,3 constantes de tiempo para caer en un 90% de su valor original, por lo que en el ejemplo anterior, si el voltaje comienza a 1 V y elimina la señal, habrá descendido a 0,1 V aproximadamente 23 ms después.

EDIT : está bien, creo que encontré un problema importante. Su transistor S9012 es un transistor PNP (como es el S9015), usted Necesito un transistor NPN para este circuito. El S9014 es un transistor NPN, por lo que tendrá que usar este.

Los capacitores marcados con "104" son casi seguramente capacitores cerámicos de 0.1uF. El valor (en pF) son los primeros 2 números seguidos de una cantidad de ceros establecidos por el último número. Entonces, para 104, el valor es 10 + 4 ceros, o 100,000pF. 100,000pF es 100nF o 0.1uF.

EDITAR - No tener un alcance o multímetro hace que la vida sea muy difícil aquí (deberías conseguir uno o ambos lo antes posible)
Sin embargo, existen algunos osciloscopios básicos de tarjeta de sonido para PC que podrían usarse para probar su circuito de electreto / transistor. Visual Analyzer es un buen ejemplo:

Si reemplaza C2 (no es estrictamente necesario pero es una buena idea), debería poder enviar la señal directamente al PC y observar en el software para ver si el micrófono y la amplificación funcionan correctamente. Si su PC tiene una línea en uso, pero la entrada del micrófono es generalmente buena para hasta 2V IIRC. También puede probar el electreto directamente: solo retire el bit del transistor y mantenga R1 y C1, tome la señal desde el otro lado del C1. Tenga en cuenta que este método no probará los niveles de CC, solo la CA (debido a un límite de bloqueo de CC en la entrada de aviso), pero la señal de CA (audio) es lo que le interesa aquí.

Si lo intentas, publica las capturas de pantalla para que podamos tener una idea de lo que está sucediendo.

    
respondido por el Oli Glaser
4

Suponiendo que su circuito funciona, la señal de audio está en el rango de kHz, mientras que el Arduino tiene un ADC adecuado para los niveles de CC. El componente de CC en su señal es cero, lo que quiere decir que flota sobre un voltaje fijo. Es ese voltaje fijo que está leyendo su ADC.

Para arreglar eso, pondrías un diodo en serie con tu salida conectada al ADC y a un condensador y resistencia.

La tapa se cargará al valor máximo que se está recibiendo, mientras que la resistencia descargará la tapa cuando la señal se apague.

--|>|---*---- adc
        *---- resistor -----*----ground
        \----- capacitor ---/

Editar: La entrada del ADC en realidad está flotando ya que no tiene ningún sesgo debido al condensador en serie. Si vas a probar mi solución borra C2.

    
respondido por el Kristoffon
4

Sus lecturas de 1022, 1023 son básicamente de escala completa en el ADC de Arduino. Suponiendo que instaló un condensador en serie no defectuoso como se muestra en su diagrama, este nivel no puede provenir del circuito del micrófono que construyó, ya que solo puede acoplar voltajes cambiantes (es decir, CA).

Como resultado, sospecho que está leyendo la corriente de fuga dentro de la propia ATMEGA; probablemente obtenga el mismo resultado en cualquiera de los otros pines analógicos (no conectados).

Intente hacer un divisor de voltaje muy "liviano" con algunas resistencias de alto valor (entre 10 K y 100 K) y use esto para desviar la entrada analógica a la mitad del voltaje de referencia (también puede usar un potenciómetro, que le brinda algunas pruebas adicionales capacidad). Entonces tu lectura sin entrada debería estar en el vecindario de 512.

Una vez que tenga la entrada del ADC adecuadamente sesgada, puede comenzar a trabajar tratando de ver si obtiene una variación a través de ella. Es posible que no esté realizando un muestreo suficiente del ancho de banda, lo que significa que obtendrá un alias de los componentes de alta frecuencia, pero si lo único que intenta hacer es calcular el volumen general que no debería ser un problema.

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas