Quelles sont (ou comment utiliser) les options d'économie d'énergie de l'Arduino pour prolonger la durée de vie de la batterie?

40

Pour les projets solaires et alimentés par batterie, réduire la consommation d'énergie est une nécessité.

Je sais un peu comment utiliser une minuterie et une interruption pour mettre le microcontrôleur en veille lorsqu'il ne fait rien.

J'ai également lu que vous pouvez désactiver certains périphériques pour économiser davantage d'énergie.

Voici une page expliquant ces: Techniques d'économie d'énergie

Ma question:

  • Quelles autres techniques existe-t-il pour économiser de l'énergie?
  • Existe-t-il des bibliothèques facilitant l'utilisation de ces fonctionnalités AVR?
Sachleen
la source

Réponses:

33

Note: Je voulais souligner que, même si ma réponse a été acceptée, le lecteur (vous) devrait vraiment lire la réponse de Anindo en premier si vous voulez vraiment économiser de l'énergie avec n'importe quelle carte Arduino. Une fois que vous avez abordé ces éléments dans votre conception, vous devriez lire ma réponse et vous demander comment configurer le MCU en mode basse consommation.

Cela dit, il existe plusieurs techniques permettant à un Arduino d'économiser de l'énergie. Je vais en énumérer quelques-unes, puis vous indiquer une page qui les explique plus en détail.

  1. Bien que le contrôleur ne fasse rien d'important (par exemple, entre une lecture d'un capteur), vous pouvez le mettre dans l'un des modes de veille décrits ci-dessous, à l'aide de la commande set_sleep_mode (SLEEP_MODE_PWR_DOWN). À côté de chaque mode se trouve la consommation électrique approximative de chaque mode.

    • 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. Désactiver la détection de baisse de tension (le circuit qui éteint le contrôleur quand une basse tension est détectée).

  3. Désactiver le convertisseur ADC (conversion analogique-numérique)

  4. Utiliser l'horloge interne

Ensuite, lorsque vous mettez le contrôleur en veille, vous devez utiliser un ou plusieurs des mécanismes ci-dessous pour le réactiver et en faire quelque chose:

  • Réveillez-vous avec un signal

  • Réveillez-vous avec une minuterie

Ceci est un résumé que j'ai fait à partir de -

Cet article s’applique principalement à ATmega328P, mais la technique s’applique également à d’autres contrôleurs compatibles Arduino. Comme TheDoctor l'a bien dit, vous devrez vérifier le datashet pour vous assurer que votre contrôleur suporte une de ces techniques et comment le faire plus précisément.

Ricardo
la source
2
Merci d’avoir référencé ma page www.gammon.com.au/power . L’utilisation de toutes les techniques mentionnées devrait vous permettre de consommer environ 100 nA (0,1 µA). D'autres techniques pouvant avoir un impact important sont l'utilisation d'une fréquence plus basse et d'une tension plus basse. Et aussi ce qu'Anindo Ghosh a dit de ne pas utiliser de régulateurs de tension. J'ai fabriqué un capteur de température et d'humidité - alimenté par batterie, qui utilise beaucoup de ces techniques, mais qui fonctionne encore, après quelques années d'utilisation de batteries.
Nick Gammon
@ NickGammon - Pour être juste, je pense que votre excellent article mérite une meilleure référence. J'ai donc corrigé ma réponse dans cette mesure. Merci pour cet excellent article - très clair et complet! Et bienvenue sur Arduino.SE. C'est bon de vous avoir ici.
Ricardo
24

De manière réaliste, le plus gros gaspillage d'énergie sur une carte Arduino est son régulateur de tension linéaire.

  1. Tant que le microcontrôleur de la carte, les DEL, ou tout autre périphérique, consomment du courant, le régulateur linéaire gaspille une puissance égale à difference between supply and board voltagex current drawn.

    Une première solution consisterait donc à déconnecter le voyant d’indicateur d’alimentation situé sur la carte et à ne pas utiliser les autres voyants aussi loin que possible. Deuxièmement, alimentez la carte avec une tension aussi basse que possible et suffisante pour alimenter le régulateur intégré.

  2. Sur les conceptions d'origine, les régulateurs de tension utilisés ne présentent pas un faible courant de repos. Cela signifie que même en l'absence de toute puissance absorbante au sein du conseil, le régulateur lui-même perd beaucoup d'énergie tout le temps qu'il est allumé.

    Une solution simple consiste à remplacer le régulateur intégré par un régulateur linéaire à faible perte (LDO) conçu pour un courant de repos extrêmement faible. Les recherches paramétriques sur différents sites de fournisseurs donneront probablement des substituts.

  3. Même avec les étapes ci-dessus, la carte Arduino ne fournit pas de mécanisme pour définir le LDO en mode faible consommation, si le LDO choisi le prend en charge. Les conceptions écoénergétiques utilisent généralement une broche «mode veille» sur les régulateurs de tension pour économiser un peu d’énergie - ce n’est pas une option ici.

Même avec tous les modes et astuces d'économie d'énergie appliqués au niveau du microcontrôleur, l'Arduino n'est tout simplement pas conçu pour être un périphérique ultra-basse consommation prêt à l'emploi. Après avoir expérimenté plusieurs applications non triviales, j'ai constaté que le meilleur réalisable est une économie d'énergie de l'ordre de 10% à 30% selon l'application, car le régulateur de tension et les DEL vont néanmoins consommer le reste.

Anindo Ghosh
la source
2
alimentez la carte avec une tension aussi basse que possible et juste suffisante pour alimenter le régulateur intégré ou alimentez 5 V via un câble USB piraté.
Anonyme Penguin
13

Vous pouvez lire la feuille de données de 200 pages, puis vous déranger avec des décalages de bits et des registres compliqués, mais je recommande cette bibliothèque: http://playground.arduino.cc/Code/Enerlib

De même, si vous utilisez un Uno ou n’importe lequel avec une puce USB vers série, vous pouvez le désactiver ou le supprimer.

Le docteur
la source
3
Vous devriez lire la fiche technique, peu importe ce que vous faites.
Connor Wolf
9

Une fois que votre projet fonctionne et que vous devez effectuer un déploiement dans un environnement "de production", vous pouvez choisir de remplacer l’Arduino par une meta simple, ATMega328, ou n’importe laquelle des puces de la famille ATTiny. Cela vous débarrassera de tous les dévoreurs d'énergie sur le tableau Arduino dont vous n'avez pas besoin. J'ai trouvé:

  • Carte Arduino de batterie bloc 9V - 56 mA
  • ATTiny85 nu sur 8 MHz sans mode veille, etc. - 10 mA
  • ATTiny85 nu sur 8 MHz en mode veille - 0.03 mA

Quelques informations supplémentaires

Programmer une aventure avec Arduino

Fichiers ATTiny pour Arduino IDE

maarten
la source