Indholdsfortegnelse:

NexArdu: Illumination Smart Control: 5 trin
NexArdu: Illumination Smart Control: 5 trin

Video: NexArdu: Illumination Smart Control: 5 trin

Video: NexArdu: Illumination Smart Control: 5 trin
Video: Séance ordinaire - 5 juillet 2021 2024, Juli
Anonim
NexArdu: Illumination Smart Control
NexArdu: Illumination Smart Control

Opdatering

Hvis har udviklet den samme funktionalitet ved hjælp af Home Assistant. Home Assistant tilbyder et stort udvalg af muligheder. Du kan finde udviklingen her.

En skitse til at styre hjemmebelysning på en smart måde via 433,92MHz (aka 433MHz) trådløse X10-lignende enheder, f.eks. Nexa.

Baggrund

Når det kommer til dekorativ belysning, har det på en eller anden måde været trættende for mig, at jeg hver anden eller tredje uge måtte justere timerne, der tænder lyset på grund af skiftende soltimer i forhold til CET. På samme tid, nogle nætter går vi i seng tidligere end andre. På grund af dette slukker lyset nogle gange enten "for sent" eller "for tidligt". Ovenstående udfordrede mig til at tænke: Jeg vil have den dekorative belysning til altid at tænde på samme niveau af omgivende lys og derefter slukke på et bestemt tidspunkt afhængigt af om vi er vågne eller ej.

Objektiv

Denne instruerbare udnytter mulighederne for trådløst kontrollerede enheder som System Nexa, der opererer på 433,92 MHz frekvensen. Heri skal vi vise:

  1. Automatisk belysningskontrol
  2. Webkontrol

Webkontrol. Intern vs ekstern webserver

Den interne server udnytter Arduino Ethernet -skjoldets mulighed for at levere en webserver. Webserveren vil deltage i webklientopkald for at kontrollere og interagere med Arduino. Dette er en ligetil løsning med begrænset funktionalitet; mulighederne for at forbedre webserverkoden er begrænset af Arduino -hukommelsen. Den eksterne server kræver opsætning af en ekstern PHP -webserver. Denne opsætning er mere kompliceret og understøttes ikke af denne vejledning, men PHP -koden/siden til kontrol og styring af Arduino er forsynet med grundlæggende funktionalitet. Mulighederne for at forbedre webserveren er i dette tilfælde begrænset af den eksterne webserver.

Materialeliste

For at drage fuld fordel af de muligheder, denne skitse giver, har du brug for:

  1. En Arduino Uno (testet på R3)
  2. Et Arduino Ethernet -skjold
  3. Et Nexa -sæt eller lignende, der fungerer ved 433,92MHz
  4. En PIR (Passive InfraRed) sensor, der kører ved 433,92 MHz
  5. En 10KOhms modstand
  6. En LDR
  7. En RTC DS3231 (kun ekstern serverversion)
  8. En 433,92MHz sender: XY-FST
  9. En 433,92MHz modtager: MX-JS-05V

Det anbefalede minimum er:

  1. En Arduino Uno (testet på R3)
  2. Et Nexa -sæt eller lignende, der fungerer ved 433,92MHz
  3. En 10KOhms modstand
  4. En LDR
  5. En 433,92MHz sender: XY-FST

(Udeladelsen af Ethernet -skjoldet kræver ændringer af skitsen, der ikke findes i denne instruks)

Nexa Logic. En kort beskrivelse

Nexa -modtageren lærer fjernbetjenings -id'et og knap -id'et. Med andre ord har hver fjernbetjening sit afsendernummer, og hvert par tænd/sluk -knapper har sit knap -id. Modtageren skal lære disse koder. Nogle Nexa -dokumenter angiver, at en modtager kan parres med op til seks fjernbetjeninger. Nexa -parametrene:

  • SenderID: fjernbetjeningens id
  • ButtonID: knappar-nummer (on/off). Det starter med nummer 0
  • Gruppe: ja/nej (også kaldet "Alle slukket/tændt" -knapper)
  • Kommando: tænd/sluk

