Spisu treści:

NexArdu: Inteligentne sterowanie oświetleniem: 5 kroków
NexArdu: Inteligentne sterowanie oświetleniem: 5 kroków

Wideo: NexArdu: Inteligentne sterowanie oświetleniem: 5 kroków

Wideo: NexArdu: Inteligentne sterowanie oświetleniem: 5 kroków
Wideo: Séance ordinaire - 5 juillet 2021 2024, Lipiec
Anonim
NexArdu: Inteligentne sterowanie oświetleniem
NexArdu: Inteligentne sterowanie oświetleniem

Aktualizacja

Jeśli opracowałeś tę samą funkcjonalność za pomocą Home Assistant. Asystent domowy oferuje ogromny wachlarz możliwości. Możesz znaleźć rozwój tutaj.

Szkic do inteligentnego sterowania oświetleniem domu za pomocą bezprzewodowych urządzeń typu X10 433,92 MHz (aka 433 MHz), np. Nexa.

Tło

Jeśli chodzi o oświetlenie dekoracyjne, to męczyło mnie to, że co drugi lub trzeci tydzień musiałem przestawiać zegary włączające światło z powodu przesunięcia godziny słonecznej względem CET. w niektóre noce kładziemy się spać wcześniej niż w inne. Z tego powodu czasami światła gasną albo „za późno” albo „za wcześnie”. Powyższe skłoniło mnie do myślenia: chcę, aby oświetlenie dekoracyjne włączało się zawsze na tym samym poziomie światła otoczenia, a następnie wyłączało się o określonej godzinie w zależności od tego, czy nie śpimy, czy nie.

Cel

Ta instrukcja wykorzystuje możliwości urządzeń sterowanych bezprzewodowo, takich jak System Nexa, działających na częstotliwości 433,92 MHz. Tutaj mamy przedstawić:

  1. Zautomatyzowana kontrola oświetlenia
  2. Kontrola sieci

Kontrola sieci. Wewnętrzny a zewnętrzny serwer WWW

Serwer wewnętrzny wykorzystuje możliwość osłony Arduino Ethernet, aby zapewnić serwer WWW. Serwer sieciowy będzie uczestniczyć w wywołaniach klienta internetowego w celu sprawdzenia i interakcji z Arduino. Jest to proste rozwiązanie o ograniczonej funkcjonalności; możliwości rozszerzenia kodu serwera WWW są ograniczone pamięcią Arduino. Serwer Zewnętrzny wymaga skonfigurowania zewnętrznego serwera WWW PHP. Ta konfiguracja jest bardziej skomplikowana i nie jest obsługiwana przez ten samouczek, jednak kod/strona PHP do sprawdzania i sterowania Arduino ma podstawową funkcjonalność. Możliwości rozbudowy serwera WWW są w tym przypadku ograniczone przez zewnętrzny serwer WWW.

Zestawienie materiałów

Aby w pełni wykorzystać możliwości, jakie daje ten szkic, potrzebujesz:

  1. Arduino Uno (testowane na R3)
  2. Osłona Arduino Ethernet
  3. Zestaw Nexa lub podobny działający na 433,92 MHz
  4. Czujnik PIR (Passive InfraRed) działający na częstotliwości 433,92 MHz
  5. Rezystor 10KOhm
  6. LDR
  7. RTC DS3231 (tylko wersja z zewnętrznym serwerem)
  8. Nadajnik 433,92 MHz: XY-FST
  9. Odbiornik 433,92 MHz: MX-JS-05V

Zalecane minimum to:

  1. Arduino Uno (testowane na R3)
  2. Zestaw Nexa lub podobny działający na 433,92 MHz
  3. Rezystor 10KOhm
  4. LDR
  5. Nadajnik 433,92 MHz: XY-FST

(Pominięcie osłony Ethernet wymaga modyfikacji szkicu, którego nie podano w tej instrukcji)

Logika Nexy. Krótki opis

Odbiornik Nexa uczy się identyfikatora pilota i identyfikatora przycisku. Innymi słowy, każdy pilot ma swój numer nadawcy, a każda para przycisków włączania/wyłączania ma swój identyfikator przycisku. Odbiornik musi nauczyć się tych kodów. Niektóre dokumenty Nexy stwierdzają, że odbiornik można sparować z maksymalnie sześcioma pilotami. Parametry Nexy:

  • SenderID: identyfikator pilota
  • ButtonID: numer pary przycisków (wł./wył.). Zaczyna się od cyfry 0
  • Grupa: tak/nie (aka przyciski „Wszystko wyłączone/włączone”)
  • Polecenie: włącz/wyłącz

