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.

Schéma zapojenia

Ú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;
    digitalWrite(PIN_LED, state);
}

void setup(){
    pinMode(PIN_BTN, INPUT_PULLUP);
    pinMode(PIN_LED, OUTPUT);
    attachInterrupt (digitalPinToInterrupt(PIN_BTN), toggle, FALLING);
}

void loop(){
    delay(1 * 1000);
}

Ú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á:

set_sleep_mode(SLEEP_MODE_PWR_DOWN);
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

  1. Uspite mikrokontrolér bez možnosti jeho zobudenia za pomoci prerušenia.

Additional Sources