LED RGB - Transición del espectro del arco iris

Hola a todos:
En este post, explicaré todos los elementos necesarios, como conectarlos y el sketch para el correcto funcionamiento.
El hardware necesario es el siguiente:

  • Placa Arduino (en este caso DUE rev3)
  • LED RGB (5mm)
  • 3 resistencias (el cálculo de valores lo explicare más adelante)
  • 4 cables de conexión macho-macho
  • Placa de pruebas (donde se realizará el montaje)

También es necesario conocer las especificaciones de todos los elementos a utilizar, en este caso, sólo es necesario la hoja de especificaciones del LED RGB. En esta hoja encontraremos los datos necesarios para el cálculo de las resistencias a utilizar y para que se utiliza cada pin del LED. En la imagen 140836.jpg, aparece rodeado de rojo el esquema con los pines. Se trata de un LED de ánodo común, esto quiere decir que, con un solo cable se alimentará a los tres colores, y las resistencias se tienen que poner en los pines de los colores. Para entenderlo simplemente hay que aplicar lógica inversa, cuando ponemos un valor 0 en el pin de color, el LED iluminará ese color con su máximo brillo y con el valor 255, permanecerá apagado. En esta misma imagen, aparece rodeado en verde los datos necesarios para los cálculos de las resistencias necesarias. Lo que se intenta es preservar la vida del diodo, así que se tomarán para los cálculos los valores típicos de voltaje y el valor de corriente para uso continuado. El valor del voltaje del color verde y azul es el mismo, con lo cual ambos colores llevarán el mismo valor de resistencia. En la imagen 150423.jpg se puede ver la formula empleada y los cálculos de resistencia para el color rojo y el verde, dando como resultado una resistencia de 65 ohmios para el rojo y de 5 ohmios para el verde y el azul. Los valores anteriores no se corresponden con valores estándar, se adquirieron de 68 y 4,7 ohmios. Si se utilizase otra placa con los pines PWM de 5V, se deberá sustituir en la formula Vi por este valor.
En la imagen 140428.jpg se puede ver como se tienen que conectar todos los elementos entre sí.
Ahora vamos con la parte del código:

//Declaracion de los pines como constantes:
const int LEDr=13; //Color rojo pin 13
const int LEDb=11; //Color azul pin 11
const int LEDg=9; //Color verde pin 9
//Declaración de las variables necesarias:
int rojo=0;
int verde=0;
int azul=0;

void setup() {
  //Inicialización del LED
  //Comprobacion de cada color por separado
  setColor(0,255,255);
  delay(500);
  setColor(255,0,255);
  delay(500);
  setColor(255,255,0);
  delay(500);
  //Comprobacion todos los colores
  setColor(255,255,255);
  delay(500);
  setColor(0,0,0);
  delay(1000);
  setColor(255,255,255);
  delay(500);
  //Dejamos el color rojo para empezar el loop
  setColor(0,255,255);
  delay(100);
  }

void loop() {  
  //Se mantiene el rojo al maximo mientras sube el verde
  for (int verde=255;verde>=0;verde--){
    setColor(0,verde,255);
    delay(20);
    }  
  //Se mantiene el verde al maximo mientras baja el rojo 
  for (int rojo=0;rojo<=255;rojo++){
    setColor(rojo,0,255);
    delay(20);
    }
  //Se mantiene el verde al maximo mientras sube el azul 
  for (int azul=255;azul>=0;azul--){
    setColor(255,0,azul);
    delay(20);
    }
  //Se mantiene el azul al maximo mientras baja el verde
  for (int verde=0;verde<=255;verde++){
    setColor(255,verde,0);
    delay(20);
    }
  //Se mantiene el azul al maximo mientras sube el rojo
  for (int rojo=255;rojo>=0;rojo--){
    setColor(rojo,255,0);
    delay(20);
    }
  //Se mantiene el rojo al maximo mientras baja el azul
  for (int azul=0;azul<=255;azul++){
    setColor(0,255,azul);
    if(azul==255){
      delay(100);
      }
    else{  
      delay(20);
      }
    }
  }

void setColor(int red,int green,int blue)
{
  analogWrite(LEDr,red);
  analogWrite(LEDg,green);
  analogWrite(LEDb,blue);  
}

El programa comienza haciendo una comprobación de cada color por separado, luego todos los colores a la vez y deja el color rojo para el inicio del loop. Si no se desea, se pueden comentar las comprobaciones, pero son útiles para saber si está todo bien conectado. A continuación, se hacen transiciones entre dos colores en orden rojo-verde-azul-rojo..... El color rojo se le pone una espera un poco más larga porque al tener menos intensidad lumínica que los otros dos, en el momento que se enciende el verde o el azul en su intensidad mínima enmascaran la aportación del rojo y casi ni se vería.
La imagen 143204.jpg es del montaje realizado por mi.
Espero que haya sido de ayuda y espero hacer contribuciones más adelante.
Un saludo a todos!

2014-06-05_150423.jpg

2014-06-05_140836.jpg