Manipulator v.1

Po dwóch elementach wykonawczych pora na jakiś manipulator 🙂 Co prawda opisane do tej pory moduły obsługujące jakiekolwiek wyjścia, mają również i wejścia, umożliwiając tym samym ich bezpośrednie sterowanie, a tym samym pracę autonomiczną, bez komunikacji z innymi urządzeniami, ale przecież nie o to chodzi w automatyce domowej, prawda? 🙂 Czas zatem opisać pierwsze zrealizowane przeze mnie urządzenie, którego przeznaczeniem jest tylko i wyłącznie współpraca z innymi urządzeniami poprzez interfejs RS485.

20151105_151300

Zdjęcie powyższe (niebędące niestety arcydziełem sztuki fotograficznej) przedstawia właściwie całą ideę urządzenia, a zarazem jego zasadniczą wadę, główny powód opisania tego manipulatora jako „wersja 1”. Miało to mianowicie być wstawione w standardową puszkę elektroinstalacyjną i pasujące do standardowej, używanej u nas w domu ramki na osprzęt urządzenie potrafiące zwizualizować stan wybranych urządzeń oraz sterować nimi z tego miejsca. Założenia były proste: kilka przycisków z dwukolorowym podświetleniem, jakaś obudowa pasująca do ramki, ikonki pod frontami przycisków pokazujące, co dany przycisk obsługuje i kawałek procesora do obsługi tego wszystkiego. W teorii – prościzna. Praktyka zaś, przynajmniej w moim przypadku rozwaliła się o ową „jakąś obudowę” i o ikonki. W przypadku obudowy – zabrakło zdolności do wykonania odpowiednio precyzyjnie maskownicy, która wejdzie w ramkę, będzie pasować do przycisków, nie blokując ich przy tym i na dokładkę będzie jeszcze estetycznie wyglądać. Ikonki zaś – cóż. W szkole miałem tróję z plastyki, grafika nigdy nie była moją mocną stroną, zrobienie ładnych i czytelnych ikonek przedstawiających w wyraźny sposób „bramę”, „wrota garażowe”, „oświetlenie zewnętrzne”, „oświetlenie podbitki” itp. po prostu mnie przerosło 🙂 Niemniej, od strony elektronicznej urządzenie ma się dobrze, działa niezawodnie. Dla jasności jeszcze: omawiane urządzenie to tylko górna część ramki, klawisze na dole nie mają z nim nic wspólnego.

Pora na opis. Najpierw jednak kilka zdjęć wnętrza. Elementy składowe całości:

Zmontowane urządzenie:

Jak widać, jest to tradycyjna u mnie „kanapka” z dwóch płytek, płytka górna jest tak docięta, by ciasno wchodziła między fabryczne elementy osprzętu elektroinstalacyjnego używanego u nas w domu, dolna płytka po prostu się trzyma na złączach, w puszce i tak nikt za nią nie ciągnie.

Schemat ideowy:

2015-11-09_14-04-45

