El sistema de color RGB se basa en tres colores primarios: rojo, verde y azul. Al combinar estos tres colores, es posible representar una amplia gama de tonos y matices. Como se mencionó en un post anterior, RGB es una sigla en inglés que corresponde a Red (rojo), Green (verde) y Blue (azul). Aquí en Panama Hitek ya se ha escrito antes sobre LEDs RGB.
Utilizando la función «analogWrite()» de Arduino, es posible controlar el brillo de cada canal de color (rojo, verde y azul) utilizando la modulación de anchura de pulso (PWM). Ajustando el valor PWM de cada canal, es posible crear cualquier color deseado mezclando diferentes niveles de luz roja, verde y azul.
En este post, nuestro objetivo es conseguir que un LED RGB de cátodo común brille con un color determinado. Para lograrlo, utilizaremos tres potenciómetros para ajustar el color. Conectaremos el terminal central de cada potenciómetro a los terminales R, G y B del módulo RGB, respectivamente.
Los terminales de los extremos de todos los potenciómetros se conectarán a +5V y GND, respectivamente. De esta manera, podremos controlar el brillo de cada canal de color (rojo, verde y azul) mediante la modulación de anchura de pulso (PWM) y crear el color deseado mezclando diferentes niveles de luz roja, verde y azul.
Para utilizar los potenciómetros para ajustar el color del LED RGB, debemos tener en cuenta que el valor del potenciómetro varía entre 0 y 1023 (0 – 5V) cuando modificamos la posición del mando. Sin embargo, para controlar el brillo de cada canal de color (rojo, verde y azul) utilizando la modulación de anchura de pulso (PWM), necesitamos valores entre 0 y 255 (0 – 5V).
Para convertir el valor del potenciómetro a un formato compatible con PWM, podemos dividir la lectura del potenciómetro entre 4 y aplicar el resultado directamente al terminal del módulo RGB correspondiente. De esta manera, podremos crear el color deseado mezclando diferentes niveles de luz roja, verde y azul.
Por ejemplo, si queremos crear el color blanco utilizando los potenciómetros, deberemos ajustar el valor de cada uno de ellos a 1023 (1023/4 = 255). Esto equivale a entregar los 5V directamente a cada canal de color (rojo, verde y azul). Existen millones de combinaciones posibles de colores RGB, y a continuación podemos ver una muestra de algunos de ellos:
-
- Rojo: (255, 0, 0)
- Verde: (0, 255, 0)
- Azul: (0, 0, 255)
- Amarillo: (255, 255, 0)
- Magenta: (255, 0, 255)
- Cyan: (0, 255, 255)
- Blanco: (255, 255, 255)
Esto lo vemos representado en la siguiente imagen:
Para comprobar el valor que está entregando cada potenciómetro disponemos del monitor serie del IDE de Arduino que nos irá mostrando los valores exactos que estamos aplicando a los terminales R, G y B del módulo RGB.
A continuación os muestro los materiales necesarios para el montaje del proyecto, el diagrama de conexión y el programa en sí que deberemos cargar a nuestro Arduino UNO.
Lista de Materiales
-
- Arduino UNO Rev.3
- Cable USB tipo A-B
- LED RGB de 5mm (cátodo común)
- 3 Resistencias de 220Ω
- 3 Potenciómetros lineales de 10KΩ
- Protoboard
- Cables de conexión
NOTA: Si utilizamos un módulo RGB, no nos hace falta utilizar ni el LED RGB ni las resistencias, puesto que ya viene todo integrado en una pequeña placa.
Código del programa
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 105 106 107 108 |
/* TITULO: Composición de colores RGB con Arduino AUTOR: MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia - TWITTER: https://twitter.com/MarianoCampoGa - CORREO: [email protected] DESCRIPCIÓN DEL PROGRAMA Con este programa vamos a controlar un LED RGB de un módulo RGB, aplicando pulsos PWM en sus terminales (R, G, B) mediante 3 potenciómetros (uno para cada color), para obtener un color en concreto. Mediante el monitor serie comprobaremos en cada momento los valores R, G y B que estas aplicando sobre los terminales del módulo RGB para formar los colores. Los valores de R,G y B se controlarán con los mandos de los 3 potenciómetros. ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | | 5V/MISO2 [ ][ ] A4/SDA[ ] | | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | | [ ]RST MOSI/11[ ]~| | [ ]3V3 +---+ 10[ ]~| | [ ]5v -| A |- 9[ ]~| | [ ]GND -| R |- 8[ ] | | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | | -| I |- 6[ ]~| Terminal "R" del módilo RGB P2(R) | [ ]A0 -| N |- 5[ ]~| Terminal "G" del módilo RGB P2(G) | [ ]A1 -| O |- 4[ ] | P2(B) | [ ]A2 +---+ INT1/3[ ]~| Terminal "B" del módilo RGB | [ ]A3 INT0/2[ ] | | [ ]A4/SDA RST SCK MISO TX>1[ ] | | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | | [ ] [ ] [ ] | | UNO_R3 GND MOSI 5V ____________/ \_______________________/ NOTAS: - El terminal "(-)" del módulo RGB debe ir conectado a GND (cátodo común). - Utilizamos 3 potenciómetros lineales de 10K ohms. - Potenciómetro para el color Rojo --> P(R). - Potenciómetro para el color Verde --> P(G). - Potenciómetro para el color Azul --> P(B). - Denomínamos a los terminales de los 3 potenciómetros como P1, P2 y P3 (donde P2 es el central). - P1(R), P1(G) y P1(B) conectado a VCC. - P3(R), P3(G) y p3(B) conectado a GND. */ // Configuración del LED RGB const int LED_ROJO = 6; // Terminal "R" conectado al PIN digital 6 const int LED_VERDE = 5; // Terminal "G" conectado al PIN digital 5 const int LED_AZUL = 3; // Terminal "B" conectado al PIN digital 3 // Configuración de los potenciómetros const int POT_ROJO = 0; // Potenciómetro para el color rojo conectado al PIN analógico "0" const int POT_VERDE = 1; // Potenciómetro para el color verde conectado al PIN analógico "1" const int POT_AZUL = 2; // Potenciómetro para el color azul conectado aal PIN analógico "2" // Variables que acumulan la cantidad de cada color que se aplica al LED RGB int Rojo = 0; int Verde = 0; int Azul = 0; void setup() { Serial.begin(9600); pinMode(LED_ROJO, OUTPUT); // Pin digital 6 como salida pinMode(LED_VERDE, OUTPUT); // Pin digital 5 como salida pinMode(LED_AZUL, OUTPUT); // Pin digital 3 como salida } void loop() { // Leemos el valor de los potenciómetros y los acondicionamos para aplicarselos a los // terminales R, G y B del módulo RGB Rojo = (analogRead(POT_ROJO))/4; analogWrite(LED_ROJO, Rojo); Verde = (analogRead(POT_VERDE))/4; analogWrite(LED_VERDE, Verde); Azul = (analogRead(POT_AZUL))/4; analogWrite(LED_AZUL, Azul); // Mostramos valores R,G y B a través del monitor serie Serial.print("R: "); Serial.print(Rojo); Serial.print(", "); Serial.print("G: "); Serial.print(Verde); Serial.print(", "); Serial.print("B: "); Serial.print(Azul); Serial.print("\n"); delay(500); } |
Video
Siguiendo los pasos descritos en el código y las instrucciones del video, deberías poder construir un circuito que te permita ajustar el color de un LED RGB utilizando potenciómetros. Con este circuito, podrás experimentar con diferentes combinaciones de colores y aprender más sobre cómo funcionan los colores RGB y cómo manipularlos utilizando la plataforma Arduino.
Espero que esta información te sea útil y te deseo lo mejor de suerte con tu proyecto. Si tienes alguna pregunta o necesitas más ayuda, no dudes en preguntar.