Solutions d'alimentation optimisées pour projets Arduino
Composants et fournitures
| Composant | Quantité | Notes |
|---|---|---|
| Shield Adafruit PowerBoost Charger | 1 | |
| Batterie LiPo rechargeable (générique) | 1 | 3,7 - 4,2 V |
| Arduino UNO | 1 |
À propos de ce projet
Les projets à base de cartes Arduino n'ont généralement pas besoin de gestion d'alimentation sophistiquée : on connecte une source, la carte démarre, fait son travail, s'arrête quand l'alimentation est coupée. Contrairement au Raspberry Pi, pas de risque de corrompre une carte SD.
Mais pour certaines applications, on veut surveiller l'état d'alimentation et réagir de façon gérée, au lieu de simplement s'éteindre brutalement.
Exemple : un capteur distant qui enregistre la température. Si la batterie s'épuise sans surveillance, les logs s'arrêtent net. Impossible de savoir si c'est la batterie, un bug logiciel ou une panne matérielle.
Pour un système portable, savoir la charge restante et quand recharger est précieux.
Ce projet présente plusieurs approches de gestion d'alimentation Arduino : circuits, logiciels et descriptions, du simple interrupteur marche/arrêt jusqu'à un système d'enregistrement de données incluant l'état de la batterie, destiné à la surveillance d'environnement sans surveillance.
Vous pouvez choisir les sous-systèmes qui vous intéressent. Je les décris par complexité croissante, mais vous pouvez commenter les parties inutiles.
Le projet s'inspire des projets LiPoPi et Pi Power, offrant des fonctionnalités similaires pour Raspberry Pi.
Vue d'ensemble
Le système fournit plusieurs fonctions :
- Marche/Arrêt par bouton poussoir
- Surveillance de la tension batterie via l'ADC de l'Arduino
- Arrêt du système sur tension faible
- Enregistrement de la tension batterie et d'un message d'arrêt sur carte SD
- Affichage de l'état batterie par LED Rouge/Verte
Le fil conducteur est la combinaison du PowerBoost Adafruit et de l'Arduino. Chaque fonction ajoute deux fonctions personnalisées, arduinoPowerSetup() et arduinoPowerMonitor(), aux setup() et loop() standards.
Shield Adafruit PowerBoost
Le système utilise une batterie LiPo rechargeable et le shield Adafruit PowerBoost Charger, qui charge la batterie et booste sa sortie à 5V.
Adafruit propose trois versions : deux cartes breakout et un shield Arduino. La plupart du travail ici utilise le shield, mais j'évoquerai les breakout plus loin.
Lisez cette page pour configurer le PowerBoost Shield. Pour préparer le kit :
- Soudez les connecteurs empilables (stacking headers)
- Ne soudez pas l'interrupteur fourni
- Soudez un fil (10 cm, 22 AWG cœur solide) sur la broche Enable
- Reliez les pastilles pour la broche analogique A0 au dos du shield
Circuit Marche/Arrêt par bouton poussoir
Ce circuit de base utilise l'appui sur un bouton poussoir momentané pour allumer le système et, une fois en marche, pour l'éteindre – comme un téléphone.
Sur système éteint, appui long → PowerBoost s'active → alimente l'Arduino → démarrage et exécution du programme.
Nouvel appui (court) → l'Arduino désactive le PowerBoost → plus d'alimentation → extinction.
Détails sur cette page. Schéma :

Note : Ce circuit n'est pas obligatoire pour le reste du projet. Vous pouvez utiliser l'interrupteur optionnel du PowerBoost. La différence : l'interrupteur basique coupe net sans possibilité d'enregistrer un message de log.
Surveiller la tension de la batterie
L'Arduino a 6 convertisseurs analogique-numérique (ADC) sur les pins A0-A5, facilitant la mesure de tension. Le PowerBoost shield permet de connecter la tension batterie (Vbat) à l'un d'eux en reliant les pastilles de soudure appropriées (voir page PowerBoost Shield). Ici, je l'ai relié à A0.
La tension LiPo varie de ~4,25 V (charge complète) à ~3,7 V (déchargée). L'ADC convertit 0-5 V en entier 0-1023, lu par analogRead().
Extrait de code pour la lecture et l'estimation de l'état de charge :
float maxVoltage = 4.25;
float minVoltage = 3.75;
arduinoPowerVoltage = float(analogRead(arduinoPowerVoltagePin)) / 1024.0 * 5.0;
float fractionalVoltage = (arduinoPowerVoltage - minVoltage) / (maxVoltage - minVoltage);
La décharge LiPo n'est pas parfaitement linéaire, mais assez proche pour estimer l'autonomie restante via la tension fractionnaire.
Pour communiquer cela à l'utilisateur, on pourrait utiliser un afficheur alphanumérique, ou logger sur carte SD (section suivante). Mais c'est souvent excessif.
Approche simple : une LED RGB changeant de couleur selon le niveau :
- Vert : > 50 %
- Jaune : 20-50 %
- Rouge : < 20 % → recharger
Ajoutez une LED RGB à anode commune et deux résistances 1 kΩ au circuit, et un peu de code dans arduinoPowerMonitor().

