Usando la Battery Shield de la D1 Mini

La placa D1 Mini es una de mis favoritas para armar prototipos alrededor del ESP8266, por su cómodo tamaño, su bajo costo, la facilidad de uso y porque incluye una interesante variedad de Shields que nos permiten ampliar sus funciones de una forma modular. En este artículo haré una revisión de uno de estos shields, sumamente útil para aplicaciones que funcionen alimentadas por baterías.

Al construir un sistema que funciona alimentado a baterías debemos disponer de un circuito o módulo auxiliar que se ocupe de algunos aspectos relacionados con la carga de las mismas, su protección y adecuación de niveles de tensión, si fuera necesario.

En el caso de la D1 Mini, contamos con un shield que cumple con estas funciones, con las siguientes características:

  • Funciona con una batería de Litio entre 3,3 y 4,2Volts.
  • Eleva la tensión de la batería a 5V, para alimentar la D1 mini, otros shields y circuitos externos que funcionen con esa tensión.
  • Carga la batería a partir de un conector micro USB, que puede conectarse a una fuente de 5V o a un panel solar.
  • Provee una corriente de carga máxima de 1A, pudiendo configurarse a 0,5 o 1 A.
  • Protege la batería de descargas excesivas que pueden afectar su vida útil.

Atención

La placa que analizo en este artículo puede ser un modelo antiguo. Wemos, el fabricante original, tiene en su web un modelo mas moderno, que corrige algunos de los inconvenientes de las placas mas antiguas. Por favor siempre verifiquen a que modelo corresponde su placa antes de utilizarla.

Fig. 1. Battery Shield

Descripción

Si observamos la placa por su parte superior se destacan dos conectores: uno del tipo XH2.54 de dos pines donde se conecta la batería y otro micro USB para conectar la placa a una fuente de alimentación de 5 voltios para su carga. También tenemos dos LEDs, uno de color Rojo que se enciende mientras la batería se está cargando y otro de color Verde que indica que la batería ya está cargada.

Fig. 2. Vista superior

En la parte inferior no hay mucho que resaltar, sólo tenemos un jumper (J1) que nos permite establecer el valor de la corriente máxima de carga de la batería. Si está soldado esta corriente será de 1A y si no lo está, el máximo será de 0,5A.

Un modelo mas moderno de placa incluye un segundo jumper que permite conectar la salida de la batería a la entrada analógica A0 para medir su tensión, algo que haremos con el agregado de un circuito externo mas adelante.

Fig. 3. Vista inferior

El shield regula la tensión de la batería a 5V, tensión que sale por el pin marcado 5V y que puede utilizarse para alimentar el resto de las placas y circuitos.

Funcionamiento

El circuito de esta placa puede verse en la siguiente imagen y nos servirá para analizar brevemente su funcionamiento.

Fig. 4. Esquemático de la Battery Shield

Como se puede ver, el circuito está basado en el chip TP5410 un cargador de baterías de Litio y regulador tipo boost (elevador) que puede entregar una tensión de 5V y una corriente máxima de 1A. El jumper J1 permite modificar el valor de resistencia conectado en el pin PROG y de esta forma seleccionar la corriente de carga. El diodo D1 evita la circulación de corriente hacia el puerto USB cuando este está conectado. Algo a tener en cuenta es el valor máximo de tensión que podemos introducir por el conector micro USB (P3). Si es elevado, por ejemplo los 6,5 Voltios que puede entregar un panel solar de 6V bien iluminado, la tensión en el pin de salida marcado “+5” puede ser de 6,5V – 0.2V = 6,3V (D1 y D2 son diodos Schottky) un valor excesivo para aplicar a la D1 Mini (y probablemente el resto de los circuitos). Por esta razón, si usamos paneles solares, debemos tener la precaución de que entreguen 5V o conectarles un diodo en serie si son de 6V.

Medición de la tensión de batería

Una práctica frecuente en equipos que funcionan a baterías es medir la tensión de las mismas para tener información sobre su estado de carga. Como mencioné mas arriba, un modelo mas moderno de esta placa incluye un jumper que permite conectar la tensión de la batería a través de una resistencia a la entrada analógica A0 de la D1 Mini para hacer esta medición. La placa que analizo aquí no la tiene, así que la voy a agregar de manera externa.

Recordemos que el conversor A/D del ESP8266 admite una tensión máxima de 1V, por lo que la D1 mini incluye un divisor resistivo formado por una resistencia de 100K y otra de 220K.

Fig. 5. Divisor resistivo en la D1 mini

Con este divisor, si la tensión aplicada en el pin A0 es de 3.3V, la tensión en el ADC será de:

Si queremos medir directamente la batería, que puede tener un voltaje aún mayor, debemos agregar una resistencia adicional a ese circuito para mantener la tensión a un valor seguro. En mi caso agregaré una de 180K, lo que permite que la tensión de la batería llegue hasta unos improbables 5V, en cuyo caso tendríamos en el ADC:

Fig. 6. Resistencia soldada entre el positivo de la batería y la entrada A0

Como la resolución del ADC es de 10 bits, puede entregar 210 = 1024 valores diferentes, desde 0 hasta 1023, correspondiendo con esta resistencia un valor de 0 a 0V y un valor de 1023 a 5V.

Si desde nuestro programa leemos desde el ADC un valor que llamaremos lectura, corresponderá a un voltaje que llamaremos tensión, y se cumplirá la relación:

Por lo tanto:

El siguiente programa en Micropython implementa la fórmula anterior y muestra la tensión de la batería (en este caso una batería de 4,2V):

Fig. 7. Lectura del ADC en micropython

Y el siguiente código mide y reporta la tensión a Thingspeak cada un minuto, usando el modo de bajo consumo Deep Sleep, que ya explique en un artículo anterior:

#Envia tension de la bateria a Thingspeak cada 1 minuto
#Emplea el modo Deep Sleep para disminuir consumo

import network, time, urequests
from machine import Pin, RTC, ADC

def conectaWifi (red, password):
     global miRed
     miRed = network.WLAN(network.STA_IF)
     if not miRed.isconnected():              #Si no está conectado…
          miRed.active(True)                   #activa la interface
          miRed.connect(red, password)         #Intenta conectar con la red
          print('Conectando a la red', red +"…")
          timeout = time.time ()
          while not miRed.isconnected():           #Mientras no se conecte..
               if (time.ticks_diff (time.time (), timeout) > 10):
                    return False
     return True

rtc = machine.RTC()
conversor = ADC (0)

if conectaWifi ("red", "pass"):
     print ("Conexión exitosa!")
     print('Datos de la red (IP/netmask/gw/DNS):', miRed.ifconfig())
     
     url = "https://api.thingspeak.com/update?api_key=----------------"  

     #Medir tension de batería  
     lectura = conversor.read ()  
     tension = lectura*(5/1023)  
     print ("Tension: ", tension)  

     #Enviar a ThingSpeak  
     respuesta = urequests.get(url+"&field1="+str(tension))   
     respuesta.close ()    

     #Configura una alarma para resetear y despertar al micro  en 1 minuto     
     rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)    
     rtc.alarm(rtc.ALARM0, 60000)    

     #A dormir    
     machine.deepsleep()

else:

     print ("Imposible conectar")
     miRed.active (False)
Fig. 8. Reporte de la tensión de batería en Thingspeak

Debemos tener presente que el agregado de esta resistencia aumenta el consumo de corriente. Por ejemplo, si la batería tiene una tensión de 3,7V, el divisor resistivo de 500K produce una corriente de 3,7V/500K ohm = 7,4 uA que aunque sea poco, incidirá en la duración de la carga ya que se mantiene de forma permanente.

Conclusiones

El battery shield es de gran utilidad en proyectos alimentados a baterías ya que nos resuelve varios aspectos relacionados con la carga y protección de las mismas de una forma simple y sencilla. En aplicaciones muy exigentes, tal vez debamos optar por otras soluciones que tengan un mejor rendimiento y logren bajar aún mas el consumo para alargar el tiempo de funcionamiento. En este artículo describimos los distintos componentes de la placa, analizamos algunos aspectos de su funcionamiento y las precauciones que debemos tomar al alimentarla. También vimos como agregando una resistencia podemos monitorear el valor de la batería conectándola a la entrada del conversor A/D.

Referencia

Las siguientes páginas fueron consultadas como referencia para este artículo

Monitoring LiPo battery voltage with Wemos D1 minibattery shield and Thingspeak

Reviewing the Wemos Battery Shield

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: