samedi 10 février 2018

ARDUINO PRO MINI & basse consommation





ARDUINO PRO MINI & basse consommation


1. Présentation

L'ARDUINO PRO MINI est une carte équipée d'un processeur ATMEGA 328. On peut trouver des versions 16MHz et 8MHz. Nous nous intéressons ici à la version 8MHz que l'on peut alimenter sous 3.3V et même un peu en dessous, environ 2.7V.
La tension mini ne devra pas descendre en dessous de 3V, ce qui correspond à la tension minimale de décharge d'une batterie NI-MH 3.6V ou LI-ION 3.7V.

L'ARDUINO PRO MINI a la particularité de ne pas posséder de convertisseur USB / série. La consommation s'en trouve diminuée d'environ 10mA.

Il ne possède pas non plus de sortie 3.3V. Sur les autres cartes ARDUINO NANO, UNO, etc. cette sortie est fournie par le convertisseur USB / série.

Malgré le fait que l'on puisse obtenir des résultats plus intéressants avec des processeurs du type STM32 L0, l'ARDUINO PRO MINI n'en reste pas moins une carte très intéressante pour réaliser des capteurs connectés alimentés sur piles ou batterie :
  • température / hygrométrie
  • passage
  • luminosité
  • etc.

2. La basse consommation

Sur le schéma de l'ARDUINO MINI, on peut constater que l'on peut alimenter celui-ci par la broche VCC. La sortie du régulateur U2 se retrouve donc sous tension et consomme légèrement (70µA).
D'autre part la diode LED1 est alimentée également et consomme 180µA si elle est polarisée par une résistance de 10KΩ ou 380µA si elle est polarisée par une résistance de 4.7KΩ.
Il vous faudra donc effectuer deux petites opérations de chirurgie pour obtenir une consommation compatible avec une alimentation sur batteries :
  • supprimer la diode LED
  • supprimer le régulateur 5V
Sur l'image ci-dessous, les deux composants à dessouder sont marqués d'un point rouge.
On peut également se contenter de dessouder uniquement la patte de sortie du régulateur et de la lever.

Le sketch utilisé pour passer la carte en mode sommeil est celui-ci :

#include <LowPower.h>

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
}

La librairie utilisée est celle-ci :

https://github.com/rocketscream/Low-Power

Après cela, votre PRO MINI 8MHz en mode veille ne consommera plus que 1.5µA !!!

Une carte 16MHz consommera 3µA.


Certaines cartes possèdent un strap permettant de désolidariser la partie régulateur + LED.
Dans ce cas, on peut se contenter de couper ce strap.



3. La batterie

Généralement les batteries NI-MH ont une tension nominale de 3.6V, plus généralement 4V à pleine charge. Les batteries LI-ION ont une tension légèrement supérieures : 3.7V et 4.2V à pleine charge.

Voici un modèle que j'utilise couramment :


https://www.tme.eu/fr/details/accu-600_3ni-mh_c/batteries/cellevia-batteries/


Si vous utilisez des composants 3.3V, par exemple un module NRF24L01, celui-ci ne supportera pas cette tension, surtout si la batterie est à pleine charge, à moins de l'alimenter séparément à l'aide d'un régulateur 3.3V.

4. IDE ARDUINO

Dans votre IDE (arduino-cc 1.6.9 par exemple), dans le menu "Outils/Type de Carte" choisir "Arduino Pro or Pro Mini". Dans le menu "Outils/Processeur" choisir "ATmega328 (3.3V, 8MHz)".

5. Chargement

On peut charger le code dans l'ARDUINO PRO MINI de deux façons :
  • convertisseur USB / série
  • programmateur 
 

5.1. Chargement à l'aide d'un convertisseur USB / série

Pour charger le code dans l'ARDUINO, vous devrez utiliser un convertisseur USB / série 3.3V connecté sur les broches de l'ARDUINO réservées à cet usage.
Toutes les explications sont ICI.

Je déconseille totalement les convertisseurs dépourvus de broche DTR ou RTS, comme la plupart des modèles équipés de CH340.

Pour ma part j'utilise un cable FTDI TTL-232R-3V3 :


Le câblage à utiliser pour le TTL-232R-3V3 est celui-ci :
  • RTS (vert) sur la pin GRN ou DTR de l'ARDUINO
  • RXD (jaune) sur la pin TX de l'ARDUINO
  • TXD (orange) sur la pin RX de l'ARDUINO
  • GND (noir) sur la pin GND de l'ARDUINO
Le VCC - fil rouge - du convertisseur n'est pas connecté car inutile et dangereux. Le 3.3V du convertisseur se retrouverait en conflit avec le 3.7V de la batterie. Pendant le chargement l'ARDUINO doit être alimenté par la batterie ou toute autre source d'alimentation 3.3V à 3.7V.

Il est également possible de trouver des convertisseurs made in China, très bon marché, acceptant les deux tensions :
https://fr.aliexpress.com/item/FT232RL-FTDI-BASIC-USB-vers-s-rie-pour-pro-mini-t-l-charger-c-ble-USB/32831265899.html?spm=a2g0w.search0104.3.1.46cb37af6VFhmn&ws_ab_test=searchweb0_0%2Csearchweb201602_2_10152_10151_10065_10344_10068_10342_10343_10340_10341_10084_10083_10618_10305_10304_10307_10306_10302_5711211_5722315_10313_10059_10184_10534_100031_10629_10103_10626_10625_10624_10623_10622_10621_10620_10142%2Csearchweb201603_1%2CppcSwitch_5&algo_expid=9ddc916b-fb91-4a80-8bdc-2176cb1f6e02-0&algo_pvid=9ddc916b-fb91-4a80-8bdc-2176cb1f6e02&priceBeautifyAB=0
Convertisseur 5V 3.3V avec inverseur 5V / 3.3V
Convertisseur 5V 3.3V avec cavalier 5V / 3.3V

Plutôt que de relier le convertisseur à la PRO MINI avec des fils DUPONT je conseille de fabriquer un câble. Celui-ci est équipé de deux connecteurs DUPONT 6 broches femelle :



Le brochage de cette PRO MINI est de haut en bas : GND GND VCC RX TX DTR.
Sur d'autres cartes il est plutôt GRN TX RX VCC GND BLK.
Dans les deux cas le câble est utilisable : il suffit de le retourner.

Il existe également des clones de câbles FTDI TTL-232R-3V3 :
Clone TTL-232R

Les fils peuvent être dessertis du connecteur et replacés dans le même ordre que les broches de la PRO MINI. De préférence, acheter un câble dont le brochage est documenté sur le site d'achat. Ce n'est pas toujours le cas.

Si vous utilisez un convertisseur possédant une pin DTR - C'est le cas de la majeure partie des modèles chinois que l'on peut trouver sur AMAZON ou ALIEXPRESS - on peut l'utiliser en lieu et place du RTS :
  • DTR sur la pin GRN ou DTR de l'ARDUINO
  • RX  sur la pin TX de l'ARDUINO
  • TX sur la pin RX de l'ARDUINO
  • GND sur la pin GND de l'ARDUINO
Pour résumer, le convertisseur doit posséder une pin DTR ou RTS à connecter sur la pin GRN ou DTR de la MINI. Cette pin provoque un reset de la MINI au début du téléchargement.
Si vous utilisez seulement RX TX et masse, il vous faudra presser le bouton RESET de la MINI après la compilation, juste avant le téléchargement. Pas très pratique, mais ça marche.

SPARKFUN propose également un convertisseur directement enfichable sur l'ARDUINO MINI :
https://learn.sparkfun.com/tutorials/using-the-arduino-pro-mini-33v

Comme vu plus haut, pendant le chargement, l'ARDUINO MINI peut être alimenté par la batterie ou toute autre source d'alimentation 3.3V à 3.7V.
Mais en cours de développement il peut s'avérer assez pratique d'alimenter l'ARDUINO MINI par le convertisseur USB / série, car vous n'avez peut-être pas de batterie ou d'alimentation sous la main.
Dans ce cas, vous pouvez connecter le VCC du convertisseur USB / série sur la pin VCC de l'ARDUINO MINI. La batterie devra cependant être déconnectée.

Ce câble comporte le fil d'alimentation :


