This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 3 voto(s) - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[TUTO] Pantalla 150 Leds WS2812
#1
Os presento mi ultimo proyecto. Una pantalla led casera con tiras WS2812


La pantalla lleva un arduino UNO como controlador. Se conecta vía USB a un pc y se maneja con varios programas.
Puedes poner efectos de colores, figuras, audioritmicos, hasta una imagen que subas o un video.

[Imagen: UuWE2IU.png]

Pasamos a los materiales

MATERIALES
  • Tira de Leds WS2812 (en mi caso una tira de 30 leds por metro y  5 metros) Unos 35€ [a mas leds por metro y mas cantidad mas resolucion y tamaño
  • Arduino UNO (5€)
  • Fuente 5v 5A mínimo (10€) (dependiendo de la cantidad de leds, en mi caso una de 4A con todos los leds blanco se reinicia y puede fuerza,mejor ir sobrado)
  • Base para los leds, en mi caso un vinilo para poder hacerla portatil y que no se vean los cables.
  • Resistencia 470 Ohm (opcional)
Precio aproximado (50€)

CONEXIÓN:

Los leds se cortan en tiras del tamaño necesario, yo las he cortado en tiras de 50cm.
Este tipo de tiras tienen posición, indicada con una flecha -> que indica el sentido de al señal de datos. Hay que respetarlo siempre.

Se colocan en forma de serpiente, uniendo el final de una tira con el principio de la siguiente respetando las flechas

INICIO (arduino)
=---->---->---->---->---->---->
  ----<----<----<----<----<----<
  ---->---->---->---->---->---->
  ----<----<----<----<----<----<

Una vez soldadas y pegadas las tiras se conectan al arduino y la fuente de la siguiente manera:

[Imagen: a4bLxdI.jpg]

CÓDIGO:

El código que usamos es de GLEDIATOR - LED MATRIX CONTROL SOFTWARE de SolderLabs.
Dejo el link de descarga oficial: http://www.solderlab.de/index.php/downlo...terface-v1
y el código por si se cae link en un futuro.

CAMBIAR LA LINEA SIGUIENTE POR EL NUMERO DE LEDS QUE USEMOS, 150 TENGO YO

 #define NUMBER_OF_PIXELS   40

Código:
//##############################################################################
//##############################################################################
//                                                                             #
// Glediator to WS2812 pixel converter                                         #
// by R. Heller                                                                #
// V 1.0 - 07.01.2014                                                          #            
// wwww.SolderLab.de                                                           #
//                                                                             #
// Receives serial data in Glediator protocol format @ 1 MBit/s                #
// and distributes it to a connectect chain of WS2812 pixels                   #
//                                                                             #
// Adjust the correct DATA PIN and the correct NUMBER OF PIXELS you are using  #
// in the definitions section below before uploading this sketch to your       #
// Arduino device.                                                             #
//                                                                             #
// Maxiumim number of supported pixeles is 512 !!!                             #
//                                                                             #
// In the Glediator software set output mode to "Glediator_Protocol",          #
// color order to "GRB" and baud rate to "1000000"                             #
//                                                                             #
//##############################################################################
//##############################################################################


//##############################################################################
//                                                                             #
// Definitions --> Make changes ONLY HERE                                      #
//                                                                             #
// To find out the correct port, ddr and pin name when you just know the       #
// Arduino's digital pin number just google for "Arduino pin mapping".         #
// In the present example digital Pin 6 is used which corresponds to "PORTD",  #
// "DDRD" and "6", respectively.                                               #
//                                                                             #
//##############################################################################

#define DATA_PORT          PORTD
#define DATA_DDR           DDRD                        
#define DATA_PIN           6                            
#define NUMBER_OF_PIXELS   40


//##############################################################################
//                                                                             #
// Variables                                                                   #
//                                                                             #
//##############################################################################

unsigned char display_buffer[NUMBER_OF_PIXELS * 3];
static unsigned char *ptr;
static unsigned int pos = 0;

volatile unsigned char go = 0;


//##############################################################################
//                                                                             #
// Setup                                                                       #
//                                                                             #
//##############################################################################

void setup()
{
 // Set data pin as output
 DATA_DDR |= (1 << DATA_PIN);
 
 // Initialize UART
 UCSR0A |= (1<<U2X0);                                
 UCSR0B |= (1<<RXEN0)  | (1<<TXEN0) | (1<<RXCIE0);  
 UCSR0C |= (1<<UCSZ01) | (1<<UCSZ00)             ;
 UBRR0H = 0;
 UBRR0L = 1; //Baud Rate 1 MBit (at F_CPU = 16MHz)
 
 ptr=display_buffer;
 
 //Enable global interrupts
 sei();
}


//##############################################################################
//                                                                             #
// Main loop                                                                   #
//                                                                             #
//##############################################################################

void loop()
{      
 if (go==1)
 {
   cli();
   ws2812_sendarray(display_buffer, NUMBER_OF_PIXELS * 3);
   sei();
   go=0;
 }
}


//##############################################################################
//                                                                             #
// UART-Interrupt-Prozedur (called every time one byte is compeltely received) #
//                                                                             #
//##############################################################################

ISR(USART_RX_vect)
{
 unsigned char b;
 b=UDR0;
 
 if (b == 1)  {pos=0; ptr=display_buffer; return;}    
 if (pos == (NUMBER_OF_PIXELS*3)) {} else {*ptr=b; ptr++; pos++;}  
 if (pos == ((NUMBER_OF_PIXELS*3)-1)) {go=1;}
}


//##############################################################################
//                                                                             #
// WS2812 output routine                                                       #
// Extracted from a ligh weight WS2812 lib by Tim (cpldcpu@gmail.com)          #
// Found on wwww.microcontroller.net                                           #
// Requires F_CPU = 16MHz                                                      #
//                                                                             #
//##############################################################################

void ws2812_sendarray(uint8_t *data,uint16_t datlen)
{
 uint8_t curbyte,ctr,masklo;
 uint8_t maskhi = _BV(DATA_PIN);
 masklo =~ maskhi & DATA_PORT;
 maskhi |= DATA_PORT;

 while (datlen--)
 {
   curbyte = *data++;

   asm volatile
   (
     "        ldi %0,8    \n\t"        // 0
     "loop%=:out %2, %3    \n\t"        // 1
     "lsl    %1        \n\t"        // 2
     "dec    %0        \n\t"        // 3
     "        rjmp .+0    \n\t"        // 5
     "        brcs .+2    \n\t"        // 6l / 7h
     "        out %2,%4    \n\t"        // 7l / -
     "        rjmp .+0    \n\t"        // 9
     "        nop        \n\t"        // 10
     "        out %2,%4    \n\t"        // 11
     "        breq end%=    \n\t"        // 12      nt. 13 taken
     "        rjmp .+0    \n\t"        // 14
     "        rjmp .+0    \n\t"        // 16
     "        rjmp .+0    \n\t"        // 18
     "        rjmp loop%=    \n\t"        // 20
     "end%=:            \n\t"
     :    "=&d" (ctr)
     :    "r" (curbyte), "I" (_SFR_IO_ADDR(DATA_PORT)), "r" (maskhi), "r" (masklo)
   );
 }

}


//##############################################################################
//                                                                             #
// End of program                                                              #
//                                                                             #
//##############################################################################

SOFTWARE DE CONTROL:

Tenemos dos opciones:
El mismo soft que el firmware de la placa (Gleadiator) o un programa mas universal (Jinx)
Vamos a ver el primero Glediator. (http://www.solderlab.de/index.php/downlo...diatorv203)
[Imagen: Glediator_V2.0_Main.png]
Necesitamos una versión reciente de java https://www.java.com/es/download/
Una vez instalada conectamos el arduino y lo abrimos.
Vamos al menú "Options" > "Matrix Size" donde se especifica el tamaño de la matriz.
[Imagen: FpBqFTA.png]
Posteriormente en el menú "Options" > "Output" Se configura la matriz.
[Imagen: TENKYsy.png]
Nos vamos a la zona de COM-Port. Ponemos los baudios a 1000000 y en COM buscamos el de nuestro Arduino.
En caso de que salga vacío instalar el siguiente archivo para el java:http://fizzed.com/oss/rxtx-for-java  

En "pixel order" vamos probando hasta que coincida con nuestra configuración. Indica el comiendo de la tira (arriba derecha, arriba izq, abajo ... )
En "Color Order" más de lo mismo. Hasta que los colores RED GREEN BLUE coincidan.

Las opciones del programa pues ya es jugando y tocando efectos de texto, ritmo de la música y todo.
  Responder
#2
Muy bueno, creo que me voy ha hacer uno. Por cierto podrias poner los enlaces de donde has comprado los materiales (la tira de leds y el trasnformador) ? Un saludo.
  Responder
#3
(08-12-2015, 10:27 AM)hansugrove escribió: Muy bueno, creo que me voy ha hacer uno. Por cierto podrias poner los enlaces de donde has comprado los materiales (la tira de leds y el trasnformador) ? Un saludo.
Después lo edito y pongo. Leds en banggood y el transformador estaba por casa jajaja
  Responder
#4
Ok , gracias cansi22.
  Responder
#5
Muy interesante! Se puede hacer un layout en el programa, guardarlo y utlizar la matriz con el arduino sin necesidad de conectarlo al PC?!

Saludos
  Responder
#6
(08-12-2015, 03:38 PM)DanixXz escribió: Muy interesante! Se puede hacer un layout en el programa, guardarlo y utlizar la matriz con el arduino sin necesidad de conectarlo al PC?!

Saludos

No lo he probado pero sería lo suyo.

Con el firm y el programa este no creo que se pueda, puesto que el arduino solo hace de comunicador con el pc. 
Sería usar la librería NeoPixels y adaptarlo a tus necesidades.
  Responder
#7
Muy molon cansi. Gracias Gran sonrisa
  Responder
#8
(08-12-2015, 08:49 PM)cansi22 escribió:
(08-12-2015, 03:38 PM)DanixXz escribió: Muy interesante! Se puede hacer un layout en el programa, guardarlo y utlizar la matriz con el arduino sin necesidad de conectarlo al PC?!

Saludos

No lo he probado pero sería lo suyo.

Con el firm y el programa este no creo que se pueda, puesto que el arduino solo hace de comunicador con el pc. 
Sería usar la librería NeoPixels y adaptarlo a tus necesidades.

Entiendo. Voy a hacer uno pero mas grande. La idea es que coja el nombre entero de, por ejemplo, "SpainLabs" pero sin un movimiento de la matriz.
Otra cosa, el vinilo.. Que vinilo es? Tiene una capa de vinilo tambien encima de los leds?
  Responder
#9
Los leds son de los que llevan un plástico. Pero no es eso.

El plástico con el que se hacen los carteles de publicidad. Resistente y flexible. Tenía un retal por casa.

Puedes pegarlos en madera, metal, etc
  Responder
#10
una cosa, siempre tiene que estar conectado al ordenador ? o se puede guardar una secuencia en el arduino y dejarlo que se repita
  Responder
#11
(09-12-2015, 11:09 AM)Blasphemor escribió: una cosa, siempre tiene que estar conectado al ordenador ? o se puede guardar una secuencia en el arduino y dejarlo que se repita

Un poco más arriba...

(08-12-2015, 08:49 PM)cansi22 escribió:
(08-12-2015, 03:38 PM)DanixXz escribió: Muy interesante! Se puede hacer un layout en el programa, guardarlo y utlizar la matriz con el arduino sin necesidad de conectarlo al PC?!

Saludos

No lo he probado pero sería lo suyo.

Con el firm y el programa este no creo que se pueda, puesto que el arduino solo hace de comunicador con el pc. 
Sería usar la librería NeoPixels y adaptarlo a tus necesidades.

Muy bueno cansi, five stars.
  Responder
#12
Muy guapo!

Yo la verdad es que jugue hace una temporada con ellos y tenia en mente esto mismo, pero acabaron detras de la tele haciendo de ambilight xD

Ahora los estoy retomando para la impresora, asi que tocara ir abriendo hilo de neopixels para ir compartiendo truquitos y sketchs Guiño
  Responder
#13
Existe alguna app para el móvil y mandarle la info al arruinó por btt?
  Responder
#14
Era la mejora que estaba pensando, necesita 1Mb de ancho de banda, primero probaré con el pc. El bt no deja de ser un puerto COM

No he podido estos días que estoy con el.curro hasta arriba
  Responder
#15
Anda que no molaría poner eso en la Luna trasera del coche y cuando se pegue un cagaprisas....... ponerle en la frasecita...... pasa pon encima imbécil jajajajajaja
  Responder
#16
(15-12-2015, 11:12 AM)Mr.Proper escribió: Anda que no molaría poner eso en la Luna trasera del coche y cuando se pegue un cagaprisas....... ponerle en la frasecita...... pasa pon encima imbécil jajajajajaja

Tengo una frase mejor:

"GUARDIA CIVIL: PARE POR FAVOR"

Y una señal de stop.  Meparto
  Responder
#17
Buen tuto, he visto proyectos similares en otras webs en ingles, pero este es el mejor tutorial en español, gracias por el aporte
  Responder
#18
Muy buen tutoríal, sabes cuál es el tamaño máximo que se podría hacer la pantalla ?
  Responder
#19
Muy buenas!
Estoy planteandome hacer esto mismo, me ha parecido muy sencillo y util!
La unica duda que tengo es si hay un limite de LEDs que se puedan manejar.
Muchas gracias!!
  Responder
#20
(07-01-2017, 01:23 AM)pintxo escribió: Muy buenas!
Estoy planteandome hacer esto mismo, me ha parecido muy sencillo y util!
La unica duda que tengo es si hay un limite de LEDs que se puedan manejar.
Muchas gracias!!

hola me intereza mucho esto, tambien quiero saber lo mismo, si hay algun limite de led, y si al agregar mas led necesitamos mas amperaje o voltaje

otra pregunta se puede usar otro tipo de led. Ucs1903, Y Ws2811
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  CONSULTA Controlar 3000 leds, ¿cual es la mejor opcion? the_feti 2 1,434 13-08-2018, 10:00 PM
Último mensaje: the_feti
  Controlar 8 leds 100 mA con Arduino y ULN2803 amjlopez 1 1,412 30-07-2018, 12:04 PM
Último mensaje: Bayaz
  Dimmer para tira de leds, problema ZeroCool 7 3,033 27-04-2016, 08:57 PM
Último mensaje: Bayaz
  Leds ws2801 y alimentar arduino uno joseab 1 4,252 27-07-2015, 08:53 AM
Último mensaje: biketrial981
  Leds ws2801 y alimentar arduino uno joseab 0 1,371 26-07-2015, 10:48 PM
Último mensaje: joseab