Revista 100% Verde

Como detectar la combinación de colores de una tira de leds WS2801

Por Soloelectronicos @soloelectronico
Ambilight es una tecnología diseñada para mejorar la experiencia visual analizando las señales entrantes y produciendo una luz lateral ambiental adecuada al contenido que se está visualizando en la pantalla un resultado bastante atractivo , el cual además de la sensación de estar viendo una pantalla aun mayor.Como detectar la combinación de colores de una tira de leds WS2801 Hasta hace muy poco este efecto solo se podía conseguir si comprábamos un TV que contara con ese sistema y no había otra opción, pero recientemente con la aparición de placas con suficiente capacidad computacional, se puede emular gracias al software de Hyperion ejecutándose en una Raspberry Pi conectado a una tira de leds WS2801. A pesar de que este tipo de tiras usan el mismo chip no todas usan la misma secuencia de color ,lo cual se traduce que si la conectamos a una Raspberry Pi y no ajustamos este parámetro el efecto no sera tan realista pues el software cambiara colores..

Las tiras de leds RGB direccionables basadas en el chip ws2801 (LEDs WS2801) son las mas habituales para todo tipo de montajes donde se requiera direccionar un conjunto de leds RGB con muy pocos hilos , los cuales en el caso del WS2801 son unicamente dos : la señal de reloj y la linea de datos, ademas claro de la alimentación que es de 5V DC.

Existen tiras basadas en el chips WS2801 en formato " luces de navidad" con cables físicos que van uniendo cada plaquita compuesta por el propio chip ws2801 ,el led RGB y por supuesto la electronica asociada, pero lo mas habitual, es adquirir el conjunto en forma de cinta autoadhesiva unos circuitos a continuación de otros . Por ejemplo , esta ( que puede comprarse en Amazon por menos de 27€). Una peculiaridad de esta tiras ws2801,es que se pueden cortar según la longitud que se requieran , así como además que también es posible ampliarlas gracias a los conectores que llevan en cada extremo, pudiendo unirse entre ellas hasta donde se necesite.

Un aspecto importante es que para alimentar dicha tiras también necesitaremos aparte una fuente de alimentación dimensionada para el números de leds que vayamos a adquirir ( por ejemplo para 50 leds puede ser una fuente de 5v y 2A )

Aunque para emular el efecto ambilight lo mas habitual es usar una Raspberry Pi (como vimos en este post ) e s posible que el efecto producido no sea satisfactorio básicamente porque la configuración por defecto de nuestra tira de leds no sea la de la configuración "normal " que es la combinación RGB

Para averiguar que combinación RGB es la usada en nuestra tira de leds,lo mejor es que conectemos esta a una placa Arduino UNO o similar (si no tenemos ninguna puede adquirirse en Amazon por menos de 10€ )

Como detectar la combinación de colores de una tira de leds WS2801

Normalmente un led WS2801 , solo 4 tiene conexiones , que a efectos de pruebas(máximo 2 leds) podemos hacerlo así:

Como detectar la combinación de colores de una tira de leds WS2801
  • El cable VERDE proveniente del pin SD de la tira de leds al pin 11 del Arduino Uno.
  • El cable ROJO proveniente del pin CK de al tira de leds al pin 13 del Arduino Uno.
  • El cable NEGRO proveniente del pin GND de la tira de leds al pin GND del Arduino Uno.
  • El cable AZUL proveniente del pin +5V de al tira de leds lo conectaremos a la conexión +5v de Arduino
PRUEBA DE UNA TIRA DE LEDS DE MAS DE DOS LEDS

Es decir la forma de conectar uno o dos leds WS2801 a un Arduino seria según el siguiente esquema :

Como detectar la combinación de colores de una tira de leds WS2801

Destacamos que el circuito que proponemos es para testar uno o dos leds RGB del tipo WS2801 pues normalmente la tira de verios LEDs deben ser alimentados externamente fuera de la linea de +5V de Arduino 5V, pues de no hacerlo podrían estropear el regulador de la placa a qu ese conecte , a menos que solo vayamos a probar uno o a lo sumo dos leds donde si podremos conectar directamente a los 5v de nuestro Arduino al igual que la masa o tierra que también conectaremos a la masa de Arduino.

En caso de no disponer de un led individal NO debemos realizar el esquema anterior pues podríamos quemar nuestro Arduino, en lugar de esto, conectaremos la tira de leds por un lado a una fuente de 5V /2amp . y por el otro a Arduino , por uno de los extremos segun el esquema habitual:

Para probar la combinacion RGB conectaremos un modudo a un Arduino el cual ademas hará de "puente" entre el ordenador host y la tira basado en WS2801 . Los datos de LED se transmiten, y no se almacenan en búfer, lo que significa que si hay mas código en Arduino podrían generar demoras debido a la RAM limitada del Arduino,pero no obstante e El protocolo de cierre WS2801, basado en retardo, podría desencadenarse inadvertidamente si el bus USB o la CPU está desbordada con otras tareas. Este código almacena datos entrantes en serie e introduce pausas intencionadas si hay una amenaza del buffer lleno prematuro. El costo de esta complejidad es algo que reduce el rendimiento, pero la ganancia es muy buena evitando la mayoría de los fallos visuales incluso aunque finalmente una función de carga en el bus USB y host CPU, quede fuera de control. l algoritmo ejerce cierto esfuerzo para evitar las pérdidas de buffer

Como hemos comentado en este blog ,en el caso de usar una tira de leds hemos de tener cuidado ya que se conecta los tres hilos a Arduino en uno de los extremos de la tira de leds (el lado izquierdo de la tira ) .Como en cada extremo quedan sueltos los cables opuestos (normalmente el cable rojo es el positivo y el azul el negativo) conectaremos estos también para dar la alimentación a la tira de leds ( aunque también se podría hace por las conexiones de la tira que también den energía ya que llevan 5V en una las 4 conexiones ).

SOFTWARE EN EL ARDUINO

Si no lo tenemos, descargaremos el software de arduino ( Página oficial de arduino) y lo instalamos.

Conectamos el arduino uno a nuestro pc con el cable usb. Si pide los drivers, se pueden encontrarlo en la carpeta arduino-1.0.4\drivers.

Descargaremos esta biblioteca: fastled biblioteca descarga, la cual importaremos al Arduino IDE.

Ahora toca cargar el sketch para lo cual descaremos el código Adalight para las luces aqui

Descomprimiremos el archivo y añadimos los archivos que acabamos de descargar en la carptea Mis documentos/ y ng

Arrancaremos el software de arduino y configuramos en el ide la placa Arduino en Herramientas ->Placa Arduino Uno ( o la placa que tengamos) sin olvidar el puerto de comunicaciones

Como detectar la combinación de colores de una tira de leds WS2801

Iremos a File> Sketchbook> Arduino> Adalight y uan vez cargado el sketch debemos ajustar el numero de leds (podemos el numero de leds para este test) que tengamos en la instalación así como la velocidad máxima (500000 )

#define NUM_LEDS 88 // Max LED count
#define LED_PIN 11 // arduino output pin - probably not required for WS2801
#define GROUND_PIN 10 // probably not required for WS2801
#define BRIGHTNESS 255 // maximum brightness
#define SPEED 500000 // virtual serial port speed, must be the same in boblight_config

Como detectar la combinación de colores de una tira de leds WS2801

Ahora ya podemos compilar el software( botón primero que pone un v de verificar).

Si no ha habido errores ahora podemos subir el sw pulsando el botón de Upload( flechita a la derecha en el software de Arduino.

Al contrario de lo que sucede con el sketch LedlIght donde se iluminan las luces de 3 colores rojo, verde y azul si todo ha ido bien, si tenemos conectadas los leds al arduino y a la fuente externa, cuando carguemos este código dentro del Arduino solo lucirá el primer led de la cadena lo cual significará que estamos en buen camino.

Como detectar la combinación de colores de una tira de leds WS2801

El código dentro de Arduino es no volátil, así que no se borrará aunque desconecte la tarjeta.

Una vez descargado , durante la instalación se puede seleccionar la opción de instalación completa ,marcando ademas la opción de descarga e instalación de playclaw.

Empezamos la configuración, pulsamos sobre el botón de mas ajustes :

Como detectar la combinación de colores de una tira de leds WS2801

En la parte inferior ,como vemos seleccionaremos como Device Adalight , elegiremos el puerto de comunicaciones ( el mismo al que este conectado el Arduino) y en el numero de zonas, coloremos el numero de leds total que tengamos instalados ( en el ejemplo 88).

ORDEN DE LA SECUENCIA DE COLORES

Necesitamos averiguar el orden de colores, lo cual podemos probar fijando un color mediante el selector de Mode ( Static Background ), pinchando en el color ( aparecerá la paleta), pulsando en el check de Use backlight (para activar el encendido de la tira al color seleccioando ) y finalmente seleccionando en el combo order of colors la combinacion adecuada a la tira(o muestra ) que tengamos :

Como detectar la combinación de colores de una tira de leds WS2801

En order of colors hay 6 opciones posibles : RGB,RBG ,BRG ,BGR,GRB y GBR , de la cual debemos ir seleccionando una a una y pinchando en la paleta de colores un numero de colores significativos hasta que el color de los leds sea similar al de paleta y esa sera la combinación de orden de leds de nuestra tira .

Si no deseamos probar toda la paleta de colores , una idea es utilizar los colores primarios (rojo,verde y azul ) para comprobar si se corresponde el color de la paleta seleccionada con la combinación de leds iluminada .

En el ejemplo anterior podemos ver como la combinación verde seleccionada se corresponde con los leds iluminados en verde:

Una combinación muy habitual, por extraño que parezca, para muchas tiras de leds económicas es BGR

Una vez que ya sabemos cual es una la combinación correcta de su tira de leds WS2801, si la va a usar en una Raspberry Pi con el software de Hyperion, si tiene configurado el fichero de configuración hyperion.config.json hay que modificarlo y copiarlo en la Raspberry PI en el directorio /storage/.config ( no confundir con la ruta /storage/hyperion/configuration/)

Como detectar la combinación de colores de una tira de leds WS2801
.

Lo que debemos modificar en el hyperion.config.json es parte primaria sobre la cabecera "device" cuya configuración contiene los siguientes campos:

  • 'name': El nombre de usuario del dispositivo (sólo se utiliza para fines de visualización)
  • 'type': El tipo del dispositivo o leds (los tipos conocidos por ahora son 'ws2801', 'ldp8806', ' 'lpd6803', 'sedu', 'adalight', 'lightpack', 'test' y 'none')
  • output : La especificación de salida depende del dispositivo seleccionado. Esto puede ser, por ejemplo, el especificador de dispositivo, número de serie del dispositivo o el nombre del archivo de salida
  • 'rate': El baudrate de la salida al dispositivo
  • colorOrder': Es aqui el parametro qeu nos interesa pues especifica el orden de los bytes de color ('rgb', 'rbg', 'bgr', etc.).Es muy importante destacar que si no ajustamos este valor se pueden cambiar el borde de los colores .Por ejemplo muchas tiran son del t tipo BGR, lo cual significa que si dejamos marcado por defecto en RGB cambiará en todas las visualizaciones el rojo por el azul y biceversa

Ejemplo de configuración de la sección device correspondiente al post anterior :

Ademas de cmbiar el orden de colores tambien podemos manipular la configuración de manipulación de color utilizada para ajustar los colores de salida a un entorno específico.
La configuración contiene una lista de transformaciones de color. Cada transformación contiene los siguientes campos:

  • 'id': El identificador único de la transformación de color (p. Ej. 'Device_1')
  • 'leds': Los índices (o índices) de los leds a los que se aplica esta transformación de color (por ejemplo, '0-5, 9, 11, 12-17'). Los índices son basados ​​en cero.
  • 'hsv': La manipulación en el dominio de colores Valor-Saturación-Valor con lo siguiente parámetros de ajuste:
    • 'saturationGain' El ajuste de ganancia de la saturación
    • 'valueGain' El ajuste de ganancia del valor
  • 'rojo' / 'verde' / 'azul': La manipulación en el dominio de color Rojo-Verde-Azul con los siguientes parámetros de sintonización para cada canal:
    • 'umbral' El valor de entrada mínimo requerido para que el canal esté encendido
      (más cero)
    • 'gamma' El factor de corrección de la curva gamma
    • 'blacklevel' El valor más bajo posible (cuando el canal es negro)
    • 'whitelevel' El valor más alto posible (cuando el canal es blanco)
"color": {
"transform": [
{
"blue": {
"threshold": 0.050000000000000003,
"blacklevel": 0.0,
"whitelevel": 0.84999999999999998,
"gamma": 2.0
},
"leds": "0-81",
"hsv": {
"saturationGain": 1.0,
"valueGain": 1.0
},
"green": {
"threshold": 0.050000000000000003,
"blacklevel": 0.0,
"whitelevel": 0.84999999999999998,
"gamma": 2.0
},
"id": "leds",
"red": {
"threshold": 0.050000000000000003,
"blacklevel": 0.0,
"whitelevel": 1.0,
"gamma": 2.0
}
},
{
"blue": {
"threshold": 0.050000000000000003,
"blacklevel": 0,
"whitelevel": 0,
"gamma": 2.0
},
"leds": "82-149",
"hsv": {
"saturationGain": 0,
"valueGain": 0
},
"green": {
"threshold": 0.050000000000000003,
"blacklevel": 0,
"whitelevel": 0,
"gamma": 2.0
},
"id": "ledsOff",
"red": {
"threshold": 0.050000000000000003,
"blacklevel": 0,
"whitelevel": 0,
"gamma": 2.2000000000000002
}
}
],

Al lado de la lista con transformaciones de color también hay una opción de suavizado.
'Suavizado': Suavizado de los colores en el dominio del tiempo con la siguiente sintonización parámetros:

  • 'type' El tipo de algoritmo de suavizado ('linear' o 'none')
  • 'time_ms' La constante de tiempo para el algoritmo de suavizado en milisegundos
  • 'updateFrequency' La frecuencia de actualización de los leds en Hz

"leds" :
[
{
"index" : 0,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
},
{
"index" : 1,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0357 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
},

Ejemplo de configuración de la seccion color correspondiente al post anterior

{
"index" : 87,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0714 }
}
],

Ttambien podemos cambiar la configuración para cada led individual. En eta parte se especifica el área promediado de una imagen de entrada para cada led para determinar su color. Cada elemento de la lista contiene los siguientes campos:

  • index: El índice del led. Esto determina su ubicación en la cadena de leds; cero
    Siendo el primer led.
  • hscan: La parte fraccional de la imagen a lo largo de la horizontal utilizada para el promedio (mínimo y máximo inclusive)
  • vscan: La parte fraccional de la imagen a lo largo de la vertical utilizada para el promedio (mínimo y máximo inclusive)
  • 'updateFrequency' La frecuencia de actualización de los leds en Hz

.......................

Por ultimo , tambien podemos tocar la configuración del motor de efectos, el cual contiene los siguientes elementos:

  • paths: Una matriz con ubicaciones absolutas de directorios con efectos
  • bootsequence: El efecto seleccionado como 'secuencia de arranque'. Es importante cambiar a su valor en OpenElec "/storage/hyperion/effects"

Ejemplo de configuración sección effects correspondiente al post anterior :

Una vez copiado el fichero hyperion.config.json en storage/.config reinicie la RPI y si todo ha ido bien debería ver un efecto de arcoiris y las luces deberían ser coherentes con los colores que precise reproducir el sw de hyperion


Volver a la Portada de Logo Paperblog