🛠 Low-power : power-down, watchdog et budget batterie

Arduino Pro Mini · avance · Schéma : IMG-pro-mini-avance-9-promini-low-power-batterie.svg — Arduino Pro Mini sur LiPo avec bouton de réveil sur INT0 (broche 2), cycle de réveil watchdog ~8 s en mode power-down de l'ATmega328P, micro-ampèremètre en série

Objectifs

La vocation de la Pro Mini : l'installation semi-permanente sur pile (« intended for semi-permanent installation in objects or exhibitions »). On met l'ATmega328P en mode power-down (le plus profond de ses 5 modes d'économie d'énergie), on le réveille toutes les ~8 s par le watchdog indépendant, et on réveille aussi sur appui bouton via l'interruption externe INT0 (broche 2). On aborde le budget batterie : pas de puce USB sur la carte, donc pas de pont FTDI à nourrir — c'est tout l'intérêt du format face au Nano pour le même ATmega328P.

Matériel

Code complet

// Sommeil power-down + réveil watchdog ~8 s + bouton INT0 (broche 2)
#include <avr/sleep.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>

ISR(WDT_vect) { /* réveil : retour naturel en loop */ }
ISR(INT0_vect) { /* réveil sur bouton, même chemin */ }

void setup {
  pinMode(13, OUTPUT);
  pinMode(2, INPUT_PULLUP);              // INT0 : réveil sur appui
  MCUSR &= ~(1 << WDRF);
  wdt_reset;
  WDTCSR |= (1 << WDCE) | (1 << WDE);    // acces config watchdog
  WDTCSR = (1 << WDIE) | (1 << WDP2) | (1 << WDP1);  // IT, ~8 s
  EICRA = (1 << ISC01);                  // INT0 sur front descendant
  EIMSK = (1 << INT0);
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // ADC et BOD coupes dans ce mode
  sei;
}

void loop {
  digitalWrite(13, HIGH);                // pouls de mesure
  delay(50);
  digitalWrite(13, LOW);
  // ... ici : lecture capteur, mesure, envoi radio ...
  wdt_reset;
  WDTCSR |= (1 << WDCE) | (1 << WDE);
  WDTCSR = (1 << WDIE) | (1 << WDP2) | (1 << WDP1);  // rearme
  sleep_enable;
  sleep_cpu;                           // power-down jusqu'à WDT ou INT0
  sleep_disable;
}

Vérification attendue

Le micro-ampèremètre montre des pics courts (l'impulsion LED de 50 ms) séparés de plateaux très bas : le MCU seul tombe de plusieurs milliampères actifs à quelques microampères en power-down. La LED clignote toutes les ~8 s, preuve que le watchdog réveille bien le sommeil ; un appui sur le bouton réveille immédiatement le cycle. Retirer le code de sommeil fait immédiatement remonter le plateau de consommation.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels