Potrošnja energije je kritičan problem za uređaj koji neprekidno radi dulje vrijeme bez isključivanja. Dakle, da bi se prevladao ovaj problem, gotovo svaki kontroler dolazi s načinom mirovanja, koji programerima pomaže u dizajniranju elektroničkih uređaja za optimalnu potrošnju energije. Način mirovanja stavlja uređaj u način uštede energije isključivanjem neiskorištenog modula.
Ranije smo objasnili način dubokog spavanja u ESP8266 za uštedu energije. Danas ćemo naučiti o Arduino načinima spavanja i pokazati potrošnju energije pomoću Ampermetra. Način spavanja Arduino također se naziva i načinom uštede energije Arduino ili načinom mirovanja Arduino.

Načini spavanja Arduino
Režimi mirovanja omogućuju korisniku zaustavljanje ili isključivanje neiskorištenih modula u mikrokontroleru koji značajno smanjuju potrošnju energije. Arduino UNO, Arduino Nano i Pro-mini dolaze s ATmega328P i imaju Brown-out detektor (BOD) koji nadzire opskrbni napon u trenutku mirovanja.
U ATmega328P postoji šest načina mirovanja:

Za ulazak u bilo koji način mirovanja trebamo omogućiti bit mirovanja u Registru kontrole mirovanja (SMCR.SE). Zatim bitovi za odabir načina mirovanja odabiru način mirovanja u stanju mirovanja, smanjenju ADC šuma, isključivanju, uštedi energije, stanju pripravnosti i vanjskom stanju pripravnosti.
Unutarnji ili vanjski Arduino prekida ili Resetiranje može probuditi Arduino iz stanja mirovanja.
Način mirovanja
Za ulazak u način mirovanja, upišite SM bitove kontrolera '000'. Ovaj način zaustavlja CPU, ali omogućuje rad SPI-a, dvožičnog serijskog sučelja, USART-a, Watchdoga, brojača i analogne usporedbe. Način mirovanja u osnovi zaustavlja CLK CPU i CLK FLASH. Arduino se može probuditi bilo kada korištenjem vanjskog ili unutarnjeg prekida.
Arduino kôd za način mirovanja u stanju mirovanja:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Postoji biblioteka za postavljanje različitih načina rada male snage u arduinu. Dakle, prvo preuzmite i instalirajte biblioteku s dane veze i upotrijebite gornji kôd za prebacivanje Arduina u stanje mirovanja. Korištenjem gornjeg koda, Arduino će preći u san od osam sekundi i automatski se probuditi. Kao što vidite u kodu, način mirovanja isključuje sve timere, SPI, USART i TWI (dvožično sučelje).
ADC način smanjenja buke
Da biste koristili ovaj način mirovanja, zapišite SM bit na '001'. Način zaustavlja CPU, ali omogućuje rad ADC-a, vanjskog prekida, USART-a, dvožičnog serijskog sučelja, Watchdoga i brojača. ADC način smanjenja šuma u osnovi zaustavlja CLK CPU, CLK I / O i CLK FLASH. Kontroler možemo probuditi iz ADC načina smanjenja šuma sljedećim metodama:
- Vanjsko resetiranje
- Vraćanje sustava nadzornika
- Prekid čuvara
- Smeđe resetiranje
- Podudaranje adrese dvožičnog serijskog sučelja
- Prekid vanjske razine na INT
- Prekid promjene pin-a
- Prekid brojača / brojača
- SPM / EEPROM spreman prekid
Način isključivanja
Način isključivanja zaustavlja sve generirane satove i dopušta samo rad asinkronih modula. To se može omogućiti pisanjem SM bitova u '010'. U ovom načinu rada vanjski oscilator se ISKLJUČUJE, ali dvožično serijsko sučelje, čuvar i vanjski prekid nastavljaju raditi. Može se onemogućiti samo jednim od dolje navedenih načina:
- Vanjsko resetiranje
- Vraćanje sustava nadzornika
- Prekid čuvara
- Smeđe resetiranje
- Podudaranje adrese dvožičnog serijskog sučelja
- Prekid vanjske razine na INT
- Prekid promjene pin-a
Arduino kôd za periodični način isključivanja:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
Kôd se koristi za uključivanje načina isključenja. Korištenjem gornjeg koda, Arduino će preći u san od osam sekundi i automatski se probuditi.
Također možemo koristiti način prekida napajanja s prekidom, gdje će Arduino preći u stanje mirovanja, ali se budi samo kada je predviđen vanjski ili unutarnji prekid.
Arduino kôd za način prekida napajanja:
void loop () { // Omogućite probuđivanju da aktivira prekid na niskom nivou. attachInterrupt (0, wakeUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // Onemogući vanjski prekid pina na probudnom pinu. detachInterrupt (0); // Učini nešto ovdje }
Način uštede energije
Da bismo ušli u način uštede energije, trebamo napisati SM pin na '011'. Ovaj način mirovanja sličan je načinu isključivanja, samo s jednom iznimkom, tj. Ako je tajmer / brojač omogućen, ostat će u stanju rada čak i u vrijeme mirovanja. Uređaj se može probuditi pomoću preljeva timera.
Ako ne koristite brojač vremena / brojača, preporučuje se korištenje načina isključivanja umjesto načina uštede energije.
Stanje čekanja
Stanje čekanja identično je načinu rada Power-Down, jedina razlika između njih je vanjski oscilator koji je i dalje aktivan u ovom načinu rada. Da biste omogućili ovaj način, zapišite SM pin na '110'.
Prošireni način čekanja
Ovaj je način sličan načinu uštede energije, samo s jednom iznimkom da oscilator i dalje radi. Uređaj će ući u način proširenog čekanja kada SM zapišemo na '111'. Uređaju će trebati šest ciklusa sata da se probudi iz produženog stanja čekanja.
Ispod su zahtjevi za ovaj projekt, nakon spajanja kruga prema shemi sklopa. Prenesite kod mirovanja u Arduino pomoću Arduino IDE-a. Arduino će ući u stanje mirovanja u stanju mirovanja. Zatim provjerite trenutnu potrošnju na USB ampermetru. Inače, za isto možete koristiti i stezaljku.
Komponente potrebne
- Arduino UNO
- DHT11 Osjetnik temperature i vlage
- USB ampermetar
- Breadboard
- Spajanje žica
Da biste saznali više o korištenju DHT11 s Arduinom, slijedite vezu. Ovdje koristimo USB ampermetar za mjerenje napona koji Arduino troši u načinu mirovanja.
USB ampermetar
USB ampermetar je plug and play uređaj koji se koristi za mjerenje napona i struje s bilo kojeg USB priključka. Dongle se uključuje između USB napajanja (USB priključak računala) i USB uređaja (Arduino). Ovaj uređaj ima otpor od 0,05 ohma u liniji sa utikačem kroz koji mjeri vrijednost povučene struje. Uređaj dolazi s četiri sedemsegmentna zaslona, koji trenutno prikazuju vrijednosti struje i napona koje troši priključeni uređaj. Te se vrijednosti okreću u intervalu svake tri sekunde.

Specifikacija:
- Raspon radnog napona: 3,5 V do 7 V
- Maksimalna struja: 3A
- Kompaktne veličine, jednostavan za nošenje
- Nije potrebna vanjska opskrba
Primjena:
- Testiranje USB uređaja
- Provjera razine opterećenja
- Otklanjanje pogrešaka u punjačima baterija
- Tvornice, elektronički proizvodi i osobna upotreba
Kružni dijagram

U gornjoj postavci za demonstraciju načina rada Arduino Deep sleep, Arduino je priključen na USB ampermetar. Zatim se USB ampermetar priključi na USB priključak prijenosnog računala. Podaci pin DHT11 senzora pričvršćen je na D2 pin Arduina.
Objašnjenje koda
Kompletni kod za projekt s video zapisom dat je na kraju.
Kôd započinje uključivanjem knjižnice za senzor DHT11 i knjižnice LowPower . Za preuzimanje knjižnice Low Power slijedite vezu. Zatim smo definirali Arduino pin broj na koji je povezan podatkovni pin DHT11 i stvorili DHT objekt.
#include
U funkciji void setup , pokrenuli smo serijsku komunikaciju pomoću serial.begin (9600), ovdje je 9600 brzina prijenosa. Koristimo Arduinoovu ugrađenu LED kao indikator za način mirovanja. Dakle, postavili smo pin kao izlaz, a digitalno pisanje nisko.
void setup () { Serial.begin (9600); pinMode (LED_BUILTIN, IZLAZ); digitalWrite (LED_BUILTIN, LOW); }
U funkciji praznine petlje izrađujemo ugrađenu LED VISOKU i očitamo podatke o temperaturi i vlažnosti sa senzora. Evo, DHT.read11 (); naredba je očitavanje podataka sa senzora. Jednom kada se podaci izračunaju, vrijednosti možemo provjeriti spremajući ih u bilo koju varijablu. Ovdje smo uzeli dvije varijable tipa float 't' i 'h' . Stoga se podaci o temperaturi i vlažnosti serijski ispisuju na serijskom monitoru.
petlja void () { Serial.println ("Dohvati podatke s DHT11"); kašnjenje (1000); digitalWrite (LED_BUILTIN, VISOKO); int readData = DHT.read11 (dataPin); // DHT11 float t = DHT.temperature; plovak h = DHT.vlažnost; Serial.print ("Temperatura ="); Serial.print (t); Serial.print ("C -"); Serial.print ("Vlaga ="); Serial.print (h); Serial.println ("%"); kašnjenje (2000);
Prije omogućavanja načina mirovanja ispisujemo "Arduino: - Idem na drijemanje" i ugrađeni LED smanjujemo. Nakon toga Arduino način mirovanja je omogućen pomoću naredbe spomenute u kodu.
Ispod koda omogućuje neaktivni režim povremenog spavanja Arduina i daje mirovanje od osam sekundi. Pretvara ADC, mjerače vremena, SPI, USART, dvožično sučelje u stanje ISKLJUČENO.
Zatim automatski budi Arduino iz sna nakon 8 sekundi i ispisuje "Arduino: - Hej, upravo sam se probudio".
Serial.println ("Arduino: - Idem na drijemanje"); kašnjenje (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: - Hej, upravo sam se probudio"); Serial.println (""); kašnjenje (2000); }
Dakle, korištenjem ovog koda Arduino će se probuditi samo 24 sekunde u minuti i ostat će u stanju mirovanja ostatak od 36 sekundi, što značajno smanjuje snagu koju Arduino meteorološka stanica troši.


Stoga, ako Arduino koristimo u načinu mirovanja, možemo približno udvostručiti vrijeme rada uređaja.
