En este tutorial, explicaré cómo utilizar Arduino para probar un LED RGB. Un LED RGB es un diodo que emite luz en diferentes colores dependiendo de la combinación de señales que se le envíe a cada una de sus patillas. A diferencia de los LEDs convencionales, que sólo emiten un color, el LED RGB puede emitir varios colores.
El acrónimo RGB proviene del sistema de colores RGB, que se basa en los colores primarios rojo, verde y azul. Para representar diferentes tonos de cada color, se utilizan 8 bits, lo que resulta en 2^8 posibles combinaciones por cada color. Como se utilizan tres colores, esto da un total de 256*256*256 = 16777216 combinaciones o tonos posibles.
Si quieres conocer más sobre el funcionamiento de un LED RGB con Arduino, te invito a visitar este artículo.
Materiales
- 1 Arduino UNO
- 1 Led RGB cátodo común
- 3 Resistencias de 220 ohms
- Cables o Jumpers
Paso 1: Creando el circuito
En el siguiente link podemos tener acceso a una tablas que indican las diferentes combinaciones para el sistema RGB y su correspondiente color.
El pinaje de un led RGB dependerá de su fabricante pero normalmente se tiene el siguiente esquema:
Es decir que la patilla más a la izquierda representa el rojo, la segunda es la referencia en este caso tierra, la tercera representa el verde y la última representa el azul.
De todas maneras para los que quieran saber más detalles técnicos y cómo está conectado el led RGB pueden visitar el datasheet del fabricante.
Para utilizar un led RGB en arduino es preciso trabajar con las salidas que contienen PWM ya a través de esas salidas, podremos generar las diferentes combinaciones que llegarán a cada patilla del led para entonces visualizar el color que querramos.
A continuación se presenta un esquema de cómo hacer la circuitería.
Paso 2: Creando el programa # 1
Utilizaremos dos programas de prueba, comencemos con el primero:
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 |
/* /* Kiara Navarro sophiekovalevsky arroba fedoraproject.org www.panamahitek.com */ #define pinLed1 11 // Pin 11 a R #define pinLed2 10 // Pin 10 a G #define pinLed3 9 // Pin 10 a B void setup() { pinMode(pinLed1, OUTPUT); pinMode(pinLed2, OUTPUT); pinMode(pinLed3, OUTPUT); } void loop() { // Verde digitalWrite(pinLed1, LOW); digitalWrite(pinLed2, HIGH); digitalWrite(pinLed3, LOW); delay(500); // Azul digitalWrite(pinLed1, LOW); digitalWrite(pinLed2, LOW); digitalWrite(pinLed3, HIGH); delay(500); // Rojo digitalWrite(pinLed1, HIGH); digitalWrite(pinLed2, LOW); digitalWrite(pinLed3, LOW); delay(500); //Violeta digitalWrite(pinLed1, HIGH); digitalWrite(pinLed2, LOW); digitalWrite(pinLed3, HIGH); delay(500); //Amarillo digitalWrite(pinLed1, HIGH); digitalWrite(pinLed2, HIGH); digitalWrite(pinLed3, LOW); delay(500); //Azul Marino digitalWrite(pinLed1, LOW); digitalWrite(pinLed2, HIGH); digitalWrite(pinLed3, HIGH); delay(500); //Blanco digitalWrite(pinLed1, HIGH); digitalWrite(pinLed2, HIGH); digitalWrite(pinLed3, HIGH); delay(500); // Negro - No presenta ningún color digitalWrite(pinLed1, LOW); digitalWrite(pinLed2, LOW); digitalWrite(pinLed3, LOW); delay(500); } |
Explicación
En este sencillo programa, declaramos como salidas los pines 11, 10 y 9 y escribimos en ellas valores lógicos. Hemos utilizado un retardo de 500 ms. El resultado es una combinación de colores.
Paso 2.2 Creando el programa # 2
Nuestro segundo código es:
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
/* Kiara Navarro sophiekovalevsky arroba fedoraproject.org www.panamahitek.com */ #define pinLed1 11 // Pin 11 a R #define pinLed2 10 // Pin 10 a G #define pinLed3 9 // Pin 10 a B void setup() { pinMode(pinLed1, OUTPUT); pinMode(pinLed2, OUTPUT); pinMode(pinLed3, OUTPUT); } void loop() { #define varfija 15 #define retardo 5 for (int contador=0; contador<255; contador++) { analogWrite(pinLed1, contador); analogWrite(pinLed2, varfija); analogWrite(pinLed3, varfija); delay(retardo); } for (int contador=255; contador>0; contador--) { analogWrite(pinLed1, contador); analogWrite(pinLed2, varfija); analogWrite(pinLed3, varfija); delay(retardo); } for (int contador=0; contador<255; contador++) { analogWrite(pinLed1, varfija); analogWrite(pinLed2, contador); analogWrite(pinLed3, varfija); delay(retardo); } for (int contador=255; contador>0; contador--) { analogWrite(pinLed1, varfija); analogWrite(pinLed2, contador); analogWrite(pinLed3, varfija); delay(retardo); } for (int contador=0; contador<255; contador++) { analogWrite(pinLed1, contador); analogWrite(pinLed2, contador); analogWrite(pinLed3, varfija); delay(retardo); } for (int contador=255; contador>0; contador--) { analogWrite(pinLed1, contador); analogWrite(pinLed2, contador); analogWrite(pinLed3, varfija); delay(retardo); } for (int contador=0; contador<255; contador++) { analogWrite(pinLed1, varfija); analogWrite(pinLed2, varfija); analogWrite(pinLed3, contador); delay(retardo); } for (int contador=255; contador>0; contador--) { analogWrite(pinLed1, varfija); analogWrite(pinLed2, varfija); analogWrite(pinLed3, contador); delay(retardo); } for (int contador=0; contador<255; contador++) { analogWrite(pinLed1, contador); analogWrite(pinLed2, varfija); analogWrite(pinLed3, contador); delay(retardo); } for (int contador=255; contador>0; contador--) { analogWrite(pinLed1, contador); analogWrite(pinLed2, varfija); analogWrite(pinLed3, contador); delay(retardo); } for (int contador=0; contador<255; contador++) { analogWrite(pinLed1, varfija); analogWrite(pinLed2, contador); analogWrite(pinLed3, contador); delay(retardo); } for (int contador=255; contador>0; contador--) { analogWrite(pinLed1, varfija); analogWrite(pinLed2, contador); analogWrite(pinLed3, contador); delay(retardo); } for (int contador=0; contador<255; contador++) { analogWrite(pinLed1, contador); analogWrite(pinLed2, contador); analogWrite(pinLed3, contador); delay(retardo); } for (int contador=255; contador>0; contador--) { analogWrite(pinLed1, contador); analogWrite(pinLed2, contador); analogWrite(pinLed3, contador); delay(retardo); } } |
Explicación
Declaramos como salidas los pines 11,10, y 9 y luego utilizamos varios bucles for para hacer un efecto de desvanecimiento de color en el led. Utilizamos un retardo de 5 ms y una valor fijo de 15 solo para observar qué colores nos visualizaba el led.
Paso 3: Presentación del proyecto
Para finalizar les dejo con fotos de algunos colores que puede producir el led RGB.
Espero que esta información les sea útil. Cualquier duda o comentario me lo pueden hacer llegar a través de la caja de comentarios.
Hola Kiara.! tremendo post. necesito comunicarme contigo, es para un proyecto con varios sensores simultaneos con arduino.!
¿Lograste realizar tu proyecto?
si gracias
hola.
Mi led RGB no cambia distintos colores, es decir presenta las tres tonalidades de luces principales por separado. Esto es que cuando quiero hacer el led color balance (255 255 255) mi led tira los tres colores como estilo arcoíris (verde, rojo, azul y no blanco. ) esto para cualquier combinación que elija yo
Led Rgb catodo comun: probe con dos led diferentes
Led RGB anodo comun: probe con dos led diferentes
Mismos resultados: colores separados.
que estoy haciendo mal ? o que puede ser mi problema ?
Saludos desde Costa Rica
Gracias
Hola Kiara.
Me podrias ayudar a realizar un proyecto en tira led RGB, por favor. Deseo mostrar figuras con este tipo de leds multicolores, el diseño que he pensado ( y estoy llevando a cabo) es una esfera con el principio POV (persistencia de la visión).
he estado investigando y he encontrado mucha informacion de como poder controlar el encendido y apagado de las luces y la combiancion de los mismos, y la poca información del como poder hacer figuras no esta disponible, debo decirte que tambien he solicitado ayuda a los autores de esos proyectos, pero sin lograr una respuesta favorable.
este proyecto es escolar.
Hola amigo. En este blog no nos dedicamos a ayudar a las personas en sus proyectos particulares. Es responsabilidad de cada persona buscar en otros sitios web la información que no encuentre en este medio
Vamos, que no sabes como se hace… xD