Kontaktron, czyli Arduino pilnuje drzwi

Przy okazji przenoszenia funkcjonalności systemu podlewania z karty przekaźnikowej do Arduino, muszę podłączyć także czujniki otwarcia drzwi. Opierają się one na kontaktronach. Co to takiego? To po prostu łącznik sterowany polem magnetycznym. A w zrozumiałych słowach, w popularnym wydaniu – tanie i proste urządzenie składające się z magnesu, montowanego zwykle na drzwiach i części wykrywającej pole, z której wychodzą dwa kabelki – montowanej na futrynie. Jak magnes jest w pobliżu kontaktronu (czyli zwykle gdy drzwi są zamknięte), to przewody są zwarte, gdy dalej – nie. Kontaktron działa więc na takiej samej zasadzie jak włącznik, przynamniej z punktu widzenia Arduino.

KontaktronNa zdjęciu znajduje się przykładowy, jeden z najtańszych kontaktronów do montażu na drzwiach. Łatwo je kupić, bo kontaktrony wykorzystuje się dość powszechnie w systemach alarmowych. Oczywiście bardziej eleganckie wersje, do stosowania np. w oknach w mieszkaniach, są przystosowane do montażu np. wewnątrz ram okiennych, żeby z zewnątrz nie było nic widać. Natomiast w piwnicy czy w garażu, nie ma większego problemu, żeby zastosować najtańszą wersję, nawet bez specjalnego ukrywania przewodów. Oczywiście kolor można dobrać do rodzaju stolarki, żeby instalacja nie rzucała się w oczy. Takie kontaktrony mam zamontowane na drzwiach w piwnicy.

Jak kontaktron podłączyć do Arduino? Dokładnie tak jak każdy włącznik. Czyli jak?

Najbardziej narzucającym się rozwązaniem jest podłączenie jednego przewodu do wejścia, a drugiego do +5V. Wtedy przy styku mielibyśmy stan wysoki, a bez styku stan niski. Niestety to błędne rozumowanie. O ile przy styku rzeczywiście byłby stan wysoki, to przy jego braku wejście nie byłoby podłączone do niczego. Czyli byłby stan niski? Nie. Byłby nieustalony – czasem odczytywalibyśmy stan niski, czasem wysoki. Co więc trzeba dołożyć, żeby układ działał? Rezystor między wejście a masę. Jest to tzw. rezystor pull-down, czyli ustalający stan niski. Dzięki temu gdy nie ma styku w kontaktronie, wejście jest połączone z masą. A dlaczego przez rezystor? Bo gdyby go nie było, to po załączeniu styku mielibyśmy zwarcie +5V z GND.

Oczywiście to nie jedyne rozwiązanie. Można sobie wyobrazić sytuację odwrotną – wejście łączymy przez kontaktron z masą (czyli jeden przewód kontaktronu do wejścia, drugi do GND). Wtedy po zamknięciu obwodu mielibyśmy stan niski, a po otwarciu – stan nieustalony. Co trzeba zrobić, żeby pozbyć się stanu nieustalonego? Podłączyć rezystor – tym razem od +5V do wejścia. Jest to tzw. rezystor pull-up. Przy otwartych drzwiach będziemy mieli wtedy stan wysoki, a przy zamkniętych – niski.

Dlaczego to drugie rozwiązanie jest lepsze od pierwszego, choć niektórym na pierwszy rzut oka może się wydać mniej logiczne? Bo nie musimy nic łączyć. Arduino posiada wbudowane rezystory pull-up, które włączamy programowo. Aktywuje się je przez określenie trybu wejścia jako INPUT_PULLUP (w nowszych wersjach ide) lub przez ustalenie stanu wysokiego funkcją digitalWrite. Mamy więc prostsze połączenie – jeden przewód kontaktronu łączymy z GND, a drugi z cyfrowym wejściem.

void setup() {
  // ustawiamy wyjście 13
  pinMode(13, OUTPUT);   
  // ustawiamy wejście 2  
  pinMode(2, INPUT);    
  // włączmy pull-up na wejściu 2
  digitalWrite(2, HIGH);  
}

void loop(){
  int state;
  // czytamy stan wejścia
  state = digitalRead(2);
  // ustawiamy diodę zgodnie ze stanem wejścia  
  digitalWrite(13, state);
}

Powyższy przykład łatwo obrazuje działanie. Dioda na wyjściu 13 (czyli wbudowana w Arduino) będzie się świecić, gdy wejście nr 2 (do którego podłączymy kontaktron) będzie miało stan wysoki (czyli gdy nie będzie styku – drzwi będą otwarte). Gdy pojawi się styk do masy, wejście będzie miało  stan niski, więc dioda zgaśnie po zamknięciu drzwi.

Na podobnej zasadzie do systemu podłączymy czujnik zalania, o czym pewnie napiszę wkrótce.

Na koniec jeszcze raz polecę Nettigo – dla wszystkich, którzy nie mają jeszcze Arduino, a chcą przetestować moje rozwiązania w praktyce.

Ten wpis został opublikowany w kategorii Inteligentny Dom i oznaczony tagami , , , . Dodaj zakładkę do bezpośredniego odnośnika.

0 odpowiedzi na Kontaktron, czyli Arduino pilnuje drzwi

  1. Areecki pisze:

    Rozumiem, że nie trzeba w takim razie żadnego rezystora montować tylko wystarczy przewody od kontaktronu podłączyć odpowiednio do Andruino. Zastanawiałem się czy można by zbudować anemometr, który działa na zasadzie kontaktronu czyli obraca się i przez to zamyka i otwiera kontaktron i jak z długością kabla np. 20 m ?

  2. arek pisze:

    Witam
    Czy tak samo można podłączyć kontaktron do RPI?

  3. slav123 pisze:

    Ehh… bład w artykule: input_pullup z przykładu w Arduino ustawia sie tak:

    //configure pin 2 as an input and enable the internal pull-up resistor
    pinMode(2, INPUT_PULLUP);

Skomentuj techniczny Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *