Placa de desarrollo Arduino UNO - LED RGB
Un LED RGB es un diodo emisor de luz que puede producir distintos colores combinando rojo (Red), verde (Green) y azul (Blue). En un solo encapsulado lleva tres LED internos que se controlan por separado.
En este ejemplo recorremos 7 colores con un pulsador y apagamos con el otro, encendiendo uno, dos o los tres canales a la vez.
Conexiones
Cada canal necesita su propia resistencia limitadora; sin ellas el LED se degrada y puedes dañar el pin del Arduino.
| Patilla del LED | Conexión | Nota |
|---|---|---|
| Rojo | Pin 11 | Resistencia de 220 Ω |
| Verde | Pin 12 | Resistencia de 220 Ω |
| Azul | Pin 13 | Resistencia de 220 Ω |
| Común | GND | Si es de cátodo común |
Pulsadores: SWITCH1 en A2 (cambiar color) y SWITCH2 en A3 (apagar), ambos a GND con INPUT_PULLUP. | ||
Cátodo común o ánodo común
Este código enciende cada canal poniéndolo en HIGH, lo que asume un LED de cátodo común (la patilla larga va a GND).
Si el tuyo es de ánodo común, la patilla larga va a 5 V y la lógica se invierte: se enciende con LOW y se apaga con HIGH. Si al montarlo ves todos los colores menos el que esperas, casi siempre es esto.
Colores y combinaciones
| Valor | Color | Canales encendidos |
|---|---|---|
| 0 | Apagado | — |
| 1 | Rojo | R |
| 2 | Verde | G |
| 3 | Azul | B |
| 4 | Amarillo | R + G |
| 5 | Cian | G + B |
| 6 | Magenta | R + B |
| 7 | Blanco | R + G + B |
Código del programa
// Definición de pines según el diagrama
const int LED_R = 11; // Rojo
const int LED_G = 12; // Verde
const int LED_B = 13; // Azul
const int SWITCH1 = A2; // Cambiar color
const int SWITCH2 = A3; // Apagar
// 0=apagado, 1=rojo, 2=verde, 3=azul,
// 4=amarillo, 5=cian, 6=magenta, 7=blanco
int color = 0;
void setup() {
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
pinMode(SWITCH1, INPUT_PULLUP);
pinMode(SWITCH2, INPUT_PULLUP);
apagarLED();
}
void loop() {
// Switch 1 -> cambiar color
if (digitalRead(SWITCH1) == LOW) {
color++;
if (color > 7) color = 1;
mostrarColor(color);
delay(300);
}
// Switch 2 -> apagar
if (digitalRead(SWITCH2) == LOW) {
color = 0;
apagarLED();
delay(300);
}
}
void mostrarColor(int c) {
apagarLED();
switch (c) {
case 1: // Rojo
digitalWrite(LED_R, HIGH);
break;
case 2: // Verde
digitalWrite(LED_G, HIGH);
break;
case 3: // Azul
digitalWrite(LED_B, HIGH);
break;
case 4: // Amarillo (rojo + verde)
digitalWrite(LED_R, HIGH);
digitalWrite(LED_G, HIGH);
break;
case 5: // Cian (verde + azul)
digitalWrite(LED_G, HIGH);
digitalWrite(LED_B, HIGH);
break;
case 6: // Magenta (rojo + azul)
digitalWrite(LED_R, HIGH);
digitalWrite(LED_B, HIGH);
break;
case 7: // Blanco (rojo + verde + azul)
digitalWrite(LED_R, HIGH);
digitalWrite(LED_G, HIGH);
digitalWrite(LED_B, HIGH);
break;
}
}
void apagarLED() {
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, LOW);
}
Cómo funciona
Cada pulsación de SWITCH1 avanza al siguiente color en el orden rojo, verde, azul, amarillo, cian, magenta y blanco. Al pasar de 7 vuelve a 1, así que el ciclo no se detiene. SWITCH2 apaga todo y reinicia el contador a 0.
Los colores combinados salen de encender dos o tres canales a la vez: el amarillo mezcla rojo y verde, el cian mezcla verde y azul, el magenta mezcla rojo y azul, y el blanco enciende los tres.
mostrarColor() llama primero a apagarLED(), que es lo que evita que queden canales encendidos del color anterior — el equivalente a limpiar la pantalla antes de escribir.
Posibles mejoras
Con digitalWrite cada canal solo puede estar encendido o apagado, de ahí que salgan 7 colores y no más. Para conseguir tonos intermedios (naranja, morado, rosa) haría falta analogWrite con valores de 0 a 255 por canal.
Ahora bien, analogWrite solo funciona en los pines PWM, que en el Arduino UNO son el 3, 5, 6, 9, 10 y 11. En este montaje únicamente el rojo (pin 11) lo es; habría que mover el verde y el azul a dos pines PWM libres —por ejemplo el 9 y el 10— antes de intentarlo.