🌈 P04 - LED RGB: animación de colores y efecto respiración

ℹ️ Empieza aquí:

En las prácticas anteriores controlabas LEDs individuales en secuencias simples.
En esta práctica aprenderás a controlar un LED RGB para que “respire” en distintos colores, combinando PWM y temporización con millis().
Esto introduce conceptos de mezcla de colores, control de brillo progresivo y programación no bloqueante, esenciales para animaciones más complejas.


🚀 Objetivos

 Controlar un LED RGB mediante pines PWM.
 Crear un efecto de respiración suave (fade in/out) de colores.
 Usar temporización con millis() para evitar el uso de delay().
 Implementar mezcla de colores combinando los tres canales RGB.
 Preparar el programa para ampliaciones a múltiples LEDs o patrones más complejos.


🧩 Contenidos trabajados

 PWM en Arduino (analogWrite) para controlar brillo.
 Temporización no bloqueante con millis().
 Arrays y variables para manejar colores y fases.
 Animaciones progresivas de LEDs.
 Lógica de ciclos y cambios de color.


💻 Materiales y recursos

 Arduino UNO.
 Protoboard.
 1 LED RGB común cátodo (o ánodo)
 3 resistencias (220 Ω – 330 Ω)
 Cables Dupont.
 Ordenador con Arduino IDE.

ℹ️ Nota:
Este montaje requiere identificar correctamente los pines de cada color del LED RGB.


🔧 Montaje práctico

1. Coloca el LED RGB en la protoboard.
2. Conecta los tres canales a pines PWM de Arduino:

  • Rojo → pin 9
  • Verde → pin 10
  • Azul → pin 11
    3. Coloca una resistencia en serie con cada canal.
    4. Conecta el cátodo común (o ánodo) a GND (o VCC según el tipo de LED).

🧭 Desarrollo de la práctica

Paso 1: Crear el proyecto

1. Abrir Arduino IDE.
2. Archivo → Nuevo.
3. Guardar como: P04_LED_RGB_ApellidoNombre


Paso 2: Declarar variables y arrays

Antes de setup():

int pinsRGB[3] = {9, 10, 11};  // Rojo, Verde, Azul  
int colorActual = 0;            // índice del color activo  
int direccion = 1;              // +1 para fade in, -1 para fade out  
int brillo = 0;                 // valor de PWM  
unsigned long tiempoAnterior = 0;  
const unsigned long intervalo = 20; // velocidad del fade  

Paso 3: Configurar pines en setup()

void setup() {  
  for (int i = 0; i < 3; i++) {  
    pinMode(pinsRGB[i], OUTPUT);  
    analogWrite(pinsRGB[i], 0);  
  }  
}  

Paso 4: Lógica de respiración y cambio de color en loop()

void loop() {  
  unsigned long tiempoActual = millis();  

  if (tiempoActual - tiempoAnterior >= intervalo) {  
    tiempoAnterior = tiempoActual;  

    // actualizar brillo  
    brillo += direccion;  
    if (brillo >= 255) {  
      brillo = 255;  
      direccion = -1;  
    } else if (brillo <= 0) {  
      brillo = 0;  
      direccion = 1;  
      colorActual++;  
      if (colorActual > 2) colorActual = 0;  
    }  

    // apagar todos los canales  
    for (int i = 0; i < 3; i++) {  
      analogWrite(pinsRGB[i], 0);  
    }  

    // encender color actual con el brillo correspondiente  
    analogWrite(pinsRGB[colorActual], brillo);  
  }  
}  

✅ Comprobación de funcionamiento

  • El LED RGB debe “respirar” suavemente, aumentando y disminuyendo el brillo.
  • Al terminar un ciclo de un color, cambia al siguiente color (Rojo → Verde → Azul → Rojo).
  • La animación es continua y no bloquea el microcontrolador.

📦 Entrega

 Archivo .ino comentado y funcional.
 Fotografía del LED RGB mostrando la animación.
 Explicación breve de cómo funciona la respiración y el cambio de color.


📊 Rúbrica de evaluación

Criterio Excelente (9–10) Adecuado (6–8) Insuficiente (≤5)
Montaje LED RGB Correcto, seguro y funcional Funciona parcialmente Incorrecto
Efecto respiración Brillo y transición suave Transiciones visibles pero no uniformes No funciona
Cambio de colores Ciclo correcto y continuo Algunos colores saltan o se quedan No cambia
Uso de PWM Control de brillo preciso y modular Parcialmente correcto Incorrecto
Código y comprensión Modular, comentado y entendible Funciona pero confuso No comprende

🎯 Para pensar (opcional)

¿Cómo podrías modificar el programa para que el LED RGB muestre colores mezclados (por ejemplo púrpura o amarillo) mientras “respira”?

Updated: