Elektroda.pl
Elektroda.pl
X
Relpol przekaźniki
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 z funkcją półotwarcia - wersja 2.

Ty-grysek 15 Paź 2019 11:56 3477 10
  • Zazwyczaj zamykam rolety tylko do połowy, choć zdarza się że zamykam je całkiem. Stosując dostępne na rynku rozwiązania musiałbym stać koło wyłącznika, żeby zatrzymać w odpowiednim momencie ale jako człowiek bardzo wygodny postanowiłem zbudować sterownik, który zautomatyzuje tę czynność.

    Jest to rozwinięcie mojego poprzedniego projektu. Urządzenie miało kilka wad i niedoróbek, więc zrobiłem całość od nowa.

    Sterownik rolet z funkcją półotwarcia - wersja 2.
    Sterownik rolet z funkcją półotwarcia - wersja 2. Sterownik rolet z funkcją półotwarcia - wersja 2. Sterownik rolet z funkcją półotwarcia - wersja 2. Sterownik rolet z funkcją półotwarcia - wersja 2. Sterownik rolet z funkcją półotwarcia - wersja 2.

    Co się zmieniło:
    1. od nowa napisałem kod programu,
    2. od nowa zaprojektowałem obie PCB,
    3. moduł montowany do puszki ma nieco mniejsze wymiary - łatwiej go włożyć do standardowej puszki,
    4. zasilanie 5V z pochodzi przetwornicy wlutowanej w jedną z PCB (a nie jak poprzednio z wiszącej na kablu elektroniki wyciągniętej z ładowarki do komórki),
    5. zgodnie z sugestią Arecoag dałem możliwość sterowania dowolnym pilotem IR,
    6. łatwiejszy dostęp do złącza ISP.

    Założenia projektu w zasadzie nie zmieniły się:
    - możliwość zapamiętania/zmiany punktu półotwarcia,
    - obsługa 2-ch rolet,
    - całość ma się zmieścić w głębokiej puszcze podtynkowej 60mm,
    - możliwość sterowania dowolnym pilotem IR (zgodnym z RC5).

    Konstrukcja
    Ustalanie położenia rolet opiera się wyłącznie na mierzeniu czasu. Silniki Mobilus, które posiadam, są pod tym względem bardzo stabilne. "Nauczone" czasy są zapisywane w EEPROM.
    Mikrokontroler ATmega88PA po zakończeniu "pracy" przechodzi w tryb uśpienia. Naciśnięcie przycisku lub odbiór danych IR generuje przerwanie i wybudza mikrokontroler.
    Przetwornice 230V na 5V HLK-PM01 zostały kupione na AliExpress.
    Zastosowałem miniaturowe przekaźniki RM699BV-3011-85-1005. Próbowałem także wersji z przekaźnikami SSR, te jednak zbyt często padały.
    Część zewnętrzną/mechaniczną wykonałem ze zwykłego podwójnego włącznika 230V Simon Basic, z którego wyciąłem co niepotrzebne.

    Szacunkowy koszt:
    - mikrokontroler ATmega88PA: 5zł,
    - przetwornica HLK-PM01: 8zł,
    - 4 przekaźniki RM699BV-3011-85-1005: 60zł,
    - odbiornik IR TSOP4836: 2,20zł,
    - włącznik Simon Basic: 10zł,
    - pozostała "drobnica": 10zł,
    Łącznie niecałe 100zł.

    W załączeniu:
    - kody źródłowe Atmel Studio,
    - maski do wykonania PCB + rozmieszczenie elementów.

    Instrukcja obsługi
    Nauka czasu pełnego otwarcia
    Przy rolecie maksymalnie otwartej nacisnąć klawisz dół i trzymając go nacisnąć klawisz góra. Puścić oba klawisze, gdy roleta zatrzyma się przy pełnym zamknięciu. Podczas nauki dioda LED świeci światłem ciągłym.
    Nauka półotwarcia
    Nacisnąć klawisz góra lub dół i trzymać do czasu, aż roleta osiągnie wymagane położenie półotwarcia. Podczas nauki dioda LED szybko mruga.
    Otwieranie / zamykanie rolety
    Nacisnąć krótko przycisk góra lub dół, roleta zacznie się otwierać / zmykać do najbliższego punktu: pełnego otwarcia, pełnego zamknięcia lub półotwarcia. Podczas ruchu rolety do punktu półotwarcia, drugie naciśnięcie przycisku zgodnego z kierunkiem ruchu rolety spowoduje pełne zamknięcie / otwarcie rolety. Podczas ruchu rolety naciśnięcie przycisku w przeciwnym kierunku spowoduje zatrzymanie rolety. Podczas ruchu dioda LED błyska pojedynczym błyskiem - gdy roleta zmierza do punktu półotwarcia, lub podwójnym błyskiem - gdy roleta zmierza do pełnego zamknięcia / otwarcia.
    Nauka kodów pilota IR
    Trzymając naciśnięty przycisk IR PROG nacisnąć krótko wybrany klawisz, następnie w ciągu 30 sek. skierować pilot w stronę sterownika i nacisnąć odpowiedni przycisk na pilocie. Podczas oczekiwania na sygnał pilota IR dioda LED świeci długimi błyskami z krótką przerwą, po odebraniu kodu dioda LED gaśnie. Jeśli w ciągu 30 sek. sterownik nie odbierz kodu IR z pilota, proces programowania zostaje przerwany i dioda LED gaśnie.
    Kasowanie kodu pilota IR
    Trzymając naciśnięty przycisk IR PROG nacisnąć wybrany klawisz i trzymać przez 3 sek., aż zgaśnie dioda LED.

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    Ty-grysek
    Poziom 9  
    Offline 
    Ty-grysek napisał 124 postów o ocenie 174, pomógł 0 razy. Mieszka w mieście Wrocław. Jest z nami od 2010 roku.
  • Relpol przekaźniki
  • #2
    szymon122
    Poziom 38  
    Ty-grysek napisał:
    4. zasilanie 5V z pochodzi przetwornicy wlutowanej w jedną z PCB (a nie jak poprzednio z wiszącej na kablu elektroniki wyciągniętej z ładowarki do komórki)

    Jeśli ktoś ma problemy ze zmieszczeniem wszystkiego to znalazłem taką przetwornicę:
    https://pl.aliexpress.com/item/4000138408141.html
    Zamiast 34x20x15mm mamy 23,5x18,1x13,5mm.
    I do tego 3 razy tańsza. Używał ktoś tego?

    Ty-grysek napisał:
    Część zewnętrzną/mechaniczną wykonałem ze zwykłego podwójnego włącznika 230V Simon Basic, z którego wyciąłem co niepotrzebne.

    Masz może jakieś zdjęcia takiego przerobionego włącznika? Coś tam zostało oprócz "kołysek" trzymających klawisze? Ja bym polecał wkleić coś od tyłu klawiszy, teraz to wygląda jakby opierały się jedynie na przyciskach, łatwo za mocno je wcisnąć a tak to jakiś element byłby ogranicznikiem.
  • #3
    Ty-grysek
    Poziom 9  
    szymon122 napisał:

    Masz może jakieś zdjęcia takiego przerobionego włącznika? Coś tam zostało oprócz "kołysek" trzymających klawisze? Ja bym polecał wkleić coś od tyłu klawiszy, teraz to wygląda jakby opierały się jedynie na przyciskach, łatwo za mocno je wcisnąć a tak to jakiś element byłby ogranicznikiem.


    Niestety nie zrobiłem zdjęć przerobionego wyłącznika, przy okazji to nadrobię. Faktycznie zostały tylko kołyski trzymające klawisze. Klawisze po naciśnięciu opierają się o oprawę wyłącznika, nie da się wcisnąć za mocno.
  • Relpol przekaźniki
  • #4
    mack12
    Poziom 10  
    Gdyby ktoś próbował to skompilować w Atmel studio po założeniu projektu to proponuje w pliku main.c zamienić
    Kod: c
    Zaloguj się, aby zobaczyć kod

    na
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • #5
    Grzesio.px
    Poziom 10  
    Projekt fajny ale mam pytanie nie chyba że czegos nie doczytałem sterownik otwiera i zamyka roletę na podstawie czasu a co będzie w przypadku gdy nagle zabraknie prądu czas stanie jakby w miejscu skąd więc sterownik będzie wiedział kiedy zatrzymać rolete
  • #6
    Ty-grysek
    Poziom 9  
    Grzesio.px napisał:
    Projekt fajny ale mam pytanie nie chyba że czegos nie doczytałem sterownik otwiera i zamyka roletę na podstawie czasu a co będzie w przypadku gdy nagle zabraknie prądu czas stanie jakby w miejscu skąd więc sterownik będzie wiedział kiedy zatrzymać rolete


    No cóż, po zaniku napięcia sterownik się zresetuje i będzie "myślał" że roleta jest w pełni otwarta. Jeśli jednak roleta będzie po części opuszczona, to wystarczy roletę w pełni otworzyć aby wszystko wróciło do normy. Zawsze (za wyjątkiem punku półotwarcia) po naciśnięciu przycisku sterownik włącza silnik rolet na 3 sek. (stała motor_extra_time), więc wystarczy kilka razy nacisnąć przycisk aby w pełni otworzyć roletę.

    Dodano po 52 [sekundy]:

    mack12 napisał:
    Gdyby ktoś próbował to skompilować w Atmel studio po założeniu projektu to proponuje w pliku main.c zamienić
    #include "irmp.c
    na
    #include "irmp.h


    Choć tak formalnie powinno być, to u mnie po takiej zmianie program się nie kompiluje:

    Error recipe for target 'Sterownik_rolet_2.elf' failed
    Error undefined reference to `irmp_ISR'
    Error undefined reference to `irmp_init'
    Error undefined reference to `irmp_get_data'
    Error ld returned 1 exit status
  • #7
    simw
    Poziom 23  
    Ty-grysek napisał:
    Choć tak formalnie powinno być, to u mnie po takiej zmianie program się nie kompiluje:

    I nie ma w tym nic nadzwyczajnego, "inkludowanie" plików źródłowych wraz z późniejszymi zmiana robi sieczkę ze struktury projektu. Im więcej zmian tym trudniej to doprowadzić do porządku.
    Ciekawe, z których poradników czy też książek została wzięta ta metoda.

    Błędy, które dostałeś wynikają z tego, że plik irmp.c nie jest poddawany kompilacji.
    Dopóki inkludowałeś cały plik źródłowy nie było problemu, był tworzony plik obiektowy main.o, który zawierał funkcje do obsługi irmp, a obecnie nie jest prawdopodobnie tworzony irmp.o. Podejrzewam, że po dołączeniu irmp.c do main.c zostało również "nagrzebane" w opcjach projektu Atmel Studio, teraz należy to odkręcić.

    Dodatkowo dla przykładu, tworzysz globalną tablicę struktur IRMP:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    a następnie całe struktury przekazujesz jako parametr do funkcji.

    Zupełnie niepotrzebnie. Oczywiście w tak prostym projekcie nie ma to wiekszego znaczenia dla wydajności, czy zajętość kodu, ale lepiej byłoby to zrobić przez wskaźnik na strukturę lub odnosić się bezpośrednio do tablicy struktur.
  • #8
    Ty-grysek
    Poziom 9  
    simw napisał:
    "inkludowanie" plików źródłowych wraz z późniejszymi zmiana robi sieczkę ze struktury projektu. Im więcej zmian tym trudniej to doprowadzić do porządku.
    Ciekawe, z których poradników czy też książek została wzięta ta metoda.


    Nie daje mi to spokoju. Żadna książka ani poradnik: po prostu trochę walczyłem z uruchomieniem IRMP, zaskoczyło dopiero gdy podłączyłem bezpośrednio irmp.c. Zdaję sobie sprawę że zapewne coś zrobiłem nie tak i właśnie - korzystając z okazji - próbuję ustalić gdzie popełniłem błąd. Nie grzebałem w żadnych ustawieniach Atmel Studio - praktycznie czysta instalacja.
    Właśnie ponownie pobrałem i przeanalizowałem źródła IRMP. W żadnym z plików tego pakietu nie występuje includowanie irmp.c a dla odmiany w pliku irmp.c jest includowany irmp.h. W takim razie: w jak sposób i w którym miejscu następuje podłączenie głównego pliku irmp.c z poziomu irmp.h?
  • #9
    simw
    Poziom 23  
    Ty-grysek napisał:
    W takim razie: w jak sposób i w którym miejscu następuje podłączenie głównego pliku irmp.c z poziomu irmp.h?

    W źródłach IRMP są przykłady jak używać z konkretną rodziną procków.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Ten plik właściwie wszystko tłumaczy, tzn. raczej zawiera to co jest potrzebne, żeby uruchomić obsługę.
    W skrócie należy ustawić timer na co najmniej 10 kHz (a najlepiej 15 kHz), skonfigurować pin wejściowy, zdefiniować strukturę i odpytywać bibliotekę za pomocą funkcji irmp_get_data

    Powyższy plik mógłby być po prostu bazą dla twoich funkcji.
    Najważniejsze oczywiście jest to, że irmp.c musi być poddane kompilacji a potem linkowaniu. W tej kwestii niestety nie pomogę, bo nie znam Atmel Studio.
  • #10
    Przemek7
    Poziom 16  
    Jeszcze kontrola zalodzenia rolety - przeciążenia silnika (sorry taki mamy klimat - odkształcenie lameli, zerwanie wieszaków) i byłoby genialnie...
  • #11
    Ty-grysek
    Poziom 9  
    simw napisał:

    W źródłach IRMP są przykłady jak używać z konkretną rodziną procków.
    [...]
    Ten plik właściwie wszystko tłumaczy, tzn. raczej zawiera to co jest potrzebne, żeby uruchomić obsługę.
    W skrócie należy ustawić timer na co najmniej 10 kHz (a najlepiej 15 kHz), skonfigurować pin wejściowy, zdefiniować strukturę i odpytywać bibliotekę za pomocą funkcji irmp_get_data

    Powyższy plik mógłby być po prostu bazą dla twoich funkcji.
    Najważniejsze oczywiście jest to, że irmp.c musi być poddane kompilacji a potem linkowaniu. W tej kwestii niestety nie pomogę, bo nie znam Atmel Studio.


    Ja to wszystko wiem i tak właśnie próbowałem uruchomić IRMP, ale bez efektu. Konfiguracja oczywiście została zrobiona (inaczej nie działałaby obsługa pilota).
    Domyślam się co zrobiłem źle: prawdopodobnie bibliotekę IRMP należy wgrać globalnie do Atmel Studio a ja podpiąłem ją lokalnie pod mój projekt.
    Sądzę że to temat na osobą dyskusję. Dzięki za zwrócenie uwagi.

    Dodano po 14 [minuty]:

    Przemek7 napisał:
    Jeszcze kontrola zalodzenia rolety - przeciążenia silnika (sorry taki mamy klimat - odkształcenie lameli, zerwanie wieszaków) i byłoby genialnie...


    Takie rozwiązanie miałoby jeszcze inne plusy:
    - odpada konieczność programowania czasu pełnego zamknięcia/otwarcia,
    - łatwiejsza "synchronizacja" po zaniku napięcia.
    Jakaś podpowiedź/link jak to zaimplementować dla silników 230V sterowanych przekaźnikiem :-) ? Mój silnik ma 130W (0,6A), ale należałoby założyć że może być użyty silnik o innej mocy.

    To co mi jeszcze chodzi po głowie, to awaryjne otwieranie, ale taki system musiałby omijać całą elektronikę oraz przekaźniki i działać bezpośrednio na linii 230V. Przy tym rozmiarze urządzenia to może być mało wykonalne.