sommeil-batterie.ino
En modo power-down el 328P consume unos microamperios frente a varios miliamperios despierto: la clave de los proyectos cosidos o a pila. Pulsar el pin 2 (INT0) despierta el microcontrolador.
Hardware necesario
Un Arduino Duemilanove (ATmega168 o 328P, 16 MHz, 5 V) con su cable mini-USB-B; el puerto serie aparece tras instalar el driver FTDI. 1 botón para despertar; alimentación a pilas.
Cableado
Botón entre el pin 2 y GND (pull-up interna).
Funcionamiento
set_sleep_mode apaga todo salvo la interrupción externa; el despertar ejecuta la ISR y reanuda tras sleep_cpu. Quite el pull-up si despierta un sensor. En el Arduino IDE, elija « Arduino Duemilanove » (o « Diecimila » para placas muy antiguas) y el puerto FTDI, y pulse Subir. El ATmega168 solo deja 14 KB para el sketch.
Para ir más lejos
Despierte también periódicamente con el watchdog (wdt_enable) para un registrador autónomo.
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 !"));
}