08-12-2015, 12:45 AM
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.
Pasamos a los materiales
MATERIALES
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:
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
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)
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.
Posteriormente en el menú "Options" > "Output" Se configura la matriz.
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.
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.
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)
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:
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)
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.
Posteriormente en el menú "Options" > "Output" Se configura la matriz.
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.