Dwa kroki do przodu, jeden wstecz. Extract!
W postępującem smartyzacji mieszkania na razie najwięcej czasu zeszło mi na podłączeniu okapu kuchennego. Obmyśliłem kilka podejść, a to co wdrożyłem musiałem poprawiać. Utrudniłem sobie założeniem, że dodatkowe sterowanie musi być rownoległe z oryginalnym. Żeby nie psuć istniejących funkcji i nie musieć wyrabiać nowych nawyków.
Ale na początek. Przypadki użycia:
podświetlenie; dwie halogenowe lampki świecące do garnków są z pewnością przydatne. Z kolei mało przydatne, a nawet turbo-wkurzające jest wymyślone przez producenta sterowanie. O ile włączenie dotknięciem jest OK, to żeby je wyłączyć trzeba przytrzymać pole kontrolne dokładnie przez 1,21 sekundy. Milisekunda mniej lub więcej i światło nie reaguje, albo tylko zmniejsza się jasność. Uproszczenie wyłączania wystarczyło mi za motywację do lutowania;
sterowanie wyciągiem; miałem już sytuację, że jestem po łokcie zajęty robieniem jedzenia, a na patelni obok coś zaczyna mocno dymić. I żeby zwiększyć obroty wyciągu muszę się odkopać i wyczyścić jeden palec (bo sterowanie panelem dotykowym!). Marzyło mi się po prostu powiedzieć „Jarvis^W Aleksiej, włącz wyciąg na 3”.
lampki pod sufitem; to bonusowo, bo skoro już mam esp8226 w pobliżu zasilania, to mogę tam podpiąć sterowanie (i zrezygnować z jednego z gniazdek na pilota z Biedronki).
Dla ustalenie uwagi, jeszcze parę słów o okapie. Silnik wyciągu ma 3 biegi i jest zasilany z 230V. Co ciekawe, każdy bieg ma osobne uzwojenie, tj. przy włączeniu biegu 2 zasilane powinno być tylko uzwojenie nr 2. Wolałem nie sprawdzać co się dzieje po podaniu zasilania na więcej niż jedno uzwojenie – czy spali się w potoku iskier, czy tylko oderwie się od ściany i odleci.
Lampki halogenowe zasilane 12V, poprzez transformator elektroniczny Shark60. Jest na nim napisane „dimmable by trailing or leading edge dimmer”, ale za wiele mi to nie mówi.
Interfejs użytkownika to panel dotykowy z wyświetlaczem 7 segmentowym. 4 pola dotykowe: bieg wyciągu + i -, timer (nigdy nie użyłem) i pojedyncze pole sterowania oświetleniem (patrz 1. przypadek użycia). Podłączony do sterownika 10 przewodami. Niestety nie udało mi się znaleźć rozpiski co i jak, więc nie wykorzystałem tego interfejsu samemu. Może kiedyś.
Kontroler. Dość prosta płytka, najważniejszy jest mikrokontroler atmega8l. Do jego wyprowadzeń podłączone m. in. zasilanie 5V (via regulator napięcia 7805) i bank tranzystorów w układzie ULN2003.
Na tej bazie wyklarowały mi się trzy scenariusze w jaki sposób mógłbym dołożyć swoje sterowanie.
Plan 1: bezpośrednie sterowanie 230V
W pierwszym przybliżeniu rozważałem całkowite olanie istniejącego sterownika i powielenie jego funkcji w moim układzie. To oznacza konieczność sterowania 230V – specjalnie się do tego nie palę, ale kilka przekaźników albo triaków załatwi sprawę.
Uciążliwości jest jednak całkiem sporo. Potrzebuję dodatkowo zasilacza z 230V na 12V (do halogenów) i 5V/3.3V (klony d1mini, które mam, można zasilać z obu napięć). To zajmuje miejsce, a w okapie wcale go dużo nie ma. Do tego trzeba pilnować, żeby nie włączyć uzwojenia dwóch biegów okapu na raz.
Więcej przeszkód niż zalet. Może jednak zobaczyć, co się kryje w firmowym kontrolerze.
Plan 2: sterowanie przekaźnikami
Płytka jest bardzo prosta i dokładnie widać co się święci. Projektant przy prawie wszystkich elementach napisał ich model – wielkie kudos! Po kolei:
złącze po prawej: tutaj przychodzi zasilanie (dolne 3 piny), wychodzi zasilanie uzwojeń silnika (środkowe piny) i wychodzi 230V doprowadzone do tranzystora sterującego oświetlenie (górne dwa piny)
-
na środku 3 przekaźniki odpowiadające za sterowanie silnikiem:
jest miejsce na 4 przekaźnik w modelach z dodatkowym biegiem
przekaźniki są sprytnie połączone: włączenie niższego biegu odcina zasilanie od przekaźników wyższych biegów. Dzięki temu niemożliwe jest włączenie naraz dwóch lub trzech biegów w silniku
w górnej części optoizolator MOC3052, triak BTA-12, cewka – układ sterowania oświetleniem halogenów z możliwością redukcji jasności (współpracuje z Shark60).
po lewej – 7805, przetwarzający napięcie 12V (do sterowania przekaźnikami) na 5V (dla mikrokontrolera)
po drugiej stronie płytki, pod naklejką z kodem paskowym – wspomniana atmega8l i scalaczek z tranzystorami.
W zasadzie perfekcyjnie. Obecne na płytce 5V zapewnia mi zasilanie dla esp8226 na d1mini. Do sterowania oświetleniem mógłbym wpiąć się pod gotowy optoizolator. Układ przekaźników zabezpiecza przed nieprawidłowym włączeniem. Tylko do ich sterowania (12V!) potrzebowałbym jakiegoś układu z tranzystorami. Ale czy nie wspominałem, że doszedłem do 3 scenariuszy?
Plan 3: Mimikra do atmegi
Planuję użyć mikrokontrolera do sterowania wyższymi napięciami. A przecież już jest taki mikrontroler na tej płytce. I ma swoje tranzystory, optoizolator. Najprościej będzie się po prostu wpiąć w miejsca, gdzie już jest podłączony.
Przekaźniki jedną nóżkę mają podłączoną pod +12V, druga idzie do zestawu tranzystorów zamkniętych w układzie ULN2003. Sygnał z GPIO atmegi steruje tranzystorami, powodując zwarcie do masy i w ten sposób zamknięcie obwodu zasilającego przekaźnik.
Podobnie optoizolator: ten z kolei na stałe jest przylutowany do masy, natomiast sterowanie z mikrokontrolera zapewnia zasilanie wbudowanej diody LED.
Pora lutowania – plan 3
Wszystko ładnie pięknie, tylko nie działa. Przekaźniki w ogóle nie reagują, włączenie światła po chwili powoduje reset mikrokontrolerów. Pora się zastanowić, co poszło nie tak.
Po pierwsze to niezgodność zasilania. Atmega działa na 5V. Esp8226 na 3,3V. Co prawda ESP ma złącza gpio 5V-tolerant, ale to oznacza tylko tyle, że się nie spali przy takim napięciu. Samo więcej niż 3,3V nie poda.
Po drugie port GPIO ma albo stan wysoki (max 3,3V na ESP), albo zwarty do masy. A jak dwa mikrokontrolery są spięte swoimi portami, i jeden ustawi sobie stan niski, a drugi akurat chce wysoki, to w efekcie wspólna masa jest zwierana do napięcia zasilania. Not good.
Zabawny efekt powstał przy włączeniu oświetlenia – znikała możliwość zmiany biegu na inny niż aktualnie ustawiony, ani przez ESP, ani panelem dotykowym (przez atmegę; co podwójnie ciekawe, cyfrę biegu na wyświetlaczu dało się zmienić). Wyłączenie oświetlenia powodowało, że wybrany bieg „wskakiwał“.
Co prędzej odłączyłem moją konstrukcję i przemyślałem podejście.
Krok w tył - plan 2
Spróbowałem więc z planem pośrednim. Własnoręczne sterowanie przekaźnikami wymagało kilku elementów więcej. Na kawałku płytki zamocowałem 3 MOSFETy i doprowadziłem do nich GPIO z ESP. O dziwo, zadziałało poprawnie od razu. W obudowie oryginalnego kontrolera znalazło się miejsce na tranzystory. D1mini zostawiłem na zewnątrz – i tak metalowa obudowa dookoła nie jest najlepsza dla komunikacji po wifi.
W dalszym ciągu jednak nie działało w pełni sterowanie oświetleniem. Przyczyna ta sama co poprzednio: jeden kontroler zwierał do masy stan wysoki drugiego. Z tym sobie poradziłem lutując na oryginalnym optoizolatorze mój, z nóżką zasilania podłączoną tylko do ESP:
Logika sterowania
Stronę oprogramowania miałem już przećwiczoną kilka razy wcześniej. Poza mnóstwem ruchomych elementów – Mosquitto (MQTT), OpenHAB, ha-bridge, Alexa – nic specjalnie skomplikowanego. W interfejsach (webowym, komórkowym, aleksowym) nie mam bezpośredniego sterowania uzwojeniami biegów wyciągu. Jest tylko jeden element, któremu można ustawić zadany bieg, i on pilnuje żeby tylko jedno uzwojenie było włączone. Dublując zresztą zabezpieczenie wynikające z podłączenia przekaźników, ale im więcej tym lepiej.
Poniekąd przez to, że w ha-bridge cały okap udaje żarówkę (…) to nie można Aleksie wydać polecenia „ustaw wyciąg na 2”. A może to ograniczenie aleksy. W każdym razie biegi mam zmapowane dwojako: 1% włącza bieg 1, 2% drugi a 3% trzeci; pewne poziomy procentowe włączają konkretny bieg, np. 20% włącza bieg pierwszy. Można więc powiedzieć „włącz wyciąg na 20%”:
Satysfakcja 99% procent. Założenia spełnione, a brakujący 1% pojawi się, jeśli rozgryzę oryginalny dotykowy panel sterowniczy.