¿Cuáles son (o cómo uso) las opciones de ahorro de energía del Arduino para extender la duración de la batería?

40

Para proyectos solares y de baterías, es necesario disminuir el consumo de energía.

Sé un poco sobre el uso de un temporizador e interrupción para poner el microcontrolador en reposo cuando no está haciendo nada.

También he leído que puede desactivar algunos periféricos para ahorrar aún más energía.

Aquí hay una página que explica estos: Técnicas de ahorro de energía

Mi pregunta:

  • ¿Qué otras técnicas hay para ahorrar energía?
  • ¿Hay alguna biblioteca que facilite el uso de estas funciones AVR?
Sachleen
fuente

Respuestas:

33

Nota: quería señalar que, aunque mi respuesta fue aceptada, el lector (usted) realmente debería leer la respuesta de Anindo primero si realmente desea ahorrar energía con cualquier placa Arduino. Una vez que aborde esos elementos en su diseño, debería leer mi respuesta y preocuparse por cómo configurar la MCU en modo de bajo consumo.

Dicho esto, hay varias técnicas para hacer que un Arduino ahorre energía. Enumeraré algunos y luego te señalaré una página que los explica con más detalle.

  1. Si bien el controlador no está haciendo nada importante (entre una lectura de un sensor y la siguiente, por ejemplo), puede poner el controlador en uno de los modos de suspensión a continuación, con el comando set_sleep_mode (SLEEP_MODE_PWR_DOWN). Al lado de cada modo está el consumo de energía aproximado de cada modo.

    • SLEEP_MODE_IDLE: 15 mA
    • SLEEP_MODE_ADC: 6.5 mA
    • SLEEP_MODE_PWR_SAVE: 1.62 mA
    • SLEEP_MODE_EXT_STANDBY: 1.62 mA
    • SLEEP_MODE_STANDBY: 0.84 mA
    • SLEEP_MODE_PWR_DOWN: 0.36 mA
  2. Desactive la detección de caída de voltaje (el circuito que apaga el controlador cuando se detecta bajo voltaje).

  3. Apague ADC (conversión de analógico a digital)

  4. Usa el reloj interno

Luego, cuando pone el controlador en suspensión, necesita usar uno o más mecanismos a continuación para activar el controlador y hacer algo con él:

  • Despierta con una señal

  • Despierta con un temporizador

Este es un resumen que hice de ...

Ese artículo se aplica principalmente a ATmega328P, pero la técnica también se aplica a otros controladores compatibles con Arduino. Como TheDoctor dijo bien, tendrá que verificar el datashet para asegurarse de que su controlador admita cualquiera de esas técnicas y cómo hacerlo con mayor precisión.

Ricardo
fuente
2
Gracias por hacer referencia a mi página www.gammon.com.au/power . Emplear todas las técnicas mencionadas debería permitirle consumir alrededor de 100 nA (0.1 µA). Otras técnicas que pueden tener un gran impacto son correr a una frecuencia más baja y un voltaje más bajo. Además de lo que dijo Anindo Ghosh sobre no usar reguladores de voltaje. Hice un sensor de temperatura y humedad, alimentado por batería, que emplea muchas de estas técnicas, que sigue siendo fuerte, después de un par de años con baterías.
Nick Gammon
@NickGammon: para ser justos, creo que su excelente artículo merecía una mejor referencia, así que edité mi respuesta en ese sentido. Gracias por el gran artículo, ¡muy claro y completo! Y bienvenidos a Arduino.SE. Es bueno tenerte aquí.
Ricardo
24

Siendo realistas, el mayor desperdicio de energía en una placa Arduino es el regulador de voltaje lineal.

  1. Mientras el microcontrolador de la placa, los LED o cualquier otro periférico consuman corriente, el regulador lineal desperdicia energía igual a difference between supply and board voltagex current drawn.

    Por lo tanto, una primera solución sería desconectar el LED indicador de alimentación de la placa y no utilizar ninguno de los otros LED en la medida de lo posible. En segundo lugar, suministre a la placa el voltaje más bajo posible que sea suficiente para alimentar el regulador de a bordo.

  2. En los diseños originales, los reguladores de voltaje utilizados no cuentan con baja corriente de reposo. Esto significa que incluso sin nada que atraiga energía dentro de la placa, el regulador mismo desperdicia un poco de energía todo el tiempo que está encendido.

    Una solución fácil es reemplazar el regulador de a bordo con un LDO (regulador lineal de baja caída) clasificado para una corriente de reposo extremadamente baja. Las búsquedas paramétricas en varios sitios de proveedores producirán posibles sustitutos.

  3. Incluso con los pasos anteriores, la placa Arduino no proporciona un mecanismo para configurar el LDO en modo de bajo consumo, si el LDO elegido lo admite. Los diseños energéticamente eficientes generalmente usan un pin de "modo de reposo" en los reguladores de voltaje para ahorrar un poco de energía, no es una opción aquí.

Incluso con todos los modos y trucos posibles de ahorro de energía aplicados a nivel de microcontrolador, el Arduino simplemente no está diseñado para ser un dispositivo de ultra bajo consumo. Después de experimentar con varias aplicaciones no triviales, descubrí que lo mejor que se puede lograr de manera realista es un ahorro de energía del 10% al 30% dependiendo de la aplicación, ya que el regulador de voltaje y los LED consumirán el resto de todos modos.

Anindo Ghosh
fuente
2
suministre a la placa el voltaje más bajo posible que sea suficiente para alimentar el regulador incorporado O suministre 5V a través de un cable USB pirateado.
Anonymous Penguin
13

Puede leer la hoja de datos de 200 páginas y luego meterse con algunos cambios y registros de bits confusos, pero recomiendo esta biblioteca: http://playground.arduino.cc/Code/Enerlib

Además, si está utilizando un Uno o cualquiera con un chip USB a serie, puede desactivarlo o eliminarlo.

TheDoctor
fuente
3
Usted debe leer a través de la ficha técnica no importa lo que está haciendo.
Connor Wolf
9

Una vez que su proyecto esté funcionando y necesite implementarlo en un entorno de "producción", puede optar por reemplazar el Arduino con un simple ATMega328 o cualquiera de los chips de la familia ATTiny. Esto eliminará todos los comedores de poder en la placa Arduino que no necesita. Encontré:

  • Placa Arduino de batería de bloque de 9V - 56 mA
  • ATTiny85 desnudo en 8 MHz sin modos de reposo, etc. - 10 mA
  • ATTiny85 desnudo en 8 MHz en modo de suspensión - 0.03 mA

Más información

Programar un ATtiny con Arduino

Archivos ATTiny para Arduino IDE

maarten
fuente