Arduino: Led RGB (Ejercicio 03)

En esta entrada aprenderás a usar un LED RGB (Rojo, Verde, Azul) conectado a Arduino. Utilizararemos la función analogWrite de Arduino para controlar el color del LED.

A primera vista, los LED RGB (Rojo, Verde, Azul) se parecen a los LED normales, sin embargo, dentro del paquete de LED habitual, en realidad hay tres LED, uno rojo, uno verde y sí, uno azul. Al controlar el brillo de cada uno de los LED individuales, puedes obtener cualquier color.

Arduino tiene la función analogWrite en los pines digitales marcados con ~ , que permite obtener una salida pseudo-analógica usando la técnica conocida como PWM (Pulse Width Modulation).

COMPONENTES

  • Placa Arduino UNO
  • Led RGB (variante cátodo común)
  • 3 resistencias de 220 Ω
  • Placa de prototipo y cables macho-macho

 

Internamente los leds están construidos con 3 diodos led monocromos, por lo que obviamente el ser de tipo cátodo o ánodo común es una característica física del componente. Si cableamos un led con la configuración opuesta, la corriente no podrá circular por el mismo.

La conexión negativa común del paquete de LEDs es el segundo pin, el más largo. Éste será el que conectemos a tierra.

Cada LED monocromo requiere su propia resistencia de 220Ω para evitar que circule corriente excesiva. Los tres cables positivos de los LED (uno rojo, uno verde y uno azul) están conectados a los pines de salida Arduino usando estas resistencias.

OBTENCIÓN DE COLORES

La razón por la que puede mezclar cualquier color variando las cantidades de luz roja, verde y azul es que el ojo tiene tres tipos de receptor de luz (rojo, verde y azul). Ojo y cerebro procesan las cantidades de rojo, verde y azul y lo convierten en un color del espectro. Esta misma idea se usa en televisores, donde la pantalla LCD tiene puntos de color rojo, verde y azul uno al lado del otro formando cada píxel.
 

Si establecemos que el brillo de los tres LED sea el mismo, entonces el color de la luz será blanco. Si apagamos el LED azul, de modo que solo los LED rojos y verdes tengan el mismo brillo, la luz se verá amarilla.

Podemos controlar el brillo de cada una de las partes rojas, verdes y azules del LED por separado, lo que permite mezclar cualquier color que deseemos.

El negro no es tanto un color como una ausencia de luz. Así que lo más cerca que podemos llegar a negro con nuestro LED es apagar los tres colores.

SKETCH DE ARDUINO

URL en el repositorio IoT-Arduino

 
/*
  Control RGB LED
  */

 
  int redPin = 6;
  int greenPin = 9;
  int bluePin = 10;
 
  //uncomment this line if using a Common Anode LED
  //#define COMMON_ANODE
 
  void setup()
  {
    pinMode(redPin, OUTPUT);
    pinMode(greenPin, OUTPUT);
    pinMode(bluePin, OUTPUT);  
  }
 
  void loop()
  {
    setColor(255, 0, 0);  // red
    delay(1000);
    setColor(0, 255, 0);  // green
    delay(1000);
    setColor(0, 0, 255);  // blue
    delay(1000);
    setColor(255, 255, 0);  // yellow
    delay(1000);  
    setColor(80, 0, 80);  // purple
    delay(1000);
    setColor(0, 255, 255);  // aqua
    delay(1000);
   
    /*
     * setColor(0x4B, 0x0, 0x82);  // Internet- indigo
     */

  }
 
  void setColor(int red, int green, int blue)
  {
    #ifdef COMMON_ANODE
      red = 255 - red;
      green = 255 - green;
      blue = 255 - blue;
    #endif
    analogWrite(redPin, red);
    analogWrite(greenPin, green);
    analogWrite(bluePin, blue);  
  }

TEORÍA DE LA MODULACIÓN POR PWM

La modulación de ancho de pulso (PWM) es una técnica para controlar la potencia enviada a un actuador. Lo usamos en el presente ejemplo para controlar el brillo de cada uno de los LED.

El siguiente diagrama muestra la señal de uno de los pines de PWM en el Arduino:

Aproximadamente cada 20 ms la salida PWM producirá un pulso. La duración de este pulso se controla mediante la función 'analogWrite'. Entonces 'analogWrite (0)' no producirá ningún pulso y 'analogWrite (255)' producirá uno que durará hasta el próximo pulso, de modo que la salida esté realmente activa todo el tiempo. Recordemos que las salidas de Arduino son de 8 bits, lo que corresponde al rango 0-255.

Si especificamos un valor en analogWrite que está entre 0 y 255, generaremos un pulso. Si el pulso de salida es HIGH (= 5V) durante el 5% del tiempo, el actuador recibirá el 5% de la potencia máxima.

Sin embargo, si la salida es a 5 V durante el 90% del tiempo, entonces la carga obtendrá el 90% de la potencia suministrada. No podemos ver que los LED se enciendan y apaguen a esa velocidad, por lo que, para nosotros, parece que el brillo está cambiando.