Inhaltsverzeichnis:

NexArdu: Beleuchtung Smart Control - Gunook
NexArdu: Beleuchtung Smart Control - Gunook

Video: NexArdu: Beleuchtung Smart Control - Gunook

Video: NexArdu: Beleuchtung Smart Control - Gunook
Video: Séance ordinaire - 5 juillet 2021 2024, November
Anonim
NexArdu: Intelligente Beleuchtungssteuerung
NexArdu: Intelligente Beleuchtungssteuerung

Aktualisieren

Wenn Sie die gleiche Funktionalität mit Home Assistant entwickelt haben. Home Assistant bietet eine immense Bandbreite an Möglichkeiten. Die Entwicklung finden Sie hier.

Eine Skizze zur intelligenten Steuerung der Heimbeleuchtung über 433,92 MHz (auch bekannt als 433 MHz) drahtlose X10-ähnliche Geräte, z. Nexa.

Hintergrund

Was die dekorative Beleuchtung angeht, war es für mich irgendwie ermüdend, dass ich wegen der Verschiebung der Sonnenstunde gegenüber der MEZ jede zweite oder dritte Woche die Zeitschaltuhren neu einstellen musste, die das Licht einschalten. An manchen Abenden gehen wir früher ins Bett als an anderen. Aus diesem Grund schalten die Lichter manchmal entweder "zu spät" oder "zu früh" aus. Das oben Gesagte hat mich zum Nachdenken herausgefordert: Ich möchte, dass sich die dekorative Beleuchtung immer im gleichen Umgebungslicht einschaltet und dann zu einer bestimmten Zeit wieder ausschaltet, je nachdem, ob wir wach sind oder nicht.

Zielsetzung

Dieses anweisbare nutzt die Möglichkeiten von drahtlos gesteuerten Geräten wie dem System Nexa, das auf der Frequenz von 433,92 MHz arbeitet. Hierin stellen wir vor:

  1. Automatisierte Beleuchtungssteuerung
  2. Web-Steuerung

Web-Steuerung. Interner vs. externer Webserver

Der Internal Server nutzt die Möglichkeit des Arduino Ethernet Shields, um einen Webserver bereitzustellen. Der Webserver nimmt an Webclient-Aufrufen teil, um das Arduino zu überprüfen und mit ihm zu interagieren. Dies ist eine unkomplizierte Lösung mit eingeschränkter Funktionalität; die Möglichkeiten, den Webserver-Code zu erweitern, sind durch den Speicher des Arduino begrenzt. Der externe Server erfordert die Einrichtung eines externen PHP-Webservers. Dieses Setup ist komplizierter und wird von diesem Tutorial nicht unterstützt. Der PHP-Code / die PHP-Seite zum Überprüfen und Steuern des Arduino wird jedoch mit grundlegenden Funktionen bereitgestellt. Die Möglichkeiten zur Erweiterung des Webservers werden dabei durch den externen Webserver eingeschränkt.

Stückliste

Um die Möglichkeiten, die diese Skizze bietet, voll auszuschöpfen, benötigen Sie:

  1. Ein Arduino Uno (getestet auf R3)
  2. Ein Arduino-Ethernet-Shield
  3. Ein Nexa-Set oder ähnliches mit 433,92 MHz
  4. Ein PIR-Sensor (Passive InfraRed) mit 433,92 MHz
  5. Ein 10KOhms Widerstand
  6. Ein LDR
  7. A RTC DS3231 (nur externe Serverversion)
  8. Ein 433,92 MHz-Sender: XY-FST
  9. Ein 433,92 MHz Empfänger: MX-JS-05V

Das empfohlene Minimum ist:

  1. Ein Arduino Uno (getestet auf R3)
  2. Ein Nexa-Set oder ähnliches mit 433,92 MHz
  3. Ein 10KOhms Widerstand
  4. Ein LDR
  5. Ein 433,92 MHz-Sender: XY-FST

(Das Weglassen des Ethernet-Schildes erfordert Änderungen der Skizze, die nicht in dieser Anleitung enthalten sind)

Die Nexa-Logik. Eine kurze Beschreibung

Der Nexa-Empfänger lernt die Fernbedienungs-ID und die Tasten-ID. Mit anderen Worten, jede Fernbedienung hat ihre Absendernummer und jedes Paar von Ein/Aus-Tasten hat seine Tasten-ID. Der Empfänger muss diese Codes lernen. In einigen Nexa-Dokumenten wird angegeben, dass ein Empfänger mit bis zu sechs Fernbedienungen gekoppelt werden kann. Die Nexa-Parameter:

  • SenderID: ID der Fernbedienung
  • ButtonID: Nummer des Tastenpaars (ein/aus). Es beginnt mit der Nummer 0
  • Gruppe: ja/nein (auch bekannt als "Alle aus/ein"-Buttons)
  • Befehl: ein/aus