Instruerbare trin. Bemærk

De forskellige trin beskrevet heri er at tilbyde to forskellige varianter af, hvordan man opnår målet. Vælg gerne den, der passer dig bedst. Her er indekset:

Trin 1: Kredsløbet

Trin #2: Nexardu med intern webserver (med NTP)

Trin #3: Nexardu med ekstern server

Trin 4: Værdifuld information

Trin 1: Kredsløbet …

Kredsløbet…
Kredsløbet…

Led de forskellige komponenter som vist på billedet.

Arduino pin#8 til Data pin på RX (modtager) modulArduino pin#2 til Data pin på RX (modtager) modulArduino pin#7 til Data pin på TX (sender) modulArduino pin A0 til LDR

RTC -konfiguration. Kun nødvendig på den eksterne server konfiguration. Arduino pin A4 til SDA pin på RTC modul Arduino pin A5 til SCL pin på RTC modul

Trin 2: Nexardu med intern webserver (med NTP)

Bibliotekerne

Denne kode gør brug af mange biblioteker. De fleste af dem kan findes gennem "Library Manager" i Arduino IDE. Skulle du ikke finde et listet bibliotek, bedes du google.

Wire.hSPI.h - Påkrævet af Ethernet -skærmNexaCtrl.h - Nexa -enhedscontroller Ethernet.h - Aktivering og funktion af Ethernet -skærmenRCSwitch.h - Påkrævet til PIRTime.h - Påkrævet for RTCTimeAlarms.h - Styring af tidsalarmEthernetUdp.h - Påkrævet for NTP -klient

Skitsen

Koden herunder udnytter muligheden for at bruge Arduino UNO -kortet ikke kun som middel til at styre Nexa -enheder, men det har også en intern webserver. En bemærkning, der skal tilføjes, er, at RTC -modulet (Real Time Clock) automatisk justeres via NTP (Network Time Protocol).

Inden du uploader koden til Arduino, skal du muligvis konfigurere følgende:

  • SenderId: du skal først snuse til SenderId, se nedenfor
  • PIR_id: du skal først snuse til SenderId, se nedenfor
  • LAN IP -adresse: Indstil en IP på dit LAN til dit Ethernet Arduino -skjold. Standardværdi: 192.168.1.99
  • NTP -server: Ikke strengt nødvendigt, men det kan være godt at google efter NTP -servere i din nærhed. Standardværdi: 79.136.86.176
  • Koden er justeret til CET -tidszone. Juster denne værdi -hvis det er nødvendigt, til din tidszone for at vise den korrekte tid (NTP)

Sniffing af Nexa -koderne

Til dette skal du tilslutte -mindst RX -komponenten til Arduino som vist i kredsløbet.

Find nedenfor Nexa_OK_3_RX.ino-skitsen, der i skrivende stund er kompatibel med Nexa-enheder NEYCT-705 og PET-910.

De trin, der skal følges, er:

  1. Par Nexa -modtageren med fjernbetjeningen.
  2. Indlæs Nexa_OK_3_RX.ino på Arduino og åbn "Serial Monitor".
  3. Tryk på fjernbetjeningsknappen, der styrer Nexa -modtageren.
  4. Bemærk "RemoteID" og "ButtonID".
  5. Indstil disse tal under SenderID og ButtonID på variabelerklæringen fra den foregående skitse.

For at læse PIR -id'en skal du bare bruge den samme skitse (Nexa_OK_3_RX.ino) og læse værdien på "Serial Monitor", når PIR registrerer bevægelse.

Trin 3: Nexardu med ekstern server

Bibliotekerne

Denne kode gør brug af mange biblioteker. De fleste af dem kan findes gennem "Library Manager" i Arduino IDE. Hvis du ikke finder et bibliotek på listen, skal du venligst google.

