Вы находитесь на странице: 1из 6

instructables

Vumetro ARDUINO Utilizando WINAMP

by raulb32

Hola amig@ le invito a revisar el siguiente instructable donde explico como construir un vumetro con 12 LEDS
que reaccionan con la música que reproduce WINAMP.

MATERIALES

ARDUINO UNO + CABLE USB


12 LEDS: 7 VERDES,
3 AMARILLOS,
2 ROJOS
12 RESISTENCIAS 330 OHM
1 PLACA UNIVERSAL
1 METRO DE ESTAÑO
HERRAMIENTAS
CAUTIN
PINZA PELA CABLES

SOFTWARE

Descargar WINAMP 5.66


Descargar WINLPT 2.0.9

Vumetro ARDUINO Utilizando WINAMP: Page 1


Step 1: Configuración Del Plugin

Después de Instalar el software WINLPT VERSION 2.09 y grabar el sketch en ARDUINO vamos a MENU
INICIO/WINLPT y le damos clic en "launch WINAMP" (no iniciar winamp directamente ya que no se iniciará el
plugin y posiblemente su computador deje de responder)

Dentor de winamp nos dirigimos al menú Opciones/vizualizacion/iniciar bajo la pestaña SETTINGS configurar los
siguientes parámetros:

COM el que esta conectado ARDUINO,


Baudrate = 9600,
Header = 1,
DataBytesCount=12, numero de LEDS que vamos a utilizar

Step 2: Sketch

Para llevar a cabo este proyecto, se utilizo doce LED y doce resistencias de 330 ohm luego se las colocó en una
placa perforada de manera que se la pueda montar sobre el ARDUINO y coincida con los pines 2, 3, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13 y GND

El software winlpt envía una cadena de 0 hasta 32 bytes, en este caso, que solo encenderemos doce leds,
programaremos para que el software envíe doce bytes únicamente; el primer byte enviado corresponde al inicio
de la trama y siempre es 1, los siguientes 12 bytes corresponden a los datos: si el byte es 0 apaga el LED; si el
byte es 255 enciende el LED

Ejemplos

1000000000000 Todos los Leds apagados

125500000000000 El primer led encendido


Vumetro ARDUINO Utilizando WINAMP: Page 2
10000000255255255255255 los últimos cinco leds encendidos

El Programa para cargar en Arduino es el siguiente:

// 0 - APAGA TODO
// 255 - ENCIENDE EL LED
// CABECERA: 1
// 1 L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12
// PAQUETE COMPLETO: 1 0 0 0 0 0 0 0 0 0 0 0 0
// BYTES: 1..12
/////////////////////////////////////////////////////////////////////
// Program code
//////////////////////////////////////////////////////////////////// /PINES DEL ARDUINO 2, 3, 4, 5,... 13
const int channels[] = {2,3,4,5,6,7,8,9,10,11,12,13};
const int baudrate = 9600;
// NUMERO DE CANALES
const int numChannels = sizeof(channels);
//CANAL ACTUAL
int curChannel = 0;
void setup()
{
Serial.begin(baudrate);
for(int i = 0; i < numChannels; i++)
{
pinMode(channels[i], OUTPUT);
digitalWrite(channels[i], LOW);
}
}

void loop()
{
int y = Serial.available();
for (int i = 0; i < y; i++)
{
int inc = Serial.read(); // LEE EL DATO ENVIADO POR EL COMPUTADOR
if (inc == 1) // SI RECIBE EL NUMERO 1
{
curChannel = 0; //RESETEA EL CANAL ACTUAL A 0
continue;
}
if (curChannel < numChannels) // SI EL NUMERO DE CANAL ACTUAL ES MENOR AL NUMERO TOTAL DE CANALES
{
digitalWrite(channels[curChannel], !!inc); // ESCRIBE LA SEÑAL DE SALIDA
curChannel++;
}
}
}

Para comprender mejor la configuración del Plugin y ver al vumetro funcionando revise el vídeo.

Vumetro Arduino WINLPT

Vumetro ARDUINO Utilizando WINAMP: Page 3


Vumetro ARDUINO Utilizando WINAMP: Page 4
Step 3: VUMETRO WINAMP CON MATRIZ P10

Ahora modificaremos el SKETCH para hacerlo funcionar con matrices P10; el código es el siguiente:

//CONEXIONES:
//ARDUINO________________DMD
//PIN9___________________OE
//PIN6___________________A
//PIN7___________________B
//PIN13__________________SLK
//PIN8___________________SCLK
//PIN11__________________SPI
// Protocolo:
// 0 - APAGA EL LED
// 255 - ENCIENDE EL LED
// 1 - CABECERA MARCA EL INICIO DE LA TRAMA
// Baud Rate: 9600
// CABECERA: 1
// 1 L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12
// PAQUETE COMPLETO: 1 0 0 0 0 0 0 0 0 0 0 0 0
// BYTES: 1..12
/////////////////////////////////////////////////////////////////////
#include <DMD.h>
#include <TimerOne.h>
#include "Arial_black_16.h"
#include "SystemFont5x7.h"//para letra pequeña
#include "Arial_Black_16_ISO_8859_1.h"//para letra grande
DMD display(1,2);
const int baudrate = 9600;
const int numChannels = 12;
int curChannel = 0;

void ScanDMD()
{
display.scanDisplayBySPI();
}

void writeLevel(int i, bool inc){


if (inc==1)display.drawCircle(15,15,i,GRAPHICS_NORMAL);else display.drawCircle(15,15,i,GRAPHICS_NOR);
}
void setup() {
Timer1.initialize( 1000 );
Timer1.attachInterrupt(ScanDMD);
Serial.begin(baudrate);
}

void loop(){

int y = Serial.available();

for (int i = 0; i < y; i++)


{
int inc = Serial.read(); // LEE EL DATO ENVIADO POR EL COMPUTADOR
if (inc == 1) // SI RECIBE EL NUMERO 1
{
curChannel = 0; //RESETEA EL CANAL ACTUAL A 0
continue;
}
if (curChannel < numChannels) // SI EL NUMERO DE CANAL ACTUAL ES MENOR AL NUMERO TOTAL DE CANALES
{
inc = !!inc; //convierte 255 a 1
writeLevel(curChannel,inc);
curChannel++;
}
}
}

Vumetro ARDUINO Utilizando WINAMP: Page 5


https://youtu.be/RRUSxhcRbxI

https://youtu.be/nhTuZb2qQxw

Vumetro ARDUINO Utilizando WINAMP: Page 6

Вам также может понравиться