Początki inteligentnego domu, DIY Sterownik LED
29.09.2016 | aktual.: 30.09.2016 08:07
Ja wiem, moje DIY projekty od jakiegoś czasu wyglądają jakoś jak "no i tu trzeba tylko palnika plazmowego. A tam, jak umiesz w fizykę kwantową to baaaanał", ale to wciąż moje małe DIY. Dziś pierwszy projekt wykorzystujący do komunikacji magistralę RS485, będzie więcej. No ale, że to pierwszy projekt z takim interfejsem, to jeszcze nie ma z czym rozmawiać. Oczywiście dalej wolę eth, ale o ile eth do grup czujników, stacji meto jest wspaniały (a wirelessy dalej są fe), tak jakoś... Wyjdzie oszczędniej na switchach. Poza tym o ile wszystkie tego typu rzeczy są/będą autonomiczne - znaczy, jakby padła komunikacja, to z każdego urządzenia można dalej korzystać, tylko ich "inteligencja" na tym cierpi. Idea jest taka, aby spiąć cały grupę urządzeń z jednego pomieszczenia używając RS'a i dopiero to wpiąć w ethernet.
Tymczasem, spojrzał Kaw na to straszne, punktowe oświetlanie dostarczone razem z kuchnią, żrące 120 W, grzejące się jak sto diabłów, niedające za dużo światła i pomyślał "to jest złe".
Pomyślał wtem o zastąpieniu bądź uzupełnieniu tegoż wynalazku o jakieś sensowne ustrojstwo. Stworzył niniejszym oryginalny model wspaniałego sterownika 12 V pasków LED‑owych, oparty o ATmegę8 we wspaniałej obudowie DIP. Dynks ten ma całe cztery tryby działania:
- Wyłączony – co, jak nazwa wskazuje, oznacza całkowite wyłączenie;
- Włączony - po raz kolejny nazwa może być myląca, ale aby rozwiać wątpliwości - w wypadku tego trybu LED-y są cały czas włączone;
- Automatyczny 1 - gdzie LED-y włączają się, kiedy czujnik oświetlenia zewnętrznego mówi iż jest wystarczająco ciemno;
- Automatyczny 2 - gdzie poza wykrywaniem stanu oświetlenia na zewnątrz brane pod uwagę są jeszcze dane z czujnika pasywnej podczerwieni, także sterownik wie kiedy ktoś jest w kuchni. Chyba, że jest ubrany w kożuch i ma pełny kask, wtedy przydaje się "auto 1";
Poza paroma drobnymi wadami (jak zakodowane na sztywno progi przełączania, czy paskudna obudowa) sterownik ten działał bardzo skutecznie przez lata. Lat było dużo (5 konkretnie) i kontynuował by swoje działanie nie niepokojony, jednakże w którymś momencie objawiła się jego kolejna wada - brak zabezpieczenia nadprądowego. Efekt? Któregoś pięknego dnia, w jednym obwodzie LED‑ów zrobiło się prawie-zwarcie - pół biedy jakby to było normalne zwarcie, wtedy zasilacz by się odłączył. A że to było prawie-zwarcie (pomiar post-mortem wykazał jakieś 9 Ohm), to w związku z brakiem radiatorów na MOSFET-ach (nigdy nie miał pracować pod takim obciążeniem), tenże się przegrzał, spalił, prawdopodobnie zwarło źródło do bramki, w efekcie pociągnął za sobą MCU... Peszek. Trzeba będzie zrobić nowy.
Droga do światełka na końcu tunelu
I mogła by to być po prostu ewolucja, ale ewolucja zabrałaby okazję do przetestowania i ocenienia paru nowych rzeczy, które stały na półce. Tak że mamy rewolucję. Na początek układ zasilania. Oryginalnie bazujący na LM7805 w którejś wersji, zasilał tylko MCU, kilka LED‑ów i czujnik PIR. W zasadzie nadaje się do takich rzeczy idealnie.
Prosty, niezabierający dużo przestrzeni, no chyba, że LM‑a umieścimy poziomo, a niestety tak musiał być. Przy tych prądach, jakie pobierał kontroler, radiator jest zbędny. Minus, jak zawsze w wypadku stabilizatorów liniowych - marnowanie energii. Ale ponownie, przy takich prądach można pominąć. Jakbym się uparł, ten sam układ można by spokojnie zastosować w nowej wersji, robione na zamówienie PCB dają tyle możliwości chłodzenia układów, bezpośrednio przez PCB. Ale z drugiej strony stabilizatory impulsowe są sporo mniejsze, dają wyższy prąd i mniej się grzeją, no tyle, że droższe i wymagają więcej komponentów. No ale skoro w szufladzie czekają TPS5420… Kupione, co prawda, do innego projektu, ale gdybym przetestował je w tym, to w razie problemów w docelowym, można by użyć innych albo poprawić układ, zawsze odpadnie jakiś prototyp. Ten konkretny TPS ma wydajność prądową 2.6 A, jak na ten projekt, zapasu bardzo dużo, ale… Ale pochodzi z rodziny, w której występują słabsze (i tańsze) wersje (TPS54140 na przykład), całkowicie kompatybilne w pinach i zewnętrznych komponentach. No i jest taka mała zasada, nie dla wszystkich komponentów prawdziwa, tym niemniej - jeśli wymienisz w danym układzie komponent słabszy na mocniejszy, a zachowasz prąd jaki przez niego płynie - będzie wymagał mniej chłodzenia niż wersja słabsza. A to też jeden z celów - kontroler ma nie generować za dużo ciepła, prawie wcale - przez co dobrze znosić przebywanie w słabo wentylowanych/ciepłych z natury zakamarkach, jak okolice sufitu w kuchni (wysoko zabudowane szafki). Jedyny "minus", to brak wersji TPS‑a na konkretne napięcie, tak że trzeba użyć 2 dodatkowych rezystorów. Ojejujeju, jakie straszne, dwa rezystory, jak to przeżyjesz - w tym wypadku przeżyje, ale czasem są takie płytki gdzie dodatkowe dwa rezystory, nawet w 0805 robią różnice, ale akurat nie w tym projekcie.
Druga sprawa, stopień mocy. Oryginalnie dwa były przewidziane do zasilania światełek nad blatem (szafki od spodu) i na poziomie szafek z góry, zawsze to więcej światła, a poza tym kwestie dekoracyjne. Skończyło się na tym, że jeden kanał był podłączony do LED‑ów z lewej strony, drugi z prawej. A, że każdy kanał miał swój wyłącznik, miało to opcję odłączenia części, której akurat w danym momencie nie potrzeba. Najwyraźniej okazało się to być złym pomysłem. Kontroler i tak przez 99.9% czasu pracował w trybie automatycznym. Teraz są trzy kanały, konfiguracje, w zasadzie, dowolne, można mieć góra/blaty/podłoga, a można, równie dobrze, mieć paski RGB, kwestia zmiany w sofcie. Każdy kanał dostępny jest z PWM, tak że możliwa jest regulacja mocy na każdym osobno. Co przydaje się na nocne eskapady do lodówki, kiedy moc wzrasta przez 3‑5 sekund, to mniej atakuje oczy niż nagły skok na 100%. A co do najniższego poziomu - oryginalnie zainstalowane były IRFU120 - N‑MOSFET, 7 A, sterujące niską stroną zasilania. Jeden jakoś się spalił przy ciągłym prądzie około ~2 A. W sumie mógłbym zastosować identyczną konfigurację, ale że chciałem przenieść tranzystory na wysoką stronę zasilania (może ktoś poliże kable?), to albo N‑MOSFET z dodatkowym napięciem sterującym dla nich > ~16 V albo P‑MOSFET. N‑MOSFETY są tańsze, mają lepsze parametry prądowe, są szybsze i w wielu, bardzo wielu odmianach. Z drugiej strony mają sterować plusem zasilania trzeba te 16 V (czyli napięcie zasilania plus Vgsth, napięcie progowe bramki), a to nieco komplikuje zabawy z nimi. Zostają P‑MOSFETY, ich wady przy częstotliwości naszego PWM‑a nie mają jakiegoś szczególnego znaczenia, wybór padł na AO4407 - 12 A, obudowa SO‑8. Na maksymalnym prądzie i tak nie będą pracować, bo raz, że zasilacz musiałby mieć wydajność 432 W, dwa, że ścieżki PCB ograniczają je do około 4 A/kanał. Ale to jeszcze nie koniec ograniczeń, zastosowane do pomiaru prądu w poszczególnych kanałach rezystory, ograniczają dalej prąd do około 1,5 A na kanał*. Choć jakby je wymontować (można, tylko pomiar prądu przestanie działać), sumarycznie dostępna moc to około 54 W. Bez funkcji pomiaru prądu... Albo poświęcając dalej rozdzielczość, w domyślnej konfiguracji układ jest w stanie mierzyć prąd z rozdzielczością 8 mA. Wychodzi < 144 W. Z tym, że z moich kuchennych doświadczeń wynika iż 15 W wystarcza na oświetlenie wszystkiego i jeszcze z nadmiarem, acz zainstalowany zasilacz ma dostępne 30 W. Układ zasilania i stopnie mocy tolerują napięcia od około 5 V do około 30 V, TPS zniesie 42/62 V, AO4407 – 30 V, zainstalowane tantale – 35 V. Odliczając margines bezpieczeństwa, bezpieczny zakres operacyjny sterownika - 5‑24 V, co przy okazji umożliwia sterowanie nawet WS2812, choć to trochę niekonwencjonalne, ale dałoby się.
No tyle, że aby zatkać P‑MOSFET trzeba podnieść napięcie na bramce do poziomu napięcia na źródle, czyli 12 V, a to nieco dużo dla MCU pracującego przy napięciu 3v3. Ale co to dla nas, weźmiemy sobie zestaw 2 rezystorów, i jednego małego N‑MOSFET-a, tutaj BSS138 w obudowie SOT‑23. Działa to bardzo prosto, w stanie spoczynku R1 i R2 ustalają stan bramek obu tranzystorów tak aby były wyłączone, R1 zatyka Q1 ciągnąc mu bramkę do jego źródła, R2 blokuje Q2 ciągnąc jego bramkę do jego źródła (czyli odpowiednio stan wysoki dla Q1 i stan niski dla Q2). Stan wysoki na bramce Q2 otwiera Q2, ustawia dren na stan niski, co odtyka Q1 - i ot działa.
Z drugiej strony, od strony masy znajduje się rezystor, który ma za zadanie spowodowanie rosnącego spadku napięcia wraz z rosnącym prądem, zrobione do zabezpieczenia nadprądowego. W zasadzie... Dało by się tam wstawić bezpieczniki polimerowe, ale uznałem, że elektroniczne zabezpieczenie jest wygodniejsze i daje więcej opcji. Miejsca na płytce są na rezystory rozmiaru 1812, ale jakoś wystąpił problem z dobraniem odpowiednich, dlatego zainstalowane są 0R11 rozmiaru 1206. To daje 0,25 W dopuszczalnej mocy strat, a z tego wychodzi 1,5 A limitu. A jako, że są one od strony niskiej, to można mierzyć ten spadek napięcia zwykłym ADC bez wspierania się różnicowym (którego MCU i tak nie ma), no i bez dzielnika napięcia.
Serce całości, STM32F103R8T6, 32bit ARM. Lekki overkill, ale że akurat są na stanie, a nie wychodzą jakoś bardzo inaczej cenowo niż AVR, no i mają więcej układów peryferyjnych (a użyłem prawie wszystkich wyprowadzeń). Wbudowany port USB Device się przyda, choć tylko do jednej rzeczy - aktualizacji firmware. Do tego ST3485 - transceiver RS485, umożliwiający komunikację przez port szeregowy z innymi urządzeniami, które... Noo, będą w przyszłości dodane. A że ma układ magistrali, to będzie wygodniejsze niż Ethernet. Choć w planie i tak mam zrobienie mostka Eth <-> RS. Wyprowadzony na zewnątrz jest także port SPI1 i UART1, to dla wyświetlaczy, którego sterownik nie potrzebuje, choć może używać. Koncepcja jest taka, że o ile nie zainstaluje się urządzeń wejścia (enkoder) i wyświetlacza, to można go schować w obudowie, gdzieś ukryć i zapomnieć, że istnieje. Będzie działał w trybie automatycznym i tyle. Z drugiej strony, jeśliby zainstalować enkoder i wyświetlacz (aktualnie LED na AS1106) to mamy także możliwość przekonfigurowania, zmiany trybów, generalnie bezpośredni wpływ na jego pracę. Można by także użyć czegoś na chociażby ST7565R, aaale może nie przesadzajmy, chyba, że by jednak podpiąć te Ethernet...
Jako czujnik obecności ludzi, występuje moduł HC‑SR501. Można zainstalować dwa takie czujniki, ot aby miały lepszy widok na pomieszczenie, choć jeśli jeden wystarczy, to wystarczy. Upakowane w małe, pasujące do nich obudowy (drukarka 3D to dobra rzecz) i przymocowane do ściany. Przy okazji wyszło, że nadrukowane +5 V przy wtyku zasilania tych modułów, to tylko wskazówka. Tak naprawdę, zakres ich pracy dochodzi do +20 V, więc mogą być zasilane bezpośrednio z zasilacza LED‑ów. Mówią też, że poziom wyjścia to +3v3, niby się zgadza, ale na wszelki wypadek na płytce zainstalowany jest konwerter poziomów logicznych, przy okazji separujący układy.
Do tego dwa czujniki oświetlenia, jeden zewnętrzny, drugi wewnętrzny. Zewnętrzny przyklejony przeźroczystym (teoretycznie) silikonem do szyby w oknie. Najpiękniej nie jest, ale, że jest w miejscu, którego i tak nikt nie widzi, może sobie tak być, swoje zadanie spełnia.
Wejście - były trzy przyciski, włącz/wyłącz dla obu kanałów i zmiana trybów + 4 LED‑y 3 mm. Aktualnie albo nie ma nic, albo jest enkoder (PEC11) z przyciskiem i do kompletu z wyświetlaczem LED do sygnalizacji zdarzeń. Przedni panel zrobiony z półprzeźroczystej pleksi. Wszystkie śruby M3.
Co tu dużo o PCB pisać, chyba widać. Nowa jest mniejsza, mieści więcej ciekawych rzeczy, ładniej zrobiona, prawie całkowicie SMD i przede wszystkim nie nosi śladów spalenizny. Swoją drogą, to temperatura musiała być dość wysoka, że przyjarało nawet laminat.
I stała się światłość
A tym wszystkim zawiaduje software. Software, który w trybie auto, jak nikogo nie było jakiś czas w pomieszczeniu to trzyma światło wyłączone. Gdy ktoś wejdzie, oraz gdy wie, że na zewnątrz jest dostatecznie ciemno - włącza oświetlenie podnosząc stopniowo moc przez 3 sekundy do pełnej, na wszystkich kanałach. Taki stan trzyma się przez cały czas przebywania ludzia w pomieszczeniu i 5 minut po jego wyjściu. 5 minut - na wszelki wypadek, gdyby czujnik zgubił na chwilę ciepłotę ciała, głupio by było nocą odciąć światło, jeśli ktoś tam jednak jest. Po jego wyjściu wyłącza kanały 2 i 3, a 1 ustawia na minimalna moc, ot tak, żeby było widać podłogę. Stan niskiej mocy trzyma się około 1,5 h. W trybie pomijającym czujnik PIR światło jest włączane i wyłączne tylko w zależności od wskazań zewnętrznego czujnika światła. Wewnętrzny czujnik jest używany tylko do regulacji mocy wyświetlacza (o ile jest akurat włączony). Poza tym, jak w oryginale - on/off. Ale jest jeszcze jedna funkcja, "symulujemy że jesteśmy w domu", a może tryb wakacyjny? Światło włącza się na losowy czas 1‑2h po zapadnięciu zmroku. Całość zasilana zalewanym zasilaczem, ponoć specjalnie do LED‑ów o mocy 30 W.
Całkowity koszt przedsięwzięcia 110‑180 zł (w zależności od konfiguracji), a że mam jeszcze 8 płytek pod ten projekt... Jeśliby ktoś chciał, to wołać. ;)
Konkretna implementacja
Wygląda trochę jak HAL9000, ale tylko trochę. Z oczywistych plusów, złącza można przylutować z dowolnej strony albo nie montować niektórych układów. W porównaniu do halogenów - dają więcej światła i bardziej równomiernie świecą. Ale i tak je kiedyś zmienię na lepszy model, pewnie na diodach 5050 z wbudowaną wodoodpornością (lepiej się je myje).