Si vous n'avez rien d'autre sous la main vous pouvez utiliser un convertisseur USB / série 5V. L'ARDUINO MINI acceptera cette tension sans dommage.
Par contre si vous avez dans votre montage des composants 3.3V, par exemple un module NRF24L01, ceux-ci ne supporteront pas cette tension. Vous devrez intercaler entre le 5V et la broche d'alimentation de ces composants un régulateur 3.3V.

Pour résumer, soit vous alimentez la MINI par le VCC du convertisseur, soit vous alimentez par la batterie, mais pas les deux.

5.2. Chargement à l'aide d'un programmateur

On peut également utiliser un programmateur du type USBASP, mais il faudra prévoir un connecteur ICSP sur le montage.

6. ARDUINO NANO

Comparativement à une PRO MINI, une carte ARDUINO NANO possède un convertisseur USB / série FT232RL ou GH340G et un régulateur 5V AMS1117.
On peut identifier sur cette carte trois sources de consommation de courant :
  • la LED PWR : 5mA
  • le CH340G : 80 µA non actif
  • le régulateur 5V : 5mA typiques
Essayons de mesurer le courant consommé après avoir chargé le sketch du paragraphe 2.
Une fois le sketch chargé, la carte est alimentée en 5V via la pin 5V bien entendu.
  • carte d'origine : 8.8mA
  • sans la LED : 3.8mA
  • sans la LED et sans le régulateur : 90µA
Il est possible d'obtenir avec une NANO modifiée une consommation en veille 100 fois inférieure à celle de la carte d'origine, sans toutefois atteindre celle d'une PRO MINI. 

7. Autonomie

Parlons autonomie. Quelle batterie choisir en fonction de la consommation totale d'un montage ?
Partons d'un exemple concret : ce thermomètre sur batterie.
Sa consommation est de 20µA en veille. Il utilise un NRF24L01 pour transmettre la température à un serveur DOMOTICZ. Pendant l'émission, qui a lieu toutes les 15 minutes, la consommation est de 8mA pendant 30ms, avec des pointes à 30mA.
Prenons une moyenne de 10mA.

Fixons-nous un objectif d'autonomie : 365 jours.

Consommation en mode veille : 20µAH x 24 x 365 = 175mAH

L'émission a lieu 4 fois par heure pendant 30ms, donc 120ms au total, ce qui représente 1/500è d'heure.
La consommation en mode éveillé est donc de 10mAH / 500 = 20µAH, égale à la consommation en mode veille.

Consommation en mode éveillé : 20µAH x 24 x 365 = 175mAH

Nous avons donc une consommation de 350mAH au total, donc il nous faudra une batterie de 350mAH pour que le montage aie une autonomie d'un an.

Ce thermomètre est en service depuis le 10 décembre 2017.
La capacité de la batterie est remontée périodiquement au serveur DOMOTICZ.
Celui-ci indique : 81%.
La batterie utilisée est une LITHIUM-ION au format 16340 (16mm * 340), dont j'ai mesuré la capacité avec un courant de décharge de 330mA : 225mAH.
Il y a fort à parier que sa capacité avec un courant de décharge beaucoup plus faible soit bien supérieure, car sinon elle serait déjà déchargée.

Quelle batterie faudrait-il pour alimenter le même montage avec une ARDUINO NANO modifiée ?
On peut considérer que le courant en mode éveillé sera le même qu'avec la PRO MINI.

Consommation en mode veille : 80µAH x 24 x 365 = 700mAH
Consommation en mode éveillé : 20µAH x 24 x 365 = 175mAH

Il nous faudra une batterie de 875mAH pour que le montage aie une autonomie d'un an. Une LITHIUM-ION au format 18650 de 1000mAH devrait suffire.

8. Sommeil de longue durée

Le processeur de la PRO MINI ne sait pas dormir plus de 8s. Il vous suffit de relancer la mise en sommeil en boucle :


#include <LowPower.h>

void setup() {
  pinMode(13, OUTPUT);
  Serial.begin(115200);
}

void lowPowerSleep(int minutes)
{
  int seconds = minutes * 60;
  int sleeps = seconds / 8;
  for (int i = 0 ; i < sleeps ; i++) {
    LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
  }
}

void loop() {
  lowPowerSleep(15);
  Serial.println("HELLO");
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
}


9. Références

DOMOTICZ : https://domoticz.com/
MYSENSORS : https://www.mysensors.org/
ARDUINO PRO MINI : https://www.arduino.cc/en/uploads/Main/Arduino-Pro-Mini-schematic.pdf
ARDUINO PRO MINI : https://learn.sparkfun.com/tutorials/using-the-arduino-pro-mini-33v
Régulateurs LDO : https:/riton-duino.blogspot.com/2018/11/les-regulateurs-ldo.html

La librairie LowPower : https://github.com/rocketscream/Low-Power


10. Mises à jour

27/10/2018 : ajout du paragraphe 6. ARDUINO NANO
28/10/2018 : ajout du paragraphe 7. Autonomie
25/10/2018 :  ajout du paragraphe 8. Sommeil de longue durée
29/08/2019 : 5.2. Chargement à l'aide d'un programmateur

30 commentaires:

  1. Bonjour
    Très interessant votre article.
    J'ai eu une question : vous dites que votre module (arduino+ nrf24L01) émet pdt 30ms toutes les 15mins mais je crois que le temps d'attente pour la conversion en température d'un DS18B20 est de 175ms avec la résolution la plus basse. Est ce que vous mettez votre arduino en "veille" pdt cette conversion ?
    Merci

    RépondreSupprimer
  2. oui, absolument.
    Le code est inspiré de ceci :
    https://www.mysensors.org/build/temp

    RépondreSupprimer
  3. petite précision, la pin RAW permet de l'alimenter avec du 6 à 12V et dans ce cas il ressort 3.3V sur sa PIN VCC, ça permet par exemple une alim via 6V alternatif prise téléinfo Linky (une fois redressé) et ressortir du 3.3V pour alim nRF24L01 par exemple mais pas beaucoup plus car alim Linky = 130mW max

    RépondreSupprimer
  4. 6V alternatifs donneront environ 7.3V continus, si l'on soustrait la perte dans le redresseur.
    Si l'on considère qu'une PRO MINI consomme 5.7mA et qu'un NRF24L01 consomme 12mA maximum :

    P = 7.3 * (5.7 + 12) = 129mW.
    C'est un peu juste pour un montage constamment en mode éveillé, mais pourrait se concevoir en mode veille avec réveil périodique.

    Mais le but de cet article est surtout de parler de l'ARDUINO PRO MINI en mode veille et alimenté par batterie.

    RépondreSupprimer
  5. Ah ok, mais bon en tout cas mon montage marche bien 24/24 7/7n, par contre j'envisage une version wifi mais là il faut que j'ajoute une batterie qui serait rechargée par l'alim du Linky pour permettre un réveil/lecture trame complète Linky/envoi vers serveur local ou dans le cloud tout en prenant en compte les lenteurs éventuelles comme par exemple le serveur qui est injoignable temporairement, il faudra donc définir combien de temps "raisonnable" on accorde au TimeOut avant d'échouer et retourner en veille car malheureusement le WiFi ça consomme pas mal donc le choix d'un module wwifi "économe" est important, j'avais prévu un ESP8266 "tout intégré" mais peut-être qu'un Arduino (ou STM32) + module wifi Ralink moins consommateur serait mieux.

    RépondreSupprimer
  6. Un ESP8266, à partir du moment où il est capable d'établir une connexion WIFI de manière fiable et répétitive au démarrage, est une bonne solution. Le problème est qu'il va consommer plus de 400mA pendant environ 50ms, à chaque réveil. Il ne faut pas le réveiller trop souvent ...

    Pour la recharge un TP4056 pourrait aider.
    https://riton-duino.blogspot.com/2019/02/alimenter-un-arduino-sur-pile-ou.html
    Voir 8.3.1. Le TP4056 en test

    Personnellement pour avoir essayé le NRF24L01 et l'ESP8266 en domotique, le NRF24L01 reste mon préféré : basse consommation et excellente réactivité.

    RépondreSupprimer
  7. Bonjour,
    J'ai découvert ton site, et je suis très agréablement surpris.
    Contrairement à ceux que j'ai vu ces dernières années, tu as le souci du détail.
    C'est souvent ce qui manque.
    Concernant le paragraphe "chargement", j'ajouterais la possibilité d'utiliser un programmateur. Les avantages seraient:
    - on a plus de place dans la mémoire flash
    - cette solution marche même si on a un problème dans la chaine "reset". C'est du vécu
    - si les lignes TX et RX sont utilisées pour communiquer avec un autre composant; il n'est pas nécessaire de les débrancher (avec le risque d'oublier de les rebrancher). Là aussi, c'est du vécu.
    - le fait de posséder un programmateur permet de réinstaller le bootloader en cas de problème. Ça permet également de se faire ses propres montages à base d'ATMega328 nu. Je dis ça car tes articles ne s'adressent pas qu'à des débutants.
    - le programme (sketch) démarre plus rapidement.

    Bravo pour tes articles, je suis en train de les passer en revue.
    J'ai déjà commencé à appliquer certaines choses.
    J'ai même ressorti mes vieux MCP1700.

    RépondreSupprimer
  8. Super l'astuce du strap!
    J'ai toujours dessoudé le régulateur et la led.
    J'ai même abimé une carte.
    L'avantage c'est que c'est facilement réversible.

    On apprend vraiment plein de choses ici.

    RépondreSupprimer
  9. "Concernant le paragraphe "chargement", j'ajouterais la possibilité d'utiliser un programmateur."
    Oui bien sûr. Je possède un USBasp, bien pratique.
    Cette information peut facilement être ajoutée à cette article.

    Au sujet du strap, certaines cartes n'en possèdent pas.

    RépondreSupprimer
  10. Avant j'alimentais mon Arduino Pro Mini par "Raw" et "GND" mais depuis que j'ai désolidarisé le régulateur (enfin complètement viré) je suis obligé de l'alimenté par "vcc" et un autre "gnd", utilisés pour le protocole FTDI. C'est pas grave du tout mais c'est bizarre.

    Bravo pour tes articles, ils m'ont beaucoup servi et sont clairs.

    RépondreSupprimer
    Réponses
    1. Normal ce n'est pas bizarre. Le régulateur est alimenté par la broche RAW :
      https://www.arduino.cc/en/uploads/Main/Arduino-Pro-Mini-schematic.pdf
      Si c'est une PRO MINI 8MHz on peut alimenter en 3.3V ou 5V par VCC.
      Si c'est une PRO MINI 16MHz on peut alimenter en 5V par VCC.

      Supprimer
  11. Bonjour,
    Tout d'abord je vous remercie pour vos articles de qualité!
    Je suis entrain de faire un montage alimenté par une batterie 12V, à votre avis il est préférable d'alimenter l'Arduino PRO Mini directement en 12V sur la broche RAW ou passer par un régulateur externe et désactiver celui de l’Arduino?

    RépondreSupprimer
    Réponses
    1. Normalement le régulateur de la carte est un MIC5205 qui supporte 20V. Il consomme un peu de courant pour ses propres besoins (au moins 80µA).
      Personnellement pour un montage très basse consommation je préfère le HT7533-1 (100mA) ou le HT7333-1 (250mA), qui consomment respectivement 2.5µA et 4µA et supportent 24V.
      Il faudra bien entendu dessouder la sortie du MIC5205.

      Supprimer
  12. Bonjour Henri,

    Tout d'abord, merci pour ton blog qui est une mine d'informations ! Tes articles sont super intéressants et super instructifs !
    Je "bosse" depuis plusieurs semaines sur l'automatisation de la porte de mon poulailler, mais je pense avoir des soucis dus à la fonction sleep de l'atmega328.
    Pour la partie mécanique, j'ai fait une version personnelle (avec un verrouillage automatique anti prédateur, si ça t'intéresse, je t'en dirais plus) et pour le soft je suis partie du travail de Benjamin EFFANTIN (Nimajine) qui a fait un programme en suivant ton travail.
    Le souci est que je n'arrive pas à faire fonctionner correctement son programme. Il me semble que lorsque je suis en mode test (avec le serial et sans utiliser le sleep) cela fonctionne, mais des que je veux activer le programme en version prod, la carte plante ?
    Je n'arrive pas à avoir de nouvelles de Nimajine et j'ai beau chercher, je ne trouve pas l'erreur. Pourrais-tu jeter un coup d'oeil a mon prog pour savoir où je me trompe ?
    Je te remercie

    Nico

    RépondreSupprimer
    Réponses
    1. Il faudrait avoir un lien sur le prog en question.

      Supprimer
    2. Inscris-toi sur https://forum.arduino.cc/index.php?board=33.0
      Ce sera plus simple pour partager du code, des images.
      Et je ne serai pas tout seul à répondre.

      Supprimer
  13. Merci!

    En fait, j'y suis déjà mais je n’ai pas eu de réponse.

    https://forum.arduino.cc/index.php?topic=675003.msg4863800#msg4863800

    Merci

    RépondreSupprimer
    Réponses
    1. Je n'avais pas fait la relation entre nimaj et Benjamin EFFANTIN. En plus il s'est désinscrit du forum. Pas très sérieux tout ça.
      J'ai répondu comme je peux.

      Supprimer
  14. Merci de ta réponse
    J'ai essayé de le contacter sur le forum Arduino ainsi que thingiverse mais pas de réponse de sa part.
    Je vais essayer en rajoutant du serial.print pour voir où sa plante.
    Une idée sinon pour la sortie 'conso' du pont en h?
    Merci

    RépondreSupprimer
  15. Merci pour ce Blog riche ne information.
    Je cherche a faire un système d'alarme sur batterie, je préfère qu'il soit réactif, et il doit enclencher une alarme sonore, Arduino Pro Mini ou autre chose ?
    L'arduino pro mini peut elle sortir de veille si un détecteur s'enclenche ?
    N'était ce pas la STM32 qui sort de veuille quand un sensor réagit ?

    RépondreSupprimer
    Réponses
    1. La PRO MINI dispose des mêmes interruptions que les autres ARDUINO. Broches 2 et 3.
      Ici un exemple avec détecteur PIR :
      https://riton-duino.blogspot.com/2018/04/un-detecteur-de-mouvement-mysensors-sur.html

      Supprimer
    2. Un PIR miniature MH-SR602 fonctionnera directement sous 3.3V

      Supprimer
  16. Merci pour les infos, je me perds sur ton blog, il y avait des comparaisons Arduino Pro Mini et STM32...
    Dans quel cas STM32 est plus intéressant que Pro Mini ?

    RépondreSupprimer
    Réponses
    1. On ne compare pas un ATMEGA328 et un STM32, qui est un processeur 32bits. On utilise un STM32 lorsque l'on a besoin de puissance.
      Sinon, il y a aussi les STM8, série qui comporte aussi des modèles très basse consommation.

      Supprimer
  17. Bonjour, peux t on réveiller une Arduino Pro-mini en veuille avec une PhotoResistance ou un Capteur de Température ? C'est pour être sûr, mais je ne crois pas.

    RépondreSupprimer
  18. Bonjour,
    Merci pour ce tutoriel.
    Petite question sur la librairie LowPower à utiliser, est-ce celle là : https://github.com/rocketscream/Low-Power
    Merci.

    RépondreSupprimer
  19. Hi,
    GOOD TUTO
    I am building a project that need radio transmission

    On one side there is a esp32 with radio reception. This esp32 will manage actuator 24V DC
    On the other side, i need to build a hand remote control that will send orders to the esp32 through radio transmission

    My questions:
    what is the best technology in terms of radios device for my project ?
    This technology should allow to choose a channel (same for the emitter "remote control" and on the receipter "esp32")
    if possible i would like to transmit encrypted radio message.

    I saw multiple video on radio device that can be plug on the esp32 like nRF24L01, HC12 or nRF905 : is it suitable for my project?
    Do you know if a company that can build the remote control ? (plastic box, electronic device, battery) ?
    What kind of control for the remote pro mini or nano ?

    Thanks in advance

    RépondreSupprimer
    Réponses
    1. nRF24L01, certainely. I never tested the HC12 & NRF905.
      For the remote, PRO MINI exclusively, the consumption of the NANO is too high.

      Supprimer