martes, 26 de noviembre de 2013

Tutorial - Led RGB con pulsadores




El objetivo de este tutorial consiste en combinar la utilización de pulsadores para controlar el color de un led RGB.
 El modelo RGB se basa en la posibilidad de representar un color mediante la mezcla por adición de los tres colores de luz primarios: rojo, verde y azul.

Antes de adentrarnos en el montaje, enumeraremos los componentes necesarios para realizar el experimento:

  • 1 led RGB
  • 3 resistencias de 270 ohmios (Con 220 ohmios será suficiente, la única diferencia que encontraremos es que a menor resistencia, el led brillará con mayor intensidad, soportando con garantías este incremento)
  • 3 pulsadores táctiles
  • 1 placa breadboard
  • 1 microprocesador Arduino UNO
  • Cables
  • 1 placa breadboard pequeña adicional (opcional)



A continuación, vemos el diagrama del cableado:







Deberemos comprobar que la patilla más larga del led RGB sea la que esté conectada a tierra. En nuestro diagrama se trata de la segunda patilla, pero esto puede variar según el tipo de led RGB que tengamos.







Por ejemplo, en el montaje del vídeo que podéis ver al final del tutorial, se ha empleado un led RGB en el que las patillas "Red", "Green" y "Blue" se disponen de forma sucesiva, y la última patilla comenzando desde la izquierda es la que se conecta a tierra.


En el de la imagen que veis a la derecha, la disposición es diferente. Por tanto, se deberá tener en cuenta en cada caso para una correcta conexión de los pines.




Cabe destacar que se está asumiendo que se dispone de un led "Cátodo común". Si, en cambio, nuestro led es "Ánodo común", deberemos conectar el pin más largo de éste a +5V en vez de a tierra. En este caso, el ciclo de color será inverso, es decir, cuando accionemos el pulsador dispuesto a encender la luz roja, se encenderá la azul y viceversa.

Tal y como vemos en el diagrama, se está empleando la mitad de la placa breadboard, ya que la parte media de los buses de nuestra placa está separada, por lo que la corriente no tiene continuidad.


Finalmente, vamos a explicar con detalle el programa a introducir en el software de Arduino. Iremos analizando cada parte del código para entender qué se consigue con cada una de ellas.

En primer lugar, el código que vamos a introducir presupone que el led está apagado. Si mantenemos presionado alguno de los botones, el led se encenderá aumentando gradualmente su intensidad. El botón de la izquierda encenderá el color rojo, el del centro, el verde y el de la derecha, el azul.

Podremos realizar cualquier combinación con estos tres colores, teniendo en cuenta que a mayor tiempo de pulsación, obtendremos una mayor intensidad de luz. Si queremos volver a empezar con el led apagado, basta con darle al botón de reiniciar (botón rojo de la placa Arduino).


Vamos por tanto a analizar el programa a emplear:

Primero, la definición de los pines:
 Tenemos tres pines de salida para controlar el led. Mediante éstos podemos controlar cuánta potencia va a cada color del led.
Necesitamos tres pines más para los pulsadores, los cuales configuraremos como pines de entrada.

  1. int redLEDPin = 11;
  2. int greenLEDPin = 10;
  3. int blueLEDPin = 9;
  4.  
  5. int redSwitchPin = 7;
  6. int greenSwitchPin = 6;
  7. int blueSwitchPin = 5;

Tras la asignación de los pines, declaramos las siguientes variables:

  1. int red = 0;
  2. int blue = 0;
  3. int green = 0;


Las utilizaremos para mantener los valores actuales de la intensidad de cada canal del led y pueden variar de 0 a 255. Por tanto, si tenemos 'blue' = 0, la parte azul del led estará apagada, mientras que si tenemos 'blue'=255, brillará con la máxima intensidad.



  1. void setup()
  2. {
  3. pinMode(redLEDPin, OUTPUT);
  4. pinMode(greenLEDPin, OUTPUT);
  5. pinMode(blueLEDPin, OUTPUT);
  6. pinMode(redSwitchPin, INPUT_PULLUP);
  7. pinMode(greenSwitchPin, INPUT_PULLUP);
  8. pinMode(blueSwitchPin, INPUT_PULLUP);
  9. }
  10.  
  11. void loop()
  12. {
  13. if (digitalRead(redSwitchPin) == LOW)
  14. {
  15. red ++;
  16. if (red > 255) red = 0;
  17. }
  18. if (digitalRead(greenSwitchPin) == LOW)
  19. {
  20. green ++;
  21. if (green > 255) green = 0;
  22. }
  23. if (digitalRead(blueSwitchPin) == LOW)
  24. {
  25. blue ++;
  26. if (blue > 255) blue = 0;
  27. }


Tras definir el modo de los pines ( 'input' para las entradas y 'output' para las salidas), pasamos a la parte de los bucles. Cada uno de ellos funciona de la misma manera. 
Por ejemplo, el primero controla el led rojo. Si 'digitalRead', mediante 'redSwitchPin' detecta que está en 'LOW', lo que quiere decir que el botón está pulsado, se le suma 1 a 'red' (mediante el comando ++). Y seguirá sumando hasta que 'red' llegue a 255. A partir de este momento, el 'if' siguiente volverá a poner 'red' a 0 y se iniciará de nuevo el bucle.

  1. analogWrite(redLEDPin, red);
  2. analogWrite(greenLEDPin, green);
  3. analogWrite(blueLEDPin, blue);
  4. delay(10);
  5. }

Con el 'delay' final conseguimos reducir la velocidad de cambio de color del led para que nos sea más fácil manipularlo.

Y con esto ha sido todo por hoy. Os dejo un vídeo con el correcto funcionamiento del proyecto.





Espero que os haya parecido útil y entretenido. Si tenéis alguna duda o queréis aportar algo, podéis comentar más abajo o poneros en contacto con nosotros a través de ecda.info@gmail.com

Gracias por vuestra atención.

D.