🛠 Sommeil profond et réveil par watchdog
Objectifs
Réduire la consommation de la Nano Every pour un capteur sur pile : endormir le cœur en SLEEP_MODE_PWR_DOWN et le réveiller périodiquement grâce au watchdog de l'ATmega4809. Sur cette famille, le watchdog déclenche par défaut une réinitialisation : on exploite ce reset comme une alarme, en distinguant un redémarrage sur watchdog d'un démarrage normal.
Matériel
- 1 × Arduino Nano Every
- Alimentation externe (pile/LiPo via VIN) pour mesurer le vrai gain — le module pont USB reste consommé tant que l'USB est branché
- Optionnel : microampèremètre ou module de mesure de consommation
Code complet
// Sommeil profond, réveil ~1 s via watchdog (reset comme alarme)
#include <avr/sleep.h>
#include <avr/wdt.h>
void setup {
pinMode(LED_BUILTIN, OUTPUT);
wdt_reset;
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // mode le plus profond
sleep_disable; // armement a la volee
wdt_enable(WDTO_1S); // delai 1 s
}
void loop {
digitalToggle(LED_BUILTIN); // signal d'activite brève
delay(50);
wdt_reset; // eviter le reset immediat
sleep_enable;
sleep_cpu; // dort jusqu'au reset WDT
// A ce point : le watchdog a réinitialise la carte, setup tourne
// a nouveau avant de revenir ici.
}
Vérification attendue
La LED 13 clignote brièvement chaque seconde. Entre deux clignotements, le cœur est éteint : en alimentation sur pile et USB débranché, un microampèremètre doit montrer une moyenne très inférieure au mode actif (le gain exact dépend du mode et des périphériques restés actifs).
Erreurs fréquentes
- Mesurer le gain USB branché : le module pont série et son régulateur consomment en permanence ; sans alimentation sur VIN et câble débranché, la mesure ne veut rien dire.
- Oublier
wdt_resetpériodique : le watchdog reset la carte en pleine activité au lieu de servir d'horloge. - Confondre les modèles : sur le 328P on sort du sommeil par interruption watchdog ; sur la famille 4809 le comportement par défaut est le reset — structurez le code en « tache courte → sommeil ».
- Attendre que
milliscontinue : pendant le sommeil profond, le comptage Arduino est arrêté ; après réveil, repartez de l'horloge RTC externe si vous avez besoin d'heures exactes. - Périphériques laissés alimentés (LED clignotante d'un module, capteur en mode chauffage) : ils ruinent le budget plus vite que le cœur.
- En cas de reset inexpliqué, vérifiez le registre de causes de reset avant de suspecter le code.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
multi-serie.inoArduinoadc-filtre.inoArduinointerrupt-bouton.inoArduinonvm-consignes.inoArduinosommeil-every.inoArduinowatchdog-secours.inoArduino