Cómo Comprobar y Recuperar Celdas 18650: Guía Práctica para Makers


Las celdas 18650 son baterías recargables de iones de litio cilíndricas, ampliamente usadas en electrónica por su equilibrio entre tamaño, capacidad y potencia. Su nombre deriva de sus dimensiones estándar: 18 mm de diámetro y 65 mm de longitud.​

Especificaciones Técnicas Clave

Ofrecen un voltaje nominal de 3.6-3.7 V, con carga máxima de 4.2 V y corte de descarga en 2.5-2.75 V para evitar daños irreversibles.
Las capacidades varían de 1200 mAh a más de 3500 mAh según el modelo (ej. Samsung 30Q: 3000 mAh; LG HG2: 3000 mAh), con corrientes de descarga continuas de 4-12 A en versiones de alto rendimiento y resistencia interna típica de 19-50 mΩ.​
Soportan 300-500 ciclos de carga/descarga manteniendo >80% de capacidad, con baja autodescarga (<5% mensual).​

Aplicaciones Comunes

Domina en powerbanks, linternas LED, herramientas eléctricas, e-cigarrillos y proyectos DIY como powerwalls o drones.
En sistemas IoT y NILM (como tus datasets DSUALM), se integran en packs con BMS para monitorizar voltaje, corriente y temperatura, maximizando eficiencia energética.​

Ventajas y Riesgos

Proporcionan alta densidad energética (hasta 250 Wh/kg) y versatilidad en paralelo/serie, pero requieren manejo cuidadoso: sobrecarga genera gases inflamables, y descarga profunda causa degradación química.​
Siempre usa cargadores CC/CV (como TP4056) y verifica capacidad/autodescarga como en las guías de este humilde blog SolElectrónicos.

Puebas de capacidad

Las celdas 18650 son un recurso valioso en proyectos electrónicos, desde powerbanks hasta sistemas IoT y powerwalls caseros. Sin embargo, muchas proceden de dispositivos usados y requieren una verificación exhaustiva para garantizar seguridad y rendimiento. Esta miiniguía intenta detallar inspección, pruebas y métodos de recuperación avanzados.

Inspección Inicial

Realiza una revisión visual detallada antes de cualquier manipulación.
Busca deformaciones, abolladuras, hinchazón o fugas; un olor dulce indica electrolito escapado. Desecha inmediatamente cualquier celda dañada.
Mide el voltaje en reposo con un multímetro: valores entre 2.6 V y 4.2 V son aceptables; por debajo de 2.6 V o por encima de 4.2 V señalan problemas graves.

Pruebas de Funcionalidad

Carga la celda completamente a 4.2 V con un módulo TP4056 o similar, luego déjala reposar una semana.
Una caída superior a 0.1 V indica autodescarga excesiva; descártala.
Prueba bajo carga con una resistencia de 1-2 Ω (1-2 W): una caída mayor de 0.3 V revela alta resistencia interna. Por cierto un método rápido de realizar una descarga muy alta y rápida es conectar un generador de alto voltaje (típico 400 o 500kv) de los usados para generar una chispa por ejemplo en encendedores Electrónicos y disponibles en portales asiáticos.

Medición de Capacidad

Usa un probador como ZHIYU o SkyRC MC3000 para descargar a corriente constante (0.2C, ej. 0.5-1 A para 2500 mAh) hasta 2.8-3.0 V.
Calcula la capacidad con la fórmula:
Capacidad (mAh)=Corriente (mA)×Tiempo (h)\text{Capacidad (mAh)} = \text{Corriente (mA)} \times \text{Tiempo (h)}Capacidad (mAh)=Corriente (mA)×Tiempo (h)
Acepta solo celdas con >90% de capacidad nominal y resistencia interna (IR) de 30-50 mΩ; una buena celda retiene >80% tras ciclos.

Voltaje Crítico de Daño

Un voltaje por debajo de 2.5-2.6 V indica daño irreversible, con pérdida de capacidad y riesgos internos.
Para una celda a 2.58 V, aplica «bump charge» lento (50-100 mA) hasta 3.0 V, prueba capacidad y autodescarga; desecha si no supera 80% nominal.

Recuperación Avanzada: Liberación de Gases

No es posible reparar químicamente celdas degradadas internamente, pero en casos de acumulación de gases (que impide carga máxima), prueba este método experimental para baterias que vayamos a desechar:

  • Levanta ligeramente haciendo presión en la pestaña interior del polo positivo en los orificios con una herramienta fina (aguja o punzón) para ventear presión mínima, restaurando temporalmente conductividad.
  • Una vez hayamos introducido la herramienta por uno de los orificios y hayamos hecho presión hacia el interior debería oírse un chasquido como si fuera la liberación de un gas ( por supuesto no respire este).
  • Realiza solo con EPI (guantes, gafas), en área ventilada; nunca para aplicaciones críticas como packs de alto consumo.

Advertencia: Estos procedimientos son para usuarios avanzados. Prioriza siempre la seguridad; SolElectrónicos no se responsabiliza por mal uso. ¡Comparte tus experiencias en comentarios!

Reciclaje Seguro

Descarta celdas con calentamiento, fugas, olor o autodescarga rápida.
En España, deposítalas en puntos limpios municipales o contenedores específicos para litio; aísla polos con cinta aislante para evitar cortos.
Nunca en basura orgánica o reciclaje genérico, ya que pueden causar incendios.

Una pantalla mas grande para el ESP32


En un post anterior vimos como usar una pequeña pantalla OLED con un ESP32. Ciertamente una pantalla pequeña consume menos y ocupa muy poco espacio, pero cuando no tenemos esos problemas, es mas interesante usar una pantalla algo mas grande, pues aunque pueda parecer elegante, en realidad con una pantalla tan pequeña apenas hay sitio para mostrar información (además de que posiblemente cueste lo mismo y además suelen usar los mismo pines de datos).

En este post vamos usar la AZ-Delivery 1.77″ ST7735 con ESP32 (comprado en Amazon en https://amzn.to/4pK0utQ ) y la librería de Adafruit donde solo tenemos que adaptar el constructor y asegurarnos de que el cableado coincide con los pines correctos (en nuestro caso 14,13,12,27,26).

Atención porque aunque el manual de Az-Delivery que nos ofrece este pantalla solo muestren como ejemplo un Arduino mega con un adaptador ( ver figura mas abajo), es posible conectar directamente la pantalla AZDelivery de 1.77 pulgadas ST7735 al ESP32 sin conversor de nivel lógico.

En caso de usar un Arduino Uno como hemos visto arriba, el cableado se complica dado que tenemos adaptar 4 líneas de datos a los niveles de 3.3v. Como vemos para configurar este adaptador, se debe conectar el pin VA del LCC a +3.3V y el pin VB a +5V. El pin OE debe unirse a +3.3V mediante una resistencia de arranque de 1 kΩ, mientras que el pin GND se conecta a tierra. En esta configuración, el lado “A” del LCC trabaja con señales de bajo nivel (3.3V) y el lado “B” con señales de alto nivel (5V), tal como se muestra en el diagrama de conexión.

Es muy importante destacar que como el ESP32 opera a niveles lógicos de 3.3V, compatibles con los requisitos de la pantalla (2.7V-3.3V) NO NECESITA UN SHIFTER , a diferencia del Arduino Uno o un ATMega328P que usan 5V y necesitan un shifter como el TXS0108E.

Aclarado este aspecto del conversor que NO NECESITAMOS usando un ESP32, en la imagen vemos las 8 conexiones dela pantalla , por cierto en el mismo orden que la pantalla pequeña que vimos en un post anterior:

Una vez vistas las conexiones, el cableado con los pines elegidos y funcionales debe mantenerse exactamente el mismo mapeo que usábamos en la pantalla de 0.96″:

  • SCL/SCK → GPIO14 (SCK del bus SPI)
  • SDA/MOSI → GPIO13 (MOSI)
  • RES/RST → GPIO12
  • DC/A0 → GPIO27
  • CS → GPIO26
  • VCC → 3.3V
  • GND → GND
  • LED/BL → 3.3V (o a un GPIO si quieres controlar el brillo)​

En el código también debemos ajustar el constructor de Adafruit. En lugar de:

Adafruit_ST7735 tft = Adafruit_ST7735(10, 8, 9);

Usa tus pines (CS, DC, RST):
#define TFT_CS   26
#define TFT_DC 27
#define TFT_RST 12

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

El resto del SPI (SCK=14, MOSI=13) lo maneja SPI por hardware. No hace falta pasarlos al constructor si usamos el SPI por defecto del ESP32.​

Inicialización correcta para 1.77″ 128×160

En setup() usaremos el inicializador recomendado para 1.77″ (Adafruit lo llama “INITR_BLACKTAB” o “INITR_GREENTAB”; muchas 1.77″ van bien con BLACKTAB):

void setup(void) {
SPI.begin(14, -1, 13, 26); // SCK=14, MISO sin usar (-1), MOSI=13, CS=26
tft.initR(INITR_BLACKTAB); // si ves colores raros, prueba INITR_GREENTAB
tft.fillScreen(ST77XX_BLACK);
delay(500);
show_page();
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.setTextSize(2);
tft.setFont(); // vuelve a la fuente por defecto
}

Fíjate que es setTextColor, no setTextcolour (esa grafía daría error de compilación).​

Se pueden utilizar cualquiera de los siguientes colores predefinidos:
ST77XX_BLACK
ST77XX_RED
ST77XX_BLUE
ST77XX_MAGENTA
ST77XX_ORANGE
ST77XX_WHITE
ST77XX_GREEN
ST77XX_CYAN
ST77XX_YELLOW

O también, se pueden utilizar números hexadecimales de 4-bits que representan un color específico (por ejemplo 0x2AFF)

Las fuentes se encuentran en la carpeta de la librería Adafruit_GFX: … > Arduino > libraries > Adafruit_GFX_Library > Fonts Cuando se importa una fuente específica, se debe importar la librería de fuentes después de la librería Adafruit_GFX, como en las siguientes líneas del código de ejemplo

4. Código adaptado para ESP32 y pines deseados

Aquí sin mas dilaciones un ejemplo de sketch funcional ajustado a un ESP32 con librerías Adafruit y usando los pines descritos ( y por supuesto probado en este humilde blog):

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Fonts/FreeSansBold9pt7b.h>
#include <Adafruit_ST7735.h>

#define TFT_CS 26
#define TFT_DC 27
#define TFT_RST 12

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void) {
// SPI en los pines que quieres: SCK=14, MOSI=13
SPI.begin(14, -1, 13, TFT_CS);

tft.initR(INITR_BLACKTAB); // o INITR_GREENTAB si hace falta
tft.fillScreen(ST77XX_BLACK);
delay(500);
show_page();
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.setTextSize(2);
tft.setFont(); // fuente por defecto (bitmap)
}

void loop() {
for (uint8_t i = 0; i < 100; i++) {
changing_value(i);
// delay(100);
}
}

void show_page() {
tft.setFont(&FreeSansBold9pt7b);
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(ST77XX_RED);
tft.setCursor(14, 22);
tft.print("AZ-Delivery");

tft.drawFastHLine(0, 35, 128, ST77XX_GREEN);

tft.drawTriangle(1, 45, 28, 70, 55, 45, ST77XX_WHITE);
tft.fillTriangle(78, 70, 104, 45, 127, 70, 0xA3F6);

tft.drawRect(1, 80, 50, 30, ST77XX_BLUE);
tft.fillRoundRect(78, 80, 50, 30, 5, 0x2D4E);

tft.fillCircle(25, 135, 15, 0x5BA9);
tft.drawCircle(102, 135, 15, ST77XX_GREEN);
tft.drawLine(45, 150, 80, 40, ST77XX_ORANGE);
}

void changing_value(uint8_t value) {
tft.setFont(&FreeSansBold9pt7b);
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);

if (value < 10) {
tft.setCursor(15, 88);
tft.print("0");
tft.print(value);
} else {
tft.setCursor(15, 88);
tft.print(value);
}
}

Este código muestra cómo inicializar y manejar una pantalla TFT basada en el controlador ST7735 usando la librería Adafruit_ST7735 junto con Adafruit_GFX. Primero se definen los pines de conexión del display (CS, DC y RST) y luego se configura la comunicación SPI utilizando pines personalizados para SCK (14) y MOSI (13). En la función setup(), se inicializa la pantalla con un estilo determinado (INITR_BLACKTAB), se limpia con color negro y se llama a la función show_page(), que dibuja una página inicial con texto, líneas, triángulos, rectángulos y círculos de distintos colores, mostrando las capacidades gráficas de la librería.

En la función loop(), el programa recorre valores del 0 al 99 y los muestra en pantalla mediante la función changing_value(). Esta función actualiza una cifra en una posición fija de la pantalla usando una fuente más grande (FreeSansBold9pt7b) y color blanco sobre fondo negro. De esta forma, el código demuestra tanto cómo renderizar gráficos estáticos (formas y texto) como cómo actualizar valores dinámicos en la pantalla TFT, lo que resulta útil para interfaces visuales en proyectos con microcontroladores, por ejemplo, medidores o indicadores en sistemas embebidos.

Con esto mantenemos exactamente las mismas líneas SPI (14,13,12,27,26) que ya teníamos en la pantalla mas pequeña y aprovechamos la librería oficial de Adafruit para el ST7735 de la AZ-Delivery.​