Por lo tanto, actualmente estoy intentando captar señales de audio en un arduino a través de las clavijas de entrada analógica y un circuito de micrófono electret.
El dispositivo que estoy usando para la captura de audio es el detector de sonido sparkfun [No me permitiría publicar más de 2 enlaces y las imágenes que he cargado después de las ediciones son más importantes, así que me disculpo por tomar el enlace de este artículo. fuera]
He ordenado pines para soldar en este tablero, pero en este momento, lo tengo conectado como se muestra en la imagen adjunta (¿cuál puede ser el problema?)
El problema es que la salida de audio de la placa del detector de sonido me da un valor constante en el arduino, ya sea que haya sonido en el micrófono o no. La única vez que cambia el valor es cuando desconecto la placa del detector de sonido de la fuente de alimentación, momento en el que obtengo valores de 0.
La salida del detector de envolvente, sin embargo, funciona correctamente. En un ambiente silencioso, obtengo valores de voltaje muy bajos, y al hablar con el micrófono, obtengo valores de voltaje variables dependiendo de qué tan alto esté hablando al micrófono.
Sin embargo, para mi aplicación, necesito datos de audio sin procesar y no la envolvente de la señal de audio.
¿Alguien sabe cuál podría ser el problema? El código es muy simple y se muestra a continuación.
float i;
void setup()
{
Serial.begin(9600);
}
void loop() {
// send the value of analog input 0:
Serial.println(analogRead(A0));
// wait a bit for the analog-to-digital converter
// to stabilize after the last reading:
}
3/16EDITAR:Códigodetasademuestreo
Algunaspersonasmencionaronquesoloestoylograndounafrecuenciademuestreodealrededorde150hzo500hzusandolafuncióndelecturaanalógica(amenosquehayaentendidomal)
Acontinuaciónhayuncódigoqueestoyusandoparamedirlacantidaddetiempoquepasaentreunamuestraanalógica;
//Arraystosaveourresultsinunsignedlongstart_times[100];unsignedlongstop_times[100];unsignedlongvalues[100];//Setuptheserialportandpin2voidsetup(){Serial.begin(9600);}voidloop(){unsignedinti;//capturethevaluestomemoryfor(i=0;i<100;i++){start_times[i]=micros();values[i]=analogRead(A0);stop_times[i]=micros();}//printouttheresultsSerial.println("\n\n--- Results ---");
for(i=0;i<100;i++) {
Serial.print(values[i]);
Serial.print(" elapse = ");
Serial.print(stop_times[i] - start_times[i]);
Serial.print(" us\n");
}
delay(6000);
los resultados de impresión del código anterior muestran un tiempo promedio de aproximadamente 116 microsegundos;
1/116-uS está alrededor de 8.6kHz, ¿estoy entendiendo algo aquí? Entiendo que el comando Serial.print en el primer bloque de código está ralentizando significativamente el muestreo, si eso es lo que los usuarios intentaron transmitir inicialmente; Sin embargo, si muestro y almaceno los valores de entrada analógica en una matriz y los grabo en algún punto posterior, sin usar ningún comando en serie, la salida de audio debería estar relativamente bien a través del detector de sonido y esa señal trazada debería parecerse a una señal bastante decente. señal de audio, ¿correcto?
8.6kHz es lo que pretendía lograr en cuanto a la frecuencia de muestreo, ¿la salida de audio realmente estará distorsionada?
3/17 EDICIÓN: Gráfico de MATLAB de salida de audio
Bueno, aquí hay un gráfico de Matlab rápido que hice de la señal de audio (simplemente tomé 1000 valores muestreados y los representé contra un vector de tiempo)
En realidad, se ve bastante decente, tal vez los cables no soldados son un gran problema
Si me falta algo más que pueda estar afectando esto, estoy seguro de que alguien aquí lo detectará.