Η κατανάλωση ενέργειας είναι ένα κρίσιμο ζήτημα για μια συσκευή που λειτουργεί συνεχώς για μεγάλο χρονικό διάστημα χωρίς να απενεργοποιείται. Έτσι, για να ξεπεραστεί αυτό το πρόβλημα, σχεδόν κάθε ελεγκτής διαθέτει λειτουργία αναστολής λειτουργίας, που βοηθά τους προγραμματιστές να σχεδιάσουν ηλεκτρονικά gadget για βέλτιστη κατανάλωση ενέργειας. Η κατάσταση αναμονής θέτει τη συσκευή σε λειτουργία εξοικονόμησης ενέργειας απενεργοποιώντας τη μονάδα που δεν χρησιμοποιείται.
Νωρίτερα έχουμε εξηγήσει τη λειτουργία Deep-sleep στο ESP8266 για εξοικονόμηση ενέργειας. Σήμερα θα μάθουμε για τις λειτουργίες ύπνου Arduino και θα δείξουμε την κατανάλωση ενέργειας χρησιμοποιώντας το Ammeter. Η λειτουργία ύπνου Arduino αναφέρεται επίσης ως λειτουργία εξοικονόμησης ενέργειας Arduino ή λειτουργία αναμονής Arduino.
Λειτουργίες ύπνου Arduino
Οι Λειτουργίες ύπνου επιτρέπουν στο χρήστη να σταματήσει ή να απενεργοποιήσει τις αχρησιμοποίητες μονάδες του Μικροελεγκτή που μειώνουν σημαντικά την κατανάλωση ενέργειας. Τα Arduino UNO, Arduino Nano και Pro-mini έρχονται με ATmega328P και διαθέτει ανιχνευτή Brown-out (BOD) ο οποίος παρακολουθεί την τάση τροφοδοσίας κατά τη στιγμή της λειτουργίας ύπνου.
Υπάρχουν έξι τρόποι ύπνου στο ATmega328P:
Για να εισέλθουμε σε οποιαδήποτε από τη λειτουργία αναστολής λειτουργίας πρέπει να ενεργοποιήσουμε το bit ύπνου στο μητρώο ελέγχου κατάστασης ύπνου (SMCR.SE). Στη συνέχεια, η κατάσταση αναστολής επιλέξτε bits επιλέξτε τη λειτουργία αναμονής μεταξύ Idle, ADC μείωση θορύβου, Power-Down, Power-Save, Standby και External Standby.
Ένα εσωτερικό ή εξωτερικό Arduino διακόπτει ή μια επαναφορά μπορεί να ξυπνήσει το Arduino από τη λειτουργία αναστολής λειτουργίας.
Λειτουργία αδράνειας
Για είσοδο σε κατάσταση αναμονής αναμονής, γράψτε τα SM bit του ελεγκτή «000». Αυτή η λειτουργία σταματά τον επεξεργαστή αλλά επιτρέπει τη λειτουργία του SPI, της σειριακής διασύνδεσης 2 καλωδίων, του USART, του Watchdog, των μετρητών, του αναλογικού συγκριτή. Κατάσταση αναμονής σταματά ουσιαστικά το CLK CPU και CLK FLASH. Το Arduino μπορεί να ξυπνήσει ανά πάσα στιγμή χρησιμοποιώντας εξωτερική ή εσωτερική διακοπή.
Κωδικός Arduino για κατάσταση αδράνειας ύπνου:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Υπάρχει βιβλιοθήκη για τον καθορισμό διαφόρων λειτουργιών χαμηλής κατανάλωσης στο arduino. Πρώτα, κατεβάστε και εγκαταστήστε τη βιβλιοθήκη από τον δεδομένο σύνδεσμο και χρησιμοποιήστε τον παραπάνω κωδικό για να θέσετε το Arduino σε κατάσταση αδράνειας. Χρησιμοποιώντας τον παραπάνω κωδικό, το Arduino θα κοιμηθεί οκτώ δευτερόλεπτα και θα ξυπνήσει αυτόματα. Όπως μπορείτε να δείτε στον κώδικα ότι η κατάσταση αδράνειας απενεργοποιεί όλους τους χρονοδιακόπτες, SPI, USART και TWI (διεπαφή 2 καλωδίων).
Λειτουργία μείωσης θορύβου ADC
Για να χρησιμοποιήσετε αυτήν την κατάσταση αναστολής, γράψτε το bit SM στο '001'. Η λειτουργία σταματά τον επεξεργαστή αλλά επιτρέπει την λειτουργία ADC, εξωτερικής διακοπής, USART, σειριακής διεπαφής 2 καλωδίων, Watchdog και μετρητών. Η λειτουργία μείωσης θορύβου ADC σταματά ουσιαστικά τους CLK CPU, CLK I / O και CLK FLASH. Μπορούμε να ενεργοποιήσουμε τον ελεγκτή από τη λειτουργία μείωσης θορύβου ADC με τις ακόλουθες μεθόδους:
- Εξωτερική επαναφορά
- Επαναφορά συστήματος Watchdog
- Διακοπή φύλαξης
- Επαναφορά καφέ-out
- Ταίριασμα διεύθυνσης σειριακής διεπαφής 2 καλωδίων
- Διακοπή εξωτερικού επιπέδου στο INT
- Διακοπή αλλαγής καρφιτσών
- Διακοπή χρονοδιακόπτη / μετρητή
- SPM / EEPROM έτοιμη διακοπή
Λειτουργία απενεργοποίησης
Η λειτουργία Power-Down σταματά όλα τα δημιουργημένα ρολόγια και επιτρέπει μόνο τη λειτουργία ασύγχρονων μονάδων. Μπορεί να ενεργοποιηθεί γράφοντας τα bit SM στο '010'. Σε αυτήν τη λειτουργία, ο εξωτερικός ταλαντωτής απενεργοποιείται, αλλά η σειριακή διεπαφή, ο φύλακας και η εξωτερική διακοπή 2 καλωδίων συνεχίζει να λειτουργεί. Μπορεί να απενεργοποιηθεί μόνο με μία από τις παρακάτω μεθόδους:
- Εξωτερική επαναφορά
- Επαναφορά συστήματος Watchdog
- Διακοπή φύλαξης
- Επαναφορά καφέ-out
- Ταίριασμα διεύθυνσης σειριακής διεπαφής 2 καλωδίων
- Διακοπή εξωτερικού επιπέδου στο INT
- Διακοπή αλλαγής καρφιτσών
Κωδικός Arduino για περιοδική λειτουργία Power-Down:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
Ο κωδικός χρησιμοποιείται για την ενεργοποίηση της λειτουργίας απενεργοποίησης. Χρησιμοποιώντας τον παραπάνω κωδικό, το Arduino θα κοιμηθεί οκτώ δευτερόλεπτα και θα ξυπνήσει αυτόματα.
Μπορούμε επίσης να χρησιμοποιήσουμε τη λειτουργία απενεργοποίησης με διακοπή, όπου το Arduino θα κοιμηθεί αλλά θα ξυπνήσει μόνο όταν παρέχεται εξωτερική ή εσωτερική διακοπή.
Κωδικός Arduino για λειτουργία διακοπής λειτουργίας Power-Down:
void loop () { // Αφήστε τον πείρο αφύπνισης να ενεργοποιήσει τη διακοπή στο χαμηλό. attachInterrupt (0, wakeUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // Απενεργοποιήστε τη διακοπή εξωτερικού πείρου στον πείρο αφύπνισης. detachInterrupt (0); // Κάνε κάτι εδώ }
Λειτουργία εξοικονόμησης ενέργειας
Για να μπείτε στη λειτουργία εξοικονόμησης ενέργειας πρέπει να γράψουμε τον πείρο SM στο «011». Αυτή η κατάσταση αναστολής λειτουργίας είναι παρόμοια με τη λειτουργία απενεργοποίησης, μόνο με μία εξαίρεση, δηλαδή εάν είναι ενεργοποιημένος ο χρονοδιακόπτης / μετρητής, θα παραμείνει σε κατάσταση λειτουργίας ακόμη και τη στιγμή του ύπνου. Η συσκευή μπορεί να ενεργοποιηθεί χρησιμοποιώντας την υπερχείλιση χρονοδιακόπτη.
Εάν δεν χρησιμοποιείτε το χρόνο / μετρητή, συνιστάται να χρησιμοποιήσετε τη λειτουργία απενεργοποίησης αντί για τη λειτουργία εξοικονόμησης ενέργειας.
Λειτουργία αναμονής
Η κατάσταση αναμονής είναι ίδια με τη λειτουργία Power-Down, η μόνη διαφορά μεταξύ τους είναι ο εξωτερικός ταλαντωτής που συνεχίζει να λειτουργεί σε αυτήν τη λειτουργία. Για να ενεργοποιήσετε αυτήν τη λειτουργία, γράψτε την καρφίτσα SM στο '110'.
Εκτεταμένη κατάσταση αναμονής
Αυτή η λειτουργία είναι παρόμοια με τη λειτουργία εξοικονόμησης ενέργειας μόνο με μία εξαίρεση ότι ο ταλαντωτής συνεχίζει να λειτουργεί. Η συσκευή θα εισέλθει στη λειτουργία Extended Standby όταν γράφουμε την καρφίτσα SM στο «111». Η συσκευή θα διαρκέσει έξι κύκλους ρολογιού για να ξυπνήσει από την εκτεταμένη κατάσταση αναμονής.
Ακολουθούν οι απαιτήσεις για αυτό το έργο, μετά τη σύνδεση του κυκλώματος σύμφωνα με το διάγραμμα κυκλώματος. Ανεβάστε τον κωδικό λειτουργίας αναστολής στο Arduino χρησιμοποιώντας το Arduino IDE Το Arduino θα τεθεί σε κατάσταση αναμονής ύπνου. Στη συνέχεια, ελέγξτε την τρέχουσα κατανάλωση στο αμπερόμετρο USB. Διαφορετικά, μπορείτε επίσης να χρησιμοποιήσετε έναν μετρητή σφιγκτήρα για το ίδιο.
Απαιτούμενα στοιχεία
- Arduino UNO
- Αισθητήρας θερμοκρασίας και υγρασίας DHT11
- Ammeter USB
- Ψωμί
- Σύνδεση καλωδίων
Για να μάθετε περισσότερα σχετικά με τη χρήση του DHT11 με το Arduino, ακολουθήστε τον σύνδεσμο. Εδώ χρησιμοποιούμε το Ammeter USB για να μετρήσουμε την τάση που καταναλώνει το Arduino σε κατάσταση αναστολής λειτουργίας.
Ammeter USB
Το αμπερόμετρο USB είναι μια συσκευή plug and play που χρησιμοποιείται για τη μέτρηση της τάσης και του ρεύματος από οποιαδήποτε θύρα USB. Το dongle συνδέεται μεταξύ του τροφοδοτικού USB (θύρα USB του υπολογιστή) και της συσκευής USB (Arduino). Αυτή η συσκευή έχει αντίσταση 0,05ohm σύμφωνα με τον πείρο τροφοδοσίας μέσω του οποίου μετρά την τιμή του ρεύματος που τραβάται. Η συσκευή διαθέτει οθόνη επτά τμημάτων, η οποία εμφανίζει αμέσως τις τιμές ρεύματος και τάσης που καταναλώνει η συνδεδεμένη συσκευή. Αυτές οι τιμές αναστρέφονται κάθε 3 δευτερόλεπτα.
Προσδιορισμός:
- Εύρος τάσης λειτουργίας: 3,5V έως 7V
- Μέγιστη τρέχουσα βαθμολογία: 3A
- Συμπαγές μέγεθος, εύκολο στη μεταφορά
- Δεν απαιτείται εξωτερική τροφοδοσία
Εφαρμογή:
- Δοκιμή συσκευών USB
- Έλεγχος επιπέδων φορτίου
- Αποσφαλμάτωση φορτιστών μπαταριών
- Εργοστάσια, προϊόντα ηλεκτρονικής και προσωπική χρήση
Διάγραμμα κυκλώματος
Στην παραπάνω ρύθμιση για την επίδειξη λειτουργιών βαθύ ύπνου Arduino, το Arduino είναι συνδεδεμένο στο αμπερόμετρο USB. Στη συνέχεια, το αμπερόμετρο USB συνδέεται στη θύρα USB του φορητού υπολογιστή. Ο πείρος δεδομένων του αισθητήρα DHT11 είναι προσαρτημένος στον πείρο D2 του Arduino.
Επεξήγηση κώδικα
Ο πλήρης κωδικός για το έργο με ένα βίντεο δίνεται στο τέλος.
Ο κωδικός ξεκινά συμπεριλαμβάνοντας τη βιβλιοθήκη για τον αισθητήρα DHT11 και τη βιβλιοθήκη LowPower . Για λήψη της βιβλιοθήκης χαμηλής ισχύος ακολουθήστε τον σύνδεσμο. Στη συνέχεια, έχουμε ορίσει τον αριθμό pin Arduino στον οποίο είναι συνδεδεμένος ο πείρος δεδομένων του DHT11 και δημιουργήσαμε ένα αντικείμενο DHT.
#περιλαμβάνω
Στη λειτουργία ρύθμισης κενού , ξεκινήσαμε τη σειριακή επικοινωνία χρησιμοποιώντας το serial.begin (9600), εδώ το 9600 είναι ο ρυθμός baud. Χρησιμοποιούμε το ενσωματωμένο LED του Arduino ως ένδειξη για τη λειτουργία αναστολής λειτουργίας. Έτσι, έχουμε ορίσει την ακίδα ως έξοδο και η ψηφιακή εγγραφή χαμηλή.
άκυρη ρύθμιση () { Serial.begin (9600); pinMode (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, LOW); }
Στη λειτουργία κενού βρόχου , φτιάχνουμε το ενσωματωμένο LED ΥΨΗΛΟ και διαβάζουμε τα δεδομένα θερμοκρασίας και υγρασίας από τον αισθητήρα. Εδώ, DHT.read11 (); Η εντολή διαβάζει τα δεδομένα από τον αισθητήρα. Μόλις υπολογιστούν τα δεδομένα, μπορούμε να ελέγξουμε τις τιμές αποθηκεύοντάς τα σε οποιαδήποτε μεταβλητή. Εδώ, έχουμε λάβει δύο μεταβλητές τύπου float «t» και «h» . Ως εκ τούτου, τα δεδομένα θερμοκρασίας και υγρασίας εκτυπώνονται σειριακά στη σειριακή οθόνη.
void loop () { Serial.println ("Λήψη δεδομένων από DHT11"); καθυστέρηση (1000) digitalWrite (LED_BUILTIN, ΥΨΗΛΟ); int readData = DHT.read11 (dataPin); // DHT11 float t = θερμοκρασία DHT. float h = DHT. υγρασία; Serial.print ("Temperature ="); Serial.print (t); Serial.print ("C -"); Serial.print ("Υγρασία ="); Serial.print (h); Serial.println ("%"); καθυστέρηση (2000);
Πριν από την ενεργοποίηση της λειτουργίας ύπνου εκτυπώνουμε το "Arduino: - Θα πάω για έναν υπνάκο" και φτιάχνουμε το ενσωματωμένο LED Low. Μετά από αυτό, η λειτουργία αναστολής Arduino ενεργοποιείται χρησιμοποιώντας την εντολή που αναφέρεται παρακάτω στον κώδικα.
Ο παρακάτω κώδικας ενεργοποιεί την κατάσταση αδράνειας περιοδικού ύπνου του Arduino και δίνει χρόνο αναμονής οκτώ δευτερολέπτων. Μετατρέπει τη διεπαφή ADC, Timers, SPI, USART, 2-wire σε κατάσταση OFF.
Στη συνέχεια, ξυπνά αυτόματα τον Arduino από τον ύπνο μετά από 8 δευτερόλεπτα και εκτυπώνει "Arduino: - Γεια σου μόλις ξύπνησα".
Serial.println ("Arduino: - Θα πάω για έναν υπνάκο"); καθυστέρηση (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: - Γεια σου μόλις ξύπνησα"); Serial.println (""); καθυστέρηση (2000); }
Έτσι, χρησιμοποιώντας αυτόν τον κωδικό, το Arduino θα ξυπνήσει μόνο για 24 δευτερόλεπτα σε ένα λεπτό και θα παραμείνει σε κατάσταση αναστολής για τα υπόλοιπα 36 δευτερόλεπτα, γεγονός που μειώνει σημαντικά την ισχύ που καταναλώνει ο μετεωρολογικός σταθμός Arduino.
Επομένως, εάν χρησιμοποιήσουμε το Arduino με τη λειτουργία αναστολής λειτουργίας, μπορούμε να διπλασιάσουμε περίπου το χρόνο εκτέλεσης της συσκευής.