Innehållsförteckning:

NexArdu: Illumination Smart Control: 5 steg
NexArdu: Illumination Smart Control: 5 steg

Video: NexArdu: Illumination Smart Control: 5 steg

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

Uppdatering

Om har utvecklat samma funktionalitet med Home Assistant. Home Assistant erbjuder ett stort utbud av möjligheter. Du hittar utvecklingen här.

En skiss för att styra hemmabelysning på ett smart sätt via 433,92MHz (aka 433MHz) trådlösa X10-liknande enheter, t.ex. Nexa.

Bakgrund

När det gäller dekorativ belysning har det på något sätt varit tröttsamt för mig att jag varannan eller var tredje vecka var tvungen att justera tidtagarna som tänder lamporna på grund av förskjutning av soltimmarna med avseende på CET. Samtidigt, vissa nätter går vi och lägger oss tidigare än andra. På grund av detta släcks ibland lamporna antingen "för sent" eller "för tidigt". Ovanstående utmanade mig att tänka: Jag vill att den dekorativa belysningen alltid ska slås på på samma nivå av omgivande ljus och sedan stängas av vid en viss tid beroende på om vi är vakna eller inte.

Mål

Detta instruerbara utnyttjar möjligheterna för trådlösa kontrollerade enheter som System Nexa som arbetar på 433,92 MHz frekvensen. Här kommer vi att presentera:

  1. Automatisk belysningskontroll
  2. Webbkontroll

Webbkontroll. Intern vs extern webbserver

Den interna servern utnyttjar Arduino Ethernet -sköldens möjlighet att tillhandahålla en webbserver. Webbservern kommer att delta i webbklientens samtal för att kontrollera och interagera med Arduino. Detta är en enkel lösning med begränsad funktionalitet. möjligheterna att förbättra webbserverkoden begränsas av Arduino -minnet. Den externa servern kräver installation av en extern PHP -webbserver. Denna installation är mer komplicerad och stöds inte av denna handledning, men PHP -koden/sidan för att kontrollera och styra Arduino har grundläggande funktionalitet. Möjligheterna att förbättra webbservern är i detta fall begränsade av den externa webbservern.

Materialförteckning

För att dra full nytta av de möjligheter som denna skiss ger behöver du:

  1. En Arduino Uno (testad på R3)
  2. En Arduino Ethernet -sköld
  3. En Nexa -uppsättning eller liknande som arbetar med 433,92 MHz
  4. En PIR -sensor (Passive InfraRed) som arbetar vid 433,92 MHz
  5. Ett 10KOhms -motstånd
  6. En LDR
  7. En RTC DS3231 (endast extern serverversion)
  8. En 433,92 MHz sändare: XY-FST
  9. En mottagare på 433,92 MHz: MX-JS-05V

Minsta rekommenderade är:

  1. En Arduino Uno (testad på R3)
  2. En Nexa -uppsättning eller liknande som arbetar med 433,92 MHz
  3. Ett 10KOhms -motstånd
  4. En LDR
  5. En 433,92 MHz sändare: XY-FST

(Utelämnandet av Ethernet -skärmen kräver ändringar av skissen som inte tillhandahålls i denna instruerbara)

Nexa Logic. En kort beskrivning

Nexa -mottagaren lär sig fjärrkontrollens ID och knapp -ID. Med andra ord har varje fjärrkontroll sitt avsändarnummer och varje par på/av -knappar har sitt knapp -ID. Mottagaren måste lära sig dessa koder. Vissa Nexa -dokument anger att en mottagare kan kopplas ihop med upp till sex fjärrkontroller. Nexa -parametrarna:

  • SenderID: fjärrkontrollens ID
  • ButtonID: knapppar-nummer (på/av). Det börjar med nummer 0
  • Grupp: ja/nej (aka "Alla av/på" -knappar)
  • Kommando: på/av

Instruerbara steg. Notera

De olika stegen som beskrivs här är att erbjuda två olika smaker om hur man uppnår målet. Välj den som passar dig bäst. Här är indexet:

Steg 1: Kretsen

Steg #2: Nexardu med intern webbserver (med NTP)

Steg 3: Nexardu med extern server

Steg #4: Värdefull information

Steg 1: Kretsen …

Kretsen …
Kretsen …

Anslut de olika komponenterna som visas på bilden.

Arduino pin#8 till Data pin on RX (receiver) module Arduino pin#2 to Data pin on RX (receiver) module Arduino pin#7 to Data pin on TX (sender) module Arduino pin A0 to LDR

RTC -konfiguration. Behövs endast på konfigurationen för extern server. Arduino -stift A4 till SDA -stift på RTC -modul Arduino -stift A5 till SCL -stift på RTC -modul

Steg 2: Nexardu med intern webbserver (med NTP)

Biblioteken

Denna kod använder många bibliotek. De flesta av dem kan hittas genom "Library Manager" för Arduino IDE. Skulle du inte hitta ett listat bibliotek, vänligen googla.

Wire.hSPI.h - Krävs av Ethernet -skärmNexaCtrl.h - Nexa -enhetskontroller Ethernet.h - För att aktivera och använda Ethernet -skärmenRCSwitch.h - Krävs för PIRTime.h - Krävs för RTCTimeAlarms.h - TidslarmhanteringEthernetUdp.h - Krävs för NTP -klient

Skissen

Koden nedan utnyttjar möjligheten att använda Arduino UNO -kortet inte bara som medel för att styra Nexa -enheter utan har också en intern webbserver. En anmärkning att lägga till är att RTC -modulen (Real Time Clock) automatiskt justeras via NTP (Network Time Protocol).

Innan du laddar upp koden till Arduino kan du behöva konfigurera följande:

  • SenderId: du måste sniffa SenderId först, se nedan
  • PIR_id: du måste sniffa på SenderId först, se nedan
  • LAN IP -adress: ange en IP för ditt LAN till din Ethernet Arduino -skärm. Standardvärde: 192.168.1.99
  • NTP -server: Inte absolut nödvändigt men det kan vara bra att googla efter NTP -servrar i din närhet. Standardvärde: 79.136.86.176
  • Koden justeras för CET -tidszon. Justera detta värde -om det behövs, till din tidszon för att visa rätt tid (NTP)

Snusning av Nexa -koder

För detta måste du kabela åtminstone RX -komponenten till Arduino som visas i kretsen.

Hitta nedan Nexa_OK_3_RX.ino-skissen som i skrivande stund är kompatibel med Nexa-enheter NEYCT-705 och PET-910.

Stegen att följa är:

  1. Koppla ihop Nexa -mottagaren med fjärrkontrollen.
  2. Ladda Nexa_OK_3_RX.ino på Arduino och öppna "Serial Monitor".
  3. Tryck på fjärrkontrollknappen som styr Nexa -mottagaren.
  4. Observera "RemoteID" och "ButtonID".
  5. Ställ in dessa nummer under SenderID och ButtonID på variabeldeklarationen för föregående skiss.

För att läsa ID för PIR, använd bara samma skiss (Nexa_OK_3_RX.ino) och läs värdet på "Serial Monitor" när PIR detekterar rörelse.

Steg 3: Nexardu med extern server

Biblioteken

Denna kod använder många bibliotek. De flesta av dem kan hittas genom "Library Manager" för Arduino IDE. Om du inte hittar ett listat bibliotek, vänligen googla.

Wire.hRTClib.h - detta är biblioteket från https://github.com/MrAlvin/RTClibSPI.h - Krävs av Ethernet -skärmNexaCtrl.h - Nexa -enhetskontrollerEthernet.h - För att aktivera och använda Ethernet -sköldRCSwitch.h - Krävs för PIRTime.h - Krävs för RTCTimeAlarms.h - Time alarm managementaREST.h - för RESTful API -tjänster som utnyttjas av extern serverair/wdt.h - Watchdog timerhantering

Skissen

Skissen nedan har en annan smak av samma sak, den här gången ger de möjligheter som en extern webbserver kan ge. Som redan nämnts i inledningen kräver The External Server installationen av en extern PHP -webbserver. Denna installation är mer komplicerad och stöds inte av denna handledning, men PHP -koden/sidan för att kontrollera och styra Arduino har grundläggande funktionalitet.

Innan du laddar upp koden till Arduino kan du behöva konfigurera följande:

  • SenderId: du måste sniffa SenderId först, se Sniffa Nexa -koder i föregående steg
  • PIR_id: du måste sniffa SenderId först, se Sniffa Nexa -koder i föregående steg
  • LAN IP -adress: ange en IP för ditt LAN till din Ethernet Arduino -skärm. Standardvärde: 192.168.1.99

För proceduren för att snusa med Nexa -kod, se steg 1.

Kompletterande fil

Ladda upp den bifogade nexardu4.txt -filen till din externa PHP -server och byt namn på den till nexardu4.php

RTC -tid inställd

För att ställa in tid/datum på RTC använder jag skiss SetTime som samlar biblioteket DS1307RTC.

Steg 4: Värdefull information

Värdefull information
Värdefull information
Värdefull information
Värdefull information

