Enerģijas patēriņš ir kritiska problēma ierīcei, kas ilgstoši darbojas nepārtraukti un netiek izslēgta. Tāpēc, lai pārvarētu šo problēmu, gandrīz katram kontrolierim ir miega režīms, kas palīdz izstrādātājiem izstrādāt elektroniskus sīkrīkus optimālam enerģijas patēriņam. Miega režīmā ierīce tiek ieslēgta enerģijas taupīšanas režīmā, izslēdzot neizmantoto moduli.
Iepriekš mēs esam izskaidrojuši dziļā miega režīmu ESP8266 enerģijas taupīšanai. Šodien mēs uzzināsim par Arduino miega režīmiem un parādīsim enerģijas patēriņu, izmantojot Ammeter. Arduino miega režīmu sauc arī par Arduino enerģijas taupīšanas režīmu vai Arduino gaidīšanas režīmu.
Arduino miega režīmi
Miega režīmi ļauj lietotājam apturēt vai izslēgt neizmantotos mikrokontrollera moduļus, kas ievērojami samazina enerģijas patēriņu. Arduino UNO, Arduino Nano un Pro-mini komplektācijā ietilpst ATmega328P, un tam ir Brown-out detektors (BOD), kas uzrauga barošanas spriegumu miega režīma laikā.
ATmega328P ir seši miega režīmi:
Lai pārietu uz jebkuru miega režīmu, mums ir jāiespējo miega režīms miega režīma kontroles reģistrā (SMCR.SE). Pēc tam miega režīma izvēlētie biti izvēlas miega režīmu starp gaidīšanas režīmu, ADC trokšņu samazināšanu, izslēgšanu, enerģijas taupīšanu, gaidīšanas režīmu un ārējo gaidīšanas režīmu.
Iekšējais vai ārējais Arduino pārtrauc vai Reset var pamodināt Arduino no miega režīma.
Gaidīšanas režīms
Lai ieslēgtu gaidīšanas režīmu, ierakstiet kontroliera SM bitus '000'. Šis režīms aptur CPU, bet ļauj darboties SPI, 2 vadu sērijas saskarnei, USART, Watchdog, skaitītājiem, analogajam salīdzinātājam. Gaidīšanas režīmā CLK CPU un CLK FLASH principā tiek apturēti. Arduino var pamodināt jebkurā laikā, izmantojot ārēju vai iekšēju pārtraukumu.
Arduino kods gaidīšanas režīmā:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Ir bibliotēka dažādu mazjaudas režīmu iestatīšanai arduino. Tātad vispirms lejupielādējiet un instalējiet bibliotēku no norādītās saites un izmantojiet iepriekš minēto kodu, lai Arduino nodotu gaidīšanas režīmā. Izmantojot iepriekš minēto kodu, Arduino gulēs astoņas sekundes un automātiski pamodīsies. Kā redzat kodā, dīkstāves režīmā tiek izslēgti visi taimeri, SPI, USART un TWI (2 vadu saskarne).
ADC trokšņa samazināšanas režīms
Lai izmantotu šo miega režīmu, ierakstiet SM bitu uz “001”. Režīms aptur CPU, bet ļauj darboties ADC, ārējam pārtraukumam, USART, 2 vadu seriālajam interfeisam, Watchdog un skaitītājiem. ADC trokšņa samazināšanas režīms būtībā aptur CLK CPU, CLK I / O un CLK FLASH. Mēs varam pamodināt kontrolieri no ADC trokšņu samazināšanas režīma, izmantojot šādas metodes:
- Ārējā atiestatīšana
- Sargsuņa sistēmas atiestatīšana
- Sargsuns pārtraukt
- Brown-out Reset
- 2 vadu sērijas saskarnes adreses atbilstība
- Ārējā līmeņa pārtraukums INT
- Tapas maiņas pārtraukums
- Taimera / skaitītāja pārtraukums
- SPM / EEPROM gatavs pārtraukums
Izslēgšanas režīms
Izslēgšanas režīms aptur visus ģenerētos pulksteņus un ļauj darboties tikai asinhroniem moduļiem. To var iespējot, ierakstot SM bitus uz “010”. Šajā režīmā ārējais oscilators izslēdzas, bet turpina darboties 2 vadu seriālais interfeiss, sargsuns un ārējais pārtraukums. To var atspējot tikai ar vienu no šīm metodēm:
- Ārējā atiestatīšana
- Sargsuņa sistēmas atiestatīšana
- Sargsuns pārtraukt
- Brown-out Reset
- 2 vadu sērijas saskarnes adreses atbilstība
- Ārējā līmeņa pārtraukums INT
- Tapas maiņas pārtraukums
Arduino kods izslēgšanas periodiskajam režīmam:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
Kods tiek izmantots, lai ieslēgtu izslēgšanas režīmu. Izmantojot iepriekš minēto kodu, Arduino gulēs astoņas sekundes un automātiski pamodīsies.
Mēs varam arī izmantot izslēgšanas režīmu ar pārtraukumu, kur Arduino gulēs miegā, bet pamostas tikai tad, kad tiek nodrošināts ārējs vai iekšējs pārtraukums.
Arduino kods izslēgšanas pārtraukuma režīmam:
void loop () { // Ļaujiet modinātājpogai aktivizēt pārtraukumu zemā līmenī. piestiprinātTraucēt (0, wakeUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // Atspējot modināšanas tapas ārējo tapu pārtraukumu. atdalītPārtraukt (0); // Dariet kaut ko šeit }
Enerģijas taupīšanas režīms
Lai ieslēgtu enerģijas taupīšanas režīmu, mums ir jāuzraksta SM tapa uz “011”. Šis miega režīms ir līdzīgs izslēgšanās režīmam, tikai ar vienu izņēmumu, ti, ja taimeris / skaitītājs ir iespējots, tas paliks ieslēgts pat miega laikā. Ierīci var pamodināt, izmantojot taimera pārpildi.
Ja neizmantojat laiku / skaitītāju, ieteicams enerģijas taupīšanas režīma vietā izmantot izslēgšanas režīmu.
Gaidīšanas režīmā
Gaidīšanas režīms ir identisks Power-Down režīmam, vienīgā atšķirība starp tiem ir ārējais oscilators, kas turpina darboties šajā režīmā. Lai iespējotu šo režīmu, ierakstiet SM tapu uz “110”.
Paplašināts gaidīšanas režīms
Šis režīms ir līdzīgs enerģijas taupīšanas režīmam tikai ar vienu izņēmumu, ka oscilators turpina darboties. Ierīce nonāks paplašinātā gaidīšanas režīmā, kad mēs ierakstīsim SM tapu uz '111'. Ierīcei būs nepieciešami seši pulksteņu cikli, lai pamodinātos no paplašinātā gaidīšanas režīma.
Zemāk ir prasības šim projektam pēc ķēdes pievienošanas atbilstoši shēmas shēmai. Augšupielādējiet miega režīma kodu Arduino, izmantojot Arduino IDE. Arduino ieslēgs gaidīšanas režīmā. Pēc tam pārbaudiet strāvas patēriņu USB ampērmetrā. Citādi jūs varat izmantot arī skavas skaitītāju.
Nepieciešamās sastāvdaļas
- Arduino UNO
- DHT11 temperatūras un mitruma sensors
- USB ampērmetrs
- Maizes dēlis
- Vadu savienošana
Lai uzzinātu vairāk par DHT11 lietošanu ar Arduino, sekojiet saitei. Šeit mēs izmantojam USB ampērmetru, lai izmērītu spriegumu, ko miega režīmā patērē Arduino.
USB ampērmetrs
USB ampērmetrs ir plug and play ierīce, ko izmanto, lai mērītu spriegumu un strāvu no jebkura USB porta. Dongle tiek pievienots starp USB barošanas avotu (datora USB ports) un USB ierīci (Arduino). Šai ierīcei ir 0,05 omi rezistors vienā līnijā ar strāvas tapu, caur kuru tā mēra izvilktās strāvas vērtību. Ierīcei ir četri septiņu segmentu displeji, kas uzreiz parāda pievienotās ierīces patērētās strāvas un sprieguma vērtības. Šīs vērtības mainās ik pēc trim sekundēm.
Specifikācija:
- Darba sprieguma diapazons: no 3,5 V līdz 7 V
- Maksimālais pašreizējais vērtējums: 3A
- Kompakts izmērs, viegli pārvadājams
- Nav nepieciešama ārēja piegāde
Pielietojums:
- Notiek USB ierīču pārbaude
- Slodzes līmeņu pārbaude
- Atkļūdošanas akumulatoru lādētāji
- Rūpnīcas, elektronikas izstrādājumi un personiska lietošana
Ķēdes shēma
Iepriekš norādītajā iestatījumā, lai parādītu Arduino Deep miega režīmus, Arduino ir pievienots USB ampērmetram. Tad USB ampērmetrs tiek pievienots klēpjdatora USB pieslēgvietai. DHT11 sensora datu tapa ir piestiprināta pie Arduino D2 tapas.
Kods Paskaidrojums
Pilnīgs projekta kods ar video ir norādīts beigās.
Sākot ar kodu, iekļaujot DHT11 sensora bibliotēku un LowPower bibliotēku. Lai lejupielādētu mazjaudas bibliotēku, sekojiet saitei. Tad mēs esam definējuši Arduino piespraudes numuru, ar kuru ir savienota DHT11 datu tapa, un izveidojām DHT objektu.
# iekļaut
Jo tukšumu iestatīšanas funkciju, mēs esam uzsāka sērijas komunikāciju, izmantojot serial.begin (9600), šeit 9600 ir bodu likme. Mēs izmantojam Arduino iebūvēto LED kā miega režīma indikatoru. Tātad, mēs esam iestatījuši tapu kā izvadi, un digitālā rakstīšana ir zema.
void setup () { Sērijas.sākt (9600); pinMode (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, LOW); }
Jo tukšumu cilpas funkciju, mēs padara iebūvētos LED augsts un lasīšanas temperatūras un mitruma datus no sensora. Lūk, DHT.read11 (); komanda nolasa datus no sensora. Kad dati ir aprēķināti, mēs varam pārbaudīt vērtības, saglabājot tos jebkurā mainīgajā. Šeit mēs esam paņēmuši divus pludiņa tipa mainīgos “t” un “h” . Tādējādi temperatūras un mitruma dati sērijveida monitorā tiek drukāti sērijveidā.
void loop () { Serial.println ("Iegūt datus no DHT11"); kavēšanās (1000); digitalWrite (LED_BUILTIN, HIGH); int readData = DHT.read11 (dataPin); // DHT11 pludiņš t = DHT.temperatūra; pludiņš h = DHT. mitrums; Serial.print ("Temperatūra ="); Sērijas.druka (t); Sērijas.druka ("C -"); Serial.print ("Mitrums ="); Sērijas.druka (h); Serial.println ("%"); kavēšanās (2000);
Pirms miega režīma iespējošanas mēs drukājam "Arduino: - Es dodos uz Nap" un padarām iebūvēto LED Low. Pēc tam Arduino miega režīms tiek iespējots, izmantojot zemāk kodu norādīto komandu.
Zem koda tiek iespējots Arduino periodiskais miega režīms un tiek dots astoņu sekunžu miegs. Tas pārvērš ADC, taimeri, SPI, USART, 2 vadu saskarni stāvoklī IZSLĒGTS.
Pēc tam tas automātiski pamodina Arduino no miega pēc 8 sekundēm un izdrukā “Arduino: - Hei, es tikko pamodos”.
Serial.println ("Arduino: - Es dodos uz Napu"); kavēšanās (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: - Hei, es tikko pamodos"); Serial.println (""); kavēšanās (2000); }
Tātad, izmantojot šo kodu, Arduino pamodīsies tikai 24 sekundes minūtē un atlikušās 36 sekundes paliks miega režīmā, kas ievērojami samazina Arduino laika stacijas patērēto enerģiju.
Tāpēc, ja Arduino izmantojam ar miega režīmu, mēs varam aptuveni dubultot ierīces darbības laiku.