Układ jest dość prosty i w zasadzie można było się pokusić o jego upchanie w technologii SMD na jednej płytce dwustronnej, ale po co sobie miałem życie utrudniać, budując dom specjalnie dawałem głębokie puszki, żeby wszystko do nich weszło 🙂
Procesor, nadajnik/odbiornik linii RS485, zasilanie 5V przychodzące z zewnątrz (w ramach szyny RS485) i sześć bardzo fajnych przycisków chwilowych, fabrycznie wyposażonych w dwubarwne podświetlenie w postaci dwóch przeciwsobnie połączonych LEDów: czerwonego i zielonego. Stan przycisków jest sprawdzany bezpośrednio wejściami procesora, natomiast każde podświetlenie zajmuje po dwa porty wyjściowe, ustawienie jednego w stan L, drugiego w stan H powoduje, że odpowiedni LED świeci 🙂
I tu, uważni czytelnicy być może zauważyli rozjazd między tym, co piszę, a tym, co widać na schemacie i zdjęciach. Przede wszystkim kwarc: na schemacie jest, na płytce zaś jest tylko po nim miejsce, prawda? Chodzi o to, że gdybym chciał tak co do sztuki podłączyć wszystkie sześć przycisków, potrzebowałbym po trzy porty na sztukę, akurat jednego portu by mi brakło. Brakujący port bezproblemowo można odzyskać rezygnując z kwarcu, a zamiast niego używając wewnętrznego oscylatora, na etapie projektowania tego manipulatora jednak miałem zerowe doświadczenie z interfejsem RS i bałem się, że przy oscylatorze RC błędy transmisji będą zbyt duże. Dlatego właśnie na schemacie jest kwarc i płytka jest tak zrobiona, że jeden z przycisków („Furtka”) ma podświetlacz (a raczej współpracujące z nim złącze) jedną stroną podłączony do masy (tym samym zrezygnowałem z drugiego koloru podświetlenia, w naturze zaś – kwarcu nie ma, a wyprowadzenie kwarcu jest kynarem podłączone do odpowiedniej nogi złącza, po przecięciu jego połączenia z masą (potrzebne przeróbki są zaznaczone na płytce). Praktyka dowiodła, że przy używanej przeze mnie prędkości transmisji 9600bps urządzenie bez kwarcu działa znakomicie, do tej pory (kilka miesięcy używania) nie zauważyłem  ani jednego przypadku błędnej transmisji.

Kilka słów na temat softu:

Stan lampek jest sterowany zawartością tablicy Lamp(x), zawartość owej tablicy jest kontrolowana w przerwaniu od timera, obsługa jednej lampki widoczna jest na przykładzie poniżej. Green_1 i Red_1 to oczywiście aliasy portów podłączonych do podświetlenia przycisku. Zmienna Miganie to bit o wartości zmienianej cyklicznie co pół sekundy, co załatwia kwestię uzyskania migającego przycisku. Idea jest chyba wystarczająco dobrze opisana na listingu, wraz z widocznymi możliwymi do uzyskania wariantami podświetlenia.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   Select Case Lamp(1):
      Case 1 :                                              'zielony
         Set Green_1
         Reset Red_1
      Case 2:                                               'czerwony
         Reset Green_1
         Set Red_1
      Case 3:                                               'zielony migający
         Green_1 = Miganie
         Reset Red_1
      Case 4:                                               'czerwony migający
         Red_1 = Miganie
         Reset Green_1
      Case 5:                                               'zielony/czerwony migający
         Green_1 = Miganie
         Red_1 = Not Miganie
      Case Else:                                            'wył
         Reset Green_1
         Reset Red_1
   End Select

Zmienna Lamp(x) jest modyfikowana tylko z zewnątrz poprzez procedurę odczytu interfejsu RS485 bliźniaczą do tej, którą pobieżnie już przedstawiałem przy okazji opisu modułu sterownika 230V, po prostu zewnętrzne urządzenie przysyła rozkaz zapalenia lampki A w sposób B. Klikanie w przyciski manipulatora w żaden bezpośredni sposób na lampki nie wpływa (bo pośrednio już jak najbardziej: manipulator po naciśnięciu przycisku wysyła rozkaz włączenie czegośtam i po chwili odbiera rozkaz zapalenia lampki jako potwierdzenie wykonania), jedyną reakcją na klikanie jest tylko i wyłącznie wysyłane „w świat” stosownej informacji.

Odczyt stanu przycisków odbywa się w pętli głównej, tu przykład dla przycisku 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   If In_1 = 0 Then                                         'jeśli wciśnięty klawisz
        Do
        Waitms 10                                           'zliczaj  czas wciśnięcia
        Incr A
      Loop Until In_1 = 1                                   'póki klawisz nie zostanie puszczony
      If A > = 10 And A < Tdlugo Then                        'i jeśli doliczyłeś do >10 
         Wyslij(3) = Asc( "1") 
         Wyslij(4) = Asc( "k") 
         Set Nadaj 
      End If 
      If A > = Tdlugo Then                                   'jeśli czas przekroczył Tdlugo
         Wyslij(3) = Asc( "1")
         Wyslij(4) = Asc( "d")
         Set Nadaj
      End If
   End If

Po stwierdzeniu wciśnięcia przycisku, zliczany jest czas jego wciśnięcia i w zależności od wyniku, kompletowane są poszczególne elementy tablicy wyslij(x). Wyslij(1) to adres manipulatora, Wyslij(2) to znaczek „>” (bo tak), pod trójką jest numer przycisku, element 4 zaś to kod czasu wciśnięcia (kodowany skomplikowanym szyfrem, który powierzam Wam w tajemnicy: k=krótko, d=długo). Tablica Wyslij(x) jest pięcioelementowa, ostatni element jest miejscem na sumę kontrolną.
Po ustawieniu elementów tablicy, ustawiana jest flaga Nadaj. Na końcu pętli głównej jest procedura obsługi wysyłania po RS485, jest ona uruchamiana po stwierdzeniu podniesionej flagi:

1
2
3
4
5
6
7
8
9
10
11
12
   If Nadaj = 1 Then                                        'jeśli flaga nadawania podniesiona
      Chksum = Wyslij(1) Xor Wyslij(2)                      'oblicz sumę kontrolną
      Chksum = Chksum Xor Wyslij(3)
      Wyslij(5) = Chksum Xor Wyslij(4)                      'i umieść ją na jej miejscu
      Set R_w                                               'włącz nadawanie
      Waitus 200
      Printbin Wyslij(1)                                    'wysyłanie pakietu danych
      Print Chr(8)
      Waitms 10
      Reset R_w                                             'włącz odbiór
      Nadaj = 0
   End If                                                   'kasowanie flagi nadawania

Jak wspominałem już przy opisie sterownika 230V, w przyjętym protokole transmisji mam przewidziane miejsce na sumy kontrolne, ponieważ jednak póki co transmisja odbywa się bez żadnych błędów, temat ten całkowicie zaniedbałem. Niemniej tutaj pojawia się ten temat, cała procedura po stwierdzeniu, że trzeba coś nadać, zaczyna właśnie od wyliczenia tejże sumy. A dalej już książkowo: włączamy nadawanie, odczekujemy krótką, doświadczalnie dobraną pauzę (bo stany nieustalone), wysyłamy słowo (polecenie Printbin wyśle całą tablicę, mimo, że wskazujemy tylko jej pierwszy element), przybijamy znakiem końca wiersza (tak właściwie nie jest konieczny, ale jak w trakcie uruchamiania sobie monitorowałem transmisję na terminalu, czytelniej mi się na to patrzyło, jak każde polecenie było od nowego wiersza), znów pauza, „odbiór” i na koniec kasowanie flagi nadaj. 

Cały mój interfejs działa w sposób bardzo prymitywny: wszystko słucha, jak ktoś ma coś do powiedzenia, to po prostu mówi, po czym natychmiast wraca do słuchania. nie ma żadnej kontroli przy włączaniu nadawania, czy ktoś w tym samym czasie już nie nadaje. Niestety, nie miałem koncepcji, jak to zrobić, a ponieważ w mojej sieci nadaje coś raczej z rzadka, póki co nie ma z tym problemu. Jak problem się pojawi – z czasem się pomyśli 🙂

Na zakończenie jeszcze – jak pisałem, urządzenie od strony elektrycznej działa poprawnie, sygnalizuje np. fakt włączenia oświetlenia zewnętrznego, wizualizując kolorami, czy lampy świecą czasowo i same się wyłączą, czy też zostały włączone na stałe. Wykonanie jednak fizyczne, zwłaszcza ta nieszczęsna maskownica i ikonki… na takie niezbyt mocne „3+” się oceniam 🙁 Dlatego też, przy jakimś przypływie chęci i wolnego czasu, zostanie wykonany manipulator v.2, z dotykowym szklanym ekranem, na którym elementy graficzne będą wykonane z ciętej na plotterze folii, a co do wizualizacji – kto wie, może się pokuszę nawet o wstawienie za tą szybkę ekranu ze starej Nokii? 🙂
(animowana grafika przedstawiająca otwierającą się bramę wjazdową jako potwierdzenie wykonania rozkazu – nono… 🙂 )

 

email
Manipulator V1
Manipulator V1
Manipulator-v1.rar
76.2 KiB
39 Downloads
Szczegóły
Przejdź do paska narzędzi