Introduction: Analizador De Espectro Con ARDUINO Y WINAMP

About: Ingeniero Electronico

En este articulo se explica como hacer un analizador de espectros utilizando el reproductor de música WINAMP y un Plugin llamado "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.

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 el video.

Step 1: Instalacion Del Plugin

  • 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"

Descargar Winamp 5.66

Descargar plugin

Step 2: Protocolo

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

Step 3: Sketch

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>
//lcd pins RS E D4 D5 D6 D7 LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 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 } }

Step 4: Comprobando Que Todo Este Bien

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.

Para mas informacion de este y otros proyectos visite mi blog: planetadigital