Batería y LEDs
Monitorización de Batería
Ambos módulos miden el voltaje de la batería LiPo mediante un divisor de tensión conectado al ADC del ESP32-C3.
| Característica | Detalle |
|---|---|
| Tipo batería | LiPo 1S (3.7 V nominal, 4.2 V máxima) |
| Capacidad | 1500 mAh (523450) |
| Divisor tensión | ~3.13:1 (R1+R2)/R2 |
| Canal ADC | Pin 0 (BATT_VOLTAGE_PIN) |
| Resolución ADC | 12 bits (0–4095) |
| Voltaje referencia | 3.3 V |
| Rango voltaje | 3.2–4.2 V |
Cálculo del Voltaje
float get_battery_voltage() {
return analogRead(BATT_VOLTAGE_PIN) * 3.3 / 4095 * 3.13;
}
La fórmula convierte la lectura ADC a voltaje real:
1. analogRead() → 0–4095
2. × 3.3 / 4095 → voltaje en el pin del ADC
3. × 3.13 → voltaje real de la batería (compensando el divisor)
Umbrales de Batería
| Estado | Voltaje | Acción |
|---|---|---|
| Normal | > 3.7 V | LED Power verde fijo |
| Batería baja | ≤ 3.7 V | LED Power rojo parpadeante (500 ms ON / 500 ms OFF) |
El código usa 3.7 V como umbral único. No hay umbral de batería crítica ni apagado automático.
Carga de Batería
La carga se realiza a través del conector USB-C del ESP32-C3 supermini, que incluye un chip de carga integrado. Dos pines GPIO permiten monitorizar el estado de carga:
| Pin | Señal | Lógica |
|---|---|---|
| 3 | BATT_CHARGING_PIN |
LOW = cargando |
| 2 | BATT_FULL_PIN |
LOW = carga completa |
Estos pines se leen en control_manage_battery() para ajustar el
comportamiento del LED de Power durante la carga.
LEDs de Estado (NeoPixel WS2812B)
Cada módulo tiene 2 LEDs WS2812B direccionables individualmente, controlados por la librería Adafruit NeoPixel.
| Característica | Detalle |
|---|---|
| Modelo | WS2812B |
| Cantidad | 2 por módulo |
| Pin datos | 10 (NEOPIXEL_PIN) |
| Formato color | NEO_GRB + NEO_KHZ800 |
| Librería | Adafruit NeoPixel |
LEDs del Modo Main
| LED | Índice | Función |
|---|---|---|
| Power | 0 (RGB_POWER) |
Estado de batería |
| Connection | 1 (RGB_CONNECTION) |
Estado de conexión WiFi |
LEDs del Modo Aux
| LED | Índice | Función |
|---|---|---|
| Power | 0 (RGB_POWER) |
Estado de batería |
| Connection | 1 (RGB_CONNECTION) |
Identificación de pared (verde START, rojo FINISH) |
Estados del LED
| Estado | Función | Descripción |
|---|---|---|
| Sólido | set_led() |
Color fijo hasta nuevo cambio |
| Apagado | clear_led() |
LED apagado |
| Parpadeo | blink_led() |
Alterna ON/OFF cada ms milisegundos |
| Arcoíris | rainbow_led() |
Transición continua R→G→B |
Animación Arcoíris
La animación arcoíris usa dos variables estáticas por LED que controlan un fade entre colores:
| Variable | Función |
|---|---|
rainbow_led_color_asc |
Color que está subiendo de intensidad |
rainbow_led_color_desc |
Color que está bajando de intensidad |
Ciclo: incrementa asc en pasos de 20 cada 30 ms. Al llegar a 255, avanza al
siguiente color (R→G→B→R) y desc toma el valor anterior. El LED muestra la
mezcla de ambos colores.
Nota: La animación requiere ser llamada periódicamente desde
loop(). No usa timer — si el bucle principal se bloquea, la animación se para.
Documento generado el 2026-06-29. Ver también Hardware, Debug.