Instruktażowe kroki. Notatka

Różne opisane tutaj kroki mają na celu zaoferowanie dwóch różnych smaków, jak osiągnąć cel. Możesz wybrać ten, który Ci odpowiada. Oto indeks:

Krok #1: obwód

Krok #2: Nexardu z wewnętrznym serwerem internetowym (z obsługą NTP)

Krok #3: Nexardu z zewnętrznym serwerem

Krok 4: Cenne informacje

Krok 1: Obwód…

Obwód…
Obwód…

Połącz różne komponenty, jak pokazano na rysunku.

Pin#8 Arduino do pinu danych w module RX (odbiornik)Pin#2 Arduino do pinu danych w module RX (odbiornik)Pin#7 Arduino do pinu danych na module TX (nadawcy)Pin Arduino A0 do LDR

Konfiguracja zegara czasu rzeczywistego. Wymagane tylko w konfiguracji serwera zewnętrznego. Pin Arduino A4 do pinu SDA na module RTC Pin Arduino A5 do pinu SCL na module RTC

Krok 2: Nexardu z wewnętrznym serwerem internetowym (z NTP)

Biblioteki

Ten kod korzysta z wielu bibliotek. Większość z nich można znaleźć w "Library Manager" Arduino IDE. Nie powinieneś znaleźć wymienionej biblioteki, proszę google.

Wire.hSPI.h - Wymagane przez Ethernet shieldNexaCtrl.h - Kontroler urządzenia Nexa Ethernet.h - Aby włączyć i funkcjonować Ethernet shieldRCSwitch.h - Wymagane dla PIRTime.h - Wymagane dla RTCTimeAlarms.h - Zarządzanie alarmami czasowymiEthernetUdp.h - Wymagane dla Klient NTP

Szkic

Poniższy kod wykorzystuje możliwość wykorzystania płytki Arduino UNO nie tylko do sterowania urządzeniami Nexa, ale zawiera również wewnętrzny serwer WWW. Należy dodać, że moduł RTC (zegar czasu rzeczywistego) jest automatycznie regulowany przez NTP (Network Time Protocol).

Zanim wgrasz kod do Arduino, może być konieczne skonfigurowanie następujących elementów:

  • SenderId: najpierw musisz powąchać SenderId, patrz poniżej
  • PIR_id: najpierw musisz powąchać SenderId, patrz poniżej
  • LAN IP Address: ustaw adres IP swojej sieci LAN na tarczę Ethernet Arduino. Wartość domyślna: 192.168.1.99
  • Serwer NTP: Nie jest to absolutnie konieczne, ale może być dobrze poszukać w Google serwerów NTP w pobliżu. Wartość domyślna: 79.136.86.176
  • Kod jest dostosowany do strefy czasowej CET. Dostosuj tę wartość - w razie potrzeby do swojej strefy czasowej, aby wyświetlić poprawny czas (NTP)

Wąchanie kodów Nexa

W tym celu należy podłączyć co najmniej komponent RX do Arduino, jak pokazano na obwodzie.

Poniżej znajduje się szkic Nexa_OK_3_RX.ino, który w momencie pisania jest kompatybilny z urządzeniami Nexa NEYCT-705 i PET-910.

Kroki, które należy wykonać, to:

  1. Sparuj odbiornik Nexa z pilotem.
  2. Załaduj Nexa_OK_3_RX.ino do Arduino i otwórz "Serial Monitor".
  3. Naciśnij przycisk pilota, który steruje odbiornikiem Nexa.
  4. Zwróć uwagę na „RemoteID” i „ButtonID”.
  5. Ustaw te liczby pod SenderID i ButtonID w deklaracji zmiennej poprzedniego szkicu.

Aby odczytać identyfikator PIR, użyj tego samego szkicu (Nexa_OK_3_RX.ino) i odczytaj wartość na „Monitorze szeregowym”, gdy PIR wykryje ruch.

Krok 3: Nexardu z zewnętrznym serwerem

Biblioteki

Ten kod korzysta z wielu bibliotek. Większość z nich można znaleźć w "Library Manager" Arduino IDE. Jeśli nie znajdziesz wymienionej biblioteki, skorzystaj z google.

Wire.hRTClib.h - jest to biblioteka z https://github.com/MrAlvin/RTClibSPI.h - Wymagane przez Ethernet shieldNexaCtrl.h - Nexa device controllerEthernet.h - Aby włączyć i obsługiwać Ethernet shieldRCSwitch.h - Wymagane dla PIRTime.h - Wymagane dla RTCTimeAlarms.h - Zarządzanie alarmami czasowymiaREST.h - dla usług RESTful API wykorzystywanych przez zewnętrzny serwerair/wdt.h - Obsługa zegarów Watchdog

Szkic

Poniższy szkic przedstawia inny smak tego samego, tym razem zwiększając możliwości, jakie może dać zewnętrzny serwer sieciowy. Jak już wspomniano we wstępie, The External Server wymaga skonfigurowania zewnętrznego serwera WWW PHP. Ta konfiguracja jest bardziej skomplikowana i nie jest obsługiwana przez ten samouczek, jednak kod/strona PHP do sprawdzania i sterowania Arduino jest wyposażona w podstawową funkcjonalność.

Przed przesłaniem kodu do Arduino może być konieczne skonfigurowanie następujących elementów:

  • SenderId: najpierw musisz powąchać SenderId, zobacz Wąchanie kodów Nexa w poprzednim kroku
  • PIR_id: najpierw musisz powąchać SenderId, patrz Wąchanie kodów Nexa w poprzednim kroku
  • LAN IP Address: ustaw adres IP swojej sieci LAN na tarczę Ethernet Arduino. Wartość domyślna: 192.168.1.99

Aby zapoznać się z procedurą wąchania kodu Nexa, zapoznaj się z krokiem 1.

Plik uzupełniający

Prześlij załączony plik nexardu4.txt na zewnętrzny serwer PHP i zmień jego nazwę na nexardu4.php

Ustawiono czas RTC

Do ustawienia czasu/daty na RTC używam szkicu SetTime, który zawiera bibliotekę DS1307RTC.

Krok 4: Cenne informacje

Cenne informacje
Cenne informacje
Cenne informacje
Cenne informacje

Zachowanie dobrze wiedzieć

  1. Gdy Arduino znajduje się w trybie „Light Automatic Control”, może przejść przez cztery różne stany w zależności od oświetlenia otoczenia i pory dnia:

    1. Pobudka: Arduino czeka na nadejście nocy.
    2. Aktywny: nadeszła noc i Arduino włączyło światła.
    3. Senny: Światła są włączone, ale nadchodzi czas ich wyłączenia. Zaczyna się od "time_to_turn_off - PIR_time", czyli jeśli time_to_turn_off jest ustawione na 22:30, a PIR_time na 20 minut, to Arduino wejdzie w stan snu o 22:10.
    4. Uśpiony: noc mija, Arduino wyłącza światła i czeka, aż świt się obudzi.
  2. Arduino zawsze nasłuchuje sygnałów wysyłanych przez piloty. Daje to możliwość pokazania stanu świateł (włączone/wyłączone) w Internecie, gdy używany jest pilot.
  3. Podczas gdy Arduino jest bezsennie, cały czas próbuje wyłączyć światła, dlatego sygnały ON wysyłane przez zdalne sterowanie w celu włączenia świateł mogą zostać przechwycone przez Arduino. W takim przypadku Arduino spróbuje ponownie wyłączyć światła.
  4. Gdy Arduino jest aktywne, cały czas próbuje włączyć światła, dlatego sygnały OFF wysyłane przez pilota w celu wyłączenia świateł mogą zostać przechwycone przez Arduino. W takim przypadku Arduino spróbuje ponownie włączyć światła.
  5. W stanie snu światła można włączać i wyłączać za pomocą pilota. Arduino nie będzie przeciwdziałać.
  6. W stanie uśpienia odliczanie PIR zacznie się resetować od „time_to_turn_off - PIR_time”, a więc time_to_turn_off wydłuża się o 20 minut za każdym razem, gdy PIR wykryje ruch. „Wykryto sygnał PIR!” wiadomość zostanie wyświetlona w przeglądarce internetowej, gdy to się stanie.
  7. Podczas gdy Arduino jest w stanie uśpienia, światła można włączać i wyłączać za pomocą pilota. Arduino nie będzie przeciwdziałać.
  8. Resetowanie lub cykl zasilania Arduino przeniesie go w tryb aktywny. Oznacza to, że jeśli Arduino zostało zresetowane po time_turn_off, Arduino włączy światła. Aby tego uniknąć, Arduino należy przełączyć w tryb ręczny (zaznaczyć „Light Automatic Control”) i poczekać do rana, aby powrócić do „Light Automatic Control”.
  9. Jak wspomniano, Arduino czeka, aż świt znów stanie się aktywny. Z tego powodu system może dać się oszukać, kierując wystarczająco silne światło w kierunku czujnika światła, które ma przekroczyć próg „minimalnej jasności”. Jeśli tak się stanie, Arduino ma przejść w stan aktywny.
  10. Wartość Tolerancja ma duże znaczenie, aby uniknąć włączania i wyłączania systemu wokół wartości progowej Minimalna jasność. Światła LED, ze względu na ich migotanie i wysoką responsywność, mogą być źródłem trzepotania. Jeśli wystąpi ten problem, zwiększ wartość tolerancji. Używam wartości 7.

