Inhoudsopgave:

NexArdu: slimme bediening voor verlichting - Ajarnpa
NexArdu: slimme bediening voor verlichting - Ajarnpa

Video: NexArdu: slimme bediening voor verlichting - Ajarnpa

Video: NexArdu: slimme bediening voor verlichting - Ajarnpa
Video: Séance ordinaire - 5 juillet 2021 2024, November
Anonim
NexArdu: slimme bediening voor verlichting
NexArdu: slimme bediening voor verlichting

Update

Als je dezelfde functionaliteit hebt ontwikkeld met Home Assistant. Home Assistant biedt een enorm scala aan mogelijkheden. De ontwikkeling vind je hier.

Een schets om de verlichting in huis op een slimme manier te regelen via 433,92 MHz (ook bekend als 433 MHz) draadloze X10-achtige apparaten, b.v. Nexa.

Achtergrond

Als het gaat om decoratieve verlichting, vond ik het op de een of andere manier vermoeiend dat ik elke tweede of derde week de timers moest aanpassen die de lichten aanzetten vanwege de verschuiving van het zonne-uur ten opzichte van de CET. sommige avonden gaan we eerder naar bed dan andere. Hierdoor gaan de lichten soms "te laat" of "te vroeg" uit. Het bovenstaande daagde me uit om na te denken: ik wil dat de decoratieve verlichting altijd op hetzelfde niveau van omgevingslicht inschakelt en vervolgens op een bepaald tijdstip uitschakelt, afhankelijk van of we wakker zijn of niet.

Doelstelling

Deze instructable maakt gebruik van de mogelijkheden van draadloos bestuurde apparaten zoals System Nexa die op de 433,92MHz-frequentie werken. Hierin moeten we voorzien:

  1. Geautomatiseerde verlichtingsregeling
  2. Webcontrole

Webcontrole. Interne versus externe webserver

De interne server maakt gebruik van de mogelijkheid van het Arduino Ethernet-schild om een webserver te leveren. De webserver zal de oproepen van de webclient bijwonen om de Arduino te controleren en ermee te werken. Dit is een ongecompliceerde oplossing met beperkte functionaliteit; de mogelijkheden om de webservercode te verbeteren worden beperkt door het geheugen van de Arduino. De externe server vereist de installatie van een externe PHP-webserver. Deze setup is ingewikkelder en wordt niet ondersteund door deze tutorial, maar de PHP-code/pagina om de Arduino te controleren en te sturen is voorzien van basisfunctionaliteit. De mogelijkheden om de webserver uit te breiden worden in dit geval beperkt door de externe webserver.

Stuklijst

Om optimaal gebruik te maken van de mogelijkheden die deze schets biedt, heb je nodig:

  1. Een Arduino Uno (getest op R3)
  2. Een Arduino Ethernet-schild
  3. Een Nexa-set of vergelijkbaar werkend op 433,92 MHz
  4. Een PIR-sensor (passief infrarood) die werkt op 433,92 MHz
  5. Een weerstand van 10 KOhm
  6. een LDR
  7. Een RTC DS3231 (alleen externe serverversie)
  8. Een zender van 433,92 MHz: XY-FST
  9. Een 433,92 MHz ontvanger: MX-JS-05V

Het aanbevolen minimum is:

  1. Een Arduino Uno (getest op R3)
  2. Een Nexa-set of vergelijkbaar werkend op 433,92 MHz
  3. Een weerstand van 10 KOhm
  4. een LDR
  5. Een zender van 433,92 MHz: XY-FST

(Het weglaten van het Ethernet-schild vereist wijzigingen van de schets die niet in deze instructable is opgenomen)

De Nexa-logica. Een korte beschrijving

De Nexa-ontvanger leert de ID van de afstandsbediening en de knop-ID. Met andere woorden, elke afstandsbediening heeft zijn afzendernummer en elk paar aan/uit-knoppen heeft zijn knop-ID. De ontvanger moet die codes leren. In sommige Nexa-documenten staat dat een ontvanger met maximaal zes afstandsbedieningen kan worden gekoppeld. De Nexa-parameters:

  • SenderID: ID van de afstandsbediening
  • ButtonID: knoppaarnummer (aan/uit). Het begint met nummer 0
  • Groep: ja/nee (ook bekend als "Alle uit/aan"-knoppen)
  • Commando: aan/uit

