[Aporte] VUMETRO GIGANTE cuatro efectos

Gracias rat mayor,...

Aquí les dejo este pequeño tutorial:

Como controlar 8 LEDS RGB utilizando 11 pines del microcontrolador

con los transistores TIP32 seleccionamos el color RGB y con el CI ULN2803 encendemos los LEDs que deseemos.

Ejemplo 1. para encender 8 LEDs azules:

https://lh4.googleusercontent.com/-...AAAAAFNk/YTprG9WXtmA/w1013-h553-no/azul+8.PNG

Ejemplo 2. para encender 4 leds en combinacion verde-rojo:

https://lh6.googleusercontent.com/-...NA/gIsGQNIcd-0/w1024-h553-no/rojo-verde+4.PNG

Ejemplo 3. para encender 6 leds en combinacion verde-azul:

https://lh6.googleusercontent.com/-...FM8/jCsmq6zjcYE/w997-h553-no/azul-verde+6.PNG

..., y así por el estilo vamos encendiendo combinaciones de LED RGB con un numero reducido de pines, la misma idea se puede extender para mas LEDs inclusive;

Para 8 LEDS utilizaríamos 11 pines
Para 9 LEDS utilizaríamos 12 pines
Para 10 LEDs utilizaríamos 13 pines
.
.
.

para N LEDS utilizaríamos N+3 pines

Espero les haya sido util :LOL:




y as pensado en usar el WS2801 o WS2811, es un poco mas caro pero regula bien el color RGB via serial o usar otro pic pequeño y crear un programa simulando ese integrado sin el voltage de calibracion (igual sale mas barato y versatil)..

o usar un 12f629 y hacer un codigo imitando el WS2801 sin voltage referencia que saldria mas barato y versatil. (mas que nada para poder tener una pequeña paleta de colores)...


pero aun asi teneis que mejorar por mucho ese programa de crio de 14 o 16 años... y creae un buen motor para analizar el espectro de las distintas frecuencias.
 
Bueno amigo espero ver tu trabajo... tengo entendido que las tiras ws2801 tienen integrado ya un contolador lo cual facilitaria el trabajo. Esto es un vumetro no lo compares con un analizador de espectro.

¿No te gusta los vumetro? ¿prefieres los analizadores de espectro? Hazte uno trbaja mas critica menos.



pero aun asi teneis que mejorar por mucho ese programa de crio de 14 o 16 años... y creae un buen motor para analizar el espectro de las distintas frecuencias.

Agradezco tus sugerencias. Bueno yo ya di el primer paso ahora espero ver mejoras por parte de los usuarios del foro.
 
Última edición:
Hola dinoelectro,he montado un circuito para vumetro gigante con 300 leds rgb 5050 a 12v con 4 cables red,green,blue,y positivo,y me gustaría poner los efectos que tú tienes,lo que pasa es que yo lo quiero hacer en atmega328p con arduino,también conectare a un controlador que viene con la tira leds y su respectivo mando,quería preguntarte también que potenciometro comprar si lineal o algorítmico para cambiar los efectos,también he comprado un ampli de micro para controlar la entrada de audio.He de decirte que no controlo mucho de programar por eso te pido ayuda.
Gracias
 
Hola dinoelectro,he montado un circuito para vumetro gigante con 300 leds rgb 5050 a 12v con 4 cables red,green,blue,y positivo,y me gustaría poner los efectos que tú tienes,lo que pasa es que yo lo quiero hacer en atmega328p con arduino,también conectare a un controlador que viene con la tira leds y su respectivo mando,quería preguntarte también que potenciometro comprar si lineal o algorítmico para cambiar los efectos,también he comprado un ampli de micro para controlar la entrada de audio.He de decirte que no controlo mucho de programar por eso te pido ayuda.
Gracias ��

Excelente Apology, seria bueno que nos mostraras lo que tienes echo segun eso ver en que podemos mejorar; yo emplee un potenciometro de los mas sencillos que existe, pero como no uno lineal y deslisable seria la mejor opcion(ver foto).

