EDITAR : He estado investigando este problema durante bastante tiempo. Resulta ser un proyecto mucho más difícil de lo que pensaba y no es algo para principiantes. Esto requiere hardware costoso (micrófono y amplificador) y un sofisticado análisis de audio en el microcontrolador. Incluso un micrófono completo con circuito amplificador no proporciona los resultados deseados (de acuerdo con los comentarios sobre este producto)
Soy completamente nuevo en Arduino (pero estoy familiarizado con la programación). Para construir un medidor de VU , quiero poner un micrófono al pin analógico 0 del Arduino y mostrar el valor a través de la conexión en serie.
Busqué en Google y encontré este circuito:
... e intenté construirlo con este resultado:
(Ahora estoy usando el circuito sugerido por Oli Glaser en su respuesta)
Los valores en el monitor en 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 este proyecto. El subtítulo en el micrófono lee 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 u osciloscopio.
Tengo un multímetro ahora.
fuente
Respuestas:
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á calcular esto en algún momento, antes de enviarlo a la PC o después.
Su circuito amplificador como se muestra no es ideal, pero debería funcionar razonablemente para un medidor de VU básico. EDITAR - Acabo de notar C2, elimine esto ya que bloqueará la polarización de CC del transistor, y la señal oscilará bajo tierra.
EDITAR: aquí hay un mejor circuito para el transistor amplificador:
Esto no debería preocuparse demasiado por el transistor utilizado, el sesgo de salida debe ser de alrededor de 2.5V.
Los valores exactos para el divisor de entrada (R3 y R4) no son demasiado importantes, es la relación de 1: 4 lo que es más. Por lo tanto, puede usar, por ejemplo, 400k y 100k, o 40k y 10k, etc. (trate de no ir por encima o por debajo de estos valores respectivos). C2 debe ser> 10uF. C1 debería ser> 1uF (reemplaza a C1 en su esquema)
. Sin embargo, R1 y R2 deben ser estos valores.
Todo lo que necesitas es el electret con su resistencia de polarización (R1 en tu esquema)
Un punto de preocupación es que las líneas Arduino 3.3V y 5V parecen estar unidas entre sí; supongo que este es un error esquemático, pero si este es el caso en el circuito real, no funcionará y puede dañar algo.
Para identificar los problemas, sería útil ver su código y lo que está viendo en el lado de la PC. ¿También qué transistor estás usando?
Si tiene un osciloscopio, puede verificar si su micrófono / transistor funciona correctamente. De lo contrario, se puede usar un multímetro para realizar algunas pruebas más básicas (por ejemplo, confirmar que haya más de 5 V presente, confirmar que la base del transistor esté a ~ 0.6 V, probar el colector para asegurarse de que no esté fijado a + 5 V o tierra sin señal presente)
También debe asegurarse de que el RS232 funciona correctamente, por lo que sería una buena idea escribir un código simple para enviar algunos valores de prueba.
Si puede proporcionar la información solicitada y hacernos saber qué herramientas tiene disponibles, se puede proporcionar ayuda más específica.
EDITAR: si está muestreando tan lentamente, necesitará un circuito de detección de picos como este:
Pondría este circuito entre el transistor y el pin Arduino (menos C2)
El diodo puede ser casi cualquier diodo. Los valores de tapa y resistencia son solo una guía, se pueden cambiar un poco. Sus valores dictan cuánto tiempo tomará cambiar el voltaje con el nivel de señal. Puede calcular esto usando la constante RC (es decir, R * C - en el ejemplo anterior, la constante RC es 1e-6 * 10e3 = 10ms. El voltaje tomará alrededor de 2.3 constantes de tiempo para caer en un 90% de su valor original, entonces en el ejemplo anterior, si el voltaje comienza a 1V y elimina la señal, habrá caído a 0.1V alrededor de 23ms más tarde.
EDITAR - bien, creo que encontré un problema importante. Su transistor S9012 es un transistor PNP (como lo es el S9015), necesita un transistor NPN para este circuito. El S9014 es un transistor NPN, por lo que tendrá que usar este.
Los condensadores marcados "104" son casi seguramente condensadores cerámicos de 0.1uF. El valor (en pF) son los primeros 2 números seguidos de un número 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 telescopio o un multímetro hace que la vida sea muy difícil aquí (debe obtener uno o ambos tan pronto como sea posible)
Sin embargo, hay algunos osciloscopios de tarjeta de sonido de PC básicos que podrían usarse para probar su circuito de electret / 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 a la 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 generalmente es buena para hasta 2V IIRC. También puede probar el electret directamente: simplemente retire el bit del transistor y mantenga R1 y C1, tome la señal del otro lado de 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 la tarjeta de sonido), pero la señal de CA (audio) es lo que le interesa aquí.
Si intenta esto, publique las capturas de pantalla para que podamos tener una idea de lo que está sucediendo.
fuente
EDIT
bloques y editarlo para que se pueda entender sin leer el hilo de comentarios? También soy un principiante y no entiendo cómo se resolvió el problema y si puedo usar el circuito que publicaste tal cual.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 niveles de CC. El componente de CC en su señal es cero, lo que significa que flota sobre un voltaje fijo. Es ese voltaje fijo que está leyendo su ADC.
Para solucionarlo, colocaría un diodo en serie con su salida conectada al ADC y a un condensador y una resistencia.
La tapa se cargará hasta el valor máximo que se recibe, mientras que la resistencia descargará la tapa cuando la señal se apague.
Editar: La entrada ADC está flotando, ya que no tiene ningún sesgo debido al condensador en serie. Si vas a probar mi solución, elimina C2.
fuente
When using single-ended mode, the ADC bandwidth is limited by the ADC clock speed. Since one conversion takes 13 ADC clock cycles, a maximum ADC clock of 1 MHz means approximately 77k samples per second. This limits the bandwidth in single-ended mode to 38.5 kHz, according to the Nyquist sampling theorem.
Sus lecturas de 1022, 1023 son básicamente a 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 eso solo puede acoplar los voltajes cambiantes (es decir, CA).
Como resultado, sospecho que está leyendo una corriente de fuga dentro del ATMEGA en sí mismo; probablemente obtendrá 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 10K y 100K) y use esto para sesgar la entrada analógica a la mitad del voltaje de referencia (también podría usar un potenciómetro, que le brinda una capacidad de prueba adicional). Entonces su lectura sin entrada debe estar en el vecindario de 512.
Una vez que tenga la entrada de ADC adecuadamente sesgada, puede comenzar a trabajar tratando de ver si obtiene variación a través de ella. Es posible que esté submuestreando un poco su ancho de banda, lo que significa que obtendrá un alias de los componentes de alta frecuencia, pero si todo lo que está tratando de hacer es estimar el volumen general, eso no debería ser un gran problema.
fuente