Instrueerbare stappen. Opmerking

De verschillende stappen die hierin worden beschreven, zijn om twee verschillende smaken aan te bieden om het doel te bereiken. Voel je vrij om degene te kiezen die op jouw gemak is. Hier is de index:

Stap #1: Het circuit

Stap #2: Nexardu met interne webserver (met NTP)

Stap 3: Nexardu met externe server

Stap #4: Waardevolle informatie

Stap 1: Het circuit…

Het circuit…
Het circuit…

Bedraad de diverse componenten zoals op de afbeelding.

Arduino pin#8 naar data pin op RX (ontvanger) moduleArduino pin#2 naar data pin op RX (ontvanger) moduleArduino pin#7 naar data pin op TX (zender) moduleArduino pin A0 naar LDR

RTC-configuratie. Alleen nodig op de externe serverconfiguratie. Arduino-pin A4 naar SDA-pin op RTC-module Arduino-pin A5 naar SCL-pin op RTC-module

Stap 2: Nexardu met interne webserver (met NTP)

de bibliotheken

Deze code maakt gebruik van veel bibliotheken. De meeste zijn te vinden via de "Library Manager" van de Arduino IDE. Mocht u geen beursgenoteerde bibliotheek vinden, google dan alstublieft.

Wire.hSPI.h - Vereist door Ethernet-shieldNexaCtrl.h - Nexa-apparaatcontroller Ethernet.h - Om de Ethernet-shieldRCSwitch.h in en uit te schakelen - Vereist voor PIRTime.h - Vereist voor RTCTimeAlarms.h - TijdalarmbeheerEthernetUdp.h - Vereist voor NTP-client

de schets

De onderstaande code maakt gebruik van de mogelijkheid om het Arduino UNO-bord niet alleen te gebruiken als middel om Nexa-apparaten te besturen, maar het beschikt ook over een interne webserver. Een opmerking om toe te voegen is dat de RTC (Real Time Clock) module automatisch wordt aangepast via NTP (Network Time Protocol).

Voordat u de code naar de Arduino uploadt, moet u mogelijk het volgende configureren:

  • SenderId: je moet eerst de SenderId ruiken, zie hieronder
  • PIR_id: je moet eerst de SenderId ruiken, zie hieronder
  • LAN IP-adres: stel een IP van uw LAN in op uw Ethernet Arduino-schild. Standaardwaarde: 192.168.1.99
  • NTP-server: niet strikt noodzakelijk, maar het kan goed zijn om te googlen naar NTP-servers in uw buurt. Standaardwaarde: 79.136.86.176
  • De code is aangepast voor CET-tijdzone. Pas deze waarde -indien nodig, aan uw tijdzone aan om de juiste tijd weer te geven (NTP)

De Nexa-codes opsnuiven

Hiervoor moet je - tenminste, de RX-component op de Arduino aansluiten zoals weergegeven in het circuit.

Hieronder vindt u de Nexa_OK_3_RX.ino-schets die op het moment van schrijven compatibel is met Nexa-apparaten NEYCT-705 en PET-910.

De te volgen stappen zijn:

  1. Koppel de Nexa-ontvanger met de afstandsbediening.
  2. Laad Nexa_OK_3_RX.ino op de Arduino en open de "Serial Monitor".
  3. Druk op de afstandsbedieningsknop die de Nexa-ontvanger bedient.
  4. Let op de "RemoteID" en "ButtonID".
  5. Stel deze nummers in onder SenderID en ButtonID op de variabele declaratie van de vorige schets.

Om de Id van de PIR te lezen, gebruikt u gewoon dezelfde schets (Nexa_OK_3_RX.ino) en leest u de waarde op de "Seriële Monitor" wanneer de PIR beweging detecteert.

Stap 3: Nexardu met externe server

de bibliotheken

Deze code maakt gebruik van veel bibliotheken. De meeste zijn te vinden via de "Library Manager" van de Arduino IDE. Als u een vermelde bibliotheek niet kunt vinden, kunt u googlen.

Wire.hRTClib.h - dit is de bibliotheek van https://github.com/MrAlvin/RTClibSPI.h - Vereist door Ethernet-shieldNexaCtrl.h - Nexa-apparaatcontrollerEthernet.h - Om de Ethernet-shieldRCSwitch.h in te schakelen en uit te voeren - Vereist voor PIRTime.h - Vereist voor RTCTimeAlarms.h - Beheer van tijdalarmaREST.h - voor REST-API-services die worden geëxploiteerd door externe serverair/wdt.h - Waakhond-timerafhandeling

