Reducing Power with Sleep Modes
prerušenia, režim spánku, meranie spotreby zariadenia
About
Pozrieme sa na to, akú spotrebu má Arduino Uno v režime spánku.
Goals
- Porozumieť mechanizmu spánku mikrokontroléra.
- Zabezpečiť zobudenie Arduino Uno pomocou externého prerušenia.
Content
Step 1: Prepare Your Environment
Ešte pred samotnou prácou skontroluj, či máš prichystané a pripravené všetko potrebné.
Úloha 1.1
Overte, či máte pre potreby cvičenia pripravené všetky potrebné komponenty.
Na toto cvičenie budete potrebovať: * Arduino Uno * kábel Jack-9V * kontaktné pole * prepojovacie vodiče * tlačidlo, LED diódu, 220 óhmový odpor * externý zdroj * multimeter * banániky
Úloha 1.2
Overte, či má externý zdroj všetky výstupy nastavené na minimum.
To overíte jednoducho tým, že všetky potenciometre, pomocou ktorých dochádza k nastaveniu rozsahu, vytočíte ešte pred zapojením a spustením úplne vľavo (na minimum).
Step 2: Light Switch
Pre experimentovanie použijeme rovnaké zapojenie ako na minulom cvičení. Vytvoríme teda opäť jednoduché zapojenie, kde po stlačení tlačidla dôjde k prepnutiu jeho stavu, ktorý bude signalizovaný pomocou LED diódy. Tá bude buď zhasnutá alebo rozsvietená.
Úloha 2.1
{: .task}
Podľa priloženej schémy pripojte k prototypovacej doske Arduino Uno tlačidlo a LED diódu.
Úloha 2.2
Vytvorte program, ktorý bude vedieť pomocou tlačidla prepínať stav LED diódy s využitím prerušenia.
Ako riešenie použite svoj minulotýždňový program alebo napríklad toto riešenie:
// macros
#define PIN_LED 2
#define PIN_BTN 3
volatile bool state = false;
// ISR function
void toggle(){
= !state;
state (PIN_LED, state);
digitalWrite}
void setup(){
(PIN_BTN, INPUT_PULLUP);
pinMode(PIN_LED, OUTPUT);
pinMode(digitalPinToInterrupt(PIN_BTN), toggle, FALLING);
attachInterrupt }
void loop(){
(1 * 1000);
delay}
Úloha 2.3
Overte správnosť svojho riešenia.
Step 3: Good Night, Arduino
Pri meraní spotreby sme zistili, že v prípade použitia prerušenia alebo pollingu nebol v odbere žiadny rozdiel. Na to, aby sme mohli ušetriť energiu, potrebujeme Arduino Uno uspať. O to sa pokúsime v tomto kroku a rovnako tak aj zmeriame, koľko energie sme ušetrili.
Úloha 3.1
Uveďte Arduino Uno do režimu spánku
SLEEP_MODE_IDLE
.
Na prepnutie mikrokontroléra ATmega328P do režimu spánku je možné použiť nasledovné makrá:
(SLEEP_MODE_PWR_DOWN);
set_sleep_mode(); sleep_mode
Pomocou makra set_sleep_mode()
dôjde k nastaveniu typu
režimu spánku, pričom ako režim je možné vybrať jednu z nasledovných
konštánt:
SLEEP_MODE_IDLE
SLEEP_MODE_ADC
SLEEP_MODE_PWR_SAVE
SLEEP_MODE_STANDBY
SLEEP_MODE_PWR_DOWN
Po zavolaní makra sleep_mode()
sa mikrokontrolér uspí.
Nezabudnite preto mať pripravené ošetrenie zobudenia predtým, ako
mikrokontrolér do režimu spánku prejde!
Úloha 3.3
Otestujte vaše riešenie.
Ak ste postupovali správne, funkčnosť riešenia sa nijako nezmení - po stlačení tlačidla dôjde k prepnutiu stavu LED diódy. To, že Arduino spí, nebude navonok nijako poznať.
Úloha 3.4
Odmerajte spotrebu prototypovacej dosky Arduino Uno pred a po uvedení do režimu spánku.
Tentokrát by mala byť zmena v spotrebe viditeľná. Odber mikrokontroléra pred a po uvedení do režimu spánku by mal byť rozdielny. Porovnať môžete rovnako aj rozdiel v spotrebe v situácii, keď LED dióda svieti a nesvieti.
Úloha 3.5
Odmerajte spotrebu prototypovacej dosky Arduino Uno vo všetkých režimoch spánku a zhodnoťte, ktorý režim je najúspornejší.
Step 4: Clean Your Environment
Po skončení uveďte svoje pracovisko do pôvodného stavu.
Úloha 4.1
Zmažte z disku svoje riešenie vytvorené v editore.
Úloha 4.2
Rozpojte zapojenie a uložte jeho súčasti na pôvodné miesto.
Úloha 4.3
Vypnite zdroj napätia a jeho potenciometrie nastavte na minimálnu hodnotu.
Additional Tasks
- Uspite mikrokontrolér bez možnosti jeho zobudenia za pomoci prerušenia.