Instructable Schritte. Notiz

Die hier beschriebenen verschiedenen Schritte dienen dazu, zwei verschiedene Geschmacksrichtungen zum Erreichen des Ziels anzubieten. Fühlen Sie sich frei, das gewünschte auszuwählen. Hier ist der Index:

Schritt #1: Die Schaltung

Schritt #2: Nexardu mit internem Webserver (mit NTP)

Schritt #3: Nexardu mit externem Server

Schritt #4: Wertvolle Informationen

Schritt 1: Die Schaltung…

Die Rennbahn…
Die Rennbahn…

Verdrahten Sie die diversen Komponenten wie im Bild gezeigt.

Arduino Pin#8 an Datenpin am RX (Empfänger) ModulArduino Pin#2 an Datenpin am RX (Empfänger)ModulArduino Pin#7 an Datenpin am TX (Sender) ModulArduino Pin A0 an LDR

RTC-Konfiguration. Wird nur bei der Konfiguration des externen Servers benötigt. Arduino-Pin A4 zum SDA-Pin am RTC-ModulArduino-Pin A5 zum SCL-Pin am RTC-Modul

Schritt 2: Nexardu mit internem Webserver (mit NTP)

Die Bibliotheken

Dieser Code verwendet viele Bibliotheken. Die meisten davon sind über den "Library Manager" der Arduino IDE zu finden. Sollten Sie eine gelistete Bibliothek nicht finden, googeln Sie bitte.

Wire.hSPI.h - Erforderlich für EthernetshieldNexaCtrl.h - Nexa-Gerätecontroller Ethernet.h - Zur Aktivierung und Funktion des EthernetshieldRCSwitch.h - Erforderlich für PIRTime.h - Erforderlich für RTCTimeAlarms.h - ZeitalarmverwaltungEthernetUdp.h - Erforderlich für NTP-Client

Die Skizze

Der folgende Code nutzt die Möglichkeit, das Arduino UNO-Board nicht nur zur Steuerung von Nexa-Geräten zu verwenden, sondern verfügt auch über einen internen Webserver. Anzumerken ist, dass das RTC-Modul (Real Time Clock) automatisch über NTP (Network Time Protocol) angepasst wird.

Bevor Sie den Code auf den Arduino hochladen, müssen Sie möglicherweise Folgendes konfigurieren:

  • SenderId: Sie müssen zuerst die SenderId sniffen, siehe unten
  • PIR_id: Sie müssen zuerst die SenderId sniffen, siehe unten
  • LAN-IP-Adresse: Stellen Sie eine IP Ihres LANs auf Ihr Ethernet-Arduino-Schild ein. Standardwert: 192.168.1.99
  • NTP-Server: Nicht unbedingt erforderlich, aber es könnte gut sein, nach NTP-Servern in Ihrer Nähe zu suchen. Standardwert: 79.136.86.176
  • Der Code ist an die Zeitzone MEZ angepasst. Passen Sie diesen Wert bei Bedarf an Ihre Zeitzone an, um die richtige Uhrzeit (NTP) anzuzeigen.

Schnüffeln der Nexa-Codes

Dazu müssen Sie mindestens die RX-Komponente wie in der Schaltung gezeigt mit dem Arduino verdrahten.

Nachfolgend finden Sie die Skizze Nexa_OK_3_RX.ino, die zum Zeitpunkt der Erstellung mit den Nexa-Geräten NEYCT-705 und PET-910 kompatibel ist.

Die folgenden Schritte sind:

  1. Koppeln Sie den Nexa-Empfänger mit der Fernbedienung.
  2. Laden Sie Nexa_OK_3_RX.ino auf den Arduino und öffnen Sie den "Serial Monitor".
  3. Drücken Sie die Fernbedienungstaste, die den Nexa-Empfänger steuert.
  4. Notieren Sie sich die "RemoteID" und "ButtonID".
  5. Setzen Sie diese Nummern unter SenderID und ButtonID auf der Variablendeklaration des vorherigen Sketches.

Um die ID des PIR zu lesen, verwenden Sie einfach dieselbe Skizze (Nexa_OK_3_RX.ino) und lesen Sie den Wert auf dem "Serial Monitor", wenn der PIR eine Bewegung erkennt.

Schritt 3: Nexardu mit externem Server

Die Bibliotheken

Dieser Code verwendet viele Bibliotheken. Die meisten finden Sie über den "Library Manager" der Arduino IDE. Sollten Sie eine gelistete Bibliothek nicht finden, googeln Sie bitte.

