- Mga Arduino Sleep Mode
- Kinakailangan ang Mga Bahagi
- USB Ammeter
- Diagram ng Circuit
- Paliwanag sa Code
Ang pagkonsumo ng kuryente ay isang kritikal na isyu para sa isang aparato na patuloy na tumatakbo sa loob ng mahabang panahon nang hindi naka-off. Kaya upang mapagtagumpayan ang problemang ito halos bawat controller ay may mode na pagtulog, na tumutulong sa mga developer na magdisenyo ng mga elektronikong gadget para sa pinakamainam na pagkonsumo ng kuryente. Inilalagay ng mode ng pagtulog ang aparato sa mode ng pag-save ng kuryente sa pamamagitan ng pag-patay sa hindi nagamit na module.
Mas maaga naming ipinaliwanag ang mode ng Deep-sleep sa ESP8266 para sa Power Saving. Ngayon ay malalaman natin ang tungkol sa Arduino Sleep Modes at ipakita ang pagkonsumo ng kuryente sa pamamagitan ng paggamit ng Ammeter. Ang isang Arduino Sleep mode ay tinukoy din bilang Arduino Power Save mode o Arduino Standby Mode.
Mga Arduino Sleep Mode
Pinapayagan ng mga Sleep Mode ang gumagamit na ihinto o patayin ang mga hindi nagamit na mga module sa Microcontroller na makabuluhang bawasan ang pagkonsumo ng kuryente. Ang Arduino UNO, Arduino Nano at Pro-mini ay mayroong ATmega328P at mayroon itong isang Brown-out Detector (BOD) na sinusubaybayan ang boltahe ng suplay sa oras ng mode ng pagtulog.
Mayroong anim na mode sa pagtulog sa ATmega328P:
Para sa pagpasok sa anuman sa mode ng pagtulog kailangan namin upang paganahin ang pagtulog nang kaunti sa Rehistro ng Control Mode ng Sleep (SMCR.SE). Pagkatapos piliin ang mga mode ng pagtulog na mga bits piliin ang mode ng pagtulog kasama ng Idle, ADC noise noise, Power-Down, Power-save, Standby at External Standby.
Ang isang panloob o panlabas na Arduino ay nakakagambala o isang Pag-reset ay maaaring gisingin ang Arduino mula sa mode ng pagtulog.
Idle Mode
Para sa pagpasok sa Idle sleep mode, isulat ang mga piraso ng SM ng controller na '000'. Itinigil ng mode na ito ang CPU ngunit payagan ang SPI, 2-wire serial interface, USART, Watchdog, counter, analog comparator upang gumana. Karaniwang pinipigilan ng idle mode ang CLK CPU at CLK FLASH. Maaaring gisingin ang Arduino anumang oras sa pamamagitan ng paggamit ng panlabas o panloob na pagkagambala.
Arduino Code para sa Idle Sleep Mode:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Mayroong isang silid-aklatan para sa pagtatakda ng iba't ibang mga mode ng mababang kapangyarihan sa arduino. Kaya unang i-download at mai-install ang library mula sa ibinigay na link at gamitin ang code sa itaas upang ilagay ang Arduino sa Idle Sleep Mode. Sa pamamagitan ng paggamit ng code sa itaas, ang Arduino ay makakatulog ng walong segundo at awtomatiko na gigising. Tulad ng nakikita mo sa code na pinapatay ng idle mode ang lahat ng mga timer, SPI, USART, at TWI (2-wire interface).
ADC Noise Reduction Mode
Upang magamit ang mode na pagtulog na ito isulat ang SM nang kaunti sa '001'. Pinahinto ng mode ang CPU ngunit pinapayagan ang ADC, panlabas na makagambala, USART, 2-wire serial interface, Watchdog, at mga counter upang gumana. Ang mode ng ADC Noise Reduction ay karaniwang hinihinto ang CLK CPU, CLK I / O at CLK FLASH. Maaari naming gisingin ang controller mula sa ADC Noise Reduction mode sa pamamagitan ng mga sumusunod na pamamaraan:
- Panlabas na Pag-reset
- Watchdog System Reset
- Nakagambala ang Watchdog
- Brown-out Reset
- Tugma sa address ng 2-wire Serial Interface
- Nakagambala ang panlabas na antas sa INT
- Pambagabagin ang pagbabago ng pin
- Maputol ang timer / Counter
- Handa nang magambala ang SPM / EEPROM
Mode na Power-Down
Pinipigilan ng mode na Power-Down ang lahat ng nabuong mga orasan at pinapayagan lamang ang pagpapatakbo ng mga asynchronous na module. Maaari itong paganahin sa pamamagitan ng pagsulat ng mga SM bit sa '010'. Sa mode na ito, ang panlabas na oscillator ay naka-OFF, ngunit ang 2-wire serial interface, watchdog at external interrupt ay patuloy na gumagana. Maaari itong hindi paganahin sa pamamagitan lamang ng isa sa mga pamamaraan sa ibaba:
- Panlabas na Pag-reset
- Watchdog System Reset
- Nakagambala ang Watchdog
- Brown-out Reset
- Tugma sa address ng 2-wire Serial Interface
- Nakagambala ang panlabas na antas sa INT
- Pambagabagin ang pagbabago ng pin
Arduino Code para sa Power-Down Periodic Mode:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
Ginagamit ang code upang i-on ang power-down mode. Sa pamamagitan ng paggamit ng code sa itaas, ang Arduino ay makakatulog ng walong segundo at awtomatiko na gigising.
Maaari din naming gamitin ang power-down mode na may isang nakakagambala, kung saan ang Arduino ay matutulog ngunit gigising lamang kapag may ibinigay na panloob o panloob na pagkagambala.
Arduino Code para sa Power-Down Interrupt Mode:
void loop () { // Payagan ang paggising na pin upang mag-trigger ng abala sa mababa. attachInterrupt (0, wakUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // Huwag paganahin ang panlabas na pin na nakakagambala sa wake up pin. detachInterrupt (0); // Gumawa ng isang bagay dito }
Mode na Power-save
Upang makapasok sa mode na pag-save ng kapangyarihan kailangan naming isulat ang SM pin sa '011'. Ang mode ng pagtulog na ito ay katulad ng mode ng power-down, may isang pagbubukod lamang ibig sabihin kung pinagana ang timer / counter, mananatili ito sa tumatakbo na estado kahit sa oras ng pagtulog. Maaaring magising ang aparato sa pamamagitan ng paggamit ng timer overflow.
Kung hindi ka gumagamit ng oras / counter, inirerekumenda na gumamit ng Power-down mode sa halip na power-save mode.
Standby Mode
Ang standby mode ay magkapareho sa Power-Down mode, ang pagkakaiba lamang sa pagitan nila ay ang panlabas na oscillator na patuloy na tumatakbo sa mode na ito. Para sa pagpapagana ng mode na ito isulat ang SM pin sa '110'.
Pinalawig na Standby Mode
Ang mode na ito ay katulad ng power-save mode lamang na may isang pagbubukod na ang oscillator ay patuloy na tumatakbo. Ang aparato ay papasok sa Extended Standby mode kapag isinulat namin ang SM pin sa '111'. Ang aparato ay kukuha ng anim na cycle ng orasan upang magising mula sa pinalawig na standby mode.
Nasa ibaba ang mga kinakailangan para sa proyektong ito, pagkatapos ng pagkonekta sa circuit ayon sa diagram ng circuit. I-upload ang code ng mode ng pagtulog sa Arduino gamit ang Arduino IDE. Papasok si Arduino sa idle mode ng pagtulog. Pagkatapos suriin ang kasalukuyang pagkonsumo sa USB ammeter. Iba pa, maaari mo ring gamitin ang isang clamp meter para sa pareho.
Kinakailangan ang Mga Bahagi
- Arduino UNO
- DHT11 Temperatura at Humidity Sensor
- USB Ammeter
- Breadboard
- Mga Koneksyon sa Mga Wires
Upang matuto nang higit pa tungkol sa paggamit ng DHT11 sa Arduino, sundin ang link. Narito ginagamit namin ang USB Ammeter upang masukat ang boltahe na natupok ng Arduino sa mode na pagtulog.
USB Ammeter
Ang USB ammeter ay isang plug at play device na ginagamit upang sukatin ang boltahe at kasalukuyang mula sa anumang USB port. Ang dongle plugs sa pagitan ng USB power supply (computer USB port) at USB device (Arduino). Ang aparato na ito ay may isang 0.05ohm risistor na linya na may power pin kung saan sinusukat nito ang halaga ng kasalukuyang iginuhit. Ang aparato ay may apat na pitong segment na display, na agad na ipinapakita ang mga halaga ng kasalukuyang at boltahe na natupok ng naka-attach na aparato. Ang mga halagang ito ay bumabalik sa isang agwat ng bawat tatlong segundo.
Pagtutukoy:
- Saklaw ng boltahe ng operating: 3.5V hanggang 7V
- Maximum na kasalukuyang rating: 3A
- Laki ng compact, madaling bitbitin
- Hindi kailangan ng panloob na suplay
Application:
- Pagsubok ng mga USB device
- Sinusuri ang mga antas ng pag-load
- Pag-debug ng mga charger ng baterya
- Mga pabrika, produktong electronics at personal na paggamit
Diagram ng Circuit
Sa setup sa itaas upang ipakita ang Arduino Deep mode ng pagtulog, ang Arduino ay naka-plug sa USB ammeter. Pagkatapos ang USB ammeter ay naka-plug sa USB port ng laptop. Ang data pin ng sensor ng DHT11 ay nakakabit sa D2 pin ng Arduino.
Paliwanag sa Code
Ang kumpletong code para sa proyekto na may isang video ay ibinibigay sa huli.
Nagsisimula ang code sa pamamagitan ng pagsasama ng library para sa sensor ng DHT11 at sa library ng LowPower . Para sa pag-download ng Mababang Power library sundin ang link. Pagkatapos ay natukoy namin ang numero ng pin ng Arduino kung saan ang data pin ng DHT11 ay konektado at lumikha ng isang bagay na DHT.
# isama
Sa walang bisa na pag- andar ng pag- setup , pinasimulan namin ang serial na komunikasyon sa pamamagitan ng paggamit ng serial.begin (9600), narito ang 9600 ay ang rate ng baud. Ginagamit namin ang built-in na LED ng Arduino bilang isang tagapagpahiwatig para sa mode ng pagtulog. Kaya, itinakda namin ang pin bilang output, at digital na sumulat nang mababa.
void setup () { Serial.begin (9600); pinMode (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, LOW); }
Sa pag- andar ng void loop , ginagawa namin ang built-in na LED TAAS at ang pagbabasa ng data ng temperatura at halumigmig mula sa sensor. Dito, DHT.read11 (); Ang utos ay binabasa ang data mula sa sensor. Kapag kinakalkula ang data, maaari nating suriin ang mga halaga sa pamamagitan ng pag-save nito sa anumang variable. Dito, kumuha kami ng dalawang variable na uri ng float na 't' at 'h' . Samakatuwid, ang data ng temperatura at kahalumigmigan ay naka-print na serial sa serial monitor.
void loop () { Serial.println ("Kumuha ng Data Mula sa DHT11"); pagkaantala (1000); digitalWrite (LED_BUILTIN, TAAS); int readData = DHT.read11 (dataPin); // DHT11 float t = DHT.temperature; float h = DHT.humidity; Serial.print ("Temperatura ="); Serial.print (t); Serial.print ("C -"); Serial.print ("Humidity ="); Serial.print (h); Serial.println ("%"); pagkaantala (2000);
Bago paganahin ang mode ng pagtulog ay naglilimbag kami ng "Arduino: - Pupunta ako para sa isang Nap" at ginagawa ang built sa LED Mababang. Pagkatapos nito ang Arduino mode ng pagtulog ay pinagana sa pamamagitan ng paggamit ng utos na nabanggit sa ibaba sa code.
Sa ibaba ng code ay nagbibigay-daan sa idle periodic sleep mode ng Arduino at nagbibigay ng pagtulog ng walong segundo. Ginagawa nitong interface ng ADC, Timers, SPI, USART, 2-wire sa kondisyon na OFF.
Pagkatapos ay awtomatiko nitong ginising si Arduino mula sa pagtulog pagkalipas ng 8 segundo at i-print ang "Arduino: - Hoy Nagising na lang ako".
Serial.println ("Arduino: - Pupunta ako para sa isang Nap"); pagkaantala (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: - Hoy Nagising na lang ako"); Serial.println (""); pagkaantala (2000); }
Kaya sa pamamagitan ng paggamit ng code na ito ang Arduino ay magigising lamang sa loob ng 24 segundo sa isang minuto at mananatili sa mode ng pagtulog sa natitirang 36 segundo, na makabuluhang bawasan ang lakas na natupok ng istasyon ng panahon ng Arduino.
Samakatuwid, kung gagamitin namin ang Arduino kasama ang mode na pagtulog, maaari naming madoble ang runtime ng aparato.