Autor Tema: [APORTE] ANALIZADOR DE ESPECTRO CON ARDUINO UNO Y WINAMP  (Leído 296 veces)

dinoelectro

  • PIC10F
  • *
  • Mensajes: 1
    • Ver Perfil
[APORTE] ANALIZADOR DE ESPECTRO CON ARDUINO UNO Y WINAMP
« en: Junio 11, 2017, 06:51:35 am »
En este articulo se explica como hacer un analizador de espectros utilizando el reproductor de música WINAMP y el Plugin "gen_crownsoft_lcd.dll";

La tarea de este Plugin es enviar datos al puerto serie del computador que contienen información de las frecuencias de audio que en ese instante se están reproduciendo. por otra parte ARDUINO, toma los datos que envía el plugin y los representa en una pantalla LCD de 2 líneas x 16 columnas.

Con ligeras modificaciones en el código fuente se puede construir un analizador de espectro mas grande y vistoso como el de la foto.



MATERIALES
Arduino UNO
LCD 2x16 Lineas
Potenciometro multivueltas 10K

SOFTWARE
WINAMP 5.6
visita mi blog para que puedas descargar el plugin para winamp: http://dinoelectro.blogspot.com/search/label/ANALIZADOR%20DE%20ESPECTRO

Procedimiento.
Para instalar el Plugin procedemos de la siguiente manera:
Copiamos el archivo "gen_crownsoft_lcd.dll" dentro de la carpeta c:\...Winamp\Plugins
Copiamos el archivo ""lcd_analyzer.ini" en el directorio raíz C:\
Editamos el archivo "lcd_analyzer.ini" indicando el puerto COM donde conectaremos la placa ARDUINO
Comprobamos que el plugin ha sido instalado correctamente, para ello iniciamos Winamp, vamos a menú Opciones/preferencias, En de dialogo en Plugins/Proposito General buscar si aparece en la lista el plugin "gen_crownsoft_lcd.dll" (ver figuras)




Siempre y cuando se haya instalado el Plugin, WINAMP lo que hará es enviar comandos al puerto serie del computador; dichos comandos son códigos ASCII (a, b, c, d, e, f, g, h, i, j, k) y tienen el siguiente significado;

a amplitud =1
b amplitud =2
c amplitud =3
d amplitud =4
e amplitud =5
f amplitud =6
g amplitud =7
h amplitud =8
i, comando que indica que se va escribir un carácter
j, comando que indica que se va escribir la amplitud de onda
k, borra la pantalla

ejemplos:

i00H
posicionar el cursor del LCD en (0,0) y escribir el carácter 'H'

j01b
posicionar el cursor del LCD en (0,1) y escribir la amplitud de la onda = 2

k
limpiar pantalla del LCD

Con base a lo anteriormente expuesto se ha escrito el siguiente sketch para ARDUINO el mismo que recibe e interpreta los comandos enviados por Winamp y los presenta en un LCD 2x16

Código: [Seleccionar]
#include <LiquidCrystal.h>
// more info: http://dinoelectro.blogspot.com/search/label/ANALIZADOR%20DE%20ESPECTRO
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // lcd pins RS E D4 D5 D6 D7
byte custChars[8][8] = {
//LEVEL 0 1 2 3 4 5 6 7
{ B00000, B00000, B00000, B00000, B00000, B00000, B00000, B11111 },
{ B00000, B00000, B00000, B00000, B00000, B00000, B11111, B11111 },
{ B00000, B00000, B00000, B00000, B00000, B11111, B11111, B11111 },
{ B00000, B00000, B00000, B00000, B11111, B11111, B11111, B11111 },
{ B00000, B00000, B00000, B11111, B11111, B11111, B11111, B11111 },
{ B00000, B00000, B11111, B11111, B11111, B11111, B11111, B11111 },
{ B00000, B11111, B11111, B11111, B11111, B11111, B11111, B11111 },
{ B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111 }
};

byte serial_getch() {
while (Serial.available() == 0);
return Serial.read();
}

void setup(){
Serial.begin(19200);
lcd.begin(16, 2);
lcd.clear();
for (int i = 0; i<8; i++){
lcd.createChar(i, custChars[i]);
delay(500);
}
}

void loop(){
byte rxbyte = serial_getch();//inicio de trama puede ser i, j, k
if (rxbyte == 'j'){
byte coulumn = serial_getch()-'0'; //indica columnas 0, 1, 2,... ,15
byte row = serial_getch()-'0'; //indica filas 0, 1
byte level = serial_getch()-'a'; //indica la amplitud 0, 1, 2,... ,7
lcd.setCursor(coulumn , row);
lcd.write((uint8_t)(level));
}
else if (rxbyte == 'i'){
byte coulumn = serial_getch()-'0'; //indica columnas 0, 1, 2,... ,15
byte row = serial_getch()-'0'; //indica filas 0, 1
lcd.setCursor(coulumn , row);
lcd.write((char)serial_getch()); //escribe un espacio, sirve para borrar columnas
}

else if (rxbyte == 'k'){
lcd.clear();//borra toda la pantalla
}
}

Para comprobar el funcionamiento armamos el siguiente circuito y cargamos el sketch correspondiente en ARDUINO:



Una vez que tenemos ya todo listo; conectamos el Arduino a nuestro computador asegurandonos que se encuentre en el mismo numero de puerto COM que el especificado en el archivo lcd_analyzer.ini

Iniciamos Winamp nuevamente y rodamos una canción para ver a nuestro analizador de espectros funcionando.

Ahora pongo un vídeo de los analizadores de espectro que construí:



mas información de este y otros proyectos la encontraras en mi blog: http://dinoelectro.blogspot.com/

espero sus sugerencias y comentarios!   :rolleyes2: :rolleyes2: :rolleyes2:
« Última modificación: Junio 11, 2017, 06:53:26 am por dinoelectro »