Alimentar una placa Arduino con pilas o baterías puede ser algo complicado, esto relacionado con el tiempo que el sistema permanecerá funcionando hasta agotar la carga de la batería.
Primero veamos como calcular la duración de una pila en función del consumo que aplicamos.
Analicemos por ejemplo una pila tipo AA de 1.5V modelo MN1500 LR6 la hoja de datos de esta pila dice que que su rendimiento es de 2850 miliamperes por hora, este dato es fundamental conocerlo para saber el rendimiento de la pila en función de la carga que vamos a conectar.
Supongamos que tenemos una carga de 25 mA aplicada a la pila lo que resultara en un funcionamiento correcto durante 2850/25= 114 horas, no llegará a cumplir cinco días de funcionamiento continuo.
Si tomamos en cuenta que 25 mA no es gran cosa pero si lo es el costo de las pilas es por esto que bajar el consumo es fundamental cuando el dispositivo se alimenta con baterías.
El modo Sleep.
Este modo de funcionamiento está disponible en todos los microcontroladores y claro los que trae la placa Arduino también pero Arduino no tiene ninguna forma de activarlo, sin embargo si usted mira dentro de los archivos que están dentro de la carpeta Arduino (Arduino\hardware\tools\avr\avr\include\avr) encontrará dentro de la carpeta AVR un archivo llamado sleep.h, este archivo provisto por AVR y presente en todos los compiladores para AVR también está en Arduino y para usar este recursos solo basta con incluir la biblioteca include <avr/sleep.h> de la misma forma que incluimos cualquier archivo de cabecera.
Para ver su funcionamiento observe el siguiente vídeo. El consumo en funcionamiento normal es de poco mas de 14 mA sin embargo al pasar a modo sleep este baja a 280 uA!!!
El programa lo que hace es mantener el ATMEGA328P (el controlador de Arduino Uno y Nano) en su consumo normal durante 5 segundos para pasar luego a bajo consumo hasta que se active la interrupción (INT0) en el pin 2, esto se logra actuando con un botón conectado en ese pin.
La hoja de datos del ATMEGA328P dice que hay varias formas de sleep:
- SLEEP_MODE_IDLE
- SLEEP_MODE_ADC
- SLEEP_MODE_PWR_SAVE
- SLEEP_MODE_EXT_STANDBY
- SLEEP_MODE_STANDBY
- SLEEP_MODE_PWR_DOWN
Cada una con su particularidad siendo SLEEP_MODE_PWR_DOWN la mas agresiva en cuanto a bajar el consumo del controlador, esta configuración detiene todos los relojes internos, los módulos de hardware y la propia CPU son desactivados, sin embargo las interrupciones en los pines INTx y en teoría un cambio de estado en cualquier pin lo sacará del sleep.
SLEEP_MODE_IDLE es otro modo de sleep muy usado, no es tan drástico como SLEEP_MODE_PWR_DOWN puesto que solo detiene parte del microcontrolador siendo posible sacarlo de ese estado de varias formas y una de las mas interesantes es que sale del sleep cuando un nuevo dato se recibe en la UART.
Claro que bajar el consumo de una placa Arduino a niveles de micro-amperes no es posible porque el modo sleep solo afecta al propio microcontrolador no al resto de componentes que tiene la placa Arduino.
En este ejemplo se ven los resultados con un microcontrolador montado fuera de la placa Arduino Uno.
También existe bibliotecas hechas por usuarios de Arduino que funcionan muy bien pero no es menor el detalle que sleep.h viene con todos los compiladores para AVR.
Conclusión.
15 o 20 mA suenan a poco cuando hablamos de Amperes pero es importante cuando están aplicados en forma constante y permanente descargando pilas o baterías y como vemos el funcionamiento no se prolonga mas de unos pocos días antes de tener que reemplazar las baterías con el consabido costo.
Tener un sistema que pueda tener un consumo bajo es una obligación para todo sistema que funcione a baterías y es justamente por esto que esta funcionalidad está disponible en todos los microcontroladores.