Comment fonctionne LowPower

Bonjour,
J'aimerai mettre en veille profonde mon Arduino Uno après qu'il est lu les données d'un capteur.
En cherchant un peux j'ai trouvé la librairie Low_Power.
En poursuivant les recherches j'ai trouvé divers infos et bout de code pas toujours compréhensible.
Certaine fois il y a une durée en millisecondes, d'autre tout un tas de variables.
Bref incompréhensible ...
Du coup j'ai tenté le coups en mettant a la fin de mon script

LowPower.deepSleep(900000);

Et là paf le chien : error The library is not compatible with AVR boards

Que faire ? Comment ça marche ? Quelle librairie utiliser ?
Pourtant mon sur le github de rocketscream il est noté que l'ATMega328P est compatible.

Merci pour vos retours

La librairie choisie est probablement la version pour processeurs SAMD.
Installe celle-ci : GitHub - rocketscream/Low-Power: Low Power Library for Arduino

Peut-être des choses intéressantes pour toi ici
Pour des explications sur les modes d'économie d'énergie, le reste du fil de discussion est très clair

Ok merci, j'avance dans la compréhension.
Donc 1ere chose j'ai confondu la librairie low power d'arduino avec celle de rocketscream, elles ont le même nom.
J'ai épluché le code de la librairie et heureusement qu'il était bien commenté, mais je n'arrive pas a choisir entre (idle, adcNoiseReduction, powerDown, powerSave, powerStandby, powerExtStandby).

1 - Quelle fonction choisir pour qu'il passe en sommeil et se réveil tout seul sans actions
2 - Est-il possible de passe une valeur "temps" plus grande que 8s car j'ai besoin d'un réveil toute les 15 minutes .

// Pour un maximum d'économie d'énergie
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);

Non, il faudra faire une boucle.

Et en utilisant un module RTC ?

Dans l'exemple que j'ai cité au #3, il y a justement un réveil toutes les 30 secondes. C'est le même principe, il suffit juste de changer la durée de la veille.

Il se réveille tout de même toutes les 8 secondes, on le voit à l'oscillo

En utilisant la sortie alarme en interruption je pense, encore jamais utilisé.

/*
 * Promini sans régulateur ni led power : 0.2 µA alimenté 5.3 V
 */
#include "LowPower.h"

const int wakeUpPin = 2;
const int ledPin = 13;

void wakeUp()
{
  // Just a handler for the pin interrupt.
}

void setup()
{
  pinMode(wakeUpPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(wakeUpPin), wakeUp, FALLING);
}

void loop()
{
  if (digitalRead(wakeUpPin, LOW) digitalWrite(ledPin, HIGH);
      else digitalWrite(ledPin, LOW);

        LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
  }

c'est normal avec ce type de réveil, mais s'il se réveille pour se rendormir aussitôt , l'impact sur la consommation d'énergie reste faible.... à comparer à celle d'une RTC ajoutée juste pour les reveils d'un Mega328 en deep-sleep

(ça me convient tout à fait pour plusieurs capteurs Sigfox ou LoraWAN avec des Pro MIcro 3V3 et une émission de donénes toutes les 30' )

J'ai un programme qui vérifie une entrée analogique à chaque réveil, ça met moins de 1 ms, il ne me semble pas avoir vu de différence avec une simple boucle ? C'est un oscillo
5 Mhz, on ne voit qu'une dent de scie.

on parle bien d'une boucle servant à enchaîner immédiatement n sommeils de 7 secondes avant de 'reveiller pour de bon le Mega 328 et lui faire faire quelquechose ?

Je n'ai pas dit le contraire. De toutes façons 8s est la limite du WatchDog.

La consommation pendant le très court temps de réveil pour enchaîner une nouvelle période de sommeil est ridicule.
Dans l'exemple que je donne au #3, Nick Gammon donne donne toutes les explications nécessaires et il y a un bilan de consommation.

Waking up and going back to sleep. This takes around 150 uS and consumes about 2 mA. This normally happens every 8 seconds.

Le système fait une mesure toutes les 30s et au bout d'un an les batteries n'ont perdues que quelques centaines de mV.
Il explique qu'au final, la consommation du système est inférieure au courant d'auto décharge des batteries.

The extra current needed to take readings, being averaged out over 32 seconds, and only taking 2.5/1000 milliseconds, would effectively average to:
(2.7 * (2.5 / 1000)) / 32 = 0.00021
In other words, only 0.21 µA additional, added to the constant drain of 4.2 µA. Thus you could roughly predict that the circuit would use 4.4 µA, which is somewhat less than the self-discharge rate of most batteries.

Absolument. Il ne sert à rien de chercher à économiser des µA. Les LITHIUM-ION ont un courant d'auto-décharge supérieur. Mais toutes les batteries ne se valent pas.
Exemple : pour un thermomètre PRO MINI 8MHz bidouillée (sans LED et sans régulateur), avec DS18B20, et une mesure toutes les 15 minutes :

  • dernière recharge : 16/04/2020
  • actuellement : charge = 58%

La batterie est une 16340 de marque : XTAR 650mAH

Auparavant, avec une batterie 16340 chinoise (GTL 2300mAH) j'arrivais péniblement à 17 mois.

Remarque : la capacité de la batterie GTL de 2300mAH est en réalité de 240mAH. C'est dire le niveau de publicité mensongère des vendeurs de batteries chinoises.