Diodos led RGB

Objetivos

  • Ampliar la experiencia con los pines PWM.
  • Conocer los LED RGB.
  • Presentar la función random().

rgb

Material requerido

arduino
  • Arduino Uno o similar. Esta sesión acepta cualquier otro modelo de Arduino.
Img_3_4
  •  Una Protoboard.
11_rgb-led-300x300
  • Un diodo LED RGB o una montura keyes.
Img_3_5
  • Una resistencia de 330 Ohmios.
Img_3_6-300x185
  • Algunos cables de Protoboard.

 

Los diodos led RGB

Hasta ahora hemos usado varias combinaciones de LEDS, pero siempre de un color definido. Habitualmente los rojos y amarillos son los más fáciles de conseguir, pero se pueden comprar también en tonos azules, verdes y hasta blancos. No suele haber grandes diferencias entre ellos excepto en el color.

Pero a veces es interesante disponer de una luz piloto que cambie de color según las condiciones. Por ejemplo, todos identificamos el verde como una señal de OK, mientras que el rojo indica problemas y el amarillo… bueno pues algo intermedio.

Poner varios diodos para hacer esto es engorroso y complica el diseño, así que estaría bien disponer de un diodo al que podamos indicar que color queremos que muestre. Esto es un LED RGB.IMg_11_1
Para quien este acostumbrado al diseño por ordenador ya está familiarizado con la idea de que podemos generar cualquier color en la pantalla con la mezcla, en diferentes grados de tres colores básicos:

  • Red : Rojo
  • Green: Verde
  • Blue: Azul

Un LED RGB es en realidad la unión de tres LEDs de los colores básicos, en un encapsulado común, compartiendo el Ground (el negativo).

Img_11_2

En función de la tensión que pongamos en cada pin podemos conseguir la mezcla de color que deseemos con relativa sencillez.

Para quien haya dibujado con lápices de colores o acuarelas, las mezclas de colores de arriba les resultará extraña. Esto es porque cuando pintamos en un papel blanco, la mezcla de colores es substractiva: Si mezclamos los tres colores obtenemos negro, o por lo menos algo oscuro. En cambio cuando pintamos con luz directamente, la mezcla es aditiva y obtenemos blanco al mezclar los tres colores básicos. Las reglas de mezcla de color en ambos casos son opuestas.

Vamos a montar un pequeño circuito que nos permita gobernar el color que emite uno de éstos LEDs de RGB.

Esquema del circuito

El montaje supone sencillamente conectar el negativo (el pin más largo) a Ground mediante una resistencia que limite la intensidad, y luego identificar los pines de colores:

  • El pin más largo en estos LED es el GND.
  • Al lado de GND hay dos pines a un lado y uno solitario al otro. Por lo normal el solitario es el rojo R.
  • Así pues el pin out (patillaje) de un RGB LED suele ser R, GND, G, B.

De todos modos conviene asegurarse leyendo las especificaciones del fabricante, o bien identificando cada PIN. Para identificarlos basta conectar el GND a nuestro Arduino e ir probando cada una de las patas independientemente para ver qué color producen.

Si tu RGB tiene una montura Keyes, no tendrás que hacer esto, porque los pines vienen marcados y GND viene rotulado como -.

Sesion11_RB_LED_bb

Atención, en contra de la norma habitual, en este caso el cable rojo no indica la tension Vcc, sino el pin de gobierno del LED rojo.

En este esquema hemos utilizado los pines 9, 10 y 11. Podemos usar otros pero aseguraros de que puedan hacer PWM(los que tienen  ~) para poder poner distintas intensidades.

Programa de control del RGB

Dado que nuestra idea es poder mezclar las tonalidades de los componentes RGB para generar diferentes matices de colores, parece buena idea escribir una función que haga esta mezcla de colores y a la que podamos recurrir de forma práctica.

Lo primero sería definir en el setup() los pines a usar:

void setup()
   {
       for (int i =9 ; i<12 ; i++)
            pinMode(i, OUTPUT);
   }

Y después podríamos escribir una función como esta

void color(int r, int g, int b)
    {     
        analogWrite(9 , r) ;   // Red    – Rojo
        analogWrite(10, g) ;   // Green – Verde
        analogWrite(11, b) ;   // Blue – Azul
    }

De este modo tendríamos de forma fácil llamar a color ( 0, 255, 0) para el verde. De hecho vamos a empezar asegurándonos de que tenemos identificados correctamente los pines, escribiendo un programa como este:

void loop()
   {    color(255 ,0 ,0) ;
        delay(500); 
        color(0,255 ,0) ;
        delay(500);
        color(0 ,0 ,255) ;
        delay(500);
        color(0,0,0);
        delay(1000);
   }

Este programa debería producir una secuencia de rojo, verde, azul, apagado y vuelta a empezar.

Conviene asegurarse de que hemos identificado correctamente los pines del RGB, porque de lo contrario, las mezclas posteriores de colores no serán lo que esperamos.

Dado que Arduino nos permite escribir valores de 0 a 255 en los pines digitales, cuando utilizamos analogWrite(), en la práctica tendremos 256 x 256 x 256 colores diferentes o lo que es igual: 16.581.375 colores posibles.

Podemos crear una función random( n) que devuelve un valor al azar, comprendido entre 0 y n y en este caso, se presta especialmente bien para generar colores aleatorios en nuestro LED RGB.

Probad esto:

void setup()          
       {
          for (int i =9 ; i<12 ; i++)
               pinMode(i, OUTPUT);
       }

     void loop()
    { 
          color(random(255), random(255), random(255)) ;
          delay(500);
    }

void color(int r, int g, int b)
    {
          analogWrite(9 , r) ;   // Rojo
          analogWrite(10, g) ;   // Green – Verde
          analogWrite(11, b) ;   // Blue – Azul
    }

Os generará un ciclo de colores aleatorios bastante psicodélico.

Importante

Lo mas habitual, es que la patilla larga sea el catodo comun (GND) de los tres diodos LED que van encapsulados en el RGB. El diodo que hemos utilizado para el ejemplo es así y por eso se iluminan cuando pones un valor positivo de tensión en las otras patas.

Pero tambien existen RGBs de anodo comun, lo que significaria que tendrias que conectar la pata mas larga o anodo a 5V y se ilumina cuando pones menos de 5V en los pines de Arduino.

Necesitas saber si tu RGB es de catodo comun o de anodo comun de los tres LEDs.