Inhoudsopgave:
- Stap 1: Het circuit…
- Stap 2: Nexardu met interne webserver (met NTP)
- Stap 3: Nexardu met externe server
- Stap 4: Waardevolle informatie
- Stap 5: Klaar
Video: NexArdu: slimme bediening voor verlichting - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
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:
- Geautomatiseerde verlichtingsregeling
- 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:
- Een Arduino Uno (getest op R3)
- Een Arduino Ethernet-schild
- Een Nexa-set of vergelijkbaar werkend op 433,92 MHz
- Een PIR-sensor (passief infrarood) die werkt op 433,92 MHz
- Een weerstand van 10 KOhm
- een LDR
- Een RTC DS3231 (alleen externe serverversie)
- Een zender van 433,92 MHz: XY-FST
- Een 433,92 MHz ontvanger: MX-JS-05V
Het aanbevolen minimum is:
- Een Arduino Uno (getest op R3)
- Een Nexa-set of vergelijkbaar werkend op 433,92 MHz
- Een weerstand van 10 KOhm
- een LDR
- 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…
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:
- Koppel de Nexa-ontvanger met de afstandsbediening.
- Laad Nexa_OK_3_RX.ino op de Arduino en open de "Serial Monitor".
- Druk op de afstandsbedieningsknop die de Nexa-ontvanger bedient.
- Let op de "RemoteID" en "ButtonID".
- 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
Goed om te weten gedrag
-
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:
- Wakker: Arduino wacht op de nacht die komt.
- Actief: de nacht is aangebroken en Arduino heeft de lichten AAN gezet.
- 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.
- Slapen: de nacht gaat voorbij, Arduino heeft de lichten UITGESCHAKELD en Arduino wacht tot de dageraad wakker wordt.
- 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.
- 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.
- 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.
- In de slaperige toestand kunnen de lichten met een afstandsbediening aan/uit worden gezet. De Arduino zal niet tegenwerken.
- 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.
- Terwijl Arduino slapend is, kunnen de lichten via de afstandsbediening worden in- en uitgeschakeld. De Arduino zal niet tegenwerken.
- 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.
- 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.
- 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
- 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.
- De code die misbruik maakt van de interne server die ik thuis gebruik, draait nu sinds februari 2016 probleemloos.
- 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.
- De code heeft geen zomertijd. Dit moet worden aangepast via de webbrowser wanneer dit van toepassing is.
Enkele punten om te overwegen
- 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).
- 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.
- 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.
- 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
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:
Slimme bureaulamp - Slimme verlichting met Arduino - Neopixels-werkruimte: 10 stappen (met afbeeldingen)
Slimme bureaulamp | Slimme verlichting met Arduino | Neopixels-werkruimte: tegenwoordig brengen we veel tijd thuis door, studeren en werken virtueel, dus waarom zouden we onze werkruimte niet groter maken met een aangepast en slim verlichtingssysteem op Arduino en Ws2812b-leds. Hier laat ik u zien hoe u uw Smart LED bureaulamp die
Joystick-bediening voor Arduino maken: 3 stappen
Joystick-besturing voor Arduino maken: in deze instructie laat ik je zien hoe je lego-joysticks voor Arduino kunt maken
Somfy Bediening vanaf uw mobiel, IFTTT en Google voor $ 20: 16 stappen
Somfy-bediening vanaf je mobiel, IFTTT en Google voor $ 20: in deze Instructable laat ik je zien hoe ik een goedkope (ja, Somfy en goedkope!) Somfy RTS-radiografische afstandsbediening nam en de controle overnam via mijn mobiel, IFTTT (denk aan timers / reacties) en Google home. Het is vermeldenswaard dat dit de RTS Situo-afstandsbediening is, ik heb niet s
ESP8266 RGB LED STRIP WIFI-bediening - NODEMCU Als een IR-afstandsbediening voor ledstrip, bestuurd via wifi - RGB LED STRIP Smartphone-bediening: 4 stappen
ESP8266 RGB LED STRIP WIFI-bediening | NODEMCU Als een IR-afstandsbediening voor ledstrip, bestuurd via wifi | RGB LED STRIP Smartphone-bediening: Hallo allemaal, in deze tutorial zullen we leren hoe we nodemcu of esp8266 kunnen gebruiken als een IR-afstandsbediening om een RGB LED-strip te bedienen en Nodemcu zal worden bestuurd door smartphone via wifi. Dus in principe kun je de RGB LED STRIP bedienen met je smartphone
Praktische LED-verlichting voor plezier en winst: 4 stappen
Praktische LED-verlichting voor plezier en winst: LED's zijn eindelijk begonnen compacte fluorescentielampen (CFL's) in efficiëntie (lumen per watt) te overtreffen, wat het perfecte moment is om verder te gaan dan waardeloze LED-throwie-projecten naar echte, praktische LED-huisverlichting. Dit instructable presenteert een methode om een