/*
* ====================================================================
* PROYECTO: BOMBILLA LED ATARDECER
* ====================================================================
*
* Descripción:
* Simulador de atardecer usando una bombilla LED reciclada con ESP32-C3
* y tira de LEDs WS2812. Al conectar la alimentación, los LEDs se iluminan
* en rojo y se atenúan gradualmente durante 15 minutos hasta apagarse
* completamente, simulando un atardecer relajante.
*
* --------------------------------------------------------------------
* MATERIALES NECESARIOS:
* --------------------------------------------------------------------
* - 1x ESP32-C3 (módulo de desarrollo)
* - 1x Tira de 4 LEDs WS2812 (NeoPixel)
* - 1x Bombilla LED estropeada (carcasa reutilizada)
* - 1x Conector USB-C macho
* - Cables de conexión
* - Soldador y estaño
* - Alimentador USB de smartphone (5V)
*
* --------------------------------------------------------------------
* CONEXIONES:
* --------------------------------------------------------------------
* ESP32-C3 GPIO8 → Data Pin de la tira WS2812
* USB-C 5V → VIN/5V del ESP32-C3
* USB-C GND → GND del ESP32-C3
* ESP32-C3 5V → 5V de la tira WS2812
* ESP32-C3 GND → GND de la tira WS2812
*
* --------------------------------------------------------------------
* CONFIGURACIÓN ARDUINO IDE:
* --------------------------------------------------------------------
* Placa: ESP32C3 Dev Module
* Puerto: Seleccionar el puerto COM correspondiente
*
* Librerías requeridas:
* - Adafruit NeoPixel (instalar desde el Gestor de Librerías)
*
* --------------------------------------------------------------------
* INFORMACIÓN DEL CREADOR:
* --------------------------------------------------------------------
* Creador: artificialroot.es
* Fecha: Octubre 2025
* Versión: 1.0
* Licencia: Open Source
*
* --------------------------------------------------------------------
* FUNCIONAMIENTO:
* --------------------------------------------------------------------
* 1. Al conectar la alimentación USB, los LEDs se encienden en rojo brillante
* 2. Durante 15 minutos, el brillo se reduce gradualmente
* 3. Al finalizar, los LEDs quedan completamente apagados
* 4. Para repetir el ciclo, desconectar y volver a conectar la alimentación
*
* --------------------------------------------------------------------
* NOTAS TÉCNICAS:
* --------------------------------------------------------------------
* - Duración del atardecer: 900 segundos (15 minutos)
* - Actualización de brillo: cada 100ms (transición suave)
* - Color utilizado: Rojo puro (RGB: 255,0,0 → 0,0,0)
* - Consumo aproximado: ~200mA a brillo máximo
*
* ====================================================================
*/
#include <Adafruit_NeoPixel.h>
// Configuración de la tira LED
#define LED_PIN 8 // Pin GPIO8 del ESP32-C3
#define NUM_LEDS 4 // Número de LEDs WS2812
#define SUNSET_DURATION 900000 // 15 minutos en milisegundos (15 * 60 * 1000)
// Crear objeto NeoPixel
Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
// Variables para el efecto de atardecer
unsigned long startTime;
bool sunsetComplete = false;
void setup() {
// Inicializar la tira LED
strip.begin();
strip.setBrightness(255); // Brillo máximo inicial
strip.show(); // Inicializar todos los LEDs apagados
// Guardar el tiempo de inicio
startTime = millis();
// Encender todos los LEDs en rojo al máximo
setAllLeds(255, 0, 0);
}
void loop() {
if (!sunsetComplete) {
// Calcular el tiempo transcurrido
unsigned long elapsedTime = millis() - startTime;
if (elapsedTime < SUNSET_DURATION) {
// Calcular el brillo actual basado en el tiempo transcurrido
// El brillo va de 255 (máximo) a 0 (apagado)
float progress = (float)elapsedTime / (float)SUNSET_DURATION;
int brightness = 255 - (int)(progress * 255);
// Aplicar el brillo a todos los LEDs en rojo
setAllLeds(brightness, 0, 0);
// Pequeña pausa para suavizar la transición
delay(100);
} else {
// Atardecer completado - apagar todos los LEDs
setAllLeds(0, 0, 0);
sunsetComplete = true;
}
}
// Si el atardecer está completo, el loop no hace nada
// hasta que se reinicie el dispositivo
}
// Función para establecer el color de todos los LEDs
void setAllLeds(uint8_t red, uint8_t green, uint8_t blue) {
for(int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, strip.Color(red, green, blue));
}
strip.show();
}Loading
esp32-c3-devkitm-1
esp32-c3-devkitm-1