Wire.hRTClib.h - dette er biblioteket fra https://github.com/MrAlvin/RTClibSPI.h - Påkrævet af Ethernet -skærmNexaCtrl.h - Nexa -enhedscontrollerEthernet.h - Aktivering og funktion af Ethernet -skjoldRCSwitch.h - Påkrævet for PIRTime.h - Påkrævet til RTCTimeAlarms.h - Time alarm managementaREST.h - til RESTful API -tjenester udnyttet af ekstern serverair/wdt.h - Watchdog timer -håndtering

Skitsen

Skitsen herunder indeholder en anden smag af det samme, denne gang giver det mulighed for en ekstern webserver. Som allerede nævnt i indledningen kræver den eksterne server opsætning af en ekstern PHP -webserver. Denne opsætning er mere kompliceret og understøttes ikke af denne vejledning, men PHP -koden/siden til kontrol og styring af Arduino er forsynet med grundlæggende funktionalitet.

Inden du uploader koden til Arduino, skal du muligvis konfigurere følgende:

  • SenderId: du skal først snuse til SenderId, se Sniffing af Nexa -koderne på foregående trin
  • PIR_id: du skal først snuse til SenderId, se Sniffing af Nexa -koderne på foregående trin
  • LAN IP -adresse: indstil en IP på dit LAN til dit Ethernet Arduino -skjold. Standardværdi: 192.168.1.99

For proceduren for Nexa -kode -sniffning henvises til trin 1.

Supplerende fil

Upload den vedhæftede nexardu4.txt -fil til din eksterne PHP -server, og omdøb den til nexardu4.php

RTC -tid indstillet

For at indstille tid/dato på RTC bruger jeg sketch SetTime, der samler bibliotek DS1307RTC.

Trin 4: Værdifuld information

Værdifuld information
Værdifuld information
Værdifuld information
Værdifuld information

Godt at kende adfærd

  1. Når Arduino er under "Light Automatic Control", kan den gå igennem fire forskellige tilstande i forhold til den omgivende belysning og tidspunktet på dagen:

    1. Vågent: Arduino venter på, at natten skal komme.
    2. Aktiv: Natten er kommet, og Arduino har tændt lyset.
    3. Somnolent: Lysene er tændt, men tiden til at slukke dem kommer. Det starter ved "time_to_turn_off - PIR_time" det vil sige, hvis time_to_turn_off er indstillet til 22:30 og PIR_time indstillet til 20 minutter, så går Arduino ind i den somnolente tilstand klokken 22:10.
    4. Hvilende: Natten går forbi, Arduino har slukket lyset, og Arduino venter på, at daggryet bliver vågen.
  2. Arduino lytter altid til de signaler, der sendes af fjernbetjeninger. Dette giver mulighed for at vise lysets tilstand (tænd/sluk) på nettet, når der bruges fjernbetjening.
  3. Mens Arduino er vågen forsøger den at slukke lyset hele tiden, derfor kan ON -signaler sendt af en fjernbetjening til at tænde lysene blive fanget af Arduino. Skulle dette ske, vil Arduino forsøge at slukke lyset igen.
  4. Mens Arduino er aktiv, forsøger den at tænde lyset hele tiden, derfor kan OFF -signaler sendt af en fjernbetjening for at slukke lyset blive fanget af Arduino. Skulle dette ske, vil Arduino forsøge at tænde lyset igen.
  5. I somnolent tilstand kan lysene tændes/slukkes med en fjernbetjening. Arduino'en vil ikke modvirke.
  6. I den somnolente tilstand vil PIR -nedtællingen begynde at nulstille fra "time_to_turn_off - PIR_time", og derfor bliver time_to_turn_off forlænget med 20 minutter hver gang PIR registrerer bevægelse. Et "PIR -signal registreret!" meddelelse vises i webbrowseren, når dette sker.
  7. Mens Arduino er i dvale, kan lys tændes og slukkes via fjernbetjeningen. Arduino'en vil ikke modvirke.
  8. En nulstilling eller strømcyklus for Arduino vil bringe den til aktiv tilstand. Det betyder, at hvis Arduino er blevet nulstillet efter time_turn_off, vil Arduino tænde lyset. For at undgå dette skal Arduino bringes i manuel tilstand (afkrydsningsfeltet "Lys automatisk kontrol") og vente til morgenen for at få den tilbage til "Lys automatisk kontrol".
  9. Som førnævnt venter Arduino på, at daggryet bliver aktivt igen. På grund af dette kan systemet blive narret ved at rette et stærkt nok lys mod lyssensoren, der skal overstige tærsklen for "minimal lysstyrke". Skulle dette ske, skal Arduino skifte til aktiv tilstand.
  10. Toleranceværdien er af stor betydning for at undgå, at systemet slår og slukker omkring tærskelværdien Minimum Luminosity. LED -lys kan på grund af deres flimring og deres høje lydhørhed være en kilde til flappende adfærd. Forøg toleranceværdien, hvis du oplever dette problem. Jeg bruger værdi 7.