de schets

De onderstaande schets bevat een andere smaak van hetzelfde, dit keer met de mogelijkheden die een externe webserver kan bieden. Zoals reeds vermeld in de inleiding, vereist The External Server het opzetten van een externe PHP-webserver. Deze setup is ingewikkelder en wordt niet ondersteund door deze tutorial, maar de PHP-code/pagina om de Arduino te controleren en te sturen is voorzien van basisfunctionaliteit.

Voordat u de code naar de Arduino uploadt, moet u mogelijk het volgende configureren:

  • SenderId: u moet eerst de SenderId ruiken, zie De Nexa-codes opsnuiven in de vorige stap
  • PIR_id: je moet eerst de SenderId ruiken, zie De Nexa-codes snuiven in de vorige stap
  • LAN IP-adres: stel een IP van uw LAN in op uw Ethernet Arduino-schild. Standaardwaarde: 192.168.1.99

Raadpleeg stap #1 voor de procedure voor het snuiven van de Nexa-code.

Aanvullend bestand

Upload het bijgevoegde nexardu4.txt-bestand naar uw externe PHP-server en hernoem het naar nexardu4.php

RTC-tijd ingesteld

Om de tijd/datum op de RTC in te stellen, gebruik ik schets SetTime die samenkomt met bibliotheek DS1307RTC.

Stap 4: Waardevolle informatie

Waardevolle informatie
Waardevolle informatie
Waardevolle informatie
Waardevolle informatie

Goed om te weten gedrag

  1. Wanneer Arduino onder "Light Automatic Control" staat, kan het door vier verschillende toestanden gaan met betrekking tot de omgevingsverlichting en het tijdstip van de dag:

    1. Wakker: Arduino wacht op de nacht die komt.
    2. Actief: de nacht is aangebroken en Arduino heeft de lichten AAN gezet.
    3. Somnolent: De lichten zijn AAN, maar de tijd om ze uit te doen komt eraan. Het begint bij "time_to_turn_off - PIR_time", dat wil zeggen, als time_to_turn_off is ingesteld op 22:30 en PIR_time is ingesteld op 20 minuten, dan zal de Arduino om 22:10 in de slaperige toestand gaan.
    4. Slapen: de nacht gaat voorbij, Arduino heeft de lichten UITGESCHAKELD en Arduino wacht tot de dageraad wakker wordt.
  2. Arduino luistert altijd naar de signalen die door afstandsbedieningen worden verzonden. Dit biedt de mogelijkheid om de status van de lichten (aan/uit) op het web te tonen wanneer de afstandsbediening wordt gebruikt.
  3. Terwijl Arduino wakker is, probeert het de lichten de hele tijd UIT te krijgen, daarom kunnen AAN-signalen die door een remonte-besturing worden verzonden om de lichten in te schakelen, door Arduino worden opgevangen. Mocht dit gebeuren, dan zal de Arduino proberen de lichten weer uit te doen.
  4. Terwijl Arduino actief is, probeert het de lichten de hele tijd AAN te krijgen, daarom kunnen UIT-signalen die door een afstandsbediening worden verzonden om de lichten uit te schakelen, door Arduino worden vastgelegd. Mocht dit gebeuren, dan zal de Arduino proberen de lichten weer aan te zetten.
  5. In de slaperige toestand kunnen de lichten met een afstandsbediening aan/uit worden gezet. De Arduino zal niet tegenwerken.
  6. In de slaperige toestand begint het aftellen van de PIR te resetten vanaf "time_to_turn_off - PIR_time" en dus wordt de time_to_turn_off met 20 minuten verlengd elke keer dat de PIR beweging detecteert. Een "PIR-signaal gedetecteerd!" bericht wordt weergegeven in de webbrowser wanneer dit gebeurt.
  7. Terwijl Arduino slapend is, kunnen de lichten via de afstandsbediening worden in- en uitgeschakeld. De Arduino zal niet tegenwerken.
  8. Een reset of power cycle van de Arduino brengt hem in de actieve modus. Dit betekent dat als de Arduino is gereset na de time_turn_off, Arduino de lichten zal inschakelen. Om dit te voorkomen moet de Arduino in de handmatige modus worden gezet (vink "Light Automatic Control" aan) en wachten tot de ochtend om hem weer in "Light Automatic Control" te krijgen.
  9. Zoals eerder vermeld, wacht Arduino tot de dageraad weer actief wordt. Hierdoor kan het systeem voor de gek worden gehouden door een sterk genoeg licht op de lichtsensor te richten die de "minimale lichtsterkte"-drempel moet overschrijden. Mocht dit gebeuren, dan moet Arduino overschakelen naar de actieve status.
  10. De tolerantiewaarde is van groot belang om te voorkomen dat het systeem rond de drempelwaarde Minimum Luminosity aan en uit klapt. Ledlampen kunnen door hun flikkering en hun hoge reactievermogen een bron van klappergedrag zijn. Verhoog de tolerantiewaarde als u dit probleem ondervindt. Ik gebruik waarde 7.

