Introduction: Vumetro ARDUINO Utilizando WINAMP

Picture of Vumetro ARDUINO Utilizando WINAMP

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

Step 1: Configuración Del Plugin

Picture of 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

Picture of 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

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
////////////////////////////////////////////////////////////////////</p><p>/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);
  }
}</p><p>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

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

Comments

About This Instructable

107views

1favorite

License:

More by raulb32:PONG WITH ARDUINO - ARDUINO PONGVUMETRO CON ARDUINO Y MICROFONO ELECTRETAnalizador De Espectro Con ARDUINO Y WINAMP
Add instructable to: