La consommation d'énergie est un problème critique pour un appareil fonctionnant en continu pendant une longue période sans être éteint. Donc, pour surmonter ce problème, presque tous les contrôleurs sont livrés avec un mode veille, qui aide les développeurs à concevoir des gadgets électroniques pour une consommation d'énergie optimale. Le mode veille met l'appareil en mode d'économie d'énergie en désactivant le module inutilisé.
Plus tôt, nous avons expliqué le mode de veille profonde dans ESP8266 pour l'économie d'énergie. Aujourd'hui, nous allons en apprendre davantage sur les modes de veille Arduino et démontrer la consommation d'énergie à l'aide de l'ampèremètre. Un mode veille Arduino est également appelé mode d'économie d'énergie Arduino ou mode veille Arduino.
Modes de veille Arduino
Les modes de veille permettent à l'utilisateur d'arrêter ou d'éteindre les modules inutilisés du microcontrôleur, ce qui réduit considérablement la consommation d'énergie. Arduino UNO, Arduino Nano et Pro-mini est livré avec ATmega328P et il dispose d'un détecteur de Brown-out (BOD) qui surveille la tension d'alimentation au moment du mode veille.
Il existe six modes de veille dans ATmega328P:
Pour entrer dans l'un des modes de veille, nous devons activer le bit de veille dans le registre de contrôle du mode de veille (SMCR.SE). Ensuite, les bits de sélection du mode veille sélectionnent le mode veille parmi Idle, Réduction du bruit ADC, Power-Down, Power-Save, Standby et External Standby.
Une interruption Arduino interne ou externe ou une réinitialisation peut réveiller l'Arduino du mode veille.
Mode inactif
Pour entrer en mode veille inactif, écrivez les bits SM du contrôleur '000'. Ce mode arrête le CPU mais permet au SPI, à l'interface série à 2 fils, à l'USART, au chien de garde, aux compteurs et au comparateur analogique de fonctionner. Le mode veille arrête essentiellement le CPU CLK et CLK FLASH. Arduino peut être réveillé à tout moment en utilisant une interruption externe ou interne.
Code Arduino pour le mode veille:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Il existe une bibliothèque pour définir divers modes de faible consommation dans arduino. Alors commencez par télécharger et installer la bibliothèque à partir du lien donné et utilisez le code ci-dessus pour mettre l'Arduino en mode veille. En utilisant le code ci-dessus, l'Arduino passera en veille de huit secondes et se réveillera automatiquement. Comme vous pouvez le voir dans le code, le mode veille désactive toutes les minuteries, SPI, USART et TWI (interface 2 fils).
Mode de réduction du bruit ADC
Pour utiliser ce mode veille, écrivez le bit SM sur «001». Le mode arrête le CPU mais permet à l'ADC, à l'interruption externe, à l'USART, à l'interface série à 2 fils, au chien de garde et aux compteurs de fonctionner. Le mode de réduction du bruit ADC arrête essentiellement le processeur CLK, les E / S CLK et CLK FLASH. Nous pouvons réveiller le contrôleur du mode de réduction du bruit ADC par les méthodes suivantes:
- Réinitialisation externe
- Réinitialisation du système de surveillance
- Interruption du chien de garde
- Réinitialisation de la baisse de tension
- Correspondance d'adresse d'interface série à 2 fils
- Interruption de niveau externe sur INT
- Interruption de changement de broche
- Interruption de la minuterie / du compteur
- Interruption prête SPM / EEPROM
Mode de mise hors tension
Le mode Power-Down arrête toutes les horloges générées et permet uniquement le fonctionnement des modules asynchrones. Il peut être activé en écrivant les bits SM sur «010». Dans ce mode, l'oscillateur externe s'éteint, mais l'interface série à 2 fils, le chien de garde et l'interruption externe continuent de fonctionner. Il ne peut être désactivé que par l'une des méthodes ci-dessous:
- Réinitialisation externe
- Réinitialisation du système de surveillance
- Interruption du chien de garde
- Réinitialisation de la baisse de tension
- Correspondance d'adresse d'interface série à 2 fils
- Interruption de niveau externe sur INT
- Interruption de changement de broche
Code Arduino pour le mode périodique de mise hors tension:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
Le code est utilisé pour activer le mode de mise hors tension. En utilisant le code ci-dessus, l'Arduino passera en veille de huit secondes et se réveillera automatiquement.
Nous pouvons également utiliser le mode de mise hors tension avec une interruption, où l'Arduino se mettra en veille mais ne se réveillera que lorsqu'une interruption externe ou interne est fournie.
Code Arduino pour le mode d'interruption de mise hors tension:
void loop () { // Autorise la broche de réveil à déclencher une interruption à l'état bas. attachInterrupt (0, wakeUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // Désactive l'interruption de broche externe sur la broche de réveil. detachInterrupt (0); // Faites quelque chose ici }
Mode économie d'énergie
Pour entrer dans le mode d'économie d'énergie, nous devons écrire la broche SM sur «011». Ce mode de veille est similaire au mode de mise hors tension, à une seule exception près, c'est-à-dire que si le minuteur / compteur est activé, il restera en état de fonctionnement même au moment du sommeil. L'appareil peut être réveillé en utilisant le débordement de la minuterie.
Si vous n'utilisez pas l'heure / le compteur, il est recommandé d'utiliser le mode de mise hors tension au lieu du mode d'économie d'énergie.
Mode veille
Le mode veille est identique au mode Power-Down, la seule différence entre eux est l'oscillateur externe qui continue de fonctionner dans ce mode. Pour activer ce mode, écrivez la broche SM sur «110».
Mode veille étendu
Ce mode est similaire au mode d'économie d'énergie, à une exception près que l'oscillateur continue de fonctionner. L'appareil entrera en mode veille étendue lorsque nous écrivons la broche SM sur «111». L'appareil prendra six cycles d'horloge pour sortir du mode veille prolongée.
Voici les exigences pour ce projet, après avoir connecté le circuit selon le schéma de circuit. Téléchargez le code du mode veille dans Arduino à l'aide de l'IDE Arduino. Arduino entrera en mode veille. Vérifiez ensuite la consommation de courant dans l'ampèremètre USB. Sinon, vous pouvez également utiliser une pince ampèremétrique pour le même.
Composants requis
- Arduino UNO
- Capteur de température et d'humidité DHT11
- Ampèremètre USB
- Planche à pain
- Connexion des fils
Pour en savoir plus sur l'utilisation de DHT11 avec Arduino, suivez le lien. Ici, nous utilisons un ampèremètre USB pour mesurer la tension consommée par Arduino en mode veille.
Ampèremètre USB
L'ampèremètre USB est un appareil plug and play utilisé pour mesurer la tension et le courant de n'importe quel port USB. Le dongle se branche entre l'alimentation USB (port USB de l'ordinateur) et le périphérique USB (Arduino). Cet appareil a une résistance de 0,05 ohm en ligne avec la broche d'alimentation à travers laquelle il mesure la valeur du courant consommé. L'appareil est livré avec quatre écrans à sept segments, qui affichent instantanément les valeurs de courant et de tension consommés par l'appareil connecté. Ces valeurs changent toutes les trois secondes.
Spécification:
- Plage de tension de fonctionnement: 3,5 V à 7 V
- Courant nominal maximum: 3A
- Taille compacte, facile à transporter
- Aucune alimentation externe nécessaire
Application:
- Test des périphériques USB
- Vérification des niveaux de charge
- Débogage des chargeurs de batterie
- Usines, produits électroniques et usage personnel
Schéma
Dans la configuration ci-dessus pour illustrer les modes de veille profonde Arduino, l'Arduino est branché sur l'ampèremètre USB. Ensuite, l'ampèremètre USB est branché sur le port USB de l'ordinateur portable. La broche de données du capteur DHT11 est attachée à la broche D2 de l'Arduino.
Explication du code
Le code complet du projet avec une vidéo est donné à la fin.
Le code commence par inclure la bibliothèque pour le capteur DHT11 et la bibliothèque LowPower . Pour télécharger la bibliothèque Low Power, suivez le lien. Ensuite, nous avons défini le numéro de broche Arduino auquel la broche de données du DHT11 est connectée et créé un objet DHT.
#comprendre
Dans la fonction void setup , nous avons initié la communication série en utilisant serial.begin (9600), ici le 9600 est le débit en bauds. Nous utilisons la LED intégrée d'Arduino comme indicateur du mode veille. Nous avons donc défini la broche comme sortie et l'écriture numérique à un niveau bas.
void setup () { Serial.begin (9600); pinMode (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, LOW); }
Dans la fonction de boucle vide , nous rendons la LED intégrée HIGH et la lecture des données de température et d'humidité du capteur. Ici, DHT.read11 (); commande lit les données du capteur. Une fois les données calculées, nous pouvons vérifier les valeurs en les enregistrant dans n'importe quelle variable. Ici, nous avons pris deux variables de type float 't' et 'h' . Par conséquent, les données de température et d'humidité sont imprimées en série sur le moniteur série.
void loop () { Serial.println ("Get Data From DHT11"); retard (1000); digitalWrite (LED_BUILTIN, HIGH); int readData = DHT.read11 (dataPin); // DHT11 float t = DHT.température; float h = DHT.humidité; Serial.print ("Température ="); Serial.print (t); Serial.print ("C -"); Serial.print ("Humidité ="); Serial.print (h); Serial.println ("%"); retard (2000);
Avant d'activer le mode veille, nous imprimons "Arduino: - Je vais faire une sieste" et faisons la LED intégrée Low. Après cela, le mode veille Arduino est activé en utilisant la commande mentionnée ci-dessous dans le code.
Le code ci-dessous active le mode veille périodique inactif de l'Arduino et donne une veille de huit secondes. Il transforme l'ADC, les minuteries, le SPI, l'USART, l'interface 2 fils en état OFF.
Ensuite, il réveille automatiquement Arduino du sommeil après 8 secondes et imprime «Arduino: - Hey je viens de me réveiller».
Serial.println ("Arduino: - Je vais faire une sieste"); retard (1000); digitalWrite (LED_BUILTIN, LOW); LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF); Serial.println ("Arduino: - Hey je viens de me réveiller"); Serial.println (""); retard (2000); }
Ainsi, en utilisant ce code, Arduino ne se réveillera que pendant 24 secondes en une minute et restera en mode veille pendant le reste des 36 secondes, ce qui réduira considérablement la puissance consommée par la station météo Arduino.
Par conséquent, si nous utilisons l'Arduino avec le mode veille, nous pouvons environ doubler le temps d'exécution de l'appareil.