Usypianie Arduino

Cześć!
Podczas tworzenia ostatniego projektu poszukiwałem możliwości usypiania, oraz wybudzania Arduino. Na początku natknąłem się na bardzo prostą bibliotekę Narcoleptic, dostępną tutaj. Jest w niej zdefiniowana alternatywna funkcja delay, która usypia nasz mikrokontroler na określony przez nas w kodzie czas.
Zobrazuję to na podstawie najprostszego programu migającego diodą:
Dioda zaczyna świecić. Świeci 10s, a następnie gaśnie na 100s i po tym czasie ponownie zaczyna świecić. Przez te 100s nasz procesor jest „bezczynny”

Teraz napiszemy ten sam kod stosując bibliotekę Narcoleptic:

Dzięki zastosowaniu tej biblioteki nasze Arduino zostanie uśpione w czasie bezczynności. Co zaowocuje o wiele mniejszym poborem prądu przez płytkę. W przypadku Arduino Pro Mini 5V pobór prądu bez biblioteki będzie równy 17,2 mA, a przy jej użyciu 3,2mA. Dzięki temu rozwiązaniu nasz projekt może działać o wiele dłużej na zewnętrznym źródle zasilania. Na przykład akumulatorze Li-Pol.

Wybudzanie przy pomocy zewnętrznych przerwań
Czasem możesz potrzebować wybudzić Arduino przy pomocy zewnętrznych czynników, na przykład takich jak kliknięcie przycisku. Teraz stworzymy program który wybudza nasz kontroler po naciśnięciu przycisku podłączonego do pinu numer 2. Kod jest trochę bardziej skomplikowany.Nie używam już tutaj biblioteki Narcoleptic.

W zastosowałem tutaj funkcje z biblioteki avr/sleep.h (nie jest to standardowa biblioteka Arduino). Jest to biblioteka napisana „pod” Mikrokontrolery AVR.

Zmienna volatile pozwala na komunikację pomiędzy procedurą obsługującą przerwania, a resztą szkicu.
W funkcji setup konfigurujemy piny a następnie wywołujemy funkcję goToSleep, w której określamy tryb uśpienia. W tym wypadku SLEEP_MODE_PWR_DOWN. Jest to tryb, w którym mikrokontroler pobiera najmniej prądu.

Wywołanie funkcji sleep_mode() usypia nasze Arduino. Gdy nasza płytka zostanie „wybudzona” zacznie wykonywać operacje w procedurze obsługi przerwań.
Set flag generuje znacznik, którego obecność sprawdza funkcja loop. Jeżeli znacznik został wygenerowany zostaje wywołana funkcja doSomething.

Jeżeli masz problem lub pytania związane z tematem stanu uśpienia w Arduino, pisz w komentarzach 😀

Scroll to Top