Dobrze wiedzieć o kodzie

  1. Jak widać kod jest bardzo obszerny i korzysta ze znacznej ilości bibliotek. Zmniejsza to ilość wolnej pamięci niezbędnej dla sterty. Zauważyłem w przeszłości niestabilne zachowanie, w wyniku którego system był zatrzymywany, szczególnie po połączeniach internetowych. W związku z tym największym wyzwaniem, jakie miałem, było ograniczenie jego rozmiaru i wykorzystania różnych zmiennych, aby system był stabilny.
  2. Kod, który wykorzystuje serwer wewnętrzny - używany przeze mnie w domu, działa już od lutego 2016 roku bez problemów.
  3. Dużo wysiłku włożyłem w wzbogacenie kodu o objaśnienia. Skorzystaj z tego, aby bawić się różnymi parametrami, takimi jak liczba wysłanych kodów Nexa na serię, czas synchronizacji NTP itp.
  4. Kod nie obejmuje czasu letniego. Należy to dostosować za pomocą przeglądarki internetowej, gdy ma to zastosowanie.

Kilka punktów do rozważenia

  1. Dodaj anteny do modułów częstotliwości radiowych TX i RX. Zaoszczędzi Ci to czasu na narzekanie na dwa główne punkty: odporność i zasięg sygnału RF. Używam przewodu 50 omów o długości 17,28 cm (6,80 cala).
  2. Ten nieuchwytny może współpracować z innymi systemami automatyki domowej, takimi jak na przykład Proove. Jednym z wielu warunków do spełnienia jest ich praca na częstotliwości 433,92 MHz.
  3. Dużym problemem związanym z Arduino jest radzenie sobie z bibliotekami, które z czasem mogą być aktualizowane i nagle nie będą kompatybilne z twoim „starym” szkicem; ten sam problem może pojawić się podczas aktualizacji Arduino IDE. Uważaj, że tak może być w naszym przypadku - tak, mój problem też.
  4. Wiele jednoczesnych klientów internetowych z różnymi trybami świecenia tworzy stan „migania”.

Zrzut ekranu

Na powyższej karuzeli zdjęć znajduje się zrzut ekranu strony internetowej wyświetlanej po wywołaniu Arduino przez przeglądarkę internetową. Biorąc pod uwagę domyślną konfigurację IP kodu, adres URL będzie wyglądał następująco:

Jednym z aspektów, który może ulec poprawie, jest umiejscowienie przycisku „prześlij”, ponieważ ma on wpływ na wszystkie pola wprowadzania, a nie tylko na „Light Automatic Control”, jak mogłoby się wydawać. Innymi słowy, jeśli chcesz zmienić dowolną z możliwych wartości, zawsze musisz nacisnąć przycisk „prześlij”.

Szczegółowa/zaawansowana dokumentacja

Załączam następujące pliki, które mogą pomóc w zrozumieniu całego rozwiązania, szczególnie w przypadku rozwiązywania problemów i doskonalenia.

Arduino_NexaControl_IS.pdf zawiera dokumentację dotyczącą rozwiązania Internal Server.

Arduino_NexaControl_ES.pdf zawiera dokumentację dotyczącą rozwiązania External Server.

Odniesienia zewnętrzne

System Nexa (szwedzki)

Krok 5: Zakończony

Skończone!
Skończone!

Wszystko gotowe i gotowe!

Obudowę Arduino Uno można znaleźć w Thingiverse jako „Arduino Uno Rev3 z obudową Ethernet Shield XL”.

Zalecana: