Dziś trochę o przeróbce lampek świątecznych na balkonie.
Do ostatnich świąt były to łańcuchy ze zwykłymi żaróweczkami. Ale te żaróweczki wytwarzają trochę ciepła i niektóre oprawki trochę się nadtopiły. Przez to żarówki nie chciały mocno siedzieć i traciły kontakt ze stykami. Gasły całe łańcuchy, bo były połączone szeregowo. Postanowiłem to naprawić. Ale najpierw jeszcze coś. Łańcuchy były włączane przez przekaźnik sterowany z raspberry. Na malinie działał sobie cron, który odpalał przekaźnik o określonych godzinach. Jest to część większego systemu, który steruje różnymi urządzeniami w domu. Ogólnie kształtuje się tak. Na malinie jest serwer www, na którym działa panel napisany w php. Wszystkie sprzęty są zdefiniowane w jednym pliku json. Łatwo jest dodawać nowe urządzenia. Plik zawiera między innymi przyjazną nazwę sprzętu do wyświetlenia w panelu, nr pinu, do którego jest podłączony, domyślny stan i inne przydatne rzeczy. Panel ładnie pobiera dane z tego pliku i wyświetla na ekranie w formie przycisków czy innych elementów htmla. Można prosto ręcznie sterować przez www wszystkimi zdefiniowanymi sprzętami. Samymi przekaźnikami steruje python. W panelu klikając ‘włącz lampki na balkonie’ wywoływany jest odpowiedni skrypt pythona, który na podstawie przyjętych parametrów włącza lampki odczytując do jakiego pinu są podłączone. W panelu jest też prosty interfejs do crona. Przez ten interfejs można dodać zadania z poziomu strony www. I w przypadku lampek na balkonie wygląda tak. W pliku json jest rekord z lampkami. W cornie jest kilka zadań do włączania i wyłączania lampek. O zdefiniowanych godzinach odpalany jest skrypt pythona (ten sam co przy ręcznym klikaniu), który włącza i wyłącza lampki.
Teraz o przeróbce. Nie chciałem kupować węży świetlnych czy innych gotowych zestawów, bo dotychczasowe lampki są stare i mają swój klimat, a już takich nie robią. Chciałem to zachować. Lampki postanowiłem przerobić na ledy 12V i połączyć je równolegle. Zatem szereg zmienił się na równoległość. Wymieniłem oprawki z gwintem na gniazda g4 (swoją drogą swojej roboty), zalałem je hotglutem, żeby mocno siedziały. Tym sposobem klosze zostały, klimat został, a jednocześnie ledy dały mi mniejsze zużycie prądu i równoległość zapewnia świecenie w przypadku awarii pojedynczej lampki. Wymieniłem też standardowe wtyczki, żeby ktoś przypadkiem ich nie podłączył do gniazdka 230V, bo teraz są na 12V. Dodałem też kilka nowych kloszy (wymontowanych z innego łańcucha), bo jeden balon został wydłużony. Na tym mogło by się skończyć. Wystarczyło podłączyć transformator za przekaźnik i już by działało jak dotychczas. Ale okazało się, że ledy świecą mocniej niż wcześniejsze żarówki. Trzeba było dorobić jakieś ściemnianie. Znalazłem transformator z funkcją ściemniania. Można go ściemniać na trzy sposoby. Na wejście dimmera wstawiając rezystor, podając stałe napięcie od 0 do 10V lub sygnałem pwm o amplitudzie 10V. Od razu mi się spodobało sterowanie stałym napięciem, bo gdzieś w szufladzie leżał mi jakiś chiński moduł, co podając mu pwm 3.3V oddaje 0 – 10V (miałem też drugi taki moduł co oddaje 0 – 5V). Podłączyłem jeden z pinów rasbberry (oczywiście dopisałem go wcześniej do jsona) na wejście tego chińskiego modułu. Pin wysyła pwm. Moduł go przyjmuje i oddaje napięcie w zakresie 0 – 10V w zależności od poziomu wejściowego pwm. I wyjście 0 – 10V podłączyłem do wejście dimmera transformatora. Lampki się ściemniają.
Chiński moduł nie oddaje żadnego napięcie (0V), jeśli na wejściu dostaje 0V. Dlatego lampki się nie zaświecą. Nie wystarczy włączyć przekaźnika przed transformatorem. Trzeba jeszcze podać sygnał pwm na odpowiedni pin, żeby moduł oddał coś co pozwoli transformatorowi zaświecić lampki. Z pomiarów wynikało, że lampki zaświecą się dopiero przy ok 7V. teraz nie pamiętam dokładnie, ale chiński moduł musiał oddać ok 0.5V, żeby lampki się zaświeciły (poniżej gasły), albo 2V, żeby świeciły się maksymalnie, powyżej już transformator nie reagował. Te wartości zależą od obciążenia transformatora. Im będzie większe, tym zakres przyjmowanych wartości na dimmer jest większy. Mój przykład. Próbowałem rozgryźć ten transformator zaraz po zakupie. Podłączyłem ok 50W ledów i na dimmer podałem napięcie 1.5V w paluszka, nic się nie stało, podałem 9V i też nic się nie stało. Dopiero przy ok 100W bateria 1.5V minimalnie ściemniła światło. Z moim pełnym obciążeniem przy 2V na dimmerze, jeszcze transformator oddaje 12V. Proporcjonalnie obniżając napięcie na dimmerze, wyjście też się zmniejsza. Skoro już przy 2V lampki świecą się maksymalnie, to użyłem tego drugiego chińskiego modułu co oddaje 0 – 5V.
Zatem u mnie transformator musi być włączony i przyjmować przynajmniej 0.5V (raspi musi dać pwm w okolicy 0.33V, żeby chińczyk oddał 0.5V), żeby lampki się zaświeciły. I analogicznie transformator musi przyjmować 2V (raspi musi dać pwm w okolicy 1.32V, żeby chińczyk oddał 2V), żeby lampki świeciły maksymalnie. Na stronie www panelu dla ściemniacza jest generowany input typu slider i nim steruje się jasnością. Oczywiście python przelicza odczytane wartości ze slidera na odpowiednie wartości pwm z mojego zakresu roboczego.
Samo wysyłanie pwm przez pythona nie może być jednorazowo posłane. Musi chodzić w pętli w tle, bo w każdej chwili ktoś może w panelu ustawić nową wartość. Oczywiście pętla nie musi chodzić stale, wystarczy że będzie tylko wtedy kiedy sam transformator będzie włączony.
Samego kodu nie będę pokazywał, bo jest częścią większego systemu i bez kontekstu jest niewiele warty. Poniżej jest film jat to działa. Dodatkowo napisałem w pythonie kilka programów migania lampkami.
Ogólnie algorytm jest taki.
Demon ściemniacza:
Odczytuje z jsona numer pinu, na który ma być posłany pwm
Ustawia ten pin jako wyjście pwm
Sprawdza, czy jest proces pod pid odczytanym z pliku z programem ściemniacza
Jeśli znajdzie taki proces, to nie obsługuje danego ściemniacza, bo jakiś inny proces jest nim zajęty, pomija poniższe kroki
Jeśli tego pliku nie ma, to idzie dalej
Sprawdza, czy istnieje plik z wartością pwm i czy ta wartość jest poprawna (potrzebny jest taki plik, bo na jego podstawie demon ustawia wartość pwm i nie można odczytać aktualnego poziomu pwm z pinu, a jakoś muszę slajder w panelu ustawić na odpowiedniej pozycji)
Jeśli go nie ma, to zapisuje do niego domyślną wartość (odczytaną z jsona)
Jeśli jest, to odczytuje z niego wartość i posyła ja na pobrany wcześniej pin
I tak sobie chodzi pętla co kilka sekund
Ściemnianie slajderem:
Jquery odczytuje wartość ze slajdera przy jego zmianie
Wywołuje ajaxem skrypt php, który wywołuje skrypt pythona do ściemniania
Ten skrypt pythona przyjmuje jako parametry co ma być ściemnione i do jakiej wartości
Na podstawie tych parametrów odczytuje z jsona nr pinu
Zapisuje do pliku z wartością pwm pobraną wartość i posyła taką wartość na pobrany pin
Włączanie programu migania:
Kliknięcie w panelu ‘uruchom program’ wywołuje ajaxem skrytp php a ten pythona
Python na podstawie przyjętych parametrów sprawdza jaki program i dla jakiego ściemniacza (przewidziałem, że może być więcej niż jeden ściemniacz) ma być uruchomiony
Uruchamia program i w pliku (zdefiniowany w jsonie) zapisuje pid procesu, którym jest ten program (główny demon sprawdza ten plik)
Działa sobie i wykonuje swoje zadanie np miganie wolne, miganie szybkie czy co tam jest zaprogramowane
Tak to z grubsza wygląda.
Na początku pokazana jest minimalna jasność, kawałek dalej maksymalna.
Dalej dopasowuję jasność slajderem przez panel www.
Kolejne kroki to uruchomienie programów ściemniana. Nic nie stoi na przeszkodzie, żeby zrobić jakieś inne.
Program 1. Szybkie falowanie. Ściemnia się i rozjaśnia do zadanych wartości. Jeden cykl trwa 1 sekundę.
Program 2. Wolne falowanie. Ściemnia się i rozjaśnia do zadanych wartości. Jeden cykl trwa 5 sekund.
Program 3. Miganie pomiędzy zadanymi wartościami skacząc jednym krokiem. Czyli raz jest najniższa wartość, a raz najwyższa.
Program 4. Miganie pomiędzy zadanymi wartościami skacząc czterema krokami. Czyli najniższa wartość, potem trochę jaśniej, potem jeszcze jaśniej i najjaśniej.
Oczywiście można zadać dowolne wartości minimum i maksimum, czasu cyklu i kroków pomiędzy mignięciami. To już zależy od inwencji programisty.
Na końcu jest wyłączenie lampek przekaźnikiem.
opis szalony, niezrozumiały
Tak mi się wydawało, że straszny chaos się zrobił.
No cóż, nie jestem dobry w pisaniu zdań:))
ppp Może popraw trochę ten opis? Ciężko sie czyta taki wielki blok tekstu.
Pomimo opisu, projekt ciekawy :)