Spisu treści:
Wideo: Bezprzewodowe sterowanie zagłówkiem łóżka MQTT: 5 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
Kilka lat temu kupiliśmy nowe łóżko z pianki z pamięcią kształtu i, jak w przypadku większości łóżek, trzeba było również kupić jedną z ich „zatwierdzonych podstaw”, aby zachować gwarancję. Zdecydowaliśmy się więc na najtańszą podstawę, która obejmowała również możliwość podnoszenia i opuszczania wezgłowia łóżka. Kilka dni później nasz materac i nasza tania podstawa American Adjustables z przewodowymi elementami sterującymi (po jednym na każdą stronę łóżka) zostały dostarczone i ustawione.
Pierwszą rzeczą, jaką zauważyliśmy, było to, że kable w salonie, które były ładne i długie, nie były tym, co mieliśmy na naszym łóżku! Te w salonie miały przedłużenia. Te przedłużenia NIE były dołączone do naszego łóżka i wystarczająco interesujące, nikt nie był zainteresowany sprzedażą nam pary przedłużaczy. To pozostawiło nam elementy sterujące, które ledwo sięgały szczytu łóżka i które musieliśmy obrócić, aby użyć.
Dostajesz to, za co płacisz
Po około 6 miesiącach zauważamy, że kołnierze odciążające na jednym z elementów kontrolnych zaczęły się rozdzierać. Kilka miesięcy później - goły drut. Szybko do przodu o około rok, jedna z kontrolek już nie działa, a druga staje się nieco drgająca.
Znowu nikt nie był zainteresowany sprzedażą nam zamienników. Wtedy mnie uderzyło!
„Chwileczkę! Czyż nie buduję systemu automatyki domowej i KONTROLI?!?”
Krok 1: Odkrycie
Chciałem zobaczyć, co mogę zrobić z tym, co mam, więc wziąłem wadliwy kontroler i wow! było tam dużo gówna! Po co to wszystko? Cofnąłem się i po prostu spojrzałem na wchodzące i wychodzące linie. Udało mi się zobaczyć, że jest linia zasilająca 12 woltów i linia uziemiająca. Pozostałe dwie linie wyglądały jak linie sygnałowe dla dwóch przycisków w górę i w dół. Zaryzykowałem więc i po prostu przełączyłem zasilanie 12 V do linii sygnałowej „w górę”. Łóżko zaczęło się ruszać! Następnie przesunąłem przewód połączeniowy do linii sygnałowej „w dół” i łóżko opadło!
W pudełku znajdują się styki dla 4 dodatkowych linii sygnałowych i 4 dodatkowych przycisków. Domyślam się, że ta płyta kontrolera jest używana we wszystkich ich przewodowych modelach bazowych i po prostu nakładają różne płyty czołowe na płytę w razie potrzeby. Miałem więc działającą teorię. Przetestowałem przewód zasilający, aby sprawdzić, czy zanurzył się podczas użytkowania lub w dowolnym momencie - nie. Pobór prądu przez linie sygnałowe był bardzo mały, ale wymagały one 12 woltów do aktywacji silnika.
Krok 2: Projekt
Tak więc proste połączenie kontaktowe między VCC a pinem sygnałowym jest wszystkim, co jest potrzebne, ale jak to się robi w moim systemie. Wymagane byłyby dwa przekaźniki dla styków, a ESP8266 działałby dla kontrolera bezprzewodowego. Ponieważ przekaźniki mogą wymagać większego prądu niż mogą dostarczyć piny cyfrowe, najlepiej jest zastosować optoizolator między kontrolerem a przekaźnikiem. Umożliwi to włączenie małego sygnału przełącznika o wyższym natężeniu (w tym przypadku tranzystora sterowanego światłem) i bezpieczne aktywowanie cewki przekaźnika. Ponadto optoizolator izoluje sterownik od wszelkich skoków, które mogą powstać, gdy cewka przekaźnika jest zwolniona i pole magnetyczne zanika. Na szczęście istnieją moduły przekaźnikowe, które zawierają już wszystkie te obwody i za całkiem niską cenę.
Łóżko będzie źródłem zasilania sterownika, a żeby obsłużyć dostarczone 12 woltów, będziemy potrzebować zmiennego konwertera buck. Bardzo tani został podlinkowany poniżej i działa pięknie. Linia 12V i linie GND łączą się ze stroną wejściową konwertera, a strona stabilizowana 5V łączy się z VCC NodeMCU i pinem VCC na module przekaźnika. Masa (-) na konwerterze łączy się z pinami GND na zarówno moduł przekaźnikowy, jak i NodeMCU.
NodeMCU łączy się z IN1 za pomocą D1 (GPIO5) i IN2 za pomocą D2 (GPIO4). Linia sygnału w górę na łóżku łączy się z normalnie otwartym zaciskiem śrubowym przekaźnika 1, a linia sygnału w dół łączy się z normalnie otwartym złączem bloku zacisków przekaźnika 2. Będziesz musiał podłączyć przewód 12 V, który jest podłączony do strony wejściowej konwertera buck, również do drugiego połączenia bloku zacisków dla OBU przekaźników 1 i 2.
Części
- 1 - WęzełMCU
- 1 - Moduł przekaźnika pojedynku z izolacją prądową
- 1 - Zmienny konwerter buck wejścia/wyjścia
- 1 - Płytka do krojenia chleba
- Drut z rdzeniem miedzianym o średnicy 22 mm
- 2 - śruby M3x 8
Krok 3: Załącznik
Obudowę można znaleźć tutaj:
Zaprojektowałem prostą obudowę za pomocą Tinkercad, która pozwala na wprowadzenie kabla sterującego łóżkiem do pudełka między wspornikami odciążającymi wewnątrz pudełka. Są tu szczeliny na opaskę na suwak, które pomogłyby zapobiec przesuwaniu się kabla, ale w moim przypadku dopasowanie było bardzo dokładne i nie było potrzebne. Pokrywa przykręcana jest 2 śrubami M3x8. Polecam wgrać kod i przetestować system przed zamontowaniem go w pudełku.
Użyłem gorącego kleju, aby utrzymać deski na miejscu, ale może to nie być konieczne.
Krok 4: Kod
Kod można znaleźć tutaj:
UWAGA: Ten projekt korzysta z biblioteki pubsubclient, którą można dodać w Menedżerze bibliotek w Arduino IDE
Kod tutaj jest dość prosty i został zaprojektowany w oparciu o typ Cover MQTT w Home Assistant. Pomysł tutaj jest prosty: po naciśnięciu przycisku w górę lub w dół w asystencie domowym odpowiedni przekaźnik zamyka się do momentu otrzymania polecenia stop LUB system osiąga maksymalny czas aktywacji i zatrzymuje się.
Maksymalny czas jest rozumiany jako środek ostrożności na wypadek, gdyby użytkownik zapomniał go zatrzymać lub jeśli polecenie zostało przypadkowo wysłane i jest mało prawdopodobne, że ktoś go zatrzyma. Nie chcemy, aby przekaźnik był włączony w nieskończoność ani nieoczekiwane problemy z łóżkiem spowodowane przedłużającym się zwarciem styków.
W moim kodzie ten limit czasu wynosi 20 sekund i można go dostosować w bloku zmiennych globalnych u góry kodu.
Drugim środkiem ostrożności było upewnienie się, że jeśli aktywuję jeden przekaźnik, zawsze wywoływana jest celowa dezaktywacja drugiego, nawet jeśli ostatni stan był już wyłączony. Nie chcę wysyłać 12v na obie linie sygnałowe, ponieważ nie wiem, co to zrobi z łóżkiem.
Poza tym łóżko publikuje, że jest dostępne co 60 sekund i to wszystko. Nie ma tu dzwonków ani gwizdków. Ponieważ łóżko nie ma informacji zwrotnej o położeniu, nie mogłem ich odesłać do Asystenta Domowego.
Krok 5: Przykład integracji
Kod, który napisałem, używa MQTT do komunikacji przez Wi-Fi i dlatego może komunikować się z dowolnym koncentratorem automatyki lub urządzeniem korzystającym z MQTT. Używam Home Assistant, który ma wbudowany broker MQTT. Poniżej znajduje się przykład mojej konfiguracji HA.
W HA mam plik covers.yaml z następującą definicją:
- platforma: mqtt
name: "Master Bed Headboard" command_topic: "master_bed_control/cmd" Availability_topic: "master_bed_control/availability" qos: 0 zachowaj: false payload_open: "UP" payload_close: "DOWN" payload_stop: "STOP" payload_available: "online" payload_not_available: " offline” optymistyczny: prawda
Daje mi to jeden wpis w moim interfejsie HA z przyciskiem góra/stop/dół ustawionym z działaniem opisanym powyżej.
Dodatkowo zdefiniowałem dwa przyciski w moim przyłóżkowym panelu sterowania (Instruktaż / wpis na blogu), aby podnosić i opuszczać zagłówek. Przyciski na panelu sterowania są zdefiniowane jako czujniki MQTT:
- platforma: mqtt
state_topic: "bedside_cp1/button5" nazwa: "Bedside CP1 Button 5" ikona: mdi:circle
- platforma: mqtt
state_topic: "bedside_cp1/button6" nazwa: "Badside CP1 Button 6" ikona: mdi:circle
… i 4 reguły automatyzacji dotyczące naciśnięcia i zwolnienia każdego przycisku. Po wciśnięciu komenda góra lub dół jest wysyłana do łóżka w zależności od tego, który przycisk został naciśnięty, po zwolnieniu przycisku wysyłana jest komenda stop:
- identyfikator: '1548308650383'
alias: MBR Bedside CP Button 5a trigger: - entity_id: sensor.bedside_cp1_button_5 from: 'Off' platforma: stan do: 'On' warunek: action: - data: entity_id: 'cover.master_bed_headboard' service: cover.open_cover - id: '1548308758911' alias: MBR Bedside CP Button 5b trigger: - entity_id: sensor.bedside_cp1_button_5 from: 'On' platforma: stan do: 'Off' warunek: action: - data: entity_id: usługa 'cover.master_bed_headboard': cover.stop_cover - id: '1548308863495' alias: MBR Bedside CP Button 6a trigger: - entity_id: sensor.bedside_cp1_button_6 from: 'Off' platforma: stan do: 'On' warunek: action: - data: entity_id: ' cover.master_bed_headboard' service: cover.close_cover - id: '1548308911467' alias: MBR Bedside CP Button 6b trigger: - entity_id: sensor.bedside_cp1_button_6 from: 'On' platforma: stan do: 'Off' warunek: akcja: - data: entity_id: 'cover.master_bed_headboard' usługa: cover.stop_cover
Zalecana:
Automatyczne oświetlenie łóżka: 5 kroków (ze zdjęciami)
Automatyczne oświetlenie łóżka: Czy śpisz też w nocy? Czy też nic nie widzisz w ciemności? Czy w nocy w pokoju jest też ciemno? Jeśli tak, to to urządzenie jest dla Ciebie! Myślę, że większość z nas lubi trochę zostać dłużej wieczorami. Powody mogą być różne – Netflix, YouTube
Bezprzewodowe sterowanie Arduino Tank (nRF24L01): 6 kroków (ze zdjęciami)
Wireless Arduino Controlled Tank (nRF24L01): Cześć! Dzisiaj pokażę ci, jak zbudować kontrolowany przez Arduino czołg i pilot. Wydrukowane w 3D części zbiornika (z wyjątkiem kontrolera, prowadnicy gąsienic i pokrywy zbiornika) zostały zaprojektowane przez firmę timmiclark i można je znaleźć tutaj
Sterowanie jasnością Sterowanie diodami LED w oparciu o PWM za pomocą przycisków, Raspberry Pi i Scratch: 8 kroków (ze zdjęciami)
Kontrola jasności Sterowanie diodami LED w oparciu o PWM za pomocą przycisków, Raspberry Pi i Scratch: Próbowałem znaleźć sposób, aby wyjaśnić moim uczniom, jak działa PWM, więc wyznaczyłem sobie zadanie kontrolowania jasności diody LED za pomocą 2 przycisków - jeden przycisk zwiększający jasność diody LED a drugi ją przyciemniający. Aby zaprogramować
Bezprzewodowe sterowanie serwomechanizmami RC przez UDP: 3 kroki
Bezprzewodowe sterowanie serwomechanizmami RC przez UDP: W tym projekcie chcę używać mojego iPhone'a do sterowania serwomechanizmami RC. Użyję akcelerometru do sterowania dwoma serwomechanizmami przez połączenie UDP. Jest to projekt Proof Of Concept, który ma na celu sprawdzenie, czy połączenie między iPhonem a urządzeniem peryferyjnym może osiągnąć wysoką
Bezprzewodowe sterowanie serwo: 6 kroków
Wireless Servo Control: Ten projekt steruje obrotem serwomechanizmu bezprzewodowo za pomocą potencjometru (pokrętła). Obrót jest ograniczony do 180 stopni