Wire.hRTClib.h - Dies ist die Bibliothek von https://github.com/MrAlvin/RTClibSPI.h - Erforderlich für EthernetshieldNexaCtrl.h - Nexa-GerätecontrollerEthernet.h - Zum Aktivieren und Verwenden des Ethernet-ShieldRCSwitch.h - Erforderlich für PIRTime.h - Erforderlich für RTCTimeAlarms.h - ZeitalarmverwaltungaREST.h - für RESTful-API-Dienste, die von externen Servern ausgenutzt werdenair/wdt.h - Watchdog-Timer-Handling

Die Skizze

Die folgende Skizze zeigt eine andere Variante der gleichen Sache, die diesmal die Möglichkeiten erweitert, die ein externer Webserver bieten kann. Wie bereits in der Einleitung erwähnt, erfordert The External Server die Einrichtung eines externen PHP-Webservers. Dieses Setup ist komplizierter und wird von diesem Tutorial nicht unterstützt. Der PHP-Code / die PHP-Seite zum Überprüfen und Steuern des Arduino wird jedoch mit grundlegenden Funktionen bereitgestellt.

Bevor Sie den Code auf den Arduino hochladen, müssen Sie möglicherweise Folgendes konfigurieren:

  • SenderId: Sie müssen zuerst die SenderId sniffen, siehe Sniffing der Nexa-Codes im vorherigen Schritt
  • PIR_id: Sie müssen zuerst die SenderId sniffen, siehe Sniffing der Nexa-Codes im vorherigen Schritt
  • LAN-IP-Adresse: Stellen Sie eine IP Ihres LANs auf Ihr Ethernet-Arduino-Schild ein. Standardwert: 192.168.1.99

Informationen zum Nexa-Code-Sniffing-Verfahren finden Sie in Schritt 1.

Ergänzende Datei

Laden Sie die angehängte Datei nexardu4.txt auf Ihren externen PHP-Server hoch und benennen Sie sie in nexardu4.php um

RTC-Zeit eingestellt

Um die Uhrzeit / das Datum auf der RTC einzustellen, verwende ich die Skizze SetTime, die die Bibliothek DS1307RTC zusammenfasst.

Schritt 4: Wertvolle Informationen

Wertvolle Information
Wertvolle Information
Wertvolle Information
Wertvolle Information

Gut zu wissendes Verhalten

  1. Wenn sich Arduino unter "Light Automatic Control" befindet, kann es in Bezug auf die Umgebungsbeleuchtung und die Tageszeit vier verschiedene Zustände durchlaufen:

    1. Wachsam: Arduino wartet auf die Nacht.
    2. Aktiv: Die Nacht ist gekommen und Arduino hat die Lichter eingeschaltet.
    3. Somnolent: Die Lichter sind an, aber die Zeit kommt, sie auszuschalten. Es beginnt bei "time_to_turn_off - PIR_time", dh wenn time_to_turn_off auf 22:30 und PIR_time auf 20 Minuten eingestellt ist, geht das Arduino um 22:10 in den schläfrigen Zustand über.
    4. Ruhend: Die Nacht vergeht, Arduino hat das Licht ausgeschaltet und Arduino wartet darauf, dass die Morgendämmerung wach wird.
  2. Arduino hört immer auf die Signale, die von Fernbedienungen gesendet werden. Dies bietet die Möglichkeit, den Zustand der Lichter (ein/aus) im Web anzuzeigen, wenn die Fernbedienung verwendet wird.
  3. Während Arduino wach ist, versucht es die ganze Zeit, die Lichter auszuschalten, daher können ON-Signale, die von einer Fernsteuerung gesendet werden, um die Lichter einzuschalten, von Arduino erfasst werden. Sollte dies passieren, wird der Arduino versuchen, die Lichter wieder auszuschalten.
  4. Während Arduino aktiv ist, versucht es ständig, die Lichter einzuschalten, daher können von einer Fernbedienung gesendete AUS-Signale zum Ausschalten der Lichter von Arduino erfasst werden. Sollte dies passieren, wird der Arduino versuchen, die Lichter wieder einzuschalten.
  5. Im schläfrigen Zustand kann das Licht mit einer Fernbedienung ein- und ausgeschaltet werden. Der Arduino wird nicht entgegenwirken.
  6. Im schläfrigen Zustand wird der PIR-Countdown von "time_to_turn_off - PIR_time" zurückgesetzt und so wird die time_to_turn_off jedes Mal um 20 Minuten verlängert, wenn der PIR eine Bewegung erkennt. Ein "PIR-Signal erkannt!" Die Meldung wird in diesem Fall im Webbrowser angezeigt.
  7. Während Arduino ruht, können die Lichter über die Fernbedienung ein- und ausgeschaltet werden. Der Arduino wird nicht entgegenwirken.
  8. Ein Zurücksetzen oder Aus- und Einschalten des Arduino bringt es in den aktiven Modus. Dies bedeutet, dass Arduino die Lichter einschaltet, wenn das Arduino nach dem time_turn_off zurückgesetzt wurde. Um dies zu vermeiden, muss der Arduino in den manuellen Modus gebracht werden (Häkchen bei "Light Automatic Control") und bis zum Morgen warten, um ihn wieder auf "Light Automatic Control" zu bringen.
  9. Wie bereits erwähnt, wartet Arduino darauf, dass die Morgendämmerung wieder aktiv wird. Aus diesem Grund kann das System getäuscht werden, indem ein ausreichend starkes Licht auf den Lichtsensor gerichtet wird, das den Schwellenwert für die "minimale Leuchtkraft" überschreitet. Sollte dies passieren, soll Arduino in den aktiven Zustand wechseln.
  10. Der Toleranzwert ist von großer Bedeutung, um ein Ein- und Ausschwingen des Systems um den Schwellenwert Minimum Luminosity zu vermeiden. LED-Leuchten können aufgrund ihres Flackerns und ihrer hohen Reaktionsfähigkeit eine Quelle für Flatterverhalten sein. Erhöhen Sie den Toleranzwert, wenn dieses Problem auftritt. Ich verwende Wert 7.

Gut zu wissen über den Code

  1. Wie Sie feststellen können, ist der Code sehr umfangreich und verwendet eine beträchtliche Anzahl von Bibliotheken. Dies beeinträchtigt die Menge an freiem Speicher, die für den Heap erforderlich ist. Ich habe in der Vergangenheit ein instabiles Verhalten festgestellt, bei dem das System angehalten wurde, insbesondere nach Webanrufen. Daher bestand meine größte Herausforderung darin, die Größe und die Verwendung verschiedener Variablen zu begrenzen, um das System stabil zu machen.
  2. Der Code, der den von mir zu Hause verwendeten internen Server ausnutzt, läuft nun seit Februar 2016 problemlos.
  3. Ich habe erhebliche Anstrengungen unternommen, um den Code mit Erklärungen anzureichern. Nutzen Sie dies, um mit verschiedenen Parametern wie der Anzahl der Nexa-Code-Sendungen pro Burst, der NTP-Synchronisierungszeit usw. zu spielen.
  4. Der Code bietet keine Sommerzeit. Dies muss bei Bedarf über den Webbrowser angepasst werden.

Einige Punkte zu beachten

  1. Fügen Sie die Antennen zu den TX- und RX-Radiofrequenzmodulen (RF) hinzu. Es erspart Ihnen Zeit, sich über zwei Hauptpunkte zu beschweren: Belastbarkeit und Reichweite des HF-Signals. Ich verwende ein 50 Ohm Kabel mit einer Länge von 17,28 cm (6,80 Zoll).
  2. Dieses intructable kann auch mit anderen Hausautomationssystemen wie beispielsweise Proove funktionieren. Eine der vielen zu erfüllenden Bedingungen besteht darin, dass sie auf der Frequenz von 433,92 MHz betrieben werden.
  3. Ein großes Problem bei Arduino ist der Umgang mit Bibliotheken, die im Laufe der Zeit möglicherweise aktualisiert werden und plötzlich nicht mehr mit Ihrer "alten" Skizze kompatibel sind. Das gleiche Problem kann auftreten, wenn Sie Ihre Arduino-IDE aktualisieren. Beachten Sie, dass dies hier unser Fall sein könnte - ja, mein Problem auch.
  4. Mehrere gleichzeitige Webclients mit unterschiedlichen Lichtmodi erzeugen einen "blinkenden" Zustand.

Bildschirmfoto

Im obigen Bildkarussell finden Sie einen Screenshot der Webseite, die angezeigt wird, wenn Sie das Arduino über Ihren Webbrowser aufrufen. Angesichts der Standard-IP-Konfiguration des Codes wäre die URL

Ein verbesserungswürdiger Aspekt ist die Positionierung des "Submit"-Buttons, da dieser auf alle Eingabefelder wirkt und nicht nur auf die "Light Automatic Control", wie man meinen könnte. Mit anderen Worten, wenn Sie einen der möglichen Werte ändern möchten, müssen Sie immer auf die Schaltfläche "Senden" drücken.

Detaillierte/Erweiterte Dokumentation

Ich habe die folgenden Dateien angehängt, damit sie Ihnen helfen können, die gesamte Lösung zu verstehen, insbesondere zur Fehlerbehebung und Verbesserung.

Arduino_NexaControl_IS.pdf bietet eine Dokumentation zur Internal Server-Lösung.

Arduino_NexaControl_ES.pdf bietet eine Dokumentation zur External Server-Lösung.

Externe Referenzen

Nexa-System (Schwedisch)

Schritt 5: Fertig

Fertig!
Fertig!

Da haben Sie alles fertig und in Aktion!

Das Arduino Uno Case ist in Thingiverse als "Arduino Uno Rev3 with Ethernet Shield XL-case" zu finden.

Empfohlen: