Automatyczne odcinanie zasilania Arduino

Hej! W dzisiejszym artykule chciałbym Wam pokazać rozwiązanie automatycznego odcinania zasilania od Arduino, które wykorzystałem w jednym ze swoich prostych sterowników ;) Ogólnie sterownik, który robiłem miał być włączony ręcznie, zrobić swoją robotę i wyłączyć się. Żeby Arduino nie było podłączone cały czas do zasilania postanowiłem użyć modułu przekaźnika oraz przycisku w celu umożliwienia Arduino automatycznego odcięcia swojego własnego zasilania.

Potrzebne części

W celu wykonania projektu będziemy potrzebowali jakieś źródło zasilania np. 5V z kablem, którym będziemy mogli się wpiąć w nasz układ. Dodatkowo przyda się też moduł przekaźnika, przycisk oraz rezystor np. 10K.

Szkic programu

Od strony programistycznej wykonanie takiego auto odłączania jest bardzo proste. Cały program to zaledwie kilka linijek:

#define PIN_POWER_UP  2

void setup() {
  pinMode(PIN_POWER_UP, OUTPUT);
  digitalWrite(PIN_POWER_UP, HIGH);
}

void loop() {
  // Robimy tutaj wszystko to, co urządzenie ma wykonać przed wyłączeniem się
  // Na potrzeby demonstracji poczekamy 5 sekund i odłączymy zasilanie
  delay(5000);
  powerOff();
}

void powerOff() {
  digitalWrite(PIN_POWER_UP, LOW);
}

Definiujemy sobie do któego pinu podłączony jest przekaźnik podtrzymujący zasilanie, następnie w setup() ustawiamy mu stan wysoki, a po wykonaniu porgramu ustawiamy mu stan niski powodując odłączenie zasilania od Arduino.

Schemat

No ok, ale poza programem który zmienia tylko stan pinu musimy też odpowiednio podłączyć wszystkie komponenty. Należy to zrobić wg. poniższego schematu:

Omówmy więc wszystko po kolei. Zacznijmy od kolorów kabelków, które ustawiłem nieprzypadkowo. Kolorem niebieskim oznaczyłem masę, która zawsze łączy Arduino i zasilacz. Kolor czerwony to +5V z zasilacza, natomiast kolor pomarańczowy to +5V, które jest wysterowane przez przekaźnik lub przycisk. Kabelek zielony to przewód sygnałowy do sterowania przekaźnikiem.

Teraz przejdźmy do algorytmu działania. Do Arduino dochodzi tylko pomarańczowy przewód. +5V znajdzie się na nim w jednym z dwóch wypadków. Pierwszy z nich to wciśnięcie przycisku (zwieramy linię czerwoną z pomarańczową ręcznie) lub włączenie przekaźnika (przekaźnik zewrze te linie). Chcąc włączyć urządzenie wciskamy przycisk, Arduino się uruchamia i natychmiast ustawia stan wysoki na pinie sygnałowym przekaźnika, który włączajac się zwiera nam przewody pomarańczowy i czerwony i trzyma je zwarte dopóki Arduino nie ustawi stanu LOW na jego pinie sygnałowym.

Z tym natychmiast to trochę przesadziłem, bo Arduino ma bootloader, który powoduje krótkiego laga zanim mikroporcesor wejdzie w funkcję setup(). Ten problem można rozwiązać dołożeniem rezystora (u mnie 10K dał radę) pomiędzy linią pomarańczową a zieloną. W ten sposób po wciśnięciu przycisku na linii pomarańczowej pojawia się 5V, które przez rezystor przechodzi na linię zieloną, która podtrzyma przekaźnik dopóki Arduino samo nie ustawi na linii zielonej stanu wysokiego. Działa on jak pull-up, który podciąga do +5V tylko kiedy mu każemy.

Przeanalizujmy działanie tego rezystora dokładniej. Możemy wyróżnić 4 sytuacje:

  1. Brak zasilania
  2. Zasilanie po wciśnięciu przycisku
  3. Zasilanie podtrzymane przekaźnikiem przez pull-up
  4. Zasilanie podtrzymane przekaźnikiem przez Arduino

W momencie braku zasilania na linii pomarańczowej nie ma napięcia, daltego też Arduino pozostaje wyłączone.

Kiedy wciśniemy przycisk zwieramy linię czerwoną i pomarańczową. Arduino w tym momencie dostaje 5V na linii pomarańczowej i zaczyna pracę. Niestety w pełni załąduje program mija jakiś czas, co oznacza że pinem 2 nie podtrzyma zasilania przekaźnika, bo jest on wtedy w stanie niskim. Tutaj do gry wchodzi nasz rezystor w sytuacji numer 3.

Kiedy na krótką chwilę linia pomarańczowa została zwarta do linii czerwonej na rezystorze także pojawiło się 5V. Pin numer 2 Arduino w tym momencie „pływa”, czyli nie ma ustalonego stanu, dlatego też rezystor jest na tyle silny, że jest w stanie utrzymać wysoki stan logiczny na pinie S przekaźnika. Dzięki utrzymaniu tego stanu cweka przekaźnika cały czas jest zasilana zwierając C oraz NO (pomarańczowy z czerwonym) powodując utrzymywanie się napięcia 5V na pomarańczowej linii.

W kroku 4 Arduino po uruchomieniu się ustala stan wysoki na linii zielonej przejmując rolę rezystora. Teraz kiedy Arduino zdecyduje się odłączyć swoje zasilanie ustala na pinie 2 stan niski, który jest dużo silniejszy niż stan wysoki podciągnięty przez rezystor 10K, czym powoduje odcięcie prądu od cewki przekaźnika i tym samym odłączenie pomarańczowej linii zasilającej Arduino od linii czerwonej na której jest stałe 5V.

Koniec

To by było na tyle. Mam nadzieję, że ten prosty trik okaże się przydatny w Waszych prywatnych projektach :) Oczywiście jeżeli chcemy to zamiast mechanicznego przekaźnika możemy użyć np. tranzystora, albo przekaźnika elektornicznego. Cała filozofia polega na zastosowaniu elementu przełączającego, który będzie umożliwiał przepływ prądu pomiędzy dwiema końcókami dopóki na jego końcówce sygnałowej będzie odpowiedni stan.