sommeil-batterie.ino

Arduino Duemilanove — Fiche carte · Fichier : sommeil-batterie.ino · Langage : Arduino · Usage : Endormir la carte entre deux mesures pour économiser la batterie

En mode power-down, le 328P consomme quelques microampères contre plusieurs milliampères éveillé — la clé des projets cousus ou sur pile. Un appui sur le broche 2 (INT0) réveille le microcontrôleur.

Matériel requis

Une Arduino Duemilanove (ATmega168 ou 328P, 16 MHz, 5 V) avec son câble mini-USB-B ; le port série apparaît après installation du driver FTDI. 1 bouton pour le réveil ; alimentation sur piles.

Branchement

Bouton entre la broche 2 et GND (la résistance de tirage est interne).

Fonctionnement

set_sleep_mode coupe tout sauf l'interruption externe ; le réveil exécute l'ISR puis reprend après sleep_cpu. Retirer le pull-up si le réveil est capteur. Dans l'Arduino IDE, choisissez « Arduino Duemilanove » (ou « Diecimila » pour les très vieilles cartes) et le port FTDI, puis Téléverser. L'ATmega168 n'a que 14 Ko pour le sketch.

Pour aller plus loin

Réveillez-vous aussi périodiquement avec le watchdog (wdt_enable) pour un enregistreur autonome.

sommeil-batterie.ino

// Sommeil profond (mode power-down) reveille par interruption externe.
#include <avr/sleep.h>
#include <avr/wdt.h>

const int REVEIL = 2; // interruption externe INT0

void reveilISR() { wdt_reset(); }

void setup() {
  Serial.begin(9600);
  pinMode(REVEIL, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(REVEIL), reveilISR, LOW);
}

void loop() {
  int mesure = analogRead(A0);
  Serial.print(F("Mesure: "));
  Serial.println(mesure);
  delay(50);          // laisse partir la ligne serie
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  sleep_cpu();        // ~microampere ; reveil sur appui (broche 2 LOW)
  sleep_disable();
  Serial.println(F("Reveil !"));
}

← Retour à la fiche