Scenariusz
Stworzyłem ładny elektroniczny zamek do mojego pokoju w akademiku. Obecnie jest to Arduino Diecimila z serwomechanizmem [odblokowującym] drzwi. Posiada klawiaturę numeryczną z przyciskami 3x4 i 5 diodami LED (2 pary serii i jedna pojedyncza dioda LED). Obecnie działa również na ładowarce do telefonu komórkowego.
Teraz przeprojektowałem go, aby działał na samodzielnym Arduino (ATmega328), ale naprawdę chciałbym, aby działał na bateriach AA lub nawet na baterii 9 V.
Jeśli chodzi o część oprogramowania, doszedłem do wniosku, że mogę sleep
wywoływać określone czasy w metodzie pętli, aby utrzymać zużycie energii ATmega na jak najniższym poziomie. I niech diody LED „zaczną migać” z możliwie jak najdłuższym czasem wyłączenia.
Pytanie 1
Kiedy przycisk zostanie naciśnięty w ciągu kilku milisekund, które śpi tablica, czy będzie on „pamiętany” / „trzymany”, dopóki nie wyjdzie ze snu, a następnie zostanie podniesiony jako naciśnięcie przycisku?
Jaki byłby najlepszy sposób obsługi tego naciśnięcia przycisku w trybie uśpienia? Czy mogę go zakodować, aby obudzić się po naciśnięciu przycisku, czy muszę po prostu pozwolić mu spać przez np. 10 m. w każdej pętli?
pytanie 2
Jak podejdę do matematyki obliczania, ile baterii AA jest potrzebnych do działania tego urządzenia przez 10 miesięcy?
Nie wiem też, jak zmierzyć średnie zużycie energii na minutę, ponieważ zmienia się ono szybko itp.
Mam teraz Arduino Pro Mini na biurku, który wyczerpuje 2 baterie AA i może działać przez ponad rok, jeśli to konieczne.
Osiągnęły to trzy aspekty projektu.
1. Inny regulator
Używam regulatora doładowania LTC3525. Ma bardzo niski prąd spoczynkowy (7uA) i wysoką wydajność (> 90% przy 0,2 mA). Coś takiego jak ta deska Sparkfun https://www.sparkfun.com/products/8999 powinno wykonać podobną pracę. Pamiętaj, aby podłączyć go do styku 5 V Arduino, a nie VIN, aby regulator Arduino nie był używany.
2. Sleeeeeeep
Odsetek czasu, w którym urządzenie jest aktywne, będzie niewielki. Przez resztę czasu urządzenie powinno spać w SLEEP_MODE_POWER_DOWN. Możesz oprzeć swoje procedury snu na bibliotece Rocketscreem Low Power Library . Zgodnie z tym linkiem powinieneś być w stanie obniżyć go do 1,7uA przy wyłączonym ADC, BOD i WDT oraz w trybie wyłączania zasilania.
3. Przerwania
Druga połowa snu to przerwy, aby się obudzić. W trybie uśpienia z wyłączaniem tylko przerwania poziomu na INT1 i INT2, dopasowanie TWI, a WDT go obudzi. Musisz mieć przycisk podłączony do INT1 lub INT2, aby naciśnięcie przycisku go obudziło.
Inne rzeczy:
Wyłącz wszystkie diody LED, chyba że jest to absolutnie konieczne. Jeśli zamek znajduje się w pomieszczeniu, diody LED nie muszą być jasne, oszczędzając więcej energii. Również, jeśli potrzebujesz, aby MCU regularnie wykonywał jakieś zadania, używaj timera nadzorującego, aby okresowo je budzić.
Edytować:
Jedną z metod, która może działać, jest użycie powyższej biblioteki Low Power i uśpienie przez około 60 ms w każdej pętli dzięki zegarowi nadzorującemu. Po przebudzeniu sprawdź przycisk. Funkcja do wywołania to
źródło
Wszystkie te komentarze są na miejscu. Chciałbym dodać jeszcze kilka sugestii:
1) W przypadku diod LED należy stosować diody LED o wysokiej mocy 20 mA. Oto logika. Powiedzmy, że chcesz mieć przyciemnioną diodę LED stanu, która miga co 8 sekund. Nie chcesz, aby było jasne, więc używasz losowej diody LED. Problem polega na tym, że przyćmiona dioda LED nadal pobiera prąd o wartości 20 mA (lub więcej) tylko 100 mcd. Zamiast tego, otrzymaj diodę LED o wysokiej mocy wyjściowej, która nadal ma wartość znamionową 20 mA, ale może wysyłać 4000 mcd (upewnij się, że patrzysz na kąt wyjściowy, prawdopodobnie prawdopodobnie będzie to 30 stopni lub więcej). Dzięki tej diodzie LED 4000 mcd łączysz ją z rezystorem 3,3 k Ohm i otrzymujesz około 100 mcd mocy wyjściowej, ale zużywasz mniej niż 1 mA. Zamiast więc używać 20 mA dla diody LED stanu, używasz ułamka pojedynczego mA. Zazwyczaj ustawiam też błysk LED stanu na czas tylko 5-15 ms, co może również zaoszczędzić dużo energii, jeśli wcześniej miałeś błysk na 100 ms.
2) Moim wyborem regulatora napięcia jest Microchip MCP1700. Zużywa jedynie 1,6 µA prądu spoczynkowego i jest bardzo tani (około 0,30 USD w małych ilościach). Jedynym ograniczeniem jest to, że maksymalne napięcie wejściowe wynosi tylko 6 woltów, więc nie można użyć baterii 9 woltów. Jest jednak idealny do 4 baterii AA, pojedynczego ogniwa LiPo lub dwóch ogniw litowych.
3) Do zasilania obwodu ATmega 4 bateriami AA zwykle używam diody 1N4001 na VCC, aby zrzucić maksymalnie 6 woltów z 4 baterii do 5,5 wolta. Ponadto dioda chroni ATmega przed napięciem wstecznym, więc służy dwóm użytecznym celom. W ten sposób mogę stworzyć obwód zasilany z baterii, który może zużywać zaledwie 0,1 µA podczas snu, ponieważ przez cały czas nie ma regulatora napięcia pochłaniającego prąd.
źródło
Zrobiłem test na gołej atmega328P-PU na płycie chleba przy użyciu biblioteki RocketScream LowPower
Użyłem tego szkicu:
Z uCurrent Gold zmierzyłem 7,25 uA w trybie wyłączenia zasilania.
źródło
Są tutaj dwa pytania, ale tylko drugie jest tak naprawdę częścią tytułu pytania, więc prawdopodobnie lepiej będzie, jeśli otworzysz kolejne pytanie dotyczące programowania Arduino. Odpowiem na drugie pytanie tutaj.
Pojedyncza alkaliczna bateria AA 1,5 V ma pojemność około 2600 mAh. Jeśli wybierzesz baterie litowe, możesz uzyskać około 3400 mAh, jeśli masz szczęście. Przyjmijmy tę liczbę za punkt odniesienia dla absolutnie najlepszego przypadku.
Metodą obliczania teoretycznego maksymalnego czasu pracy obciążenia jest po prostu pojemność podzielona przez obciążenie. Jeśli twoje obciążenie wynosi 1 mA, możesz je uruchomić przez 3400/1 = 3400 godzin = 141 dni = ~ 5 miesięcy. Jest to jednak tylko teoretyczne maksimum , ponieważ w tym czasie zaczniesz odczuwać znaczne obniżenie napięcia o około 65%. Jeśli regulujesz moc wyjściową, uzyskasz efekt niekontrolowanego obniżenia napięcia akumulatora, tym wyższy prąd potrzebny do utrzymania regulowanego napięcia, który szybciej rozładuje akumulator. Byłbym zaskoczony, jeśli można uzyskać z niego ponad 80% reklamowanej pojemności przy napięciu wystarczająco wysokim, aby uruchomić urządzenie.
Powiedzmy, że 80% tego czasu dostajesz po spadku napięcia i nieefektywności regulatora. Zakładamy, że pracujesz przy napięciu 3,3 V z trzech akumulatorów połączonych szeregowo. Nadal zapewni to tę samą pojemność, ale napięcie będzie wystarczające dla regulatora. Jeśli twoje urządzenie działa przy 15 mA (to dość ostrożne oszacowanie), liczby będą wyglądać następująco:
Potrzebowałbyś więc około 144 baterii litowych (48 zestawów po 3), aby móc pracować przez rok. Nie zbyt dobrze!
Zamiast tego sugerowałbym użycie regulowanego zasilania DC z sieci. Może być dołączony zapasowy akumulator, który można łatwo skonfigurować za pomocą przekaźnika SPDT - wystarczy podłączyć cewkę do sieci prądu stałego i podłączyć styk „off” do akumulatora. W przypadku awarii prądu stałego styk spada, a zamiast tego używana jest bateria.
źródło
Coś, o czym nikt jeszcze nie wspomniał: musisz mieć sposób na wyłączenie zasilania + 5 V zasilającego serwomechanizm, gdy go nie używasz. Nawet gdy się nie porusza, serwo nadal będzie czerpać moc.
FET z bramką kontrolowaną przez pin we / wy z arduino to dobry sposób na zrobienie tego.
źródło
Możesz rozważyć użycie mikrokontrolera, który jest specjalnie zoptymalizowany pod kątem niskiego zużycia energii do następnego projektu. Dla niskiego zużycia energii konieczne jest, aby podczas snu pobierać bardzo małą moc. Często pomijane jest to, jak ważne jest, jak szybko może się obudzić z tego snu.
Liczy się to, ile ładunku potrzeba z najgłębszego snu, aby jak najszybciej poradzić sobie z przerwaniem (ponieważ wybuch mocy będzie wtedy bardzo krótki) i wrócić do snu.
Jednym z przykładów takiego mikrokontrolera jest MSP430 z Texas Instruments. Na ich stronie internetowej znajduje się nota aplikacyjna, jak oszczędzać energię i aplikacje do pozyskiwania energii.
źródło