Bra att veta beteende

  1. När Arduino är under "Light Automatic Control" kan den gå igenom fyra olika tillstånd i förhållande till den omgivande belysningen och tiden på dagen:

    1. Vaket: Arduino väntar på att natten ska komma.
    2. Aktiv: Natten har kommit och Arduino har tänt lamporna.
    3. Somnolent: Ljusen är TÄNDA men det är dags att stänga av dem. Det börjar vid "time_to_turn_off - PIR_time", det vill säga om time_to_turn_off är inställt på 22:30 och PIR_time inställt på 20 minuter, kommer Arduino att gå i somnolent tillstånd vid 22:10.
    4. Vilande: Natten går, Arduino har släckt lamporna och Arduino väntar på att gryningen ska bli vaken.
  2. Arduino lyssnar alltid på signalerna som skickas med fjärrkontroller. Detta har möjlighet att visa status för lamporna (på/av) på webben när fjärrkontroll används.
  3. Medan Arduino är vaken försöker den stänga av lamporna hela tiden, därför kan ON -signaler som skickas av en fjärrkontroll för att slå på lamporna fångas upp av Arduino. Skulle detta hända ska Arduino försöka släcka lamporna igen.
  4. Medan Arduino är aktiv försöker den tända lamporna hela tiden, därför kan OFF -signaler som skickas av en fjärrkontroll för att stänga av lamporna fångas upp av Arduino. Skulle detta hända ska Arduino försöka tända lamporna igen.
  5. I somnolent tillstånd kan lamporna slås på/av med en fjärrkontroll. Arduino kommer inte att motverka.
  6. I somnolent tillstånd börjar PIR -nedräkningen att återställas från "time_to_turn_off - PIR_time" och så blir time_to_turn_off förlängd med 20 minuter varje gång PIR detekterar rörelse. En "PIR -signal upptäckt!" meddelande visas i webbläsaren när detta händer.
  7. Medan Arduino är vilande kan lampor slås på och av via fjärrkontrollen. Arduino kommer inte att motverka.
  8. En återställning eller strömcykel för Arduino tar den till aktivt läge. Det betyder att om Arduino har återställts efter time_turn_off kommer Arduino att tända lamporna. För att undvika detta måste Arduino sättas i manuellt läge (avmarkera "Light Automatic Control") och vänta till morgonen för att få tillbaka den till "Light Automatic Control".
  9. Som tidigare nämnt väntar Arduino på att gryningen ska bli aktiv igen. På grund av detta kan systemet luras genom att rikta ett tillräckligt starkt ljus mot ljussensorn som ska överstiga tröskeln för "minsta ljusstyrka". Skulle detta hända ska Arduino byta till aktivt tillstånd.
  10. Toleransvärdet är av stor vikt för att undvika att systemet flaxar till och från runt tröskelvärdet Minsta ljusstyrka. LED -lampor, på grund av deras flimmer och deras höga lyhördhet, kan vara en källa till flaxande beteende. Öka toleransvärdet om du upplever detta problem. Jag använder värde 7.

Bra att veta om koden

  1. Som du kan märka är koden mycket stor och använder en stor mängd bibliotek. Detta äventyrar mängden ledigt minne som krävs för högen. Jag har tidigare märkt ett instabilt beteende där systemet stannade, särskilt efter webbsamtal. Därför har den största utmaningen jag haft varit att begränsa dess storlek och användningen av olika variabler för att göra systemet stabilt.
  2. Koden som utnyttjar den interna servern -används av mig hemma, har körts nu sedan februari 2016 problemfritt.
  3. Jag har gjort stora ansträngningar för att berika koden med förklaringar. Dra nytta av detta för att spela med olika parametrar som antal Nexa -kodsändningar per burst, NTP -synkroniseringstid etc.
  4. Koden innehåller inte sommartid. Detta måste justeras via webbläsaren när det gäller.

Några punkter att tänka på

  1. Lägg till antennerna i TX- och RX -radiofrekvensmodulerna (RF). Det kommer att spara dig tid att klaga på två huvudpunkter: motståndskraft och räckvidd för RF -signalen. Jag använder en 50Ohms tråd 17,28 cm (6,80 tum) lång.
  2. Det här kan inte fungera med andra hemautomatiseringssystem, till exempel Proove. En av de många villkoren att uppfylla är att få dem att fungera på 433,92 MHz frekvensen.
  3. En stor huvudvärk med Arduino är att hantera bibliotek som kan bli uppdaterade med tiden och plötsligt inte är kompatibla med din "gamla" skiss; samma problem kan uppstå när du uppgraderar din Arduino IDE. Akta dig för att detta kan vara vårt fall här -ja, mitt problem också.
  4. Flera samtidiga webbklienter med olika ljuslägen skapar ett "blinkande" tillstånd.

Skärmdump

I bildkarusellen ovan hittar du en skärmdump av webbsidan som visas när du ringer Arduino genom din webbläsare. Med tanke på kodens standard -IP -konfiguration skulle URL: en vara

En aspekt som kan förbättras är placeringen av "skicka" -knappen eftersom den träder i kraft på alla inmatningsrutor och inte bara på "Ljusautomatisk kontroll" som man kanske tror. Med andra ord, om du vill ändra något av de möjliga värdena måste du alltid trycka på "skicka" -knappen.

Detaljerad/avancerad dokumentation

Jag har bifogat följande filer så att de kan hjälpa dig att förstå hela lösningen, speciellt för felsökning och förbättring.

Arduino_NexaControl_IS.pdf tillhandahåller dokumentation om Internal Server -lösningen.

Arduino_NexaControl_ES.pdf tillhandahåller dokumentation om lösningen för extern server.

Externa referenser

Nexa System (svenska)

Steg 5: Avslutad

Färdiga!
Färdiga!

Där har du allt klart och i gång!

Arduino Uno-fodralet finns i Thingiverse som "Arduino Uno Rev3 with Ethernet Shield XL-case".

Rekommenderad: