Przekaźniki bistabilne + Arduino + Supla?

andrew01
Posts: 163
Joined: Fri May 24, 2019 6:49 am

Post

Dzień dobry Wszystkim :)

chciałbym w swoim domu dodać trochę automatyki, na początek chciałbym powalczyć z oświetleniem.

Posiadam 16 obwodów załączanych przekaźnikami bistabilnymi Zamel PBM-05/12-24V, do których podłączone są przyciski monostabilne, oraz 8 standardowych obwodów.

Plan miałem taki aby zająć się jedynie obwodami z przekaźnikami bistabilnymi, ale później stwierdziłem co to za automatyka, gdzie tylko część obwodów będzie sterowana poprzez telefon. Tak trafiłem na produkty Zamel'a z linii Supla (ROW-01), a stamtąd już w prostej linii na cały projekt Supla i to forum.

Sterowanie przekaźnikami bistabilnymi chciałbym zrealizować na platformie Arduino, poprzez przekaźniki, które będą podawały impuls (np. 0,5s) napięcia 12V (z tego samego źródła, które podają obecnie fizyczne przyciski) odpowiednio na zacisk SET lub RESET przekaźnika bistabilnego, w zależności od tego czy zapalamy, czy gasimy światło. Całość ma być tylko dodatkiem do obecnej instalacji, gdzie awaria np. procesora nie będzie negatywnie wpływała na możliwość korzystania z przycisków fizycznych. A ponieważ światło może być zapalone/zgaszone również przyciskiem, to aby Arduino wiedziało czy światło jest zapalone czy nie to zamierzam sprawdzać napięcie 230V na zacisku wyjściowym przekaźnika bistabilnego, i tą informację kierować na porty wejściowe Arduino (oczywiście nie bezpośrednio). Reasumując na 16 przekaźników bistabilnych potrzebować będę 32 wyjścia na przekaźniki sterujące oraz 16 wejść informujących o stanie oświetlenia.

I teraz przechodzimy do sedna, czyli jak to połączyć z Suplą? Znalazłem już oczywiście przykłady dotyczące zwykłego przekaźnika podłączonego pod Arduino, który jest sterowanym stałym stanem wysokim lub niskim, ale na bistabilnymi jeszcze się nie natknąłem.

Domyślam się, że na początek trzeba zadeklarować w Supli 16 przekaźników metodą SuplaDevice.addRelay(numer portu), i tu pierwsza zagwostka, nie mogę chyba podać żadnego z portów, które będą u mnie sterowały przekaźnikami, czyli powinny to chyba być porty niepodłączone (nie wiem na razie, czy na Arduino idzie zrobić porty wirtualne).

Następnie w pętli sprawdzałbym jaki jest stan napięcia 230V na przekaźniku i przekazywał tę informację do Supli metodą suplaDigitalWrite.
Jeśli natomiast światło zostanie zapalone/zgaszone w Supli to czy wystarczy odczytać stan poprzez metodę suplaDigitalRead i na jej podstawie podać impuls na SET/RESET przekaźnika PBM?

Czy idę w rozumowaniu w dobrym kierunku czy raczej błądzę jak ślepy we mgle? Jestem na samym początku, próbuję na razie to ogarnąć koncepcyjnie aby wiedzieć co mi będzie potrzebne. Od strony Arduino to planuje wykorzystać moduły przekaźników ssr (4 x 8 przekaźników https://botland.com.pl/pl/przekazniki-p ... -5vdc.html tyle, że wyzwalanych stanem wysokim) oraz dwa moduły detekcyjne (https://www.gotronik.pl/8-kanalowy-modu ... -4090.html).

Pozostałe obwody sterowane poprzez ROW-01 wymagać będą jedynie pogłębienia puszek elektrycznych :)

Pozdrawiam
Andrzej
andrew01
Posts: 163
Joined: Fri May 24, 2019 6:49 am

Post

Witam ponownie,

chyba znalazłem najbardziej interesującą mnie część:

SuplaDevice.addRelay(gpio1, gpio2, false, true, SUPLA_BIT_RELAYFUNC_POWERSWITCH | SUPLA_BIT_RELAYFUNC_LIGHTSWITCH);


gpio1 - pin gdzie jest podpięty przekaźnik
gpio2 - pin z którego odczytujemy stan przekaźnika

Co prawda zmianie ulegnie u mnie sposób sterowania, nie będzie set/reset tylko normalne sterowanie przekaźnikami tak jak mam obecnie z przyciskami fizycznymi, ale to nawet lepiej ponieważ zmniejszy się liczba przekaźników. Czy dobrze rozumiem, że:

gpio1 - ustawiam jak wyjście i podłączam przekaźnik, który poda 12V do przekaźnika bistabilnego,
gpio2 - ustawiam jako wejście i podaję sygnał z detektora 230V

i teraz, czy wystarczy w pętli loop wywoływać metodę iterate()? I to wszystko? Jak na wejściu pojawi się stan wysoki to w metodzie iterate Supla zostanie powiadomiona o tym, że zmieniono stan przekaźnika? I w druga stronę, jak w aplikacji zostanie włączone światło to pojawi się impuls na gpio1? Jeszcze pewnie będzie trzeba w setup podać do Supli stan zastany oświetlenia w momencie włączenia arduino, lub wymusić wyłączenie całego oświetlenia (co i by nie było może takie złe). To na razie tylko teoria, jak tylko przyjdą "zabawki" to zabiorę się do testowania. Jednakże dobrze było aby mi ktoś potwierdził czy dobrze kombinuję :)

Pozdrawiam
Andrzej
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

Ta biblioteka idzie do gruntownej przebudowy. Nie obsługuje obecnie przekaźników bistabilnych.
Zadeklaruj kanału przez addRelay tylko wskaż nieistniejące porty.
Zrób sobie hak za pomocą SuplaDevice.setDigitalWriteFuncImpl(&supla_DigitalWrite)

i tam robisz obsługę przekaźników bistabilnych.
Informację o stanie kanału przesyłasz za pomocą metody channelValueChanged.


Jak potrzebujesz coś sprawdzać w pętli to nie rób tego w loop-ie tylko w timerze. setTimerFuncImpl
SUPLA.... Nareszcie w domu.
andrew01
Posts: 163
Joined: Fri May 24, 2019 6:49 am

Post

Dziękuję za podpowiedź, zabieram się do nauki a już niebawem do praktyki :) pewnie jeszcze nie raz będę prosił o pomoc :)

Pozdrawiam
Andrzej
andrew01
Posts: 163
Joined: Fri May 24, 2019 6:49 am

Post

Yeeeaaaahhh!!! Pierwszy ROW-01 zamontowany i działa :) Wiem, wiem, nie ma czym się podniecać ale i tak banan na twarzy jest :)

Co prawda zamontowanie wg poradników nie było możliwe, mała puszka i ułożenie kabli wejściowych za nic nie pozwoliły na przepchnięcie przekaźnika., więc zrobiłem jeszcze głębszy z tyłu otwór i Zamelk'a wsunąłem poziomo w puszkę, a dokładniej już w ścianę :) Miałem obawy o zasięg wi-fi ale jest OK.

Kolejny test to już z Arduino jak przyjdą zabawki.

Pozdrawiam
Andrzej
andrew01
Posts: 163
Joined: Fri May 24, 2019 6:49 am

Post

Od kilku dni bawię się już ze sprzętem Arduino i w zasadzie wszystko działa, zdefiniowałem 16 przekaźników bistabilnych poprzez:

SuplaDevice.addRelay(22, 23, false, true, SUPLA_BIT_RELAYFUNC_LIGHTSWITCH);

Zmieniłem nieco podejście i nie będę korzystał z wejść SET i RESET na przekaźnikach bistabilnych tylko normalnie tak jak z przycisku fizycznego. Mam tylko jedno pytanie, włączenie światła jest w aplikacji sygnalizowane natychmiast, natomiast wyłączenie z 3 sekundowym opóźnieniem. Oczywiście nie jest to jakimś wielkim problemem a jedynie ciekawością z czego to może wynikać.

Czy jest może planowane aby z poziomu kodu czy to Arduino czy ESP można było definiować opis przekaźników oraz przypisywać im lokalizację? Bardzo by to ułatwiło zwłaszcza na początkowym etapie eksperymentów :)

Pozdrawiam
Andrzej
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

Nie ma zdefiniowanych opóźnień. Problem będzie po stronie urządzenia wykonawczego.
SUPLA.... Nareszcie w domu.
andrew01
Posts: 163
Joined: Fri May 24, 2019 6:49 am

Post

Zgadza się, to Arduino przesyła z opóźnieniem sygnał do serwera, z opóźnieniem pojawia się w logu "Value changed" - pytanie tylko co może być tego powodem? Nie ma znaczenia czy jest 1 czy 16 przekaźników zdefiniowanych.
andrew01
Posts: 163
Joined: Fri May 24, 2019 6:49 am

Post

Sprawa wyjaśniona, przyczyna to brak wprawy początkującego :) czyli mnie, układ testowałem na przewodach podając 5V lub nie na pin z którego sczytywany jest stan przekaźnika. I problemem było to "lub nie", ponieważ zostawiałem stan nieustalony a powinienem przełączać na masę.

Return to “Pomoc”