New-Electronic-Block-font-b-10K-b-font-font-b-Sliding-b-font-Slider-font-b.jpg


estoy de acuerdo, reeplazar al PIC con arduino, ya que ahorra muchas molestias eso de estar diseñando placas de circuito impreso

Saludos apology!
 
Última edición:
Dinoelectro aqui tienes el circuito terminado,solo tengo que conectar el micro,y el potenciometro para selecionar los modos de los efectos.Si te fijas en la placa hay 3 pines libres para conectar el potenciometro al atmega328p,o el micro.Sobre lo del potenciometro me gustaria uno mas pequeño de los de rueda ya que al circuito le quiero hacer una caja de metacrilato para que quede mas bonito y el potenciometro que tu dices es muy grande.Tiene 9pines de conexion a cada lado para los leds.En el panel de los leds rgb si te fijas esta conectado para que haya 3 niveles de colores que quiero controlar con el controlador con mando a distancia que venia con la tira leds,hay una manera de conectar el panel al controlador de tal manera que puedes conseguir esos 3 niveles de colores sin tener que programar en el atmega328p los colores y simplificar la programacion,decirte que son 2 paneles iguales,es decir unos 3360 leds en total.Lo que quiero es hacer los efectos que tu tienes programados en estos 2 paneles con un atmega328p,por eso necesito saber como conectar los leds,el potenciometro,y el micro,de tal manera que pueda conseguir tus efectos con el atmega328p.
 

Adjuntos

  • Archivo 27-4-17 20 54 04.jpg
    Archivo 27-4-17 20 54 04.jpg
    103.1 KB · Visitas: 33
  • Archivo 27-4-17 20 55 20.jpg
    Archivo 27-4-17 20 55 20.jpg
    96.1 KB · Visitas: 25
  • vumetro-gigante-con-transistores.pdf
    62.9 KB · Visitas: 23
  • controlador rgb.jpg
    controlador rgb.jpg
    88.6 KB · Visitas: 22
Dinoelectro aqui tienes el circuito terminado,solo tengo que conectar el micro,y el potenciometro para selecionar los modos de los efectos.Si te fijas en la placa hay 3 pines libres para conectar el potenciometro al atmega328p,o el micro.Sobre lo del potenciometro me gustaria uno mas pequeño de los de rueda ya que al circuito le quiero hacer una caja de metacrilato para que quede mas bonito y el potenciometro que tu dices es muy grande.Tiene 9pines de conexion a cada lado para los leds.En el panel de los leds rgb si te fijas esta conectado para que haya 3 niveles de colores que quiero controlar con el controlador con mando a distancia que venia con la tira leds,hay una manera de conectar el panel al controlador de tal manera que puedes conseguir esos 3 niveles de colores sin tener que programar en el atmega328p los colores y simplificar la programacion,decirte que son 2 paneles iguales,es decir unos 3360 leds en total.Lo que quiero es hacer los efectos que tu tienes programados en estos 2 paneles con un atmega328p,por eso necesito saber como conectar los leds,el potenciometro,y el micro,de tal manera que pueda conseguir tus efectos con el atmega328p.


Hola Apology

Mil disculpas me he tardado en contestar;

estuve investigando la forma de controlar con ARDUINO y he encontrado un SOFTWARE que se llama WNDLPT y permite tomar la música del reproductor WINAMP (También sirve con AIMP3)
los efectos se programan mediante SCRIPTS y puedes darle la forma que desees,

Aunque inicialmente este software fue diseñado para funcionar con puerto paralelo; ahora, debido a que las computadoras ya no tienen dicho puerto, se ha echo una modificación para que funcione con el puerto serial; de ahí que se puede aprovechar para utilizarlo con un ARDUINO u otro microcontrolador.

observa el siguiente video:


El software WNDLPT y el código para programar el ARDUINO lo encuentras en el siguiente link:

http://wndlpt.sourceforge.net/arduino/

Saludos cordiales!
 
Última edición:
Gracias por contestar, dinoelectro, pero yo al arduino lo quiero sólo para programar el atmega328p
Sacarlo del zócalo de la placa de arduino uno y conectar el atmega en el zocalo soldado a la placa pbc que he hecho y que tienes la foto más arriba.

El arduino sólo es para programar. En el sistema que tú me dices, tengo que usar el arduino y no quiero.

Por cierto, tengo una duda que quizás me puedas decir.
¿S
i resetéo el atmega328p en la placa de arduino uno, tengo que volver a cargar en el atmega328p el bootloader para programarlo?
¿O si viene de fábrica con el bootloader el atmega, no necesita que lo vuelva a cargar para poder volver a programarlo?
 
Última edición por un moderador:
Hola apology los armega 328 pueden o no venir con bootloader en caso de que tu atmega no este cargado el bootloader tendras que cargarlo tu mismo utilizando una placa arduino.

El bootloader no se borra el momento que das reset en la placa arduino

En todo caso si deseas revisar el vumetro con einamp tengo toda la informacion lista en mi blog

http://dinoelectro.blogspot.com/?m=1

Saludos!



Que tal amigos...

Les cuento brevemente que estoy construyendo una nueva version del vumetro ahora utilizando matrices led.. apenas lo tenga listo estare publicando los pormenores. mientras tanto dejo un avance:

 
Última edición:
Una cosa que quiero comentaros y que no entiendo por qué pasa.
R
esulta que enciendo mi placa con atmega328p como stand-alone y con 18 salidas para leds rgb 5050
A las salidas van conectados los positivos de los ledsy los cables RGB a un controlador que venía con la tira de leds, y un mando a distancia de 44 teclas.
Pues lo que pasa es que cuando enciendo la placa y toco con un dedo en las resistencias que están conectadas a las patas del atmega, se enciende el led correspondiente a la salida de la placa.
Las resistencias son de 10 kΩ, pero es que si toco las patas del atmega, también se enciende el led correspondiente a la salida, y si toco la pata central del transistor, también se enciende el led correspondiente a la salida de ese led. El transistor es un 2N2222.
¿Alguien sabe cual puede ser el problema?
La placa, el circuito y los leds están en un post anterior que puse.
 
Última edición por un moderador:
En lugar de colocar dos transistores, mejor hubiera sido que sólo conectes un transistor del tipo Darlington.

2_a595aade-0e2a-4a94-adda-0dece2346137_1024x1024.jpg

Sospecho que el circuito que conmuta a la tira LED, está demasiado sensible y cualquier corriente que circula por la base, por mínima que esta sea, hace disparar a los LED.

Una solución sería que aumentes la resistencia que va en la base del transistor.
 

Adjuntos

  • Circuito-variador-tiras-rgb-potencia.png
    Circuito-variador-tiras-rgb-potencia.png
    36.3 KB · Visitas: 18
Última edición por un moderador:
He de decirte, dinoelectro, que el circuito no es mío, es de otra persona.
Esa persona me dijo que tenía que poner las resistencias que van conectadas a las patas del atmega y fuesen de 10k.
Luego poner el transistor 2N2222, luego unas resistencias de 1k, y por último un transistor TIP42C, ya que en esas 18 salidas dan un total de 320 leds rgb.

Por cierto, el atmega viene con el bootloader de fábrica, según el vendedor, pero lo curioso es que al encender el circuito, no hacer nada.
E
s decir, no encienden los leds como tendría que hacer el atmega con el programa grabado, y lo raro es que sólo se encienden si paso el dedo por donde te he dicho en el anterior post.

No sé por qué puede ser. Espero me podáis ayudar, porque el circuito no tiene corto y está revisado con lupa.
La fuente de alimentación tiene suficiente potencia y estoy un poco perdido al respecto.
 
Última edición por un moderador:
Es muy normal que los leds enciendan cuando tocas con el dedo la base del transistor.
Eso quiere decir que el transistor está cumpliendo su función que es conmutar los leds.

Una prueba sencilla que puedes hacer para saber si los transistores están cumpliendo su función, es colocar 5 V. en la base del 2N2222
Los leds deberían encender, luego colocar 0 V. en la base del 2N2222 y los leds deberían permanecer apagados.