Godt at vide om koden

  1. Som du kan bemærke, er koden meget stor og gør brug af en betydelig mængde biblioteker. Dette kompromitterer mængden af ledig hukommelse, der er nødvendig for bunken. Jeg har tidligere bemærket ustabil adfærd, da systemet blev standset, især efter webopkald. Derfor har den største udfordring jeg har haft været at begrænse dens størrelse og brugen af forskellige variabler for at gøre systemet stabilt.
  2. Koden, der udnytter den interne server -brugt af mig derhjemme, har kørt nu siden februar 2016 problemfrit.
  3. Jeg har gjort en stor indsats for at berige koden med forklaringer. Udnyt dette til at spille med forskellige parametre som antal Nexa -kodesendelser pr. Burst, NTP -synkroniseringstid osv.
  4. Koden indeholder ikke sommertid. Dette skal justeres via webbrowseren, når det gælder.

Nogle punkter at overveje

  1. Tilføj antennerne til TX- og RX -radiofrekvensmodulerne (RF). Det vil spare dig tid for at klage over to hovedpunkter: modstandsdygtighed og rækkevidde af RF -signalet. Jeg bruger en 50Ohms wire 17,28cm (6,80in) lang.
  2. Denne uforgængelige fungerer muligvis også med andre hjemmeautomatiseringssystemer, f.eks. Proove. En af de mange betingelser, der skal opfyldes, er at få dem til at fungere på 433,92 MHz frekvensen.
  3. En stor hovedpine med Arduino er at håndtere biblioteker, der kan blive opdateret over tid og pludselig ikke er kompatible med din "gamle" sketch igen; det samme problem kan rejse sig, når du opgraderer din Arduino IDE. Pas på, at dette kunne være vores sag her -ja, også mit problem.
  4. Flere samtidige webklienter med forskellige lysindstillinger skaber en "blinkende" tilstand.

Skærmbillede

I billedkarrusellen ovenfor finder du et skærmbillede af websiden, der vises, når du ringer til Arduino gennem din webbrowser. I betragtning af kodens standard -IP -konfiguration ville URL'en være

Et aspekt, der kan blive forbedret, er placeringen af "send" -knappen, da den får virkning på alle inputbokse og ikke kun på "Light Automatic Control", som man måske tror. Med andre ord, hvis du gerne vil ændre nogen af de mulige værdier, skal du altid trykke på "send" -knappen.

Detaljeret/avanceret dokumentation

Jeg har vedhæftet følgende filer, så de kan hjælpe dig med at forstå hele løsningen, specielt til fejlfinding og forbedring.

Arduino_NexaControl_IS.pdf giver dokumentation om Internal Server -løsningen.

Arduino_NexaControl_ES.pdf giver dokumentation om den eksterne server -løsning.

Eksterne referencer

Nexa System (svensk)

Trin 5: Færdig

Færdig!
Færdig!

Der har du det hele færdigt og i aktion!

Arduino Uno-sagen kan findes i Thingiverse som "Arduino Uno Rev3 with Ethernet Shield XL-case".

Anbefalede: