5 oct. 2016

Avisador inteligente de necesidad de recarga de batería para la bici eléctrica basado en ATtiny85 1/2



Ya es la segunda vez que me pasa; cojo la bici, y tras el viaje al trabajo, me deja tirado por batería descargada en mitad de la cuesta... con la molestia de tener que subir sus 30 kgs. por pendientes del 14% (y el perjuicio que le produce a la batería descargarse totalmente, por suerte son LiFePo que soportan bastante bien ésto).

No tengo indicador de carga (la maneta que me suministraron es para 48V) para calcular si tiene suficiente energía para los 4 km que tengo que hacer, y además las LiFePo4 tienen una variación muy pequeña de voltaje entre el 20% y el 80% de capacidad (entre 3,15V y 3,35V), con lo que es fácil descuidarse. Y ponerla a cargar todos los días no es algo práctico ni lo mejor para la batería (lo ideal sería recargarla cuando le quede el 20% para maximizar su vida útil). Y los indicadores de carga de batería me parecen demasiado "tragones" de energía. Así que...

A cada necesidad... una solución


9/01/17: Al final he acabado utilizando un Nano y un acelerómetro MPU-6050 para las funciones de alarma antirrobo e indicador de voltaje, en esta entrada podéis ver los detalles.
He pensado que estaría bien monitorizar el estado de la batería con un Arduino, e indicar con un led RGB (de verde a rojo, pasando por amarillo, anaranjado...) la necesidad de poner a cargar la batería. Pero no quiero quedarme sólo ahí; la ventaja del Arduino es que podemos hacer esta tarea de forma inteligente, y que se ponga en rojo cuando se estime, que dado el consumo histórico medio de los viajes (si es para ir al trabajo suele ser similar), no nos llegue para el siguiente viaje, y podamos cargarla con tiempo la noche anterior (tarda entre 5 y 10 horas en cargarse completamente con un cargador de 2Ah, dependiendo de lo desigualadas que estén las celdas). O al menos, sin complicarnos tanto, podremos indicar a nuestro gusto el porcentaje de batería con el que queremos que se marque en rojo (con un 20% por ejemplo, como si fuera el indicador de reserva).

Y no sólo eso; una vez se me olvidó la luz conectada, y al día siguiente me la encontré sin batería. Podremos desconectar automáticamente la alimentación de centralita y accesorios (con un relé de estado sólido) si detectamos que la variación de voltaje durante la última media hora ha sido menor de 0,10V (que calculo que para mi capacidad de batería y consumo mínimo, cubre todos los casos), y evitar que esto pase.
Podría poner un amperímetro Hall para hacerlo exacto pero el objetivo es hacer algo lo más simple posible midiendo sólo los cambios de voltajes (las baterías de litio suelen tener curvas de descarga similares durante toda su vida útil) y que se pueda indicar en parámetros el tipo de batería. El problema que veo va a ser saber si el voltaje es bajo carga de trabajo o no, para evitar falsas alarmas por las grandes fluctuaciones durante cargas elevadas, una opción es promediar valores cada 5 min. por ej. para que no influya tanto.
Incluso podría utilizar la EEPROM para guardar los datos históricos necesarios, e ir calculando punto de carga según los últimos consumos. El programa podría hacer lo siguiente:
  • Nada más encender con un interruptor el Attiny, conectamos el relé principal
  • Cargamos los históricos de la EEPROM y vemos el consumo medio por viaje en base a la bajada de voltaje que se produjo,
  • y teniendo en cuenta la relación de capacidad/voltaje de una LiFePo (comprobado con una A123 26650),
  • Empezamos a monitorizar el voltaje de la batería con un divisor de voltaje y tomamos datos cada minuto, y cada 5 minutos actualizaremos el color del RGB.
  • Si el voltaje no varía en media hora más de 0,10V (hay que tener en cuenta los consumos de equipos como el foco LED de luz de cruce), consideraremos que nos la hemos olvidado conectada, y desconectamos el relé principal.
  • Había pensado en poner a dormir el attiny (el consumo estará del orden de 5 microamperios (uA) en sleep mode) mientras no está haciendo nada, pero su consumo es tan pequeño que no merece la pena, ya que complica mucho la medición de tiempo transcurrido. Lo alimentaré de la batería con una resistencia de 100 ohms para proteger el regulador.
Todo esto lo iré ajustando según el resultado, pero me gustaría que el programa "aprenda" con el uso, y que no sea necesario meterle valores como capacidad de batería, etc. Simplemente se basará en lo que falte para acercarse al mínimo voltaje y la capacidad media que se utilizó en los últimos 10 viajes, supongo.

Curva de capacidad según voltaje LiFePo


He monitorizado, conectando al ordenador el iCharger 1010b+, la descarga de una ANR26650A LiFePo de A123 con 9 años pero sin apenas uso (logview Studio 1), y a pocos mAh para obtener la relación voltaje/carga reales (variará dependiendo de la edad de la batería y modelo) para ajustar todo lo posible el indicador LED RGB, pero básicamente la curva de descarga general en las LiFePo4 es la siguiente:

Toda la energía se almacena entre 3,1 y 3,3V Fuente
Como se ve, el porcentaje de carga es prácticamente lineal entre 3,3 y 3,1V (en reposo), por lo que entre esos voltajes se maneja el 80% de la carga, lo que hará suficientemente fiable el indicador de carga (el divisor de voltaje tiene que ser lo más exacto posible). Como ya he comentado, el problema será saber si estamos acelerando o no (puede bajar el voltaje bastante en momentos de mucho esfuerzo del motor, y nunca sabremos si aceleramos a menos que obtengamos esta info de otro lado, como sensor hall del motor o centralita...) pero podemos obviar esto, y sabiendo que sólo en reposo indicará bien el estado de carga, simplificar el cálculo.

Curva de descarga a 40 mAh ANR26650 de A123 de 9 años (Hoja de datos)

Después de esta lluvia de ideas y posibilidades al implementar un control Arduino, en la próxima entrada espero ya tener algo funcional y contaros los detalles.

Actualización 6/10: Como suele ser habitual, a otro se le ocurrió lo mismo antes que yo, ¡incluso usando los mismos colores del RGB! Sin embargo con la placa Digispark el proceso y conexión es mucho más sencillo, y servirá también para baterías Li-ion.

No hay comentarios:

Publicar un comentario

Puede dejar su comentario. Los comentarios descalificativos o sin relación ninguna con el tema tratado serán eliminados sin previo aviso. Antes de plantear una duda, asegúrate de que la respuesta no está en otra entrada del tema visitando la etiqueta que hay al final del artículo para verlos todos; muchas veces lo que planteas puede haber sido corregido o comentado en otra entrada posterior.