Saltar a contenido
← Volver a OPRobots.org

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

utils.cpp:121

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.

control.cpp:140-172


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

utils.cpp:87-112

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.