2.3 Luz Colorida

En este proyecto, nos adentraremos en el fascinante mundo de la mezcla de colores aditiva utilizando un LED RGB.

El LED RGB combina tres colores primarios, a saber, Rojo, Verde y Azul, en un solo paquete. Estos tres LEDs comparten un pin de cátodo común, mientras que cada pin de ánodo controla la intensidad del color correspondiente.

Variando la intensidad de la señal eléctrica aplicada a cada ánodo, podemos crear una amplia gama de colores. Por ejemplo, mezclar luz roja y verde de alta intensidad resultará en luz amarilla, mientras que combinar luz azul y verde producirá cian.

A través de este proyecto, exploraremos los principios de la mezcla de colores aditiva y desataremos nuestra creatividad manipulando el LED RGB para mostrar colores cautivadores y vibrantes.

Componentes Requeridos

En este proyecto, necesitamos los siguientes componentes.

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ELEMENTOS EN ESTE KIT

ENLACE

Kit de Inicio ESP32

320+

ESP32 Starter Kit

También puedes comprarlos por separado en los siguientes enlaces.

INTRODUCCIÓN DE COMPONENTES

ENLACE DE COMPRA

ESP32 WROOM 32E

BUY

Extensión de Cámara ESP32

-

Protoboard

BUY

Cables Puente

BUY

Resistor

BUY

LED RGB

BUY

Pines Disponibles

Aquí está la lista de pines disponibles en la placa ESP32 para este proyecto.

Pines Disponibles

IO13, IO12, IO14, IO27, IO26, IO25, IO33, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23

Esquema

../../_images/circuit_2.3_rgb.png

Los pines PWM pin27, pin26 y pin25 controlan los pines Rojo, Verde y Azul del LED RGB respectivamente, y conectan el pin de cátodo común a GND. Esto permite que el LED RGB muestre un color específico superponiendo luz en estos pines con diferentes valores PWM.

Cableado

../../_images/rgb_pin.jpg

El LED RGB tiene 4 pines: el pin largo es el pin de cátodo común, que generalmente se conecta a GND; el pin izquierdo junto al pin más largo es Rojo; y los dos pines a la derecha son Verde y Azul.

../../_images/2.3_color_light_bb.png

Código

Aquí, podemos elegir nuestro color favorito en software de dibujo (como paint) y mostrarlo con el LED RGB.

Nota

  • Puedes abrir el archivo 2.3_rgb_led.ino bajo la ruta de esp32-starter-kit-main\c\codes\2.3_rgb_led.

  • Después de seleccionar la placa (ESP32 Dev Module) y el puerto adecuado, haz clic en el botón Subir.

  • ¿Siempre aparece «COMxx desconocido»?

../../_images/edit_colors.png

Escribe el valor RGB en color_set(), podrás ver el LED RGB iluminar los colores que deseas.

¿Cómo funciona?

  1. Define los pines GPIO, los canales PWM y la frecuencia (en Hz) y resolución (en bits).

    // Define RGB LED pins
    const int redPin = 27;
    const int greenPin = 26;
    const int bluePin = 25;
    
    // Define PWM channels
    const int redChannel = 0;
    const int greenChannel = 1;
    const int blueChannel = 2;
    
    // Define PWM frequency and resolution
    const int freq = 5000;
    const int resolution = 8;
    
  1. La función setup() inicializa los canales PWM con la frecuencia y resolución especificadas, y luego asocia los pines del LED a sus respectivos canales PWM.

    void setup() {
        // Set up PWM channels
        ledcSetup(redChannel, freq, resolution);
        ledcSetup(greenChannel, freq, resolution);
        ledcSetup(blueChannel, freq, resolution);
    
        // Attach pins to corresponding PWM channels
        ledcAttachPin(redPin, redChannel);
        ledcAttachPin(greenPin, greenChannel);
        ledcAttachPin(bluePin, blueChannel);
    }
    

    Aquí utilizamos el periférico LEDC (control de LED), diseñado primordialmente para controlar la intensidad de los LEDs, aunque también puede ser usado para generar señales PWM para otros propósitos. * uint32_t ledcSetup(uint8_t channel, uint32_t freq, uint8_t resolution_bits);: Esta función se utiliza para configurar la frecuencia y resolución del canal LEDC. Devolverá la frecuencia configurada para el canal LEDC. Si se devuelve 0, se produce un error y el canal LEDC no fue configurado.

    • channel: selecciona el canal LEDC a configurar.

    • freq: selecciona la frecuencia del PWM.

    • resolution_bits: selecciona la resolución para el canal LEDC. El rango es de 1-14 bits (1-20 bits para ESP32).

    • void ledcAttachPin(uint8_t pin, uint8_t chan);: Esta función se utiliza para asociar el pin al canal LEDC.

      • pin: selecciona el pin GPIO.

      • chan: selecciona el canal LEDC.

  2. La función loop() cicla a través de varios colores (rojo, verde, azul, amarillo, púrpura y cian) con intervalos de un segundo entre cada cambio de color.

    void loop() {
        setColor(255, 0, 0); // Red
        delay(1000);
        setColor(0, 255, 0); // Green
        delay(1000);
        setColor(0, 0, 255); // Blue
        delay(1000);
        setColor(255, 255, 0); // Yellow
        delay(1000);
        setColor(80, 0, 80); // Purple
        delay(1000);
        setColor(0, 255, 255); // Cyan
        delay(1000);
    }
    
  3. La función setColor() establece el color deseado escribiendo los valores de ciclo de trabajo apropiados en cada canal PWM. La función toma tres argumentos enteros para los valores de color rojo, verde y azul.

    void setColor(int red, int green, int blue) {
        // For common-anode RGB LEDs, use 255 minus the color value
        ledcWrite(redChannel, red);
        ledcWrite(greenChannel, green);
        ledcWrite(blueChannel, blue);
    }
    
    • void ledcWrite(uint8_t chan, uint32_t duty);: Esta función se utiliza para establecer el ciclo de trabajo para el canal LEDC.

      • chan: selecciona el canal LEDC para escribir el ciclo de trabajo.

      • duty: selecciona el ciclo de trabajo a establecer para el canal seleccionado.