Si después de realizar esas pruebas todo marcha bien, entonces te toca revisar el programa que cargaste en el atmega.
 
Última edición por un moderador:
Ya he hecho lo que me dijistes, dinoelectro, y los transistores 2N2222 hacen su trabajo correctamente.
Como ya te dije anteriormente, uso el atmega328p como stand-alone en la placa.
El programa también es de la misma persona que me pasó el circuito, y está para que arranque de forma automática al encenderlo.
No controlo mucho esto de programar, por eso si te hago alguna pregunta tonta, no te molestes.

El programa lo grabo con arduino uno, que viene con zócalo para el atmega y lo graba en AVRS MkII, pero no funciona en la placa.
He leído por ahí, que para utilizarlo como stand-alone tendría que grabarlo en ISP, pero que se pierde el bootloader.
No sé qué puede ser, porque en los leds que vienen en la placa de arduino uno, si que parece que hace los encendidos del programa.

Este es el programa:
PHP:
//esta es na programacion basica para checar el funcionamiento de la torre
//motoro 
//vercion 1.0
int led[20] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18}; 
int leftChannel = 6; 
int left, i;
int temp, temp1, temp2,temp3,temp4,temp5,temp6,temp7,temp8,temp9,temp10,temp11,temp12;
int cont=20;
int t0=25, t1=200, t2=100, t3=50, t4=20, t5=200,t6=20,t7=50,t8=300;
void setup()
{
for (i = 0; i < 18; i++) 
pinMode(led[i], OUTPUT);
}
void loop(){

//esta es la opcion de vumetro si desactivan esta fucnon es necesario colocar un preamplificador en el pin que corresponda
//for(temp=0; temp<30000; temp++){
//vumetro();
//}

for(temp1=0; temp1<10; temp1++){
shiftLED();
}

for(temp2=0; temp2<5; temp2++){
rutina3();
}

//ESTROBO
for(temp3=0; temp3<17; temp3++){
rutina4();
}


//motoro 

for(temp5=0; temp5<1; temp5++){
rutina6();
}

for(temp6=0; temp6<4; temp6++){
rutina7();
}

//mitad apaga mitad prende
for(temp7=0; temp7<9; temp7++){
rutina8();
}



//ESTROBO
for(temp3=0; temp3<17; temp3++){
rutina4();
}

for(temp9=0; temp9<2; temp9++){
rutina10();
}

for(temp10=0; temp10<3; temp10++){
rutina11();
}




//ESTROBO
for(temp3=0; temp3<17; temp3++){
rutina4();
}




//estrobo
for(temp3=0; temp3<17; temp3++){
rutina4();
}


}

//Realiza la lectura de la entrada de audio y la muestra en la barra de LEDs
void vumetro(){
left = analogRead(leftChannel); 
left = left / 25; 
if (left == 0) {
for(i = 0; i < 18; i++){
digitalWrite(led[i], LOW);
}
}
else{
for (i = 0; i < left; i++){
digitalWrite(led[i], HIGH);
}
for(i = i; i < 18; i++){
digitalWrite(led[i], LOW);
}
}
}



void shiftLED(){
for(int led=0; led<18; led++){
digitalWrite(led,HIGH); 
delay(20);
digitalWrite(led,LOW);
}

}
void rutina3(){
for(int led=0; led<18; led++){
digitalWrite(led,LOW); 
delay(70);
digitalWrite(led,HIGH);
delay(10);
}
}

void rutina4(){
for (cont=0; cont <18; cont ++)
switch(cont){
case 0:
PORTD= B11111111;
PORTB= B11111111;
PORTC= B11111111;
delay(t0);
case 1:
PORTD= B00000000;
PORTB= B00000000;
PORTC= B00000000;
delay(t0);
} 
}