Goed om te weten over de code

  1. Zoals u kunt zien, is de code erg groot en maakt gebruik van een aanzienlijk aantal bibliotheken. Dit compromitteert de hoeveelheid vrij geheugen die nodig is voor de heap. Ik heb in het verleden onstabiel gedrag opgemerkt waarbij het systeem werd stopgezet, vooral na weboproepen. Daarom was de grootste uitdaging die ik heb gehad om de grootte en het gebruik van verschillende variabelen te beperken om het systeem stabiel te maken.
  2. De code die misbruik maakt van de interne server die ik thuis gebruik, draait nu sinds februari 2016 probleemloos.
  3. Ik heb veel energie gestoken in het verrijken van de code met uitleg. Profiteer hiervan om met verschillende parameters te spelen, zoals het aantal Nexa-codeverzendingen per burst, NTP-synchronisatietijd, enz.
  4. De code heeft geen zomertijd. Dit moet worden aangepast via de webbrowser wanneer dit van toepassing is.

Enkele punten om te overwegen

  1. Voeg de antennes toe aan de TX en RX radiofrequentie (RF) modules. Het bespaart u tijd door te klagen over twee hoofdpunten: veerkracht en bereik van het RF-signaal. Ik gebruik een draad van 50 Ohm met een lengte van 17,28 cm (6,80 inch).
  2. Deze intructable kan ook werken met andere domotica-systemen zoals Proove, bijvoorbeeld. Een van de vele voorwaarden waaraan moet worden voldaan, is dat ze op de 433,92 MHz-frequentie moeten werken.
  3. Een grote hoofdpijn met Arduino is om te gaan met bibliotheken die in de loop van de tijd kunnen worden bijgewerkt en plotseling niet meer compatibel zijn met je "oude" schets; hetzelfde probleem kan optreden bij het upgraden van uw Arduino IDE. Pas op dat dit ons geval hier zou kunnen zijn - ja, mijn probleem ook.
  4. Meerdere gelijktijdige webclients met verschillende lichtmodi creëren een "knipperende" status.

Schermafbeelding

In de afbeeldingscarrousel hierboven vindt u een screenshot van de webpagina die wordt weergegeven wanneer u de Arduino oproept via uw webbrowser. Gezien de standaard IP-configuratie van de code, zou de URL https://192.168.1.99 zijn

Een aspect dat voor verbetering vatbaar is, is de positionering van de "submit"-knop, aangezien deze effect heeft op alle invoervakken en niet alleen op de "Light Automatic Control" zoals men zou denken. Met andere woorden, als u een van de mogelijke waarden wilt wijzigen, moet u altijd op de knop "verzenden" drukken.

Gedetailleerde/geavanceerde documentatie

Ik heb de volgende bestanden bijgevoegd zodat ze u kunnen helpen de hele oplossing te begrijpen, speciaal voor probleemoplossing en verbetering.

Arduino_NexaControl_IS.pdf biedt documentatie over de Internal Server-oplossing.

Arduino_NexaControl_ES.pdf biedt documentatie over de External Server-oplossing.

Externe referenties

Nexa-systeem (Zweeds)

Stap 5: Klaar

Afgewerkt!
Afgewerkt!

Daar heb je het allemaal klaar en in actie!

De Arduino Uno-behuizing is in Thingiverse te vinden als "Arduino Uno Rev3 with Ethernet Shield XL-case".

Aanbevolen: