Étape 4: Croquis : mise hors tension et interruption fondé de réveil (faible consommation d’énergie)
Pour réduire la consommation de l’alimentation/batterie, il serait avantageux de mettre arduino en mode moins la consommation d’énergie ou d’hibernation jusqu'à ce que le capteur infrarouge détecte un mouvement. Nous y parviendrons en utilisant l’interruption matérielle et Power Down Mode du microcontrôleur ATMEGA328P de la carte arduino. En outre, nous désactiverons convertisseurs analogiques/numérique (ADC) étant donné que nous ne devons pas tout ADC.
« Le mode de mise hors tension enregistre le contenu du registre mais gèle l’oscillateur, la désactivation de toutes les fonctions de la puce r othe jusqu'à la réinitialisation de matériel ou d’interruption de t nex ».
Dans ce sketch, nous utilisons les broches d’entrée D2 ou interruption 0 quelle sortie de PIR capteur est connecté.
Détecteur PIR lui-même ayant sur la minuterie de l’État, nous ne devons pas tout minuterie d’arduino pour garder la broche de sortie D13 ON à heure fixe. L’heure est physiquement réglable à l’aide du potentiomètre Tx, comme indiqué dans l’étape précédente.
-Arduino sur la première marche, clignotements LED sur la broche 13 pendant une minute, c’est juste pour une indication visuelle de la période de réchauffement requis par capteur PIR pour se stabiliser à la température ambiante.
pour (int i = 1; i < = 120; i ++) {}
digitalWrite (LedPin, élevé) ;
Delay(100) ;
digitalWrite (LedPin, basse) ; Delay(100) ; }
-L’Arduino est maintenu en Hibernation jusqu'à ce que la goupille de D2 est faible.
Dans la fonction Hibernate() ;
Nous mettrons toutes les broches d’entrée sauf pin 13 auquel nous avons branché notre LED ou relais.
pour (int i = 0; i < 20; i ++) {}
Si (je! = 13)
pinMode (i, entrée);}
et la valeur arduino mode "veille" plus bas mode de consommation d’énergie
set_sleep_mode(SLEEP_MODE_PWR_DOWN) ;
et désactiver les convertisseurs a/n
ADCSRA & = ~ (1 << 7) ;
et désactiver Brown sur détecteur utilisé pour vérifier le niveau de tension d’entrée
sleep_bod_disable() ;
Nous attachons une interruption 0 de broche 2 en détecter le changement dans l’état du signal sur la broche 2
attachInterrupt (PIRsensorInterrupt, wakeUpNow, changement) ;
Enfin la fonction Sleep est appelée à l’aide
sleep_mode() ;
-Lorsque le capteur infrarouge détecte un mouvement, capteur PIR sortie de changements d’état de faible à élevé. Ce signal de bord montante est prélevée jusqu'à par interruption 0, arduino réveille du mode veille, interruptions sont désactivées temporairement et par conséquent la broche D13 va haut.
Une fois, la valeur temps est passé, PIR sortie nouveau revient au bas du haut, ce signal chute de bord déclenche une autre interruption, mettant une fois de plus les arduino en hibernation.