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.
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
Wyłącz wykrywanie zaniku zasilania (zespół obwodów, który wyłącza sterownik po wykryciu niskiego napięcia).
Wyłącz ADC (konwersja analogowo-cyfrowa)
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.
W rzeczywistości największym marnotrawcą energii na płycie Arduino jest liniowy regulator napięcia.
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 voltage
xcurrent 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.
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.
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ę.
źródło
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ąć.
źródło
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:
Więcej informacji
Zaprogramuj ATtiny za pomocą Arduino
Pliki ATTiny dla Arduino IDE
źródło