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.
Na 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.
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 ?
Witam
Czy tak samo można podłączyć kontaktron do RPI?
Tak, tylko RPi to już większy wydatek, więc przy pewnych zastosowaniach lepiej pomyśleć o lepszym zabezpieczeniu.
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);
Nie do końca. Nie w każdej wersji to działa.