void rutina6(){
for(int led=0;led<18;led++){
digitalWrite(led,HIGH); 
delay(t1);
}
for(int pin=18;pin>0;pin--){
digitalWrite(pin,LOW); 
delay(t1); 
}

for(int pin =0;pin<cont;pin++)
{ 
digitalWrite(led[pin],HIGH); 
delay(t1);
digitalWrite(led[pin],LOW); 
}
for(int pin =cont-1; pin >=0;pin--)
{ 
digitalWrite(led[pin],HIGH); 
delay(t1); 
digitalWrite(led[pin],LOW); 
}
}

void rutina7(){
int k=17; 
for(int led=8; led<=17;led++)
{ 
digitalWrite(led, HIGH); 
digitalWrite(k-led, HIGH); 
delay(30); 
}
for(int led=8; led>=0;led--)
{ // Al contrario de lo anterior
digitalWrite(led, LOW);
digitalWrite(k-led, LOW);
delay(30);

}
for(int led=17; led>=0;led--)
{ 
digitalWrite(led, HIGH);
digitalWrite(k-led, HIGH);
delay(30);
}
for(int led=0; led<=17;led++)
{
digitalWrite(led, HIGH); 
digitalWrite(k-led, HIGH); 
delay(30); 
}
} 

void rutina8(){
int k=17;
for(int led=0; led<=8;led++){
digitalWrite(led,HIGH);
digitalWrite(k-led,LOW);
}
delay(300);
for(int led=0; led<=8;led++){
digitalWrite(led,LOW);
digitalWrite(k-led,HIGH);
}
delay(300);
}




void rutina10(){

for(int led=0;led<18;led++){
digitalWrite(led,HIGH); 
delay(t4);
}
for(int pin=0;pin<18;pin++){
digitalWrite(pin,LOW); 
delay(t4); 
}

for(int pin =0;pin<cont;pin++)
{ 
digitalWrite(led[pin],HIGH); 
delay(t4);
digitalWrite(led[pin],LOW); 
}
for(int pin =cont-1; pin >=0;pin--)
{ 
digitalWrite(led[pin],HIGH); 
delay(t4); 
digitalWrite(led[pin],LOW); 
}


for(int pin =0;pin<cont;pin++)
{ 
digitalWrite(led[pin],HIGH); 
delay(t4);
digitalWrite(led[pin],LOW);
delay(160);
}
for(int pin =cont-1; pin >=0;pin--)
{ 
digitalWrite(led[pin],HIGH); 
delay(t4); 
digitalWrite(led[pin],LOW); 
delay(80);
}
}
void rutina11(){
for(int led=0; led<9; led++){
digitalWrite(led,LOW); 
delay(100);
digitalWrite(led,HIGH);
delay(10);
}

for(int led=17; led>8; led--){
digitalWrite(led,LOW); 
delay(100);
digitalWrite(led,HIGH);
delay(10);
}

for(int led=0; led<9; led++){
digitalWrite(led,HIGH); 
delay(100);
digitalWrite(led,LOW);
delay(10);
}

for(int led=17; led>8; led--){
digitalWrite(led,HIGH); 
delay(100);
digitalWrite(led,LOW);
delay(10);
}


for(int led=0; led<9; led++){
digitalWrite(led,LOW); 
delay(100);
digitalWrite(led,HIGH);
delay(10);
}
}
 
Última edición por un moderador:
Mil disculpas Apology; , otra vez he tardado en contestar

Bueno te comento que construí un vumetro utilizando ARDUINO UNO y doce LEDS

aquí esta el código:

Código:
//Teniendo en cuenta todos los elementos teóricos, se escribió el siguiente programa para Arduino
//Conectar la señal de audio amplificada en el canal A1
//Conectar doce leds con sus respectivas resistencias a los pines 2,3,4,5,6,7,8,9,10,11,12,13

const int ledCount = 12; // numero de leds
int sensorReading;       // lectura del ADC 0-1024  

int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};

void setup() {
  Serial.begin(9600); //inicamos el puerto Serial
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {pinMode(ledPins[thisLed], OUTPUT);}// programamos desde el pin 2 al pin 13 como salidas   
}

