Arduino jako zabezpieczenie przed zbyt głębokim rozładowaniem akumulatora

Ostatnio zaistniała u mnie potrzeba zbudowania urządzenia które zapobiegnie zbyt głębokiemu rozładowaniu akumulatora. Założenia są dość proste – cykliczny monitoring napięcia i odcięcie odbiorników w momencie, gdy napięcie spadnie poniżej zadanego progu. Ponadto sygnalizacja dźwiękowa o zbyt niskim napięciu i bardzo ważne: optymalizacja zużycia prądu przez samo urządzenie. Na allegro można znaleźć wiele takich urządzeń, począwszy od bardzo prymitywnych jak przekaźnik z rezystorem, po „pudełeczka” z niewiadomą zawartością. Szkoda, że mało który produkt ma podane zużycie prądu. Z racji, że na elektronice nie znam się na tyle by zbudować takie urządzenie z wykorzystaniem podstawowych elementów jak np. tranzystory itp., postanowiłem oprzeć swoje rozwiązanie na Arduino Pro Mini, a dokładniej na klonie z eBaya. Budowę własnego zabezpieczenia zacząłem od wyszukania informacji jak zmierzyć napięcie przy użyciu Arduino – wyjście jest bardzo proste, wystarczy dzielnik napięć z rezystorów i podpięcie tego pod pin ADC – skorzystałem z przykładu na stronie https://www.udemy.com/blog/arduino-voltmeter/. Wybrałem największe rezystancje jakie miałem w zapasie żeby maksymalnie zmniejszyć prąd. Następnym krokiem było wyszukanie przekaźnika o maksymalnie małym poborze prądu przez cewkę – przekaźnik który dostałem po podłączeniu przez rezystor pobiera około 30mA (bez rezystora przeszło 60mA) (pobór prądu z poszczególnych elementów sumarycznie okazał się mniejszy, pewnie jest na to jakieś wyjaśnienie…). Ostatni krok to optymalizacja samego Arduino – poszczególne elementy można usypiać, ale jest z tym trochę zabawy, skorzystałem z bardzo prostej w użyciu biblioteki którą używa się prawie jak zwykłego „delay()” z tą różnicą, że w trakcie czekania duża część układu śpi. Mój układ w trakcie spania, z wyłączonym przekaźnikiem, zużywał 5.7mA. Muszę dodać, iż w celu oszczędności również dioda Power z Arduino została usunięta. Wspomniana biblioteka jest dostępna tutaj https://code.google.com/p/narcoleptic/. Problemy jakie napotkałem: zużycie prądu przez przekaźnik i błąd pomiaru napięcia*. Pomysły mam takie by przekaźnik zastąpić tranzystorem MOSFET, ale chcę najpierw dokładniej poznać maksymalne obciążenia jakiemu będzie poddawany akumulator. Błąd pomiaru napięcia wynika z wahań napięcia zasilania Arduino, zastosowany stabilizator (12V -> 5V) ma duży zapas mocy, jednak włączenie przekaźnika i wyłączenie można zauważyć w wartościach mierzonego napięcia. Pomysł jest taki by zrobić osobne źródło które będzie napięciem referencyjnym – myślałem o zwykłym stabilizatorze na 3.3V, bez żadnych innych obciążeń, który będzie na kolejnym pinie dawał wzorcowe napięcie. Na tę chwilę próbuję skorzystać z referencyjnego 1.1V ze sposobu opisanego tutaj: http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/ Przechodząc do rzeczy, całość działa następująco: po uruchomieniu sygnał dźwiękowy – wiadomo, że działa; następnie pomiar napięcia i jeśli powyżej 10.70V to odpalamy przekaźnik i śpimy przez następne 5 minut, po 5 minutach kolejna kontrola; gdy napięcie będzie zbyt niskie „pikamy” kilka razy, odłączamy odbiorniki i śpimy przez 5 minut; następnie znów pikamy albo uruchamiamy przekaźnik jeśli sytuacja się poprawiła. Kod źródłowy i fotki (w finalnej wersji jest inny rezystor przed przekaźnikiem i Arduino nie ma jednej diody):
Aktualizacja: *) problem z pomiarem wyglądał tak, że po włączeniu przekaźnika wartość mierzonego napięcia by zaniżona. Po wielu próbach diagnozy odkryłem, że winowajcą był źle dobrany bezpiecznik. Początkowe zabezpiecznie 100mA okazało się za małe, stąd spadek napięcia. Większy bezpiecznik i zastosowanie wewnętrznego napięcia referencyjnego 1.1V daje świetne rezultaty – pomiar z Arduino zgadza się prawie idealnie z pomiarem z multimetru.

Fotografie ukończonego układu:
Zabezpieczenie akumulatora góra

Zabezpieczenie akumulatora dół

 

AKTUALIZACJA: popełniłem tu błąd karygodny, a mianowicie przekaźnik zasilam z pinu mikrokontrolera – NIE WOLNO TAK! Jeszcze wszystko działa i ma się dobrze, może ten rezystor mnie uratował, ale należy to poprawić i tak nie robić!

Ten wpis został opublikowany w kategorii Arduino, Atmega, embedded. Dodaj zakładkę do bezpośredniego odnośnika.

2 odpowiedzi na „Arduino jako zabezpieczenie przed zbyt głębokim rozładowaniem akumulatora

  1. FTH pisze:

    Cześć, wgrałem Twój kod i działa tylko odwrotnie, po spadku napięcia dopiero włącza zamiast wyłączać 😛 Zamieniłem miejcami linie 90 i 94 – teraz jest ok.
    Inny problem to podwojone napięcie – wiesz może co jest grane? Mam taki czujnik: http://www.aliexpress.com/item/F85-Free-Shipping-1pc-New-Standard-Voltage-Sensor-Module-For-Robot-For-Arduino-Good/32417559143.html i zamiast 11V pokazuje mi 24 – gdzie to wykalibrować?
    Trzecie pytanie: do czego jest int pinVcc = A3; ?

    Ogólnie jako początkujący mam z tym jeszcze sporo do rozgryzienia, ale i tak super że działa na razie jako tako, dzięki za artykuł 🙂

    • admin pisze:

      Witam, na wstępnie ogromnie przepraszam, że teraz odpisuję, ale nie byłem świadom, że nie przychodzą mi powiadomienia o nowych komentarzach. Niestety dopiero dziś, całkiem przypadkiem, zauważyłem. Ostatnio brakuje mi czasu, postaram się w weekend odpisać, choć tu pewnie już za późno, ale może ktoś jeszcze skorzysta 🙂
      Tak na szybko – pinVcc = A3 daje odczyt z napięcia zasilania. Nie wiem czy poprawnie, ale we wzorze który przelicza odczyt z pinu pomiarowego zakłada się 1023 (z powodu rozdzielczości ADC), ja zamiast wpisać to na sztywno mierzę napięcie na zasilaniu układu, wtedy nie zawsze jest 1023, czasem trochę mniej. Przy takiej konfiguracji wydaje mi się, że miałem najlepsze wyniki pomiaru.
      Pozdrawiam!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *