Go Down

Topic: Arduino con micrófono y altavoz (Read 3340 times) previous topic - next topic

Ikkarus

¡Saludos!

estoy intentando construir algun tipo de conversor de voz con Arduino sin usar la Wave Shield. Pero para empezar me gustaría conseguir hacer sonar un pequeño altavoz con un micrófono
a través de Arduino, de momento sin mucho éxito.

Para empezar, he conectado mi micrófono (concretamente: https://www.sparkfun.com/products/9964) a un pin analógico de arduino, y el altavoz a otro, de manera que la señal que recibe del micrófono la escribe en el pin analógico del altavoz (analogRead() y analogWrite() ). El resultado son unos ruidos que más o menos coinciden con lo que recibe el micro pero totalmente distorsionados. También he intentado amplificar la señal con un pequeño amplificador casero (siguiendo este esquema: http://sci-toys.com/scitoys/scitoys/computers/solderless/1_watt_audio_amplifier.jpg), y tampoco ha funcionado. Y no es problema del micro ya que he conseguido conectarlo a una mesa de mezclas y altavoces externos y funciona bien.

Me gustaría que alguien me dijera qué es lo que hago mal, si es problema de hardware, y qué debería hacer.

¡Gracias de antemano!

curro92

Hola,
podrías concretar algo sobre cómo acometes esa conversión a nivel de programación.
Para reproducir archivos de audio de una SD y que se oigan en un altavoz, yo utilizo una librería llamada TMRpcm, y me va muy bien para producir mensajes de voz con arduino.

Ikkarus

¡Saludos!

Mi intención sería reproducir el sonido que recibe el micrófono en directo, no uno pregrabado en una SD. ¿La TMRpcm me permitiría hacerlo?

En cuánto al código utilizado, es éste:

Code: [Select]
int val; //valor analógico de la entrada del micrófono

void setup(){

Serial.begin(9600); //iniciamos el serial para saber el valor de entrada del micro
 
}

void loop(){

val = analogRead(A0);
Serial.println(val);
analogWrite(A1, val); //escribimos el valor del micro en el pin del altavoz
   
}


El resultado es un ruido de fondo constante, además de reproducir el sonido que detecta el micrófono, pero completamente distorsionado y, en el caso de la voz, ininteligible.

¿Qué debería hacer? ¿Debo construir un amplificador para el altavoz/micro? ¿Es problema de código?

¡Muchas gracias por tu tiempo!

Ikkarus

También intenté otro sistema utilizando la librería PCM, a partir de un ejemplo que encontré (http://hlt.media.mit.edu/?p=1963).

Mi intención era que el micrófono guardara los valores dentro de un array, y que el altavoz sonara de acuerdo con los valores almacenados. No funcionó bien, sólo se oía un ruido de fondo. El código con mis modificaciones era éste, lo adjunto por si acaso aunque dudo que sirva de mucho:

Code: [Select]
#include <PCM.h> //incluimos la libreria PCM
int val; //valor analogico de entrada para el micro

unsigned char sample[] = {0};//array de valores para el speaker

void setup()
{
 
}

void loop()
{
  val = analogRead(A0);
  sample[0] = val; //asignamos val al primer espacio del array
  startPlayback(sample, sizeof(sample));//funcion para hacer sonar el speaker
 
}

curro92

Hola,
tendrías que hacer un muestreo de la señal del micrófono: para la librería que te mencioné viene bien una frecuencia de 16kHz y 8 bit de resolución.
Sobre muestreo con Arduino tienes un hilo interesante
http://forum.arduino.cc/index.php?topic=68855.0

Ikkarus

Ok. Siento no haber contestado antes. Aún no lo he intentado, pero muchas gracias por el aporte. En cuánto tenga un momento voy a intentarlo.

¡Gracias de nuevo!

peladilla

¡Saludos!

Mi intención sería reproducir el sonido que recibe el micrófono en directo, no uno pregrabado en una SD. ¿La TMRpcm me permitiría hacerlo?

En cuánto al código utilizado, es éste:

Code: [Select]
int val; //valor analógico de la entrada del micrófono

void setup(){
 
 Serial.begin(9600); //iniciamos el serial para saber el valor de entrada del micro
 
}

void loop(){
 
 val = analogRead(A0);
 Serial.println(val);
 analogWrite(A1, val); //escribimos el valor del micro en el pin del altavoz
   
}


El resultado es un ruido de fondo constante, además de reproducir el sonido que detecta el micrófono, pero completamente distorsionado y, en el caso de la voz, ininteligible.

¿Qué debería hacer? ¿Debo construir un amplificador para el altavoz/micro? ¿Es problema de código?

¡Muchas gracias por tu tiempo!
el simple hecho del printf te puede provocar que tu frecuencia de muestreo sea muy lenta

surbyte

Parece ser que nuevo que llega al foro no puede hacer otra cosa que meter la pata. Perdón por recibirte de este modo, pero no has visto la advertencia que el hilo tenía mas de 120 días sin movimientos. Desde 2013 creo que son mas de 120 días!!! y aún asi respondes, y esperas que alguien te diga algo de los interlocutores originarios?


HILO CERRADO!!


Recomendaciones:
1. Lee las normas del foro.
2. Mira bien en que sección publicarás tu consulta.
3. No respondas mas hilos viejos de mas de 4 meses (120 días).
4. Crea un nuevo hilo con esta consulta y no uses la palabra AYUDA. Usa un título que explique bien tu problema.


Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy