Jakie są (lub jak korzystać) opcje oszczędzania energii Arduino w celu przedłużenia żywotności baterii?

40

W przypadku projektów zasilanych energią słoneczną i bateriami zmniejszenie zużycia energii jest koniecznością.

Wiem trochę o używaniu timera i przerywaniu w celu uśpienia mikrokontrolera, gdy on nic nie robi.

Przeczytałem również, że możesz wyłączyć niektóre urządzenia peryferyjne, aby dodatkowo oszczędzać energię.

Oto strona wyjaśniająca te: Techniki oszczędzania energii

Moje pytanie:

  • Jakie są inne techniki oszczędzania energii?
  • Czy są jakieś biblioteki, które ułatwiają korzystanie z tych funkcji AVR?
sachleen
źródło

Odpowiedzi:

33

Uwaga: Chciałem zaznaczyć, że nawet jeśli moja odpowiedź została zaakceptowana, czytelnik (ty) powinien najpierw przeczytać odpowiedź Anindo, jeśli naprawdę chcesz oszczędzać energię za pomocą dowolnej płyty Arduino. Kiedy zajmujesz się tymi elementami w swoim projekcie, powinieneś przeczytać moją odpowiedź i martwić się, jak ustawić MCU w tryb niskiego poboru mocy.

To powiedziawszy, istnieje kilka technik oszczędzania energii Arduino. Wymienię kilka, a następnie wskażę stronę, która objaśni je bardziej szczegółowo.

  1. Chociaż kontroler nie robi nic ważnego (na przykład między jednym odczytem czujnika a następnym), możesz ustawić kontroler w jednym z poniższych trybów uśpienia za pomocą polecenia set_sleep_mode (SLEEP_MODE_PWR_DOWN). Przy każdym trybie jest przybliżony pobór mocy dla każdego trybu.

    • SLEEP_MODE_IDLE: 15 mA
    • SLEEP_MODE_ADC: 6,5 mA
    • SLEEP_MODE_PWR_SAVE: 1,62 mA
    • SLEEP_MODE_EXT_STANDBY: 1,62 mA
    • SLEEP_MODE_STANDBY: 0,84 mA
    • SLEEP_MODE_PWR_DOWN: 0,36 mA
  2. Wyłącz wykrywanie zaniku zasilania (zespół obwodów, który wyłącza sterownik po wykryciu niskiego napięcia).

  3. Wyłącz ADC (konwersja analogowo-cyfrowa)

  4. Użyj wewnętrznego zegara

Następnie, kiedy uśpisz kontroler, musisz użyć jednego lub więcej mechanizmów poniżej, aby obudzić kontroler i coś z nim zrobić:

  • Obudź się z sygnałem

  • Obudź się z zegarem

To jest podsumowanie, które zrobiłem z -

Ten artykuł dotyczy głównie ATmega328P, ale technika ta dotyczy również innych kontrolerów kompatybilnych z Arduino. Jak dobrze powiedział TheDoctor, musisz sprawdzić arkusz danych, aby upewnić się, że kontroler obsługuje dowolną z tych technik i jak to zrobić dokładniej.

Ricardo
źródło
2
Dziękuję za odniesienie do mojej strony www.gammon.com.au/power . Wykorzystanie wszystkich wymienionych na nim technik powinno umożliwić Ci zużycie około 100 nA (0,1 µA). Inne techniki, które mogą mieć duży wpływ, to praca z niższą częstotliwością i niższym napięciem. Plus to, co powiedziała Anindo Ghosh o niestosowaniu regulatorów napięcia. Zrobiłem czujnik temperatury i wilgotności - zasilany bateryjnie, który wykorzystuje wiele z tych technik, który po kilku latach wciąż działa bardzo dobrze.
Nick Gammon
@NickGammon - Szczerze mówiąc, uważam, że Twój doskonały artykuł zasługiwał na lepsze referencje, więc zredagowałem swoją odpowiedź w tym zakresie. Dziękujemy za świetny artykuł - bardzo jasny i kompletny! Witamy w Arduino.SE. Dobrze cię tu mieć.
Ricardo
24

W rzeczywistości największym marnotrawcą energii na płycie Arduino jest liniowy regulator napięcia.

  1. Dopóki mikrokontroler na płycie, diody LED lub inne urządzenia peryferyjne pobierają prąd, regulator liniowy marnuje moc równą difference between supply and board voltagex current drawn.

    Tak więc pierwszym rozwiązaniem byłoby odłączenie wskaźnika LED zasilania na płycie i nie używanie w jak największym stopniu innych diod LED. Po drugie, zasil płytę możliwie niskim napięciem wystarczającym do zasilania regulatora pokładowego.

  2. W oryginalnych konstrukcjach zastosowane regulatory napięcia nie mają niskiego prądu spoczynkowego. Oznacza to, że nawet bez pobierania mocy przez płytę, sam regulator marnuje sporo energii przez cały czas, gdy jest włączony.

    Łatwym rozwiązaniem jest zastąpienie wbudowanego regulatora LDO (liniowym regulatorem o niskim spadku) przystosowanym do ekstremalnie niskiego prądu spoczynkowego. Wyszukiwania parametryczne w różnych witrynach dostawców przyniosą prawdopodobne substytuty.

  3. Nawet przy powyższych krokach płyta Arduino nie zapewnia mechanizmu ustawiania LDO w tryb niskiego poboru mocy, jeśli wybrany LDO to obsługuje. Energooszczędne konstrukcje zwykle wykorzystują pin „tryb uśpienia” na regulatorach napięcia, aby zaoszczędzić sporo energii - tutaj nie ma opcji.

Nawet przy wszystkich możliwych trybach oszczędzania energii i sztuczkach zastosowanych na poziomie mikrokontrolera, Arduino po prostu nie jest zaprojektowany tak, aby był urządzeniem o bardzo niskim poborze mocy po wyjęciu z pudełka. Po eksperymentowaniu z kilkoma nietrywialnymi aplikacjami odkryłem, że najlepszym, który jest realistycznie osiągalny, jest oszczędność energii o około 10% do 30% w zależności od zastosowania, ponieważ regulator napięcia i diody LED i tak zużywają resztę.

Anindo Ghosh
źródło
2
zasilaj płytkę możliwie niskim napięciem wystarczającym do zasilania wbudowanego regulatora lub zasilaj napięciem 5V za pomocą zhakowanego kabla USB.
Anonimowy pingwin
13

Możesz przeczytać 200-stronicowy arkusz danych, a następnie zadzierać z mylącymi przesunięciami bitów i rejestrami, ale polecam tę bibliotekę: http://playground.arduino.cc/Code/Enerlib

Ponadto, jeśli używasz Uno lub dowolnego z układem USB na szeregowy, możesz to wyłączyć lub usunąć.

Doktor
źródło
3
Ci powinni zapoznać się z danymi arkuszy bez względu na to co robisz.
Connor Wolf,
9

Gdy projekt zacznie działać i musisz wdrożyć go w środowisku „produkcyjnym”, możesz zdecydować się na zastąpienie Arduino pustą meta ATMega328 lub dowolnym z rodziny układów ATTiny. Spowoduje to pozbycie się wszystkich zjadaczy energii na pokładzie Arduino, których nie potrzebujesz. Znalazłem:

  • Płytka Arduino z baterii blokowej 9 V - 56 mA
  • ATTiny85 goły na 8 MHz bez trybów uśpienia itp. - 10 mA
  • ATTiny85 goły na 8 MHz w trybie uśpienia - 0,03 mA

Więcej informacji

Zaprogramuj ATtiny za pomocą Arduino

Pliki ATTiny dla Arduino IDE

maarten
źródło