Popularny post TPReal Napisano Październik 27, 2020 Popularny post Udostępnij Napisano Październik 27, 2020 Przedstawiam projekt, który ma dla mnie ogromne zastosowanie praktyczne - budzi mnie rano w miarę bezboleśnie, ale dość skutecznie, odsłaniając zasłony w sypialni. Mechanika Zasłony wiszą na standardowej szynie KS biegnącej od ściany do ściany, z zasłoną odsłaniającą się na dwie strony. Pierwszym krokiem projektu było puszczenie wewnątrz szyny sznurka nylonowego w tę i z powrotem, i przywiązanie do niej we właściwych miejscach dwóch żabek/haczyków - skrajnego lewego prawej zasłony, i skrajnego prawego lewej. Oczywiście jeden do sznurka biegnącego w szynie "w tę", a drugi do sznurka biegnącego "z powrotem". Następnie oba końce sznurka przepuściłem przez haczyk i spuściłem po ścianie na dół. Wtedy ciągnięcie jednego końca zasłania, a drugiego odsłania obie zasłony razem. Powiem szczerze, ten etap był najtrudniejszy. Wymagał dużo dokładności żeby zasłony zbiegały się we właściwym miejscu, wiele starań żeby nic się nie plątało i chodziło odpowiednio lekko, a do tego wiele stania na drabinie z rękami do góry. Następnie jako napęd wybrałem silnik krokowy 0.43Nm. Nie mam doświadczenia z projektami z silnikami, i podejrzewam, że to nie był optymalny wybór, i lepszy byłby być może silnik z przekładnią i enkoderem. No cóż użyłem silnika krokowego, i wszystko w miarę działa, ale silnik nie ma zapasu momentu obrotowego. Do wału silnika przymocowana jest rurka aluminiowa, na którą nawija się sznurek. Nie ma naciągu, ale luz jest na tyle mały, a sznurek na tyle śliski, że nic się nie plącze. Silnik jest zamocowany do ściany drewnianą obejmą, którą sobie wyrzeźbiłem. Silnik podłączony jest do sterownika, a komputerem sterującym jest Raspberry Pi Zero, tym razem bez "W" bo to był początek lockdownu i Raspberry Pi Zero W trudno było dostać. Pi ma więc wpiętego na stałe dongla wifi, ale to nie problem bo i tak tego projektu nie przenosi się z miejsca na miejsce, z oczywistych względów. Do Pi podłączony jest również czujnik światła przyklejony do okna i wykierowany na zewnątrz, a także mały panel sterowania z dwoma przyciskami i dwiema diodami. W bardziej ukrytym miejscu jest jeszcze trzeci guzik, używany do czynności serwisowych. Układ nie ma obudowy, ale raczej nie będzie jej miał - nie jest potrzebna bo układ nie jest widoczny z pokoju, zasłania go zasłona, wystaje tylko panel kontrolny. Oprogramowanie Program napisany jest w Rubym. Ruby jest fajny, ale szczerze mówiąc w tym przypadku to mógł nie być najlepszy wybór, a to dlatego, że Ruby jest wolny, a tymczasem potrzebuję generować sygnały STEP do sterownika silnika z częstotliwością około 200Hz. Przy użyciu biblioteki, którą mam, ta wartość jest blisko limitu, gdybym chciał generować 300Hz to musiałbym już zmienić technologię, albo co najmniej bibliotekę. Jednocześnie nie mogłem użyć wbudowanego generatora PWM, bo nawet przy maksymalnym dzielniku byłby za szybki. Musiałbym jeszcze zlutować jakiś dzielnik częstotliwości, a nie miałem na to ochoty. No, ale ostatecznie tak mniej więcej daje radę - jak wiele rzeczy w tym projekcie. Sama logika jest właściwie dość prosta. Uruchamiam dwa wątki, jeden w pętli odczytuje naciśnięte przyciski, zapala diody kiedy trzeba itp, a drugi w niezależnej pętli generuje kroki, chyba że pozycja zasłony jest równa pozycji zadanej. Pozycja zasłony nie jest mierzona, tylko po prostu obliczana na podstawie zliczania kroków. Sterowanie: Przyciski góra i dół odsłaniają i zasłaniają zasłonę ręcznie. W czasie pracy świeci się żółta dioda (a mogłem użyć lampę bramową...). W czasie gdy zasłona pracuje, można ją też zatrzymać przyciskiem. Poza tym zasłona uruchamiana jest automatycznie: Odsłaniana jest o godzinie pobranej z pliku konfiguracyjnego. Można ustawić odsłanianie po kawałku. Moment zasłaniania określany jest następująco: z openweathermap.com pobieram godzinę zachodu słońca, i dwie godziny wcześniej (konfigurowalne) zaczynam monitorować czujnik zmierzchowy. Zasłaniam gdy zrobi się ciemno za oknem, lub najpóźniej pół godziny (konfigurowalne) po zachodzie słońca. Tak, wiem że godzinę zachodu słońca można obliczyć zamiast pobrać, ale jak zobaczyłem ten wzór to stwierdziłem, że pobrać będzie sporo łatwiej. Przy użyciu trzeciego przycisku można też aktywować funkcje dodatkowe: wyłączenie/włączenie automatycznego zasłaniania/odsłaniania, korekty na wypadek gdyby zasłona się zablokowała w czasie ruchu (co się póki co nie zdarza, chyba że ma coś na drodze), i najlepsze: funkcja drzemki. W znaczeniu "drzemki poobiedniej", a nie opóźniania budzenia. Ustawiam drzemkę na wielokrotność 15 minut, zasłony się zasłaniają, a po zadanym czasie się odsłaniają. Proste, a bardzo fajne. Przykładowy plik konfiguracyjny: { "location": {"lat": 0.00, "lon": 0.00}, "openweathermap_api_key": "000000", "close_on_sunset_offset_min": { "min": -120, "max": 30 }, "alarm": { "normal": { "8:30": {"value": 0.5, "dir": 1}, "8:55": 1 }, "holiday": { "9:00": {"value": 0.5, "dir": 1}, "9:30": 1 } } } Filmik Podsumowując, ten projekt doskonale spełnia swoją funkcję, budząc mnie co rano już ponad dwa miesiące, i nie sprawiając problemów. Niemniej jednak jest trochę rzeczy, które zrobiłbym inaczej gdybym musiał to robić drugi raz, tak jak pisałem powyżej. Można by też było dodać na przykład integrację z jakimś systemem inteligentnego domu, ale mi na tym nie zależy, bo takiego systemu nie mam i raczej nie planuję. Jeszcze jedno proste potencjalne usprawnienie - zasilać Pi z tego samego zasilacza, co silnik, a nie z osobnego. Nie wiedziałem jak to prosto zrobić, dlatego jest jak jest. 4 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Październik 28, 2020 Udostępnij Październik 28, 2020 @TPReal dzięki za opis kolejnego, ciekawego projektu - wygląda i działa świetnie 🙂 Opis został właśnie zatwierdzony, więc jest już widoczny publicznie. Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Październik 28, 2020 Udostępnij Październik 28, 2020 10 godzin temu, TPReal napisał: Tak, wiem że godzinę zachodu słońca można obliczyć zamiast pobrać, ale jak zobaczyłem ten wzór to stwierdziłem, że pobrać będzie sporo łatwiej I w ten sposób bez dostępu do sieci będziesz w nocy podziwiać Księżyc zamiast spać. Nie wiem jak w Rubym, ale w Pythonie nie jest to takie strasznie skomplikowane: import ephem city=ephem.Observer() city.lat='53.2' city.lon='20.0' sun=ephem.Sun() sun.compute(city) sunset=sun.set_time.datetime() (fragment mojego kodu sterującego m.in. zasłonami) Ten cały Ruby musi być coś strasznie upośledzony... 10 godzin temu, TPReal napisał: Pozycja zasłony nie jest mierzona, tylko po prostu obliczana na podstawie zliczania kroków. Jak dla mnie to eliminuje projekt z gatunku "użytecznych", szczególnie w połączeniu ze stwierdzeniem: 10 godzin temu, TPReal napisał: wszystko w miarę działa, ale silnik nie ma zapasu momentu obrotowego Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Październik 28, 2020 Udostępnij Październik 28, 2020 22 minuty temu, ethanak napisał: 10 godzin temu, TPReal napisał: Pozycja zasłony nie jest mierzona, tylko po prostu obliczana na podstawie zliczania kroków. Jak dla mnie to eliminuje projekt z gatunku "użytecznych", szczególnie w połączeniu ze stwierdzeniem: @ethanak trochę nie rozumiem tego "zarzutu". Co przeszkadza fakt, że pozycja jest obliczana na podstawie kroków silnika? W drukarkach 3D liczenie korków wystarcza do precyzyjnego drukowania elementów, a tutaj nie wystarczy do zasłonięcia zaslony? 😉 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
ethanak Październik 28, 2020 Udostępnij Październik 28, 2020 31 minut temu, Treker napisał: trochę nie rozumiem tego "zarzutu". Co przeszkadza fakt, że pozycja jest obliczana na podstawie kroków silnika? @Treker może jak cytujesz to cytuj całość, a nie wyrwane z kontekstu zdanie. A przeszkadza właśnie zdanie następne. 32 minuty temu, Treker napisał: W drukarkach 3D liczenie korków wystarcza do precyzyjnego drukowania elementów Tak, tylko że drukarka na początku cyklu ustawia sobie zera na podstawie krańcówek[1], których tu nie ma. Poza tym napędy w drukarkach mają dość duży zapas momentu, a i tak zdarzają się przeskoki. Tutaj zapasu nie ma (a z doświadczenia z używania DIY automatu do zasłon wiem, że czasem zdarzają się jakieś zacięcia, co może spowodować zgubienie kroku), a brak homingu powoduje, że błąd może się kumulować. Gdyby tak była krańcówka - nie ma problemu; zgubienie paru kroków spowoduje co najwyżej, że zasłony nie rozsuną/zasuną się do końca (przy czym będzie to różnica jakiegoś głupiego milimetra) a przy powrocie i tak ustawią się na zerze. Bez krańcówki - nie ma szans. A co z sytuacją, jeśli zasilanie padnie w czasie ruchu zasłon? Ręczna korekta? A jeśli użytkownika nie ma w domu to kto taką korektę zrobi? --- [1]Tu pod pojęciem "krańcówka" rozumiem jakikolwiek element informujący kontroler, że element wykonawczy znalazł się w określonym położeniu. Cytuj Link do komentarza Share on other sites More sharing options...
TPReal Październik 28, 2020 Autor tematu Udostępnij Październik 28, 2020 (edytowany) @ethanak Akurat Python jest na mojej liście nie tykać tego nawet kijem (chyba że nie ma innego wyjścia), ale widzę że do Rubiego też ktoś napisał bibliotekę do obliczania zachodów słońca. Akurat najpierw przyszło mi do głowy pobranie tego, bo i tak miałem z innego projektu gotową logikę pobierania danych. I oczywiście przewidziałem że może nie działać sieć, i rozwiązałem ten problem. Wymyślenie rozwiązania pozostawiam jako ćwiczenie dla czytelnika. Jak piszę że od dwóch miesięcy działa, to chyba jednak jest użyteczny, nie? Tyle że pewnego dnia może się okazać że z losowych przyczyn przestanie dociągać, i wtedy trzeba będzie coś przebudować. Ale to nie samolot pasażerski, niczyje życie nie zależy od tego, żeby działało idealnie. No i radzę sobie dobrze bez krańcówki. Jeśli dajmy na to przy rozsuwaniu na końcu zgubi parę kroków, to przy zasuwaniu, gdy zasłona będzie całkiem zasunięta, zgubi tyle samo kroków i się wyrówna. To samo jeśli padnie zasilanie (zresztą aktualną pozycję zrzucam do pliku co dwie sekundy w czasie ruchu, właśnie po to żeby błąd nie był duży nawet w tej sytuacji). Właśnie dzięki temu, że silnik nie ma dużego zapasu momentu, wiem że zgubi kroki, a nie na przykład zerwie listwę z sufitu. To dość wygodne. A jakbym zastosował silnik z przekładnią to być może musiałbym mieć krańcówkę. Edytowano Październik 28, 2020 przez TPReal Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Październik 28, 2020 Udostępnij Październik 28, 2020 1 minutę temu, TPReal napisał: Właśnie dzięki temu, że silnik nie ma dużego zapasu momentu, wiem że zgubi kroki, a nie na przykład zerwie listwę z sufitu. No, czyli masz coś w rodzaju krańcówki 🙂 2 minuty temu, TPReal napisał: A jakbym zastosował silnik z przekładnią to być może musiałbym mieć krańcówkę. Ja mam silnik z przekładnią i mierzę pobierany prąd. Co nie oznacza oczywiście, że moje rozwiązanie jest lepsze. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!