Drones y UAVTécnico

Revisor de celdas LiPo antes de volar con Raspberry Pi

Conecta el cable de balanceo de una batería y ve el voltaje de cada celda, el desbalance y un veredicto de VOLAR / NO VOLAR en una OLED.

NivelTécnico
Tiempo1.5 h
Costo est.~$128
Pasos5

Una batería puede mostrar un voltaje total sano mientras una celda está débil, y esa celda débil es la que hace caer un dron. Un ADS1115 lee cada punto del conector de balanceo a través de divisores de voltaje y el Pi hace la resta por ti.

⚠ SEGURIDAD
Revisa bien el cableado de los divisores antes de conectar una batería: una conexión equivocada puede poner en corto el cable de balanceo. Las baterías LiPo pueden incendiarse si se perforan, se sobrecargan o hacen cortocircuito. Cárgalas en una bolsa LiPo, nunca sin supervisión, y quita siempre las hélices mientras trabajas en la mesa. En EE.UU., los pilotos recreativos deben pasar la prueba gratuita TRUST de la FAA, registrar drones de más de 250 g (0.55 lb), cumplir con Remote ID y mantener la nave a la vista (los pilotos FPV necesitan un observador). Las reglas cambian: revisa faa.gov antes de volar.

Pasos de la misión

  1. Arma los divisores

    Para cada uno de los cuatro puntos de balanceo, suelda un divisor de 10 kΩ y 2 kΩ para que 16.8 V se conviertan en unos 2.8 V, seguros para el ADS1115 a 3.3 V.

  2. Conecta el ADC

    Salidas de los divisores a A0–A3, tierra del cable de balanceo a la tierra del ADS1115 y del Pi, y el ADS1115 a los pines I2C del Pi con VDD en 3V3.

  3. Calibra

    Mide cada punto con un multímetro y ajusta la relación en el script hasta que las lecturas coincidan dentro de 0.01 V.

  4. Lee las celdas

    El script resta puntos vecinos para obtener cada celda y luego muestra el voltaje total, la celda más baja y la diferencia entre la más alta y la más baja.

  5. Define tus reglas

    Una regla típica: no vuelas si alguna celda está bajo 3.80 V con carga completa o si las celdas difieren más de 0.05 V. Desconecta la batería al terminar, porque los divisores consumen una corriente pequeña.

Código

import board, busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn

RATIO = [6.0, 6.0, 6.0, 6.0]          # (10k + 2k) / 2k — tune each after calibrating
i2c = busio.I2C(board.SCL, board.SDA)
ads = ADS.ADS1115(i2c); ads.gain = 1  # +/-4.096 V range
taps = [AnalogIn(ads, ch).voltage * RATIO[ch] for ch in range(4)]

cells, prev = [], 0.0
for t in taps:
    cells.append(t - prev); prev = t

spread = max(cells) - min(cells)
print('Total %.2f V' % taps[-1])
for i, c in enumerate(cells, 1):
    print('Cell %d: %.3f V' % (i, c))
ok = min(cells) >= 3.80 and spread <= 0.05
print('Spread %.3f V -> %s' % (spread, 'GO' if ok else 'NO-GO'))

Code comments are in English, like most libraries and docs — a good habit for makers.

Preguntas

¿Funciona con baterías 6S?

Necesitas seis entradas (dos ADS1115 con direcciones distintas) y divisores más grandes para que 25.2 V queden por debajo de 3.3 V.

¿Puede medir la resistencia interna?

No por sí solo. Tu cargador inteligente normalmente sí puede, y una resistencia interna que sube es buena señal de que la batería se está gastando.