logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Arduino Mega 2560 Rev3 - Rolety Somfy Solus, wzbudzanie przy krańcówkach

cherry34 25 Lut 2017 14:15 1551 7
REKLAMA
  • #1 16306041
    cherry34
    Poziom 13  
    Posty: 269
    Pomógł: 1
    Ocena: 17
    Witam.
    Mam w budynku rolety zewnętrzne z krańcówkami mechnicznymi - somfy solus. Do każdej jest doprowadzone napięcie 230V (własciwie do puszki przy oknie). Przewody 230V są od puszki do puszki (w puszkach są spinane razem, żeby przejść do nastepnej). W puszkach są również wyłączniki klawiszowe żaluzjowe. Do każdej puszki jest pociągnięta skrętka z centrali.
    Wszystko jest sterowane z Arduino Mega 2560 Rev3
    W każdej puszce jest 1 moduł 2 przekaźnikowy.
    Po wciśnięciu przycisku roleta startuje na zadany czas. Po ponownym przyciśnięciu zatrzymuje.
    Gdy krańcówka w którejś z rolet zadziała potrafi wzbudzić arduino tak, jakbym nacisnął przycisk innej rolety. Czasem chodzi to w takim cyklu:
    Roleta A się podnosi, dojeżdża do końca i krańcówka odpala roletę B. Ta dojeżdża do końca o odpala roletę C.
    Zdarza się, że wyłącznik światła potrafi odpalić roletę.
    Zgaduję, że pomogłaby mi optoizolacja przekaźników, ale jedna rzecz mnie zastanawia. Teoretycznie te moduły na okoliczność korzystania z izolacji galwanicznej powinny być zasilane oddzielnie.
    Pytania.
    1. Czy to zasilanie może być z tego samego przewodu który doprowadza +5V do puszki?
    2. Czy może należy doprowadzić +5V innym przewodem?
    3. Czy wówczas wystarczy podłączyć inny zasilaczdo np. złodziejki?
    4. Czy może ten zasilacz powinien być podłączony do innej fazy?
    5. Czy do zupełnie innego źródła - jedyne co mi przychodzi do głowy to jakieś akumulatory?

    Pozdrawiam
  • REKLAMA
  • #2 16306314
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    A ja stawiam na błąd w oprogramowaniu - zła obsługa przycisków bez eliminacji zakłóceń, ktśre - jak widać - w tym środowisku występują. Oprócz tego przyjrzałbym się połączeniom przekaźników i zasilaniu płytki mikrokontrolera.

    Na początek pokaż procedurę obsługi przerwania timera z obsługą przycisków.
  • REKLAMA
  • #3 16306337
    cherry34
    Poziom 13  
    Posty: 269
    Pomógł: 1
    Ocena: 17
    No to leżę. Procedury brak.
    Coś tam podejrzewałem, że można by to programowo rozwiązać, ale myślałem że sprzętowo to mus.
    Ja to raczej lajkonik jestem - coś tam necie popatrzałem, kupiłem arduino podłączyłem i działa.
    Cały program wygląda tak. To raczej wersja beta.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #4 16306364
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    No to już wiesz, co jest źle. Skróć program tak ze 20 razy, wyrzuć wszystkie delay(), reaguj na przycisk, gdy np. trzykrotnie masz ten sam odczyt co 10 ms, no i nie używaj typu long tam, gdzie wartości są krótkie.

    Jeśli masz diody wsteczne przy przekaćnikach i sensownie oddzieliłeś zasilanie przekaćników od zasilania płytki (min. dioda i kondensator), to dalej wszystko da się poprawić w oprogramowaniu.
  • REKLAMA
  • #5 16306539
    cherry34
    Poziom 13  
    Posty: 269
    Pomógł: 1
    Ocena: 17
    Wiem, że program jest do przerobienia - może wkrótce się uda.
    Delaya dawałem żeby wykluczyć rozpoznanie jednego wciśnięcia jako kilka.
    Jakiś przykład na to sprawdzanie?
    Diody w przekaźnikach nie wiem czy mam. Mam takie moduły:
    Arduino Mega 2560 Rev3 - Rolety Somfy Solus, wzbudzanie przy krańcówkach
    Dodawać coś do tego?
  • REKLAMA
  • #6 16308072
    ditomek
    Poziom 22  
    Posty: 590
    Pomógł: 24
    Ocena: 230
    Przekaźniki maja diody i separację galwaniczną zabudowaną w płytce.
    Użyłeś modułów dostępnych na rynku ale wcale nie najlepszych.
    Moim zdaniem pierwsze to prawdziwa izolacja galwaniczna IO,
    Kolejna sprawa to oprogramowanie: sprawdzaj jak koledzy pisali stan styku z przerwą kilkunasto-kilkudziesięcio milisekundową. Ostatnie sprawdzenie wzbogać o obsługę zboczy.
    Wiem ze na początku liczy się aby program działał ale pomyśl nad jego usprawnieniem. Polecam korzystanie z tablic a do odliczania czasu do końca polecam rozwiązanie podobne do mojego.
    Przy wciśnięciu przycisku do zmiennej która jest dekrementowana co sekundę skopiuj czas pracy żaluzji.
    W tle masz procedure która uruchamiana co sekundę dekrementuje ten licznik.
    Następna procedura po niej sprawdza jeśli czas dotarł do zera wyłącza silnik.
    Robiąc to na tablicach i petlach for cały program zajmuje dużo mniej linijek
  • #7 16308624
    cherry34
    Poziom 13  
    Posty: 269
    Pomógł: 1
    Ocena: 17
    ditomek napisał:

    Moim zdaniem pierwsze to prawdziwa izolacja galwaniczna IO

    Jeśli masz na myśli tą na płytce - to, tak jak pisałem w pierwszym poście - jak zasilać obwód z przekaźnikami?
    ditomek napisał:

    Ostatnie sprawdzenie wzbogać o obsługę zboczy.

    Nie mam zielonego pojęcia o co chodzi.
    ditomek napisał:

    Wiem ze na początku liczy się aby program działał ale pomyśl nad jego usprawnieniem. Polecam korzystanie z tablic a do odliczania czasu do końca polecam rozwiązanie podobne do mojego.

    Mam zamiar przerobić program na tablice i właśnie ten czas nadszedł
    ditomek napisał:

    Przy wciśnięciu przycisku do zmiennej która jest dekrementowana co sekundę skopiuj czas pracy żaluzji.
    W tle masz procedure która uruchamiana co sekundę dekrementuje ten licznik.
    Następna procedura po niej sprawdza jeśli czas dotarł do zera wyłącza silnik.
    Robiąc to na tablicach i petlach for cały program zajmuje dużo mniej linijek

    Mniej więcej wiem o co chodzi ale gdybyś miał ochotę podzielić się kodem...
  • Pomocny post
    #8 16310351
    ditomek
    Poziom 22  
    Posty: 590
    Pomógł: 24
    Ocena: 230
    Izolacja galwaniczna powinna być przy mikrokontrolerze. Ta zabudowana w przekaźniki mija się z celem. Rozumiem ze użyłeś gotowców.
    Zbocza a których pisałem to sposób reagowania arduino na podany na wejście sygnał.
    Prosta komenda digitalRead(nr_pinu_procesora) == LOW reaguje na poziom. W czasie kiedy któryś z domowników będzie trzymał przycisk długo warunek zdąży się wykonać wiele, wiele razy - chyba że masz tam jakiegoś delay'a który to spowolni.
    Reagowanie na zbocze wymaga użycia zmiennej pomocniczej do zapisywania poprzedniego stanu pinu i reagowaniu tylko wtedy kiedy ten stan się zmienia.
    W googlach wpisz detekcja zbocza lub egde detection

Podsumowanie tematu

✨ W dyskusji poruszono problem z nieprawidłowym działaniem rolet zewnętrznych Somfy Solus, które są sterowane za pomocą Arduino Mega 2560 Rev3. Użytkownik zauważył, że aktywacja krańcówki jednej rolety może przypadkowo uruchomić inne rolety, co sugeruje problemy z oprogramowaniem oraz możliwe zakłócenia w połączeniach przekaźników. Uczestnicy dyskusji zalecili poprawę kodu, eliminację opóźnień (delay) oraz zastosowanie detekcji zboczy w obsłudze przycisków. Podkreślono również znaczenie izolacji galwanicznej oraz odpowiedniego zasilania przekaźników, aby zminimalizować zakłócenia. Użytkownik planuje przerobić program, aby poprawić jego funkcjonalność.
Wygenerowane przez model językowy.
REKLAMA