Virrankulutus on kriittinen ongelma laitteelle, joka toimii jatkuvasti pitkään ilman virtaa. Joten tämän ongelman voittamiseksi melkein jokaisessa ohjaimessa on lepotila, joka auttaa kehittäjiä suunnittelemaan elektronisia laitteita optimaalisen virrankulutuksen saavuttamiseksi. Lepotilassa laite kytketään virransäästötilaan sammuttamalla käyttämätön moduuli.
Aikaisemmin olemme selittäneet syvä lepotilaa ESP8266: ssa virransäästöä varten. Tänään opimme Arduino-lepotiloista ja osoitamme virrankulutuksen Ammeterillä. Arduino-lepotilaa kutsutaan myös nimellä Arduino Virransäästötila tai Arduino Valmiustila.
Arduino-lepotilat
Lepotilojen avulla käyttäjä voi pysäyttää tai sammuttaa mikro-ohjaimen käyttämättömät moduulit, mikä vähentää merkittävästi virrankulutusta. Arduino UNO, Arduino Nano ja Pro-mini toimitetaan ATmega328P: n mukana, ja siinä on Brown-out Detector (BOD), joka valvoo syöttöjännitettä lepotilassa.
ATmega328P: ssä on kuusi lepotilaa:
Jos haluat siirtyä johonkin lepotilasta, meidän on otettava unibitti käyttöön lepotilan hallintarekisterissä (SMCR.SE). Sitten lepotilan valintabitit valitsevat lepotilan joutokäynnin, ADC-melunvaimennuksen, virrankatkaisun, virransäästön, valmiustilan ja ulkoisen valmiustilan välillä.
Sisäinen tai ulkoinen Arduino-keskeytys tai nollaus voi herättää Arduinon lepotilasta.
Valmiustila
Kirjoita lepotilaan siirtymiseksi kirjoittamalla ohjaimen SM-bitit '000'. Tämä tila pysäyttää suorittimen, mutta sallii SPI: n, 2-johdinisen sarjaliitännän, USART: n, Watchdogin, laskureiden ja analogisen vertailijan toiminnan. Valmiustila pysäyttää periaatteessa CLK- suorittimen ja CLK FLASH -toiminnon. Arduino voidaan herättää milloin tahansa ulkoisella tai sisäisellä keskeytyksellä.
Arduino-koodi lepotilassa:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Arduinossa on kirjasto erilaisten pienitehoisten tilojen asettamiseen. Joten lataa ja asenna ensin kirjasto annetusta linkistä ja aseta Arduino valmiustilaan lepotilaan käyttämällä yllä olevaa koodia. Käyttämällä yllä olevaa koodia Arduino nukkuu kahdeksan sekuntia ja herää automaattisesti. Kuten koodista voi nähdä, että lepotila sammuttaa kaikki ajastimet, SPI, USART ja TWI (2-johdinliitäntä).
ADC-kohinanvaimennustila
Käytä tätä lepotilaa kirjoittamalla SM-bitti '001'. Tila pysäyttää suorittimen, mutta sallii ADC: n, ulkoisen keskeytyksen, USART: n, 2-johdinisen sarjaliitännän, Watchdogin ja laskureiden toiminnan. ADC-kohinanvaimennustila pysäyttää periaatteessa CLK- suorittimen, CLK I / O- ja CLK FLASH -toiminnot. Voimme herättää ohjaimen ADC-melunvaimennustilasta seuraavilla tavoilla:
- Ulkoinen nollaus
- Watchdog-järjestelmän nollaus
- Vahtikoira keskeytä
- Ruskea-out Nollaa
- 2-johdininen sarjaliitännän osoitteen vastaavuus
- Ulkoisen tason keskeytys INT: ssä
- Nastanvaihdon keskeytys
- Ajastimen / laskurin keskeytys
- SPM / EEPROM-valmius keskeytys
Virrankatkaisutila
Virrankatkaisutila pysäyttää kaikki muodostetut kellot ja sallii vain asynkronisten moduulien toiminnan. Se voidaan ottaa käyttöön kirjoittamalla SM-bitit arvoon '010'. Tässä tilassa ulkoinen oskillaattori sammuu, mutta 2-johdininen sarjaliitäntä, vahtikoira ja ulkoinen keskeytys toimivat edelleen. Se voidaan poistaa käytöstä vain yhdellä seuraavista tavoista:
- Ulkoinen nollaus
- Watchdog-järjestelmän nollaus
- Vahtikoira keskeytä
- Ruskea-out Nollaa
- 2-johdininen sarjaliitännän osoitteen vastaavuus
- Ulkoisen tason keskeytys INT: ssä
- Nastanvaihdon keskeytys
Arduino-koodi virransäästöjaksolle:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
Koodia käytetään virran katkaisutilan kytkemiseen päälle. Käyttämällä yllä olevaa koodia Arduino nukkuu kahdeksan sekuntia ja herää automaattisesti.
Voimme myös käyttää virrankatkaisutilaa keskeytyksellä, jossa Arduino siirtyy lepotilaan, mutta herää vain, kun ulkoinen tai sisäinen keskeytys on annettu.
Arduino-koodi virrankatkaisun keskeytystilaa varten:
void loop () { // Anna herätystapin laukaista keskeytys matalalla. attachInterrupt (0, wakeUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // Poista ulkoinen tapin keskeytys käytöstä herätystapissa. irrottaa Keskeytä (0); // Tee jotain täällä }
Virransäästötila
Virransäästötilaan siirtymiseksi meidän on kirjoitettava SM-nasta '011'. Tämä lepotila on samanlainen kuin virrankatkaisutila, vain yhtä poikkeusta lukuun ottamatta, ts. Jos ajastin / laskuri on käytössä, se pysyy käynnissä myös lepotilassa. Laite voidaan herättää käyttämällä ajastimen ylivuotoa.
Jos et käytä aikaa / laskuria, on suositeltavaa käyttää virrankatkaisutilaa virransäästötilan sijaan.
Valmiustila
Valmiustila on identtinen virrankatkaisutilan kanssa, ainoa ero niiden välillä on tässä tilassa jatkuva ulkopuolinen oskillaattori. Tämän tilan ottamiseksi käyttöön, kirjoita SM-nasta '110'.
Laajennettu valmiustila
Tämä tila on samanlainen kuin virransäästötila, paitsi että oskillaattori on käynnissä. Laite siirtyy laajennettuun valmiustilaan, kun kirjoitamme SM-nastan '111'. Laitteella kestää kuusi kellojaksoa herätettäessä laajennetusta valmiustilasta.
Alla on tämän projektin vaatimukset, kun piiri on kytketty piirikaavion mukaisesti. Lataa lepotilan koodi Arduinoon Arduino IDE: n avulla. Arduino siirtyy lepotilaan. Tarkista sitten virrankulutus USB-ampeerimittarista. Muuten, voit käyttää myös kiinnitysmittaria.
Tarvittavat komponentit
- Arduino UNO
- DHT11 lämpötila- ja kosteusanturi
- USB-ampeerimittari
- Leipälauta
- Johtojen liittäminen
Saat lisätietoja DHT11: n käytöstä Arduinon kanssa seuraamalla linkkiä. Täällä käytämme USB-ampeerimittaria mittaamaan Arduinon kuluttamaa jännitettä lepotilassa.
USB-ampeerimittari
USB-ampeerimittari on plug and play -laite, jota käytetään mittaamaan minkä tahansa USB-portin jännitettä ja virtaa. Dongle liitetään USB-virtalähteen (tietokoneen USB-portti) ja USB-laitteen (Arduino) väliin. Tällä laitteella on 0,05 ohmin vastus linjassa virtatapin kanssa, jonka kautta se mittaa vedetyn virran arvon. Laitteessa on neljä seitsemän segmentin näyttöä, jotka näyttävät välittömästi liitetyn laitteen kuluttaman virran ja jännitteen arvot. Nämä arvot kääntyvät kolmen sekunnin välein.
Erittely:
- Käyttöjännitealue: 3,5 V - 7 V
- Suurin virrankulutus: 3A
- Kompakti koko, helppo kuljettaa
- Ulkoista syöttöä ei tarvita
Sovellus:
- Testataan USB-laitteita
- Kuormituksen tarkistaminen
- Akkulaturien virheenkorjaus
- Tehtaat, elektroniikkatuotteet ja henkilökohtainen käyttö
Piirikaavio
Arduino Deep-lepotilojen osoittamiseksi yllä olevassa asetuksessa Arduino kytketään USB-ampeerimittariin. Sitten USB-ampeerimittari kytketään kannettavan tietokoneen USB-porttiin. DHT11-anturin tietotappi on kiinnitetty Arduinon D2-nastaan.
Koodin selitys
Projektin täydellinen koodi ja video annetaan lopussa.
Koodi aloitetaan sisällyttämällä DHT11-anturin kirjasto ja LowPower- kirjasto. Lataa linkki pienitehoisen kirjaston lataamiseen. Sitten olemme määrittäneet Arduino-pin-numeron, johon DHT11: n datanapa on kytketty, ja luoneet DHT-objektin.
#sisältää
Vuonna mitätön setup toiminto, olemme aloittaneet Sarjaliikenteen avulla serial.begin (9600), tässä 9600 on siirtonopeus. Käytämme Arduinon sisäänrakennettua LEDiä lepotilan indikaattorina. Joten olemme asettaneet nastan lähdöksi ja digitaalisen kirjoituksen matalaksi.
void setup () { Sarja.alku (9600); pinMode (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, LOW); }
On mitätön silmukan toiminto, teemme sisäänrakennettu LED HIGH ja lukema lämpötila ja kosteus anturin tiedot. Täällä DHT.read11 (); komento lukee tietoja anturista. Kun tiedot on laskettu, voimme tarkistaa arvot tallentamalla ne mihin tahansa muuttujaan. Tässä olemme ottaneet kaksi float-tyyppistä muuttujaa 't' ja 'h' . Siksi lämpötila- ja kosteustiedot tulostetaan sarjakuvasarjaan.
void loop () { Serial.println ("Hae tietoja DHT11: ltä"); viive (1000); digitalWrite (LED_BUILTIN, HIGH); int readData = DHT.read11 (dataPin); // DHT11- kelluva t = DHT-lämpötila; kelluva h = DHT. kosteus; Sarjaprintti ("Lämpötila ="); Sarjaprintti (t); Sarjaprintti ("C -"); Sarja.tulos ("Kosteus ="); Sarjaprintti (h); Serial.println ("%"); viive (2000);
Ennen lepotilan ottamista käyttöön tulostamme "Arduino: - Menen Napille" ja teemme sisäänrakennetusta LED-valosta matalan. Sen jälkeen Arduino-lepotila otetaan käyttöön koodissa alla mainitulla komennolla.
Koodin alapuolella voit ottaa Arduinon säännöllisen lepotilan käyttöön ja antaa nukkua kahdeksan sekuntia. Se muuttaa ADC, ajastimet, SPI, USART, 2-johdinliitännän OFF-tilaksi.
Sitten se herättää Arduinon automaattisesti unesta 8 sekunnin kuluttua ja tulostaa "Arduino: - Hei, minä juuri heräsin".
Serial.println ("Arduino: - Menen Napille"); viive (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, minä juuri heräsin"); Sarja.println (""); viive (2000); }
Joten tätä koodia käyttämällä Arduino herää vain 24 sekuntia minuutissa ja pysyy lepotilassa loput 36 sekuntia, mikä vähentää merkittävästi Arduino-sääaseman kuluttamaa virtaa.
Siksi, jos käytämme Arduinoa lepotilan kanssa, voimme kaksinkertaistaa laitteen ajon.