void loop() {
  sensorReading = analogRead(A1);//tomamos la lectura del ADC
  Serial.println(sensorReading); //imprimimos en el puerto serie
  int ledLevel = map(sensorReading, 200,500, 0, ledCount);  // mapeamos desde 300 hasta 900 para los LEDS desde 2 a 13 
  
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    if (thisLed < ledLevel) {
      digitalWrite(ledPins[thisLed], HIGH);// encendemos los LED segun la intensidad de la señal 
    }
     else {
      digitalWrite(ledPins[thisLed], LOW);// apagamos los LED segun la intensidad de la señal
    }
  }
  delay(10);
  }



Mas detalles sobre este y otros proyectos lo puedes ver en mi blog

http://dinoelectro.blogspot.com/

Saludos Cordiales!
 
Última edición:
Dinoelectro te pido disculpas por no contestarte antes,pero he tenido algunos problemas de tiempo,y me ha sido imposible hacerlo antes.Ya di con el problema de que no funcionase el atmega,y en general que no funcionase correctamente el circuito,eran los capacitadores que estan al lado del cristal que no eran los correctos, (aunque la persona que me paso el circuito me dijo que pusiera esos),los he cambiado y ahora funciona correctamente,ya solo me queda hacer un programa en arduino y grabarlo en el atmega con los efectos que tú tienes,ya sabes que soy nuevo en esto de programar,haber si lo consigo
 
Me alegro que hayas resuelto ese inconveniente apology... todos pasamos por esos asuntos pero nos dejan una lección valiosa. Los capacitores que acompañan al cristal deben estar entre 22pf y máximo 33pf
 
Hola dinoelectro de nuevo,quería preguntarte algunas dudas que tengo,quiero conectar un potenciometro a la salida A4 del atmega 328p para que cambie los distintos efectos,pero no si puedo conectarlo directamente al positivo,negativo,y salida A4 de la placa,o no lo puedo hacer así.Otra duda que tengo es que en el programa que pones arriba de efecto vumetro,no se si pueden hacer los 6 efectos que programastes al principio de este post,me refiero al efecto punto,vumetro,etc,,,de la forma en que lo has programado en arduino.

Gracias
 
Hola dinoelectro de nuevo,quería preguntarte algunas dudas que tengo,quiero conectar un potenciometro a la salida A4 del atmega 328p para que cambie los distintos efectos,pero no si puedo conectarlo directamente al positivo,negativo,y salida A4 de la placa,o no lo puedo hacer así.Otra duda que tengo es que en el programa que pones arriba de efecto vumetro,no se si pueden hacer los 6 efectos que programastes al principio de este post,me refiero al efecto punto,vumetro,etc,,,de la forma en que lo has programado en arduino.

Gracias


Hola APology, como estas? bueno ante todo tenemos que aclarar algunos conceptos,

1. A4 es una ENTRADA analógica, no una salida como tu la llamas.
2. En el potenciometro debes colocar 5V a uno de sus extremos, Tierra al otro extremo y la pata central se dirije al canal A4.
3. cuando realizas lecturas analógicas estas varían en un rango de 0 hasta 1024, dicho de forma sencilla: cuando mueves la perilla del potenciometro haces variar su valor entre 0 y 1024: entonces supongamos que desees seleccionar cuatro efectos por medio del potenciometro, tendremos el siguiente algoritmo:
  • Si la lectura del potenciometro esta entre 0 y 255, haga el EFECTO1
  • Si la lectura del potenciometro esta entre 256 y 512, haga el EFECTO2
  • Si la lectura del potenciometro esta entre 513 y 765, haga el EFECTO3
  • Si la lectura del potenciometro es mayor 765, haga el EFECTO4

mi sugerencia es que empieces construyendo este vumetro con arduino que tiene un solo efecto, y luego cuando ya tengas las cosas claras te indico como hacer los nuevos efectos... revisa el siguiente enlace en el cual explico todo con detalle y luego me comentas tus dudas:

http://dinoelectro.blogspot.com/2017/05/vumetro-12-leds-con-arduino-y-microfono.html

Saludos Cordiales!
 
Última edición:
Atrás
Arriba