wiki:SujetTP8-2017

Programmation low-power

Nous avons vu qu'il est possible d'utiliser des modules Arduino pour réaliser des petits capteurs reliés par un réseau sans fil. Les modules sont actuellement alimentés par le câble USB relié au PC mais normalement les modules sont alimentés par pile ou par batterie. Dans l'idéal, la pile devrait durer des mois, voire des années, si la pile ne tient que quelques jours, le capteur n'est pas utilisable. Pour consommer le moins possible, il faut utiliser des technologies économes et programmer en bon père de famille, sans gaspiller.

Nous allons prendre comme base d'étude le module Arduino des TP. Nous y trouvons :

  • un arduino nano contenant une LED
  • un module radio NRF24L01+
  • un capteur de niveau sonore numérique (sortie binaire: 0 = inférieur au seuil, 1 = supérieur au seuil)
  • un capteur de lumière analogique (0 à 5V)
  • un écran OLED

La fonction de ce module est de capter deux valeurs de l'environnement, lumière et son, pour les transmettre à la base RaspberryPi. Le but de ce TP est d'étudier la consommation énergétique du module afin de la réduire.

Poste de consommation

Dans un capteur sans fil, qu'est-ce qui consomme de l'énergie ?

  • le capteur
    Pour économiser, il faut avoir un capteur qui consomme peu et il faut pouvoir l'éteindre si c'est possible
  • le micro-contrôleur
    Un micro-contrôleur consomme pratiquement la même énergie quelque-soit les programmes utilisés. Pour économiser, il faut pouvoir :
    • réduire la fréquence de fonctionnement, lorsque c'est possible, car la consommation est proportionnelle à la fréquence.
    • baisser la tension, car la consommation est quadratiquement proportionnelle à la tension, c'est parfois possible.
    • éteindre ou mettre en veille le micro-contrôleur quand il n'y a rien à faire. Ce dernier point est le plus simple et c'est plutôt adapté au rôle du module capteur qui doit faire des mesures périodiques et les transmettre mais qui n'a rien à faire entre les mesures. L'Arduino offre cette possibilité.
  • L'afficheur
    Il n'y a pas toujours un afficheur, mais il peut y avoir une led. Pour économiser, on peut faire un affichage intermittent ou déclenché par l'appui d'un bouton ou un un mouvement.
  • l'émetteur
    L'émission coûte cher, la réception aussi. Pour économiser, il faut choisir une technologie adaptée comme le NRF24L01 ou le Bluetooth Low Energie (BLE). Ces deux protocoles sont caractérisés par des trames courtes et l'absence de protocole de connexion, comme c'est le cas dans le wifi. Il est donc possible d'éteindre l'émetteur lorsque le module n'émet pas.

S'il faut aussi recevoir des ordres, c'est plus complexe car le module doit écouter et a priori en permanence. Le protocole BLE résout ce problème en synchronisant la réception. Le module capteur commence par émettre et il se met en écoute d'un ordre pendant une fenêtre temporelle juste après. L'inconvénient est qu'il ne peut accepter les ordres à tout moment mais l'intérêt est qu'il n'écoute pas en permanence.

Le mode sleep de l'Arduino

L'Arduino dispose d'un mode sleep qui lui permet de mettre en veille de micro-contrôleur. La sortie de ce mode est effectuée, soit par une interruption externe, soit par le watchdog.

Le watchdog est un compteur autonome configurable. C'est un mécanisme qui permet deux choses.

  • Il permet se premunir contre les bugs intermittent. En effet le compteur du watchdog s'incrémente en permanence et s'il arrive à sa valeur maximale, il provoque un reset. Pour éviter ce reset, il faut régulièrement remettre le compteur à 0. Si le programme bug, on suppose que le compteur ne sera pas remis à 0 et le programme redémarrera depuis le début.
  • se réveiller d'un mise en veille (mode sleep). Si on a mise en veille le micro-contrôleur et que le watchdog est configuré alors l'arrivée à la valeur maximale provoque le redémarrage du micro-contrôleur.

Last modified 7 years ago Last modified on Apr 21, 2017, 8:32:29 AM