Cuando de colores se trata hay mucha tela para cortar. Si vamos a comprar un nuevo televisor o un monitor para nuestro ordenador, nos ofrecen diferentes tipos de tecnologías y nos abruman con datos técnicos.
Que LCD, plasma, LED, OLED, QLED; que HD, FHD, UHD, 8K; y cuando creemos que nos vamos a enloquecer con todos estos términos técnicos, nos dicen que según la profundidad de color de 8, 10 o hasta 12 bits, puedes obtener desde 16 millones o hasta 68 millones de colores diferentes.
Nos quedamos pensando… pero, si yo distingo unos 10 o 15 colores distintos, tal vez ;) ¿cómo me hablan de tan exorbitante cantidad de colores diferentes?
Pues, hoy te presento al LED RGB, un componente que nos puede demostrar que, al menos teóricamente y para 8 bits, esa gran cantidad de colores diversos se pueden generar.
Te invito a leer este artículo, donde con un LED RGB con Arduino podemos aprender algunas cosas interesantes.
Empecemos.
Indice de contenidos
¿Qué es un LED?
Un LED (Light Emitting Diode) o Diodo Emisor de Luz, es un componente formado por semiconductores de tipo P y N, que al ser atravesado por una corriente continua emite luz, este fenómeno es conocido como electroluminiscencia.
Como puedes observar hay un terminal más largo (Ánodo – terminal positivo) que el otro (Cátodo – terminal negativo).
El símbolo del LED es el mismo de un diodo rectificador, ya que ambos rectifican la corriente (solo circula en una dirección), pero las flechas señalando hacia afuera nos indica que emite luz.
Aunque hay LED de diversos colores, no todos ellos fueron creados al mismo tiempo, su evolución ha sido relativamente lenta y aún hoy sigue el desarrollo de los mismos.
Los materiales semiconductores utilizados para la fabricación de un LED varían en función del color que se desee. Desde el arseniuro de galio (GaAs), para los de luz infrarroja, pasando por el fosfuro de aluminio y galio (AlGaP) para los verdes, hasta llegar a los de nitruro de aluminio y galio (AlGaN) para los ultravioleta. Estos materiales semiconductores poseen la propiedad de emitir fotones de luz de diferentes colores cuando son recorridos por una corriente eléctrica.
Polarización directa
En la imagen observamos un circuito eléctrico conformado por una fuente de tensión de 5 VDC, aplicada a un LED en serie con una resistencia de 220 Ω y una corriente de 13.5 mA. La polarización directa (positivo de la fuente al ánodo del LED y negativo al cátodo) provoca la iluminación del mismo.
La resistencia en serie, es necesario para limitar la corriente a un valor seguro para el LED y para dividir la tensión, ya que solo necesita unos 2 VDC aproximadamente, para su funcionamiento.
Polarización inversa
Al invertir la polarización del LED (positivo de la fuente al cátodo del LED y negativo al ánodo) no circulará corriente por el circuito en serie y el LED no se iluminará.
Uso de los LED
El comportamiento del LED (conducción con polarización directa y bloqueo con polarización inversa) y los diferentes colores y tamaños con los cuales puede ser fabricado, hace que este componente sea muy práctico para ser usado en todo tipo de aplicaciones, tales como «piloto» para indicar el encendido/apagado de un equipo electrónico, en dispositivos de señalización de tráfico, en paneles informativos de todo tipo, en pantallas de diferentes equipos electrónicos, linternas, juguetes, relojes, en vehículos de transporte como bicicletas, coches… en fin, un sinnúmero de aplicaciones.
LED RGB
Seguramente un visionario pensó: si podemos realizar LED de diversos colores, ¿por qué no hacer uno que contenga en su interior los tres colores primarios rojo, verde y azul (Red, Green, Blue), y jugar con ellos según el modelo aditivo de colores, al igual que se hace con las pantallas de televisión? Llegamos entonces al LED RGB.
En la imagen superior observamos un LED RGB. Podemos encontrar de dos tipos: ánodo común y cátodo común. El terminal más largo será el común (C) ya sea ánodo o cátodo, los otros terminales son R (Red) o rojo, G (Green) o verde y B (Blue) o azul.
Ya sabemos que debemos limitar la corriente de cada LED (R, G, B) a unos 15 o 20 mA mediante resistencias apropiadas.
Modelo aditivo de colores
El funcionamiento del LED RGB se basa en el modelo de color de síntesis aditiva propuesto por James Clerk Maxwell que explica cómo se obtiene un color a partir de la suma de la intensidad de sus componentes de color. Los televisores y los monitores son aplicaciones prácticas de esta mezcla aditiva.
En realidad, la mayoría de las personas solo podemos ver los colores rojo, verde y azul, ya que los conos presentes en nuestros ojos únicamente detectan esos tres tipos de ondas electromagnéticas, aunque la sensibilidad de nuestros ojos al color azul es mucho menor, que al rojo y al verde, correspondiendo a este último color la mayor sensibilidad.
Ya que la sensibilidad de nuestros ojos al color azul es menor que al color rojo y al verde, y que el LED azul necesita más tensión para funcionar, se pueden colocar resistencias de diferente valor, un ejemplo típico a 5 voltios y para una corriente de 20 mA es: resistencias de 150 Ω para los LED rojo y verde y una resistencia de 68 Ω para el LED azul.
Las otras tonalidades resultan al tener diferentes cantidades de componentes de esos tres colores primarios; se puede decir que el cerebro se inventa esos nuevos colores.
Como ejemplo, tomemos el color amarillo (yellow) que se obtiene a partir de la suma de los colores primarios rojo (red) y verde (green) en intensidades iguales, o el color magenta formado por los colores primarios rojo (red) y azul (blue).
Al tener diferentes intensidades los colores primarios, con su mezcla podemos obtener toda la gama de colores.
Los colores secundarios son aquellos que resultan de la suma de otros dos colores primarios: Amarillo (Verde + Rojo), Magenta (Rojo + Azul), Cian (Verde + Azul).
Los colores complementarios son aquellos cuya suma da blanco: Azul – Amarillo, Verde – Magenta y Rojo – Cian
Hay que hacer notar que para que nuestro cerebro pueda interpretar todos esos colores diferentes es indispensable que haya una suficiente cantidad de luz. Generalmente, los seres humanos podemos percibir alrededor de un millón de tonalidades distintas.
La percepción del color no es igual en todas las personas, es decir, mi color rojo es diferente a tu color rojo, también hay diferencias en la percepción del color entre hombres y mujeres. Esta diferencia en la percepción del color es más notoria si se trata de culturas distintas, donde se tendrá diferentes perfiles y preferencias de color.
Digitalizando el color
Aparece el término profundidad del color o cuánta información de imagen se muestra en un panel o pantalla, especialmente nos interesa como es de fiel la representación del color en la misma. Puede ser de 8, 10 o 12 bits para la gama alta.
Sabemos que con un bit (binary digit) solo podemos obtener 2 estados lógicos (1 y 0), y con 8 bits se pueden obtener 256 combinaciones posibles. Es decir, nuestro LED RGB puede obtener 256 combinaciones o degradaciones para cada color primario rojo, verde y azul.
Es decir: 256 * 256 * 256 = 16 777 216 colores diferentes en total.
Ahora entendemos cómo podemos lograr esa enorme cantidad de colores con solo un pixel RGB (en nuestro caso un LED RGB).
Componentes necesarios
Para realizar nuestra práctica LED RGB con Arduino necesitamos:
Un LED RGB de cátodo común. Aunque se pueden utilizar también los módulos KY-016 (con LED RGB y resistencias limitadoras) o el módulo KY-009 (con LED RGB SMD o de montaje superficial, sin resistencias).
Tres resistencias de 330 Ω.
4 cables DuPont macho macho.
Arduino Uno o el que tengas en casa.
Diagrama del circuito LED RGB con Arduino
En el diagrama pictórico que usaremos, puedes observar que las salidas de Arduino PWM (Pulse Width Modulation) que significa modulación por ancho de pulsos, las mismas se indican con la virgulilla (~), pines 3 (RED), 5 (GREEN) y 6 (BLUE) con el fin de utilizar la función analogWrite() y obtener valores de 8 bits (0-255) y de esta forma poder generar diversos colores en el LED RGB.
¿Cómo controlar un LED RGB con Arduino?
Para generar los 256 valores diferentes para cada uno de los colores RGB, utilizaremos el PWM, en el enlace anterior puedes encontrar una detallada información si deseas profundizar en el tema, al igual que una explicación de la función analogWrite().
Resumiendo un poco podemos decir que la señal PWM es un pulso de frecuencia constante en el cual podemos variar su ancho de pulso, de tal forma que podemos variar su ciclo útil (duty cycle).
La frecuencia del PWM en Arduino depende del pin donde tomemos la señal (490 o 980 Hz) y se puede variar. Para nuestro ejemplo, de un LED RGB con Arduino no es importante este detalle.
En la imagen inferior observamos que el tiempo usado en el estado alto en el primer pulso es grande, luego el segundo pulso tiene una duración intermedia y el tercer pulso es el de menor duración.
Para la carga eléctrica del circuito, se traduce en recibir tensión en más o menos tiempo, y como la frecuencia de repetición es alta, se puede transformar en mayor o menor brillo de un LED o en mayor o menor velocidad de un motor, por ejemplo.
Precisamente aquí es donde la función analogWrite() de Arduino nos permite jugar con la anchura del pulso entre 256 valores diferentes, desde 0 hasta 255.
Vamos a utilizar para nuestro LED RGB con Arduino uno de cátodo común, entonces si deseamos un color primario como el rojo, con la función analogWrite() asignamos un valor de 255 al LED rojo y un valor de 0 a los LED verde y azul.
Si deseamos un color secundario como el magenta, pues con la función analogWrite() asignamos un valor de 0 al LED verde, que es su color complementario y un valor de 255 a los LED rojo y azul. La mezcla aditiva de estos dos colores nos dará el magenta.
Colores diferentes a los primarios y secundarios
Ahora bien, si necesitamos un color distinto a los primarios y secundarios, podemos guiarnos por las tablas de códigos de color HTML (HyperText Markup Language) o Lenguaje de Marcado de Hipertexto que es la misma que manejan los programas de edición de imágenes basados en el modelo de color de síntesis aditiva RGB. Podemos encontrar estas tablas en Internet.
Este código utiliza el modelo RGB, pero con el sistema de numeración hexadecimal. Aquí el 0 se representa 00 y el 255 con FF.
Con la ayuda de una tabla de códigos de color HTML o cualquier sitio que genere la paleta de colores en Internet, tomamos los componentes RGB según el color deseado.
Por ejemplo, el color rosa aparece como # FF 00 80 (números hexadecimales FF, 00 y 80) o RGB (255, 0, 128).
En el sketch de Arduino colocaremos esos valores sugeridos en la función analogWrite() ya que podemos escribir valores comprendidos en el rango de 0 hasta 255.
Código LED RGB con Arduino
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
int ledRojo = 3; int ledVerde = 5; int ledAzul = 6; void setup() { pinMode(ledRojo,OUTPUT); pinMode(ledVerde,OUTPUT); pinMode(ledAzul,OUTPUT); } void loop() { //Hacer color rojo digitalWrite(ledRojo,255); digitalWrite(ledVerde,0); digitalWrite(ledAzul,0); delay(1500); //Hacer color verde digitalWrite(ledRojo,0); digitalWrite(ledVerde,255); digitalWrite(ledAzul,0); delay(1500); //Hacer color azul digitalWrite(ledRojo,0); digitalWrite(ledVerde,0); digitalWrite(ledAzul,255); delay(1500); //Hacer color blanco digitalWrite(ledRojo,255); digitalWrite(ledVerde,255); digitalWrite(ledAzul,255); delay(1500); //Hacer color amarillo digitalWrite(ledRojo,255); digitalWrite(ledVerde,255); digitalWrite(ledAzul,0); delay(1500); //Hacer color magenta digitalWrite(ledRojo,255); digitalWrite(ledVerde,0); digitalWrite(ledAzul,255); delay(1500); //Hacer color cian digitalWrite(ledRojo,0); digitalWrite(ledVerde,255); digitalWrite(ledAzul,255); delay(1500); //Hacer color rosa analogWrite(ledRojo,255); analogWrite(ledVerde,0); analogWrite(ledAzul,128); delay(1500); } |
En las primeras líneas del código creamos tres variables y asignamos los pines que utilizaremos para el ledRojo, ledVerde y ledAzul. Así facilitamos la programación.
1 2 3 |
int ledRojo = 3; int ledVerde = 5; int ledAzul = 6; |
En la función void setup() declaramos los pines PWM 3, 5 y 6 como salidas.
1 2 3 4 5 |
void setup() { pinMode(ledRojo,OUTPUT); pinMode(ledVerde,OUTPUT); pinMode(ledAzul,OUTPUT); } |
En la función void loop() vamos generando los colores deseados.
1 2 3 4 5 |
//Hacer color rojo digitalWrite(ledRojo,255); digitalWrite(ledVerde,0); digitalWrite(ledAzul,0); delay(1500); |
Tomemos como ejemplo el color rojo. Colocamos el pin PWM asignado al LED rojo y colocamos un valor de 255, al LED verde y al LED azul les asignamos un valor de cero (0); de esta forma solo encenderá el LED rojo. Damos 1.5 segundos de espera para poder ver el color.
Análogamente, actuaremos con los LED verde y azul.
Para generar la luz blanca debemos llevar los tres LED RGB a 225, su mezcla aditiva nos creará la ilusión del color blanco.
1 2 3 4 5 |
//Hacer color blanco digitalWrite(ledRojo,255); digitalWrite(ledVerde,255); digitalWrite(ledAzul,255); delay(1500); |
Para generar un color secundario como el amarillo, debemos tomar su color complementario, que es el azul y llevarlo a cero (0), la suma aditiva del rojo y el verde nos generará la apariencia del color amarillo.
1 2 3 4 5 |
//Hacer color amarillo digitalWrite(ledRojo,255); digitalWrite(ledVerde,255); digitalWrite(ledAzul,0); delay(1500); |
Generamos un color especial, como el rosa, utilizando los valores sugeridos de una tabla de códigos de color HTML.
1 2 3 4 5 |
//Hacer color rosa analogWrite(ledRojo,255); analogWrite(ledVerde,0); analogWrite(ledAzul,128); delay(1500); |
Como usar un LED RGB ánodo común
Estos son los cambios que debes tener en cuenta si el LED RGB es ánodo común.
Cuando realizamos la programación con el LED RGB de cátodo común, hemos utilizado lógica positiva, es decir, si queremos encender completamente el LED, aplicamos el valor 255 y si queremos apagarlo por completo, colocamos un valor de 0; esto se debe a que el terminal común del LED RGB al ser cátodo común va a GND de Arduino.
Si deseamos utilizar un LED RGB de ánodo común, debemos hacer lo opuesto, ya que su terminal común, al ser el ánodo, debe ir a 3.3/5V de Arduino y para encender completamente el LED debemos colocar un 0 y para apagarlo por completo, colocaremos un 255 es decir, trabajaremos con lógica negativa.
Resumiendo, si tenemos un LED RGB de ánodo común, el terminal ánodo común irá a los 3.3/5V de Arduino y el código será el mismo, solo cambiamos los 0 por 255 y los 255 por 0.
Ahora bien, si vamos a programar un color que no sea primario o secundario, debemos tener en cuenta que los valores obtenidos de una tabla de código de color RGB HTML no se pueden aplicar directamente sino que debemos restar ese valor de 255.
Por ejemplo, vimos que para hacer el color rosa, la tabla sugiere: # FF 00 80 o RGB (255, 0, 128) y para un LED RGB cátodo común los comandos son:
analogWrite(ledRojo,255);
analogWrite(ledVerde,0);
analogWrite(ledAzul,128);
pero si usamos un LED RGB ánodo común los comandos serían:
analogWrite(ledRojo,255 – 255);
analogWrite(ledVerde, 255 – 0);
analogWrite(ledAzul, 255 – 128);
Tira de LED RGB
No podemos terminar el artículo sin nombrar a las tiras LED RGB.
Son tiras de LED RGB que pueden cambiar de color usando un controlador y un control remoto o una aplicación. Poseen un adhesivo para ser fijadas, algunas necesitan disipadores de calor e incluso hay algunas sumergibles.
Existen varios tipos de tiras LED RGB, desde las más sencillas llamadas análogas, hasta las más complejas llamadas tiras LED RGB digital IC, que utilizan controladores capaces de generar múltiples colores al mismo tiempo, con programas diferentes y todo tipo de efectos.
Los controladores de las tiras LED RGB sencillos tienen tres canales de control (RGB) y la alimentación 12/24 VDC, los efectos vienen ya programados. Generalmente, no son direccionables, es decir, solo podemos controlar la tira completa de LED o rojos, o verdes o azules.
Los controladores de las tiras LED RGB digitales o inteligentes vienen programados previamente y son programables cada grupo de LED RGB o cada LED RGB por separado (son direccionables), aquí cada LED RGB tiene un circuito integrado de control, como la tira LED direccional WS2812B, que funciona a 5V y se puede lograr diversos efectos utilizando Arduino como controlador y una librería para manejar los LED.
Actualmente existen tiras LED RGBW que adiciona a los tres colores tradicionales, un cuarto LED de color blanco (White).
Conclusión sobre LED RGB con Arduino
El tema del color es muy extenso y bastante complejo; vimos que la percepción del color es relativa dependiendo del observador, de la cultura a la que pertenece, de la diferente sensibilidad de nuestros ojos a los colores primarios, si es un hombre o una mujer el que observa, entre otros factores.
A nuestro LED RGB no podemos exigirle que tenga una definición del color muy exacta debido a su gran tamaño y la separación de sus tres LED integrados, a diferencia de las pantallas de los televisores y monitores donde los píxeles RGB son diminutos y están muy juntos, además hay millones de ellos.
Espero que el artículo haya sido de tu interés y hayas recordado o aprendido nuevos datos.
Agradezco tu atención y te espero en una próxima ocasión.
Gracias a Depositphotos por la cesión de las imágenes.