Kurs Arduino #19: Oszczędzanie energii

Kurs Arduino #19: Oszczędzanie energii

4. Przykładowy program #1: Usypianie/Budzenie po przez zewnętrzne przerwanie

Zasada działania programu będzie następująca. Od momentu uruchomienia, po 5 sekundach mikrokontroler zmienia swój tryb na Power-down, w którym zostaje „na wieki” do momentu zaistnienia przerwania. Po przerwaniu wychodzi z tego trybu, a następnie po 5 sekundach znowu zmienia swój tryb.

Schemat:

19.1 schemat

 

Program:

Na samym początku importujemy bibliotekę odpowiedzialną za tryby zasilania układu, a następnie definiujemy zmienną odliczanie, która to będzie przechowywać informacje o odliczanym czasie. Następnie w pętli startowej programu, ustawiam pin 2. (INT0) jako pin wejściowy oraz prędkości transmisji UART na 9600 baud. Następnie w pętli głównej programu realizowane jest odliczanie. Wartość początkowa to 5. Po sekundzie zmienna jest zmniejsza o 1. Następnie jeżeli zostanie spełniony warunek, że zmienna odliczanie jest mniejsza bądź równa 0 to ustaw zmienną odliczanie na 5 (aby po wyjściu z tryby Power-down można było znowu realizować odliczanie) i przejdź do klasy Spanie. W klasie Spanie ustawiamy „oczekiwanie” na przerwanie na pinie 2 (INT0) wywołane stanem niskim; po przerwaniu przejście do klasy budzenie. Teraz poniżej wybieram tryb zasilania mikrokontrolera- w naszym przypadku jest to tryb Power-down, w którym będzie układ cały czas, do momentu wystąpienia przerwania. Aby zaoszczędzić jak najwięcej prądu to wyłączyliśmy ADC i BoD. Teraz ważny moment. Może to wyglądać, że jesteśmy w martwym punkcie, ale jak wcześniej wspomniałem, zewnętrzne przerwanie  ma bardzo wysoki priorytet, w związku z czym, gdy warunek przerwania zostanie spełniony (stan niski na pinie przerwania) to wykonywanie programu przeniesie się do klasy budzenie, skąd program „wychodzi” i przechodzi do pętli głównej programu. Po wyjściu z tego trybu zasilania, mikrokontroler wyśle na UART wiadomość „nie śpię ;)” po czym zacznie wykonywać znowu pętlę główną programu.

Po wgraniu programu powinniśmy otrzymać taki efekt:

W trybie Power-save, jak przestawimy mikrokontroler na wewnętrzny generator RC 8MHz, a zamiast zewnętrznego rezonatora kwarcowego podłączymy rezonator 32,768kHz to będziemy w stanie zaoszczędzić jeszcze więcej energii
  • Radosław Józef Ziomber

    Czasowe usypinie (zamiast delay()) mozna realizowac rowniez biblioteka Narcoleptic.h

    http://github.com/rcook/narcoleptic

    • Jest wiele bibliotek typu Low Power, ale w tym poradniku chcieliśmy przedstawić taki, która skupia jak najwięcej opcji oszczędzania energii :)