Kompletne urządzenie tworzą nadajnik i odbiornik. Zarówno jedno jak i drugie urządzenie zamknięto w estetycznych, praktycznych, profesjonalnych obudowach. Sterowanie odbywa się w paśmie ISM na częstotliwości 433 MHz. Odbiornik ma swój unikatowy adres, co po drobnej zmianie oprogramowania, umożliwia współużytkowanie kilku takich systemów na jednym obszarze.
Nadajnik
Schemat ideowy nadajnika pokazano na rysunku 1. Składa się on z mikrokontrolera ATtiny24, modułu radiowego TX433 i kilku elementów biernych. Najważniejszym elementem składowym nadajnika jest jednak program zawarty w pamięci mikrokontrolera.
Jeśli nadajnik jest nieużywany (gdy nie jest wciśnięty żaden przycisk), mikrokontroler zostaje wprowadzony w tryb najniższego poboru energii - PowerDown. Dodatkowo są wyłączane moduły Watchdog i BOD, a zastosowany stabilizator MCP1703 "na własne potrzeby" pobiera prąd o natężeniu zaledwie 2 µA. W efekcie pobór prądu całego układu w tym stanie jest znikomo mały i bateria o pojemności 100 mAh powinna wystarczyć na ponad 4 miesiące użytkowania.
Po naciśnięcia któregoś z przycisków jest generowane przerwanie Pin Change Interrupt i zostaje wznowione wykonywanie programu. W pierwszej kolejności - za pomocą funkcji SwitchScan() - jest sprawdzany stan przycisków. Następnie funkcja CodeInit() przygotowuje tablicę danych, która zawiera informację o tym, jak ma wyglądać każdy impuls przebiegu wysłanego do modułu radiowego.
Kolejne impulsy odpowiadają kolejnym bitom danych a czas trwania impulsu zawiera informację o wartości bitu. Po każdym impulsie następuje przerwa o stałym czasie. Logicznej "1" (H_BIT) odpowiada impuls o czasie 1,6 ms, natomiast logicznemu "0" (L_BIT) impuls o czasie 0,8 ms. Czas trwania przerwy po każdym impulsie wynosi 1,6 ms.
Elementy tablicy zawierają cztery liczby: 0, 1, 2, 3. Wartość "0" to brak impulsu tzw. NULL_BIT. Wartość "1" odpowiada logicznej jedynce, wartość "2" odpowiada logicznemu zeru, a wartość "3" to impuls o czasie trwania 3,2 ms nazwany w programie SPECIAL_BIT. Dwa dodatkowe stany są niezbędne do synchronizacji odbioru przebiegów. Jeden przebieg to 26 impulsów.
Taki pakiet to ramka, która zawiera punkt startu, część synchronizującą, część stałą, czyli adres urządzenia i część zależną od wciśniętego przycisku, a więc komendę. Budowę ramki pokazano na rysunku 2. Pierwszy impuls jest wyznacznikiem początku ramki i stanowi połączenie dwóch impulsów: SPECIAL_BIT i L_BIT, i trwa w sumie 4,8 ms. Następnie ramka zawiera 5 impulsów logicznego zera - jest to część synchronizująca.
Ta część ramki ma pomóc w dostrojeniu modułu odbiornika do odbieranego sygnału i nie niesie żadnej informacji. Kolejne 8 impulsów to adres urządzenia. Jego wartość w programie określa definicja #define MODULE_ADDRESS i domyślnie jest on ustawiony na 54. Zmieniając wartość adresu można sprawić, aby dwa urządzenia pracujące w bliskiej odległości nie wpływały na siebie wzajemnie. Następne 10 bitów to wysłana dwukrotnie, 5-bitowa komenda. Jej wartość zależy od wciśniętego przycisku. Przesyłaną ramkę kończy logiczne "0".
Gdy informacje o ramce są gotowe, funkcja TxStart() konfiguruje licznik TIMER1 do pracy z okresem 0,8 ms. Wysyłanie ramki odbywa się w procedurze obsługi przerwania od licznika ISR (TIM1_OVF_vect) - na każdy bit ramki przypadają trzy takie zdarzenia. Nadawanie ramek trwa dopóki jest wciśnięty przycisk nadajnika.
Po zwolnieniu przycisku następuje wysłanie kilku ramek z komendą o wartości 0 - jest to dodatkowa informacja dla odbiornika o zwolnieniu przycisku, następnie układ przechodzi w stan uśpienia. Rezystory R3 i R4 stanowią dzielnik do pomiaru napięcia zasilającego. W czasie nadawania ramki dioda LED1 miga w kolorze zielonym, gdy napięcie spadnie poniżej 7,5 V dodatkowo świeci się na czerwono.
Montaż nadajnika
Schemat montażowy nadajnika pokazano na rysunku 3. Montaż wymaga precyzji, ponieważ elementy są gęsto upakowane a większość z nich jest przeznaczona do montażu SMD. Dodatkowo, płytka ma nietypowy kształt. Uruchomienie układu nie powinno jednak sprawić problemu. Po zmontowaniu nie wymaga żadnych regulacji i idealnie mieści się w obudowie KM-P15.
Diodę LED należy wlutować ok. 1 cm nad płytką i zagiąć, by przesunęła się poza krawędź płytki (fotografia 4), a otwór na diodę w obudowie należy nieco powiększyć. Do punktów "+" i "-" należy przylutować kawałki srebrzanki i zagiąć je tak, by pełniły rolę styków baterii (fotografia 5). Na krawędzi znajduje się złącze umożliwiające dołączenie programatora (punkty R, S, MI, MO, G, V) i programowanie mikrokontrolera w układzie.
Antenę należy wykonać w postaci cewki o kilkunastu zwojach i średnicy ok. 4 mm i zamontować w punktach lutowniczych A2 i A3 tak jak podpowiada opis na płytce. Spośród kilku anten które mieściły się w obudowie pilota, taka dawała najlepsze efekty w czasie testów urządzenia - zasięg do 30 m. Z anteną na zewnątrz obudowy w postaci prostego odcinka srebrzanki o długości ok 17 cm zasięg wynosił nawet 100 m.
Wykaz elementówNadajnik Rezystory: (SMD 0805) Kondensatory: Półprzewodniki: Inne: Odbiornik Rezystory: (SMD 0805) Kondensatory: Półprzewodniki: Inne: |
Odbiornik
Schemat ideowy odbiornika pokazano na rysunku 6. Jego pracą steruje mikrokontroler ATtiny24. Sygnał odebrany przez moduł radiowy RX433 jest doprowadzony do wejścia mikrokontrolera. Licznik TIMER1 generuje przerwania z okresem 0,064 ms. W procedurze obsługi przerwania jest odczytywany poziom na tym wejściu i zliczana liczba cykli wywołania przerwania, przez które poziom pozostaje niezmieniony.
Zastosowany jest także filtr programowy, który zmianę poziomu logicznego na wejściu "uznaje" dopiero po trzecim cyklu nowego poziomu - w ten sposób są filtrowane jedno- i dwucyklowe zakłócenia. Zmierzone czasy trwania kolejnych impulsów są następnie rozpoznawane i jest im nadawana wartość L_BIT, H_BIT lub SPECIAL_BIT. Wykrycie bitu specjalnego jest znacznikiem początku ramki. Dopiero po tym zdarzeniu kolejne 24 impulsy są przypisywane do kolejnych pozycji w ramce.
Po skompletowaniu ramki jest ustawiana zmienna statusu code.status=STATUS_COMPLETE i zostaje wywołana funkcja Decode(). Jej zadaniem jest odczyt z ramki wartości adresu i komendy. Jeśli adres wynosi 54 i komenda zawiera jedną z zadeklarowanych wartości: "11" - komenda sterująca wyjściem pierwszym, "6" - komenda sterująca wyjściem drugim lub "0" - komenda informująca o zwolnieniu przycisku pilota, to jest ustawiana zmienna command.status=COMMAND_READY. W zależności od komendy i trybu pracy podejmowana jest odpowiednia akcja - odpowiada za to funkcja Action().
Montaż odbiornika
Schemat montażowy odbiornika pokazano na rysunku 7. Ze względu na wymiary jest go łatwiej zmontować niż nadajnik, ale mimo wszystko trzeba mieć trochę doświadczenia. Zasilanie należy doprowadzić do złącza POW, skąd trafia na mostek prostowniczy a następnie zasila stabilizator napięcia +5 V.
Napięcie zasilania przekaźników może mieć dwie wartości. Przy zwartych punktach SJ1 będzie wynosiło ok. 12 V, natomiast przy zwartych punktach SJ2 będzie wynosiło 5 V - należy zewrzeć odpowiednie pole w zależności od typu przekaźników. Złącza IN1 i IN2 pozwalają dołączyć przyciski, za pomocą których możemy sterować modułem, tak jak z pilota. Diody LED1 i LED2 sygnalizują stan wyjść.
Dodatkowo, dioda LED1 miga informując o aktywnym stanie urządzenia. Złącze PROG pełni dwie funkcje. Po pierwsze, pozwala na dołączenie programatora i zaprogramowanie mikrokontrolera w układzie (np. w celu zmiany adresu modułu). Po drugie, pozwala na ustawienie tryb pracy wyjść - zworka założona na szpilki 1-3 (fotografia 8) powoduje pracę monostabilną a więc wyjścia będą załączone tylko na czas wciskania przycisku pilota, brak zworki oznacza pracę klasyczną - bistabilną. Na złączach OUT1 i OUT2 wyprowadzone są styki zwierne przekaźników.
Do punktów A1 lub A2 należy przylutować odcinek srebrzanki o długości ok 17 cm, który będzie pełnił rolę anteny. Zmontowany układ można umieścić w obudowie Z106. Warto wtedy wyprowadzić diody LED na front obudowy i zastosować antenę zewnętrzną, na przykład antenę teleskopową przykręconą do górnej ścianki obudowy.
KS