sábado, 13 de mayo de 2017

CONSTRUYA UN ANALIZADOR DE ESPECTRO CON ARDUINO Y WINAMP

Este articulo explica como hacer un analizador de espectro utilizando el reproductor de música WINAMP y el Plugin "gen_crownsoft_lcd.dll"; 

La tarea del Plugin es enviar datos al puerto serie del computador que contienen información de las frecuencias de audio. 

Del otro lado tenemoas al ARDUINO toma los datos que envía el plugin y los nuestra 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.



Figura 1. Analizador de Espectros Gigante 


En seguida presento los detalles de como lo construí;

MATERIALES

Arduino UNO
LCD 2x16 Lineas
Potenciometro multivueltas 10K

SOFTWARE

Winamp 5.6
Descargar Plugin

Procedimiento.

PASO 1: debemos 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 
PASO 2: 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 2 y 3)

Figura 2.

Figura 3.

PASO 3:, Escribimos el sketch correspondiente para ARDUINO:


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

#include <LiquidCrystal.h> 

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
}
}


Paso 4; Si no disponemos un LCD Shield, debemos a
rmar el siguiente circuito y cargar el sketch correspondiente


Estando todo listo; y asegurandonos que el Arduino 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.




Figura 4.

Ahora pongo un vídeo del analizador de espectro que construí: 



Con ligeras modificaciones del código fuente he conseguido construir un analizador de espectro gigante como se muestra en el siguiente vídeo:



Quedo a la espera de sus sugerencias y comentarios.

descargar código y plugin

No hay comentarios.:

Publicar un comentario

CONSTRUYA UN ANALIZADOR DE ESPECTRO CON ARDUINO Y WINAMP

Este articulo explica como hacer un analizador de espectro utilizando el reproductor de música WINAMP y el Plugin "gen_crownsoft_lcd...