Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sterownik rolet i oswietlenia

ditomek 25 Wrz 2020 13:37 3066 4
  • Sterownik rolet i oswietlenia

    Witam.
    Chciałbym przedstawić mój system sterowania roletami i oświetleniem w domu jednorodzinnym.
    System powstawał stosunkowo długo. Ewoluował wraz z budową domu. Niestety nie mogę poświęcić mu tyle czasu ile bym chciał dlatego nadal nad nim pracuje. Część komponentów doczekała się kolejnych rewizji a część nadal pracuje tak jak je zbudowałem na początku.

    Wymagania jakie miał spełnić system to sterowanie 8 standardowymi napędami rolet oraz 32 punktami świetlnymi. Wszystko uruchamiane wyłącznikami w ścianach. Dlatego sterownik musi mieć min 48 wyjść oraz mniej więcej 2 razy więcej wejść. Tak duża liczba wejść podyktowana jest tym, że każdy przełącznik w ścianie wykorzystuje jedno wejście. Nawet kilka wyłączników załączających np. tą samą lampę z różnych miejsc wykorzystuje indywidualne wejścia. Do tego dochodzą funkcje specjalne jak grupowe sterowanie roletami czy światłem.
    Doświadczenie jakie zebrałem przy budowie poprzednich urządzeń podpowiadało aby tym razem postawić na architekturę opartą na osobnych modułach. Moduł wejściowy, moduł wyjściowy i moduł logiczny CPU. Moduły połączone są ze sobą magistralą RS485. W budynku do wyłączników w ścianach doprowadzona jest jedynie skrętka od rozdzielni teleinformatycznej w topologii gwiazdy. Tak samo zasilanie rolet i oświetlenia. Punktem centralnym jest rozdzielnia elektryczna.
    Nie wszystkie obwody oświetleniowe w domu są jednak sterowne w ten sposób. Sterownik nie nadzoruje oświetlenia w sypialniach i łazienkach. Tam wykonałem standardowe sterowanie przełącznikami ale do ich puszek doprowadziłem skrętkę tak na wszelki wypadek.

    Sterownik rolet i oswietlenia

    MODUŁ WJESCIOWY
    To trzecia wersja płytki. Na początku skrętki z wyłączników doprowadzałem do płytki z terminalami śrubowymi na których znajdowały się transporty. Dalej przewodami taśmowymi wędrowało to do płytki z mikrokontrolerem. Elektrycznie ten rodzaj połączenia sprawdził się i działał bez zarzutu. Bałagan jaki powodował by nie do wytrzymania. Część nieużywanych przewodów ze skrętni pałętała się po rozdzielni. Wtedy (jakieś 4 lata temu) wpadłem na pomysł budowy modułu ze złączami „rj45”. Kabel od wyłącznika w całości wchodził do jednego gniazda. Pojawił się problem jakie sygnały wprowadzić do gniazda. Stanęło na tym ze dwie żyły doprowadzą plus zasilania, dwie minus a pozostałe 4 będą wejściami. Ale co z sytuacja w której po drugiej stronie w ścianie nie ma az 4 przycisków? Zdecydowałem, że moduł będzie oferował podwójny standard obszycia 4 i 2 wejściowy. Wykonałem taki moduł na listewce drewnianej. Znowu użyłem przewodów taśmowych i tej samej płytki z atmega 128 (które kiedyś wykonałem w ramach innego projektu). Moje obawy dotyczyły awarii mechanicznych wtyczek. Bałem się że coś będzie wiecznie nie stykało, że trzeba będzie zaciskać kable ponownie. Nic z tego nie okazało się prawdą. Nie odnotowałem żadnego problemu w tym temacie. Po dwóch latach bezawaryjnej pracy zdecydowałem się na kolejną rewizję płytki.

    Tym razem postanowiłem wykorzystać zgromadzone zapasy atmeg w obudowach DIL. Zależało mi na tym aby uszkodzony element dało się łatwo zdemontować.
    Sam moduł nie robi nic oprócz wysłania na magistralę RS485 komunikatu zawierającego nr wciśniętego przycisku. Wykorzystałem 3 takie moduły. Każdy ma 26 wejść. Wyświetlacz i przycisk służą do nadawania modułowi adresu od 1 do 5.to znaczy ze moduł o adresie 2 wyśle komunikaty z przedziału 27 do 52 itd…. Wyświetlacz prezentuje nr wciśniętego przycisku kilka sekund po jego wciśnięciu. W związku z tym ze na magistrali są 3 moduły moje obawy budziła sytuacja w której jednocześnie na raz będą wysyłać komunikat dwa różne moduły. Nie doszło jeszcze do takiej sytuacji.
    Wykorzystanie standardowych łączników do pracy z tak małymi prądami potęguje problem drgania styków. Kod który działa z malutkim tactem tutaj się nie sprawdzał. Ale ostatecznie napisałem taki kod, który jest wrażliwy na zbocze i obojętny na zakłócenia przez możliwy do zdefiniowania czas. Oczywiście wszystkie przyciski sa niezależne. Wciskanie jednego nie zakłóca pracy innych na tym samym module bo korzystam z przerwań. Kod powstał w bascomie. Jest banalnie prosty dlatego nie będę nim wiec zaśmiecał forum.
    Zasilanie 5v prowadzone jest razem z magistrala 485. Zielony LED pokazuje obecność napięcia 12V zasilającego „stronę” zewnętrzną z wyłącznikami. Nie używałem żadnych sprzętowych metod eliminacji zakłóceń. W obwodzie z transportem jest tylko rezystor ograniczające prąd LEDa.
    Sterownik rolet i oswietlenia
    Sterownik rolet i oswietlenia

    MODUŁ WYJŚCIOWY
    Tu także prace trwają i obecnie jest to 5 wersja. Informacja o stanach przekaźników wyjściowych sterujących urządzeniami jest komunikowana co 500ms przez CPU. Dociera ona do modułu sterującego pracą modułów przekaźnikowych. Do wysterowania jest 6 modułów po 8 przekaźników. Początkowo każdy moduł był osobnym urządzeniem na magistrali RS485. Był wyposażony w wyświetlacz i przyciski a jego praca odbywała się pod dyktando arduino nano. Kiedyś zdarzyła mi się awaria jednego z odbiorników MAX485 i stanęła cała magistrala. Postawiłem na prostsze rozwiązanie i teraz dane odbiera tylko jeden moduł (atmega64 lub 128 z bascomem lub arduino Mega). Sygnał dociera do modułu przekaźnikowego taśmą. Piny mikrokontrolera wchodzą na wejście które jest separowane galwanicznie od samych cewek przekaźników. W szeregu z transportem oprócz rezystora znajduje się dodatkowy LED który sygnalizuje wysterowanie wyjścia przez mikrokontroler. Transoptor steruje ULN2803 a ten już samym przekaźnikiem i towarzyszącą mu LED. Najnowszy moduł ma złącze pinowe które umożliwia sterowanie przekaźnikami bez sygnału z mikrokontrolera. Tak na wszelki wypadek.
    Jeśli zaś chodzi o Arduino, które steruje praca przekaźników to realizuje ono bajecznie prosty program a wybrałem je dlatego, że ma dużo wyjść. Na tym etapie pojawia się problem z synchronizacją rzeczywistego stanu wyjść z tymi w CPU. Wystarczy, że przerwie się kabel i moduł sterujący przekaźnikami nie wie jakie mają być stany na wyjściach. W tej sytuacji z pomocą przychodzi watchdog który zresetuje moduł i ustawi przekaźniki w pozycji wyłączonej. Oczywiście cykliczne odbieranie komunikatów go co chwile resetuje.
    Przykładowy pakiet danych wygląda następująco „=:0:1:2:3:7:65200:!”
    Pierwsza liczba 0 oznacza ze komunikat to stany wyjść, 1, 2 i 3 to odpowiednio stany wyjść zakodowane w sposób, który opisze później. 7 to przykładowy lifebit, który jest inkrementowany za każdym wysłaniem tego komunikatu. Na końcu prosta suma kontrolna. Dodanie wszystkich liczb do siebie powinno dać zmienna typu word o wartości 0 i jest to sprawdzane przy każdym odbiorze.
    Każda z liczb to word, zatem pola zawierające stany wyjść zawierają po 16 bitów. 3 pola dają możliwość przesłania danych o 3x16 wyjściach. Jeśli tak jak w powyższym przykładzie są to 1, 2, i 3 to dla zapisu dwójkowego będzie to 0000000000000001, 0000000000000010, 0000000000000031.Numerując wyjścia (bity) od lewej do prawej (od 1 do 48) wychodzi, że załączone ma być przekaźniki 16, 31, 47 i 48.
    Sterownik rolet i oswietlenia
    Sterownik rolet i oswietlenia

    CPU
    W tej roli używam arduino Mega z portem Ethernet. Pewnie wystarczyło by zwykłe Uno ale ja chciałem aby port szeregowy 0 był nadal dostępny przez USB. Tak więc komunikacja z modułami odbywa się przez port 3. Magistrale są wykorzystywane tylko w jednym kierunku wiec piny Tx i Rx pracują osobno. Wyświetlacz umożliwia zdefiniowanie czasu pracy wyjść. Dla rolet są to sekundy a dla oświetlenia minuty. Używam bytów wiec max to 255 sekund lub minut. Dla oświetlenia wartość 0 spowoduje ze nie będzie ono gasło automatycznie. Port Ethernet wspiera jedynie UDP. Dzięki temu obciążenie jest niewielkie a nawet mam sporą nadwyżkę mocy :D . Do CPU można wysyłać komendy które mogą w zasadzie dowolnie ustawiać wyjścia. Starałem się tak uelastycznić tą komunikację żeby w przyszłości nie musieć aktualizować programu w mikrokontrolerze. Mam tu także na myśli dostęp do wszystkich parametrów (zapis i odczyt).
    Być może w następnej wersji CPU nie będę zabudowywał już wyświetlacza a może co najwyżej kilka przycisków do wykonywania jakiś makr (zgaś wszystko, podnieś wszystkie rolety…).
    Sterownik rolet i oswietlenia
    Sterownik rolet i oswietlenia

    Raspberry Pi i dostęp z zewnątrz.
    Poprzednia wersja CPU była podłączona do pierwszej maliny. Dzięki temu miałem dostęp do ustawień i sterowania z poziomu przeglądarki. Skrypt w pytonie odczytywał dane z portu szeregowego do którego było podłączone arduino. Resztą zajmował się PHP i Ajax. Dane były wymieniane przez pliki w ramdysku. Nawet skrypty odczytywałem z ramdysku. Mimo to malina i tak padała po miesiącu. Lepsze doświadczenia miałem z arduinem w tej roli.
    Kiedy dowiedziałem się o blynku od razu postawiłem osobne arduino tylko do sterownia CPU. Komunikacja miedzy nimi przez RS485. Zwyczajnie z jeden strony Blynk nasłuchiwał tego co wychodzi do modułu przekaźnikowego a z drugiej strony działał jak moduł wejściowy. Awaria Blynka czy brak sieci nie wpływał na prace CPU i całej reszty.
    Od ponad roku jestem właścicielem RPi3b+. Przez ten czas malina leżała w szufladzie. Teraz postanowiłem wykorzystać ją i wrócić do możliwości wizualizacji i sterowania przez www. Zacząłem jednak od wyposażenia się w SSD. Do tej pory uruchomiłem skrypt, który komunikuje się z CPU i odczytuje stany wyjść oraz pozwala na sterownie całością przez Blynka. Całość działa 2 tygodnie bez restartów.
    Niestety cały kod do sterowania przez www musze odtworzyć z głowy bo był na uszkodzonej karcie a kopia sie zgubiła.
    W planach mam także skrypt w pythonie, który zautomatyzuje niektóre czynnośći.

    Podsumowanie
    Reakcja na wciśniecie przycisku jest natychmiastowa. Odebranie komunikatu przez CPU odświeża natychmiast stany wyjść. Pomimo tego, że nie używam jakiś szybkich komponentów a magistrale szeregowe pracują na 19200 naprawdę jest ok. To samo Blynk. Wciśniecie przycisku w telefonie i reakcja to w zasadzie ta sama chwila.
    Jeśli chodzi o awaryjność czy zawieszanie się systemu to także nie ma na co narzekać. Oprócz uszkodzonego MAX485 (tak bez powodu) nie padł żaden mikrokontroler, nie wspominając już o uszkodzeniu pojedynczego pinu. Nie było sytuacji kiedy dobrze działający program nagle zawiesił system. Jak program nie ma bugów to działa non stop.

    Trudno ocenić koszt systemu. Jak popatrzeć na wartość elementów i pracy zleconej (płytki) to jest kilka stówek. Natomiast droga jaką przeszedłem do tego miejsca to inna sprawa. Nietrafione pomysły i doświadczenie jakie z tego wynika także ma swoją cenę. Nie licząc czasu i nerwów to w elektronikę utopiłem kilka lub kilkanaście razy więcej niż te kilka stówek o których pisałem wcześniej. Ale sami dobrze o tym wiecie :D

    W systemie pracuje jeszcze kilka innych elementów, o których postaram się napisać osobny post.

    Pozdrawiam

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    ditomek
    Poziom 21  
    Offline 
    ditomek napisał 546 postów o ocenie 190, pomógł 23 razy. Jest z nami od 2004 roku.
  • IT SerwisIT Serwis
  • #2
    khoam
    Poziom 39  
    Korzystasz z lokalnego (swojego na RPI) serwera Blynk czy z tzw. chmury? Niezbyt to wynika z opisu.

    ditomek napisał:
    Jak program nie ma bugów to działa non stop.

    Tym rozbawiłeś mnie do łez :lol:
  • IT SerwisIT Serwis
  • #3
    ditomek
    Poziom 21  
    Blyk na oryginalnych serwerach. Dokupiłem tylko trochę prądu.
    Jestem z niego bardo zadowolony.
    W domowej sieci oprócz sterownika jest kilka innych urządzeń wymieniających między sobą dane po UDP. Nie opisywałem ich teraz ale mając na myśli bugi to chodziło mi głównie o błędne odwołania między tymi urzadzeniami.
  • #4
    SylwekK
    Poziom 31  
    Urządzenie już gotowe, ale czy nie zastanawiałeś się aby wyjścia i wejścia zrobić na rejestrach 74hc595? Sterowanie banalne nierestrykcyjne czasowo z praktyczmie jakiegokolwiek jednego procesora. Łatwa rozbudowa o kolejne in/out no i koszt dużo niższy.
  • #5
    ditomek
    Poziom 21  
    Prowadziłem próby z rejestrami.
    Problem zawsze pojawia się wtedy kiedy tracisz łącze do CPU. Rejestr będzie trzymał tą wartość bez końca.
    Mikrokontroler się wyłączy.
    Jest jeszcze opcja wykorzystania sygnału OE. Zrobiłem nawet takie płytki - od roku leżą w szufladzie i czekają na test w prawdziwych warunkach :-)