Energijos suvartojimas yra svarbi problema, kai prietaisas veikia ilgai ir neišjungiamas. Taigi, norint įveikti šią problemą, beveik kiekviename valdiklyje yra miego režimas, kuris padeda kūrėjams kurti elektronines įtaisus, kad būtų galima optimaliai suvartoti energiją. Miego režimu prietaisas įjungiamas energijos taupymo režimu, išjungiant nenaudotą modulį.
Anksčiau mes paaiškinome gilaus miego režimą ESP8266, skirtą energijos taupymui. Šiandien mes sužinosime apie „ Arduino“ miego režimus ir parodysime energijos suvartojimą naudodami „Ammeter“. „Arduino“ miego režimas taip pat vadinamas „ Arduino“ energijos taupymo arba „ Arduino“ budėjimo režimu.
„Arduino“ miego režimai
Miego režimai leidžia vartotojui sustabdyti arba išjungti nenaudojamus mikrovaldiklio modulius, kurie žymiai sumažina energijos suvartojimą. „Arduino UNO“, „Arduino Nano“ ir „Pro-mini“ yra su „ATmega328P“ ir turi „Brown-out“ detektorių (BOD), kuris stebi maitinimo įtampą miego režimu.
„ATmega328P“ yra šeši miego režimai:
Norėdami įjungti bet kurį miego režimą, turime įjungti miego režimą miego režimo valdymo registre (SMCR.SE). Tada miego režimo pasirinkimo bitai pasirenka miego režimą tarp laukimo, ADC triukšmo mažinimo, maitinimo išjungimo, energijos taupymo, budėjimo ir išorinio budėjimo režimų.
Vidinis ar išorinis „Arduino“ pertraukimas arba „Reset“ gali pažadinti „Arduino“ iš miego režimo.
Laukimo režimas
Norėdami pereiti į laukimo režimą, parašykite valdiklio SM bitus „000“. Šis režimas sustabdo procesorių, tačiau leidžia veikti SPI, 2 laidų nuoseklioji sąsaja, USART, „Watchdog“, skaitikliai, analoginis lygintuvas. Laukimo režimu iš esmės sustabdomas CLK procesorius ir CLK FLASH. „Arduino“ gali būti pažadintas bet kuriuo metu naudojant išorinį arba vidinį pertraukimą.
„Arduino“ kodas ramybės miego režimui:
„LowPower.idle“ (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Yra biblioteka, skirta nustatyti įvairius mažos galios režimus „arduino“. Taigi pirmiausia atsisiųskite ir įdiekite biblioteką iš nurodytos nuorodos ir naudokite aukščiau esantį kodą, kad „Arduino“ būtų įjungtas laukimo režimu. Naudodamas pirmiau pateiktą kodą, „Arduino“ užmigs aštuonias sekundes ir automatiškai pabus. Kaip matote kode, laukimo režimas išjungia visus laikmačius, SPI, USART ir TWI (2 laidų sąsaja).
ADC triukšmo mažinimo režimas
Norėdami naudoti šį miego režimą, įrašykite SM bitą į „001“. Režimas sustabdo procesorių, tačiau leidžia veikti ADC, išorinio pertraukimo, USART, 2 laidų nuosekliosios sąsajos, Watchdog ir skaitiklių. ADC triukšmo mažinimo režimas iš esmės sustabdo CLK procesorių, CLK I / O ir CLK FLASH. Valdiklį galime pažadinti iš ADC triukšmo mažinimo režimo šiais būdais:
- Išorinis atstatymas
- Sargybos sistemos nustatymas iš naujo
- Sargybos pertraukimas
- „Brown-out Reset“
- 2 laidų nuosekliosios sąsajos adreso atitikimas
- Išorinio lygio pertraukimas INT
- Smeigtuko keitimo pertraukimas
- Laikmatis / skaitiklis pertraukiamas
- Parengtas SPM / EEPROM pertraukimas
Išjungimo režimas
„Power-Down“ režimas sustabdo visus sugeneruotus laikrodžius ir leidžia valdyti tik asinchroninius modulius. Jį galima įjungti parašius SM bitus į „010“. Šiuo režimu išorinis osciliatorius išsijungia, tačiau toliau veikia 2 laidų nuoseklioji sąsaja, sargybinis ir išorinis pertraukimas. Jį galima išjungti tik vienu iš toliau nurodytų būdų:
- Išorinis atstatymas
- Sargybos sistemos nustatymas iš naujo
- Sargybos pertraukimas
- „Brown-out Reset“
- 2 laidų nuosekliosios sąsajos adreso atitikimas
- Išorinio lygio pertraukimas INT
- Smeigtuko keitimo pertraukimas
„Arduino“ kodas, skirtas periodiniam išjungimo režimui:
„LowPower.powerDown“ (SLEEP_8S, ADC_OFF, BOD_OFF);
Kodas naudojamas įjungti maitinimo išjungimo režimą. Naudodamas pirmiau pateiktą kodą, „Arduino“ užmigs aštuonias sekundes ir automatiškai pabus.
Mes taip pat galime naudoti išjungimo režimą su pertraukimu, kai „Arduino“ eis miegoti, bet pabunda tik tada, kai numatomas išorinis ar vidinis pertraukimas.
„Arduino“ išjungimo pertraukimo režimo kodas:
void loop () { // Leiskite „Wake Wake“ suaktyvinti pertraukimą žemoje būsenoje. attachInterrupt (0, wakeUp, LOW); „LowPower.powerDown“ (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // Išjungti išorinį kaiščio pertraukimą pabudus. atjungtiTrikdyti (0); // Daryk čia ką nors }
Energijos taupymo režimas
Norėdami pereiti į energijos taupymo režimą, turime įrašyti SM kaištį į „011“. Šis miego režimas yra panašus į išjungimo režimą, tik su viena išimtimi, ty jei įjungtas laikmatis / skaitiklis, jis veiks veikimo režimu net miego metu. Prietaisą galima pažadinti naudojant laikmačio perpildymą.
Jei nenaudojate laiko / skaitiklio, rekomenduojama vietoj energijos taupymo režimo naudoti išjungimo režimą.
Budėjimo režimas
Budėjimo režimas yra identiškas „Power-Down“ režimui, vienintelis skirtumas tarp jų yra išorinis osciliatorius, veikiantis šiuo režimu. Norėdami įjungti šį režimą, įrašykite SM kaištį į „110“.
Išplėstinis budėjimo režimas
Šis režimas yra panašus į energijos taupymo režimą, išskyrus vieną išimtį, kad osciliatorius veikia toliau. Įrenginys pereis į išplėstinio budėjimo režimą, kai SM kaištį įrašysime į „111“. Įrenginys užtruks šešis laikrodžio ciklus, kad pabustų iš išplėstinio budėjimo režimo.
Žemiau yra šio projekto reikalavimai, prijungus grandinę pagal schemą. Įkelkite miego režimo kodą į „Arduino“ naudodami „Arduino IDE“. „Arduino“ pereis į laukimo režimą. Tada patikrinkite srovės suvartojimą į USB ampermetrą. Kitaip, jūs taip pat galite naudoti spaustukų matuoklį.
Būtini komponentai
- „Arduino UNO“
- DHT11 temperatūros ir drėgmės jutiklis
- USB ampermetras
- Bandomoji Lenta
- Laidų sujungimas
Norėdami sužinoti daugiau apie DHT11 naudojimą su „Arduino“, spustelėkite nuorodą. Čia mes naudojame USB ampermetrą, kad pamatuotume „Arduino“ sunaudotą įtampą miego režimu.
USB ampermetras
USB ampermetras yra „plug and play“ įrenginys, naudojamas bet kokio USB prievado įtampai ir srovei matuoti. Dongle jungiamas tarp USB maitinimo šaltinio (kompiuterio USB prievado) ir USB įrenginio („Arduino“). Šis prietaisas turi 0,05 omų varžą, esantį tiesiai su maitinimo kaiščiu, per kurį matuoja ištraukiamos srovės vertę. Įrenginyje yra keturi septynių segmentų ekranai, kuriuose iškart rodomos pritvirtinto prietaiso sunaudojamos srovės ir įtampos vertės. Šios vertės apverčiamos kas tris sekundes.
Specifikacija:
- Darbinės įtampos diapazonas: nuo 3,5 V iki 7 V
- Didžiausias srovės įvertinimas: 3A
- Kompaktiškas dydis, lengva nešiotis
- Išorinio tiekimo nereikia
Naudojimas:
- Testuojami USB įrenginiai
- Apkrovos lygio tikrinimas
- Akumuliatorių įkroviklių derinimas
- Gamyklos, elektronikos gaminiai ir asmeninis naudojimas
Grandinės schema
Pirmiau pateiktoje sąrankoje, kad būtų parodyti „ Arduino Deep“ miego režimai, „Arduino“ yra prijungtas prie USB ampermetro. Tada USB ampermetras prijungiamas prie nešiojamojo kompiuterio USB prievado. DHT11 jutiklio duomenų kaištis pritvirtintas prie „Arduino“ D2 kaiščio.
Kodo paaiškinimas
Pabaigoje pateikiamas visas projekto kodas su vaizdo įrašu.
Kodas prasideda įtraukiant DHT11 jutiklio biblioteką ir „ LowPower“ biblioteką. Norėdami atsisiųsti „Low Power“ biblioteką, spustelėkite nuorodą. Tada mes nustatėme „Arduino“ PIN kodą, prie kurio prijungtas DHT11 duomenų kaištis, ir sukūrėme DHT objektą.
# įtraukti
Naudodamiesi negaliojančia sąrankos funkcija, mes pradėjome nuoseklųjį ryšį naudodami serial.begin (9600), čia 9600 yra duomenų perdavimo sparta. Mes naudojame „Arduino“ įmontuotą šviesos diodą kaip miego režimo indikatorių. Taigi, mes nustatėme kaištį kaip išvestį, o skaitmeninis rašymas yra mažas.
negaliojanti sąranka () { Serial.begin (9600); pinMode (LED_BUILTIN, OUTPUT); „digitalWrite“ (LED_BUILTIN, LOW); }
Į void loop funkcijos, mes darome įmontuotą LED didelis ir skaitymo temperatūra ir drėgmė duomenis iš jutiklių. Čia DHT.read11 (); komanda nuskaito duomenis iš jutiklio. Apskaičiavus duomenis, mes galime patikrinti reikšmes išsaugodami juos bet kuriame kintamajame. Čia mes paėmėme du plūduriuojančio tipo kintamuosius „t“ ir „h“ . Taigi serijos monitoriuje nuosekliai spausdinami temperatūros ir drėgmės duomenys.
void loop () { Serial.println ("Gauti duomenis iš DHT11"); vėlavimas (1000); „digitalWrite“ (LED_BUILTIN, HIGH); int readData = DHT.read11 (dataPin); // DHT11 plūdė t = DHT.temperatūra; plūdė h = DHT. drėgmė; Serial.print („Temperatūra =“); Serijinis spaudinys (t); Serial.print („C -“); Serial.print ("Drėgmė ="); Serijinis spaudinys (h); Serial.println ("%"); vėlavimas (2000);
Prieš įjungdami miego režimą, spausdiname „Arduino: - Aš einu į Nap“ ir padarome įmontuotą „LED Low“. Po to „Arduino“ miego režimas įjungiamas naudojant žemiau esančią kodą komandą.
Žemiau pateiktas kodas įgalina nenaudojamą „Arduino“ periodinio miego režimą ir suteikia miego režimą aštuonias sekundes. ADC, laikmačius, SPI, USART, 2 laidų sąsają paverčia išjungta.
Tada jis automatiškai pažadina „Arduino“ iš miego po 8 sekundžių ir atspausdina „Arduino: - Ei aš ką tik pabudau“.
Serial.println („Arduino: - Aš einu už Napą“); vėlavimas (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: - Ei, aš ką tik pabudau“); Serial.println (""); vėlavimas (2000); }
Taigi naudodamas šį kodą „ Arduino“ pabus tik 24 sekundes per minutę ir liks miego režimu likusias 36 sekundes, o tai žymiai sumažins „Arduino“ meteorologijos stoties suvartojamą energiją.
Todėl, jei „Arduino“ naudojame su miego režimu, galime maždaug padvigubinti įrenginio veikimo laiką.