EDITAR : 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 un hardware costoso (micrófono y amplificador) y un análisis de audio sofisticado en el microcontrolador. Incluso un micrófono completo con circuito amplificador 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 medidor de VU , quiero colocar un micrófono en el 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:
... y traté de construirlo con este resultado:
(Ahora estoy usando el circuito sugerido por Oli Glaser en su respuesta)
Los valores en el monitor serial no cambian dependiendo del 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. La leyenda en el micrófono dice XF-18D .
Editar: Mi código de 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 serial funcionan (los probé con un potenciómetro).
La salida en serie ahora es alrededor de 57.
Además, no tengo un multímetro u osciloscopio. Ahora tengo un multímetro.
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 muéstrelos 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 enviar 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, elimínelo ya que bloqueará la polarización de CC del transistor y la señal oscilará bajo tierra.
EDITAR: aquí hay un circuito mejor para el transistor amplificador:
A esto no debería importarle demasiado el transistor utilizado, la polarización de salida debería ser de alrededor de 2,5 V.
Los valores exactos para el divisor de entrada (R3 y R4) no son demasiado importantes, es la proporción de 1:4 lo que lo 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 debe ser> 1uF (reemplaza a C1 en su esquema)
Sin embargo, R1 y R2 deben tener estos valores.
Todo lo que necesita es el electret con su resistencia de polarización (R1 en su esquema)
Un punto de preocupación es que las líneas Arduino 3.3V y 5V parecen estar unidas. Supongo que se trata de un error esquemático, pero si este es el caso en el circuito real, no funcionará y puede dañar algo.
Para identificar el (los) problema (s), sería útil ver su código y lo que está viendo en el lado de la PC. Además, ¿qué transistor estás usando?
Si tiene un osciloscopio, puede verificar si su micrófono/transistor funcionan correctamente. De lo contrario, se puede usar un multímetro para realizar algunas pruebas más básicas (por ejemplo, confirmar la presencia de +5 V, confirmar que la base del transistor está en ~ 0,6 V, probar el colector para asegurarse de que no esté conectado a +5 V o a tierra sin señal presente)
También debe asegurarse de que el RS232 funcione 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 brindar ayuda más específica.
EDITAR: si está muestreando tan lentamente, necesitará un circuito de detección de picos como este:
Pondrías este circuito entre el transistor y el pin Arduino (menos C2)
El diodo puede ser casi cualquier diodo. Los valores de límite y resistencia son solo una guía, se pueden cambiar un poco. Sus valores dictan cuánto tardará el voltaje en cambiar con el nivel de la señal. Puede calcular esto usando la constante RC (es decir, R * C; en el ejemplo anterior, la constante RC es 1e-6 * 10e3 = 10 ms. El voltaje tardará alrededor de 2,3 constantes de tiempo en caer en un 90 % de su valor original, por lo que en el ejemplo anterior, si el voltaje comienza en 1 V y elimina la señal, habrá caído a 0,1 V alrededor de 23 ms después.
EDITAR : está bien, creo que encontré un problema importante. Su transistor S9012 es un transistor PNP (al igual que 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 como "104" son casi con seguridad condensadores cerámicos de 0,1 uF. El valor (en pF) son los 2 primeros 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 000 pF. 100.000pF es 100nF o 0,1uF.
EDITAR: no tener un osciloscopio o un multímetro hace que la vida sea muy difícil aquí (debe obtener uno o ambos tan pronto como pueda).
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 a la PC directamente 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 suele ser buena para hasta 2V IIRC. También puede probar el electret directamente: simplemente retire la parte 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.
EDIT
bloques de alguna manera y editarlo para que pueda entenderse 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 como está.Suponiendo que su circuito funcione, la señal de audio está en el rango de kHz, mientras que Arduino tiene un ADC adecuado para 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 lo 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.
El límite se cargará al valor máximo que se recibe, mientras que la resistencia descargará el límite cuando la señal se apague.
--|>|---*---- adc
*---- resistor -----*----ground
\----- capacitor ---/
Editar: la entrada ADC en realidad está flotando ya que no tiene ningún sesgo debido al capacitor en serie. Si va a probar mi solución, elimine C2.
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 escala completa en el ADC de Arduino. Suponiendo que instaló un capacitor 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 una corriente de fuga dentro del propio ATMEGA; probablemente obtendrá el mismo resultado en cualquiera de los otros pines analógicos (no conectados).
Intente hacer un divisor de voltaje muy "ligero" con algunas resistencias de alto valor (entre 10K y 100K) y utilícelo 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 debería estar en la vecindad de 512.
Una vez que tenga la entrada 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.
HikeOnPast
connor lobo
Brindis