Problema en el pin de salida de audio con micrófono electret

0

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á.

    
pregunta ECESTUDENT17

1 respuesta

1

No puedes alcanzar tus objetivos establecidos de la manera en que intentas ir.

  1. Parece que tienes la salida de "envolvente" conectada al Arduino, pero dices que quieres la ola en lugar de la envoltura. Conecte la salida de "audio" al Arduino.

  2. Al muestrear con el Arduino tal como eres, nunca obtendrás nada que se parezca al audio digitalizado. Puede obtener (tal vez) 300 muestras por segundo de la forma en que lo ha escrito. Eso permite un ancho de banda de audio total de menos de 150Hz. Eso es alrededor de los tonos más altos de un subwoofer. No hay mucho discurso allí.

Si conecta la salida de "audio" a su entrada analógica en el Arduino, entonces debería mostrar valores alrededor de 500 cuando está en silencio. La placa del detector tiene el audio "flotante" en 2.5VDC, que es la mitad del rango de entrada de Arduino, la mitad de 1024 es 512.

Su imagen realmente no muestra ninguna conexión entre el detector y el análogo en el Arduino.

Usted puede soldar los cables al detector. Eso funcionaría mejor que "meterlos y orar".

Has actualizado tu pregunta.

Capturar y luego transmitir todo en un bloque es mejor.

Todavía no te llevará muy lejos.

El Arduino tiene 2 kilobytes de RAM. Entonces, después de menos de un cuarto de segundo, la memoria RAM está llena. Transmitir ese bloque de datos a través del puerto serie tomará un tiempo, y no puede muestrear y transmitir datos al mismo tiempo si desea muestrear lo más rápido posible.

    
respondido por el JRE

Lea otras preguntas en las etiquetas