NOTE : En pratique, j'alimente mes LED sur le 3,3 V.
NOTE : Il peut y avoir une « oscillation » significative de la tension mesurée (raisons inconnues). Si la batterie est proche d'un seuil de changement de couleur, la LED peut clignoter entre deux états – agaçant. Solution rapide : placer un condensateur 0,1 µF entre A0 et GND.

Ce montage sur breadboard ne montre ni la batterie ni l'Arduino. Le sketch arduino_2_voltage_led implémente Marche/Arrêt et affichage LED. Le code met la broche verte ou rouge à LOW pour allumer, HIGH pour éteindre.
NOTE : Vous pouvez vérifier les tensions mesurées / déboguer en décommentant les appels Serial et en ouvrant le Moniteur Série dans l'IDE. Vous verrez la tension réelle et fractionnaire. Le premier appel est souvent erroné.
Journalisation de la tension batterie sur carte SD
L'indicateur LED convient aux systèmes portables où l'on veut juste savoir quand recharger.
Mais pour un système autonome surveillant des capteurs, on veut enregistrer la tension batterie avec les données capteurs pour analyser la consommation dans le temps.
J'utilise le shield Adafruit Data Logging qui enregistre en format CSV sur carte SD avec horodatage. Le guide Adafruit explique les bibliothèques SD et RTC – à comprendre avant cette partie.
Le circuit est inchangé (garder la LED pour retour immédiat, mais optionnel).
Comme on loggue sur la carte, il est important d'enregistrer un message d'arrêt pour distinguer arrêt volontaire / erreur système.
De plus, en surveillant la tension, on peut détecter quand elle passe sous un seuil minimal et éteindre proprement le système, en logguant un message juste avant.
Le sketch est dans arduino_3_voltage_logging. Il inclut des routines utilitaires pour générer un timestamp formaté, et un hack pour faire clignoter la LED rouge si on oublie la carte SD (ce qui m'arrive souvent).
La pile complète (Arduino UNO, Data Logging Shield, PowerBoost Shield, breadboard) ressemble à ceci :

Données de tension
Voici un graphique de la tension batterie sur ~20 heures, montrant la baisse progressive. La courbe n'est pas parfaitement linéaire, mais assez proche pour estimer l'énergie restante.

L'ajout du condensateur 0,1 µF entre A0 et GND aide vraiment. La ligne violette montre l'impact du condensateur vs l'original en bleu.

Journalisation de données environnementales sur carte SD
Pour finir, une extension : un moniteur environnemental autonome pour mon jardin – température, humidité du sol, etc.
L'Arduino sera dans une boîte étanche laissée sans surveillance. Outre la batterie, je veux vérifier qu'aucune humidité n'entre et qu'aucune température extrême n'endommage le système. Le capteur DHT22 (température/humidité) est bon marché et facile – voir le tutoriel Adafruit.
Dans mon code, j'utilise la pin digitale 5 au lieu de la 2, car la 2 sert pour l'interruption du bouton d'arrêt.
Le code est dans arduino_4_voltage_temp_humidity_logging. Une fois validé sur breadboard, je l'ai câblé sur un shield Proto Adafruit. Le DHT22 est volumineux mais pas cher. Regardez d'autres breakout boards (Adafruit, Sparkfun) pour des alternatives.
Économie d'énergie dans les projets Arduino
La prochaine étape de mon projet est de réduire la consommation et d'étendre l'autonomie.
Mon point de départ est l'excellent tutoriel Adafruit sur le Low Power Datalogging de Tony DiCola.
Code
GitHub (projet principal)
https://github.com/craic/arduino_power
GitHub (LiPoPi - inspiration)
https://github.com/NeonHorizon/lipopi
GitHub (Pi Power - inspiration)
https://github.com/craic/pi_power
Processus de fabrication
- Mesurer la dissipation de puissance dans les résistances : expérience pratique avec la loi de Joule
- Sources d'alimentation : courant alternatif et continu expliqués
- Technologie des Bulldozers : Conception, Fabrication et Innovations Futures
- Piles : de la pile de Volta aux cellules lithium modernes
- Construire un Spybot Arduino piloté par Bluetooth
- FlickMote : Télécommande IR à gestes pour maison connectée
- TV-B-Gone DIY Arduino : Télécommande universelle pour toutes les TV
- L'énergie éolienne : transformer le mouvement de l'air en électricité propre
- Impact des réductions de subventions sur l'industrie des batteries de puissance en Chine