Cuprins:
- Pasul 1: Circuitul …
- Pasul 2: Nexardu cu server web intern (cu NTP)
- Pasul 3: Nexardu cu server extern
- Pasul 4: informații valoroase
- Pasul 5: Finalizat
Video: NexArdu: Control inteligent iluminare: 5 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
Actualizați
Dacă ați dezvoltat aceeași funcționalitate utilizând Home Assistant. Home Assistant oferă o gamă imensă de posibilități. Dezvoltarea o puteți găsi aici.
O schiță pentru a controla iluminarea casei într-o manieră inteligentă prin dispozitive wireless de tip X10 de 433,92 MHz (alias 433 MHz), de ex. Nexa.
fundal
Când vine vorba de iluminarea decorativă, mi-a fost oarecum obositor că, în fiecare a doua sau a treia săptămână, a trebuit să reajustez temporizatoarele care aprind luminile din cauza schimbării orei solare față de CET. în unele nopți ne culcăm mai devreme decât altele. Din această cauză, uneori luminile se sting fie „prea târziu”, fie „prea devreme”. Cele de mai sus m-au provocat să mă gândesc: vreau ca iluminarea decorativă să pornească mereu la același nivel de lumină ambientală și apoi să se oprească la un anumit moment, în funcție de faptul dacă suntem treji sau nu.
Obiectiv
Acest instructable exploatează posibilitățile dispozitivelor controlate fără fir, cum ar fi System Nexa care funcționează pe frecvența de 433,92 MHz. Aici trebuie să prezentăm:
- Control automat al iluminării
- Control web
Control web. Server web intern vs extern
Serverul intern exploatează posibilitatea ecranului Arduino Ethernet de a furniza un server web. Serverul web va participa la apelurile clientului web pentru a verifica și interacționa cu Arduino. Aceasta este o soluție directă, cu funcționalități limitate; posibilitățile de îmbunătățire a codului serverului web sunt limitate de memoria Arduino. Serverul extern necesită configurarea unui server web PHP extern. Această configurare este mai complicată și nu este acceptată de acest tutorial, totuși, codul / pagina PHP pentru a verifica și a conduce Arduino este prevăzut cu funcționalități de bază. Posibilitățile de îmbunătățire a serverului web sunt, în acest caz, limitate de serverul web extern.
Proiect de lege de materiale
Pentru a profita din plin de posibilitățile pe care le oferă această schiță, aveți nevoie de:
- Un Arduino Uno (testat pe R3)
- Un scut Ethernet Arduino
- Un set Nexa sau similar care funcționează la 433,92 MHz
- Un senzor PIR (Passive InfraRed) care funcționează la 433,92MHz
- Un rezistor de 10KOhms
- Un LDR
- Un RTC DS3231 (numai versiunea serverului extern)
- Un transmițător de 433,92 MHz: XY-FST
- Un receptor de 433,92 MHz: MX-JS-05V
Minimul recomandat este:
- Un Arduino Uno (testat pe R3)
- Un set Nexa sau similar care funcționează la 433,92 MHz
- Un rezistor de 10KOhms
- Un LDR
- Un transmițător de 433,92 MHz: XY-FST
(Omiterea ecranului Ethernet necesită modificări ale schiței care nu sunt furnizate în acest instructable)
Logica Nexa. O scurtă descriere
Receptorul Nexa învață ID-ul telecomenzii și ID-ul butonului. Cu alte cuvinte, fiecare telecomandă are numărul expeditorului și fiecare pereche de butoane de pornire / oprire are ID-ul butonului său. Receptorul trebuie să învețe aceste coduri. Unele documente Nexa afirmă că un receptor poate fi asociat cu până la șase telecomenzi. Parametrii Nexa:
- SenderID: ID-ul telecomenzii
- ButtonID: numărul de perechi de butoane (pornit / oprit). Începe cu numărul 0
- Grup: da / nu (aka butoane „Toate oprit / pornit”)
- Comandă: pornit / oprit
Pași instructabili. Notă
Diferenții pași descriși aici sunt de a oferi două arome diferite despre cum să atingeți obiectivul. Simțiți-vă liber să o alegeți pe cea care vă convine. Iată indexul:
Pasul 1: Circuitul
Pasul 2: Nexardu cu server web intern (cu NTP)
Pasul 3: Nexardu cu server extern
Pasul 4: informații valoroase
Pasul 1: Circuitul …
Conectați diversele componente așa cum se arată în imagine.
Pinul Arduino # 8 la pinul de date pe modulul RX (receptor) Pinul Arduino # 2 la pinul de date pe modulul RX (receptor) Pinul Arduino # 7 la pinul de date pe modulul TX (expeditor) Pinul Arduino A0 la LDR
Configurație RTC. Este necesar doar în configurația serverului extern. Pinul Arduino A4 la pinul SDA pe modulul RTC Pinul Arduino A5 la pinul SCL pe modulul RTC
Pasul 2: Nexardu cu server web intern (cu NTP)
Bibliotecile
Acest cod folosește o mulțime de biblioteci. Cele mai multe dintre ele pot fi găsite prin „Managerul de bibliotecă” al IDE Arduino. Nu ar trebui să găsiți o bibliotecă listată, vă rugăm să google.
Wire.hSPI.h - Necesar de Ethernet shield NexaCtrl.h - Nexa controler de dispozitiv Ethernet.h - Pentru a activa și include Ethernet shieldRCSwitch.h - Necesar pentru PIRTime.h - Necesar pentru RTCTimeAlarms.h - Gestionarea alarmei de timp EthernetUdp.h - Necesar pentru Client NTP
Schița
Codul de mai jos exploatează posibilitatea de a utiliza placa Arduino UNO nu numai ca mijloc de control al dispozitivelor Nexa, ci are și un server Web intern. O remarcă de adăugat este că modulul RTC (Real Time Clock) se ajustează automat prin NTP (Network Time Protocol).
Înainte de a încărca codul pe Arduino, poate fi necesar să configurați următoarele:
- SenderId: trebuie mai întâi să adulmeci SenderId, vezi mai jos
- PIR_id: trebuie mai întâi să adulmeci SenderId, vezi mai jos
- Adresă IP LAN: setați un IP al LAN-ului dvs. pe ecranul Ethernet Arduino. Valoare implicită: 192.168.1.99
- Server NTP: Nu este strict necesar, dar ar putea fi bine să căutați pe serverele NTP din apropiere. Valoare implicită: 79.136.86.176
- Codul este ajustat pentru fusul orar CET. Reglați această valoare - dacă este necesar, la fusul orar pentru a afișa ora corectă (NTP)
Adulmecând codurile Nexa
Pentru aceasta trebuie să conectați cel puțin componenta RX la Arduino așa cum se arată în circuit.
Găsiți mai jos schița Nexa_OK_3_RX.ino care, la momentul redactării acesteia, este compatibilă cu dispozitivele Nexa NEYCT-705 și PET-910.
Pașii de urmat sunt:
- Asociați receptorul Nexa cu telecomanda.
- Încărcați Nexa_OK_3_RX.ino pe Arduino și deschideți „Serial Monitor”.
- Apăsați butonul telecomenzii care controlează receptorul Nexa.
- Luați notă de „RemoteID” și „ButtonID”.
- Setați aceste numere sub SenderID și ButtonID pe declarația variabilă din schița anterioară.
Pentru a citi ID-ul PIR, trebuie doar să utilizați aceeași schiță (Nexa_OK_3_RX.ino) și să citiți valoarea de pe „Serial Monitor” atunci când PIR detectează mișcarea.
Pasul 3: Nexardu cu server extern
Bibliotecile
Acest cod folosește o mulțime de biblioteci. Cele mai multe dintre acestea pot fi găsite prin „Managerul de bibliotecă” al IDE Arduino. Dacă nu găsiți o bibliotecă listată, vă rugăm să google.
Wire.hRTClib.h - aceasta este biblioteca de la https://github.com/MrAlvin/RTClibSPI.h - Necesar de Ethernet shield NexaCtrl.h - Nexa device controllerEthernet.h - Pentru a activa și prezenta Ethernet shieldRCSwitch.h - Necesar pentru PIRTime.h - Necesar pentru RTCTimeAlarms.h - Gestionarea alarmelor de timp aREST.h - pentru serviciile API RESTful exploatate de serverairair / wdt.h extern - Manipularea temporizatorului Watchdog
Schița
Schița de mai jos prezintă o altă aromă a aceluiași lucru, de data aceasta oferind posibilitățile pe care le poate oferi un server web extern. După cum sa menționat deja în introducere, Serverul extern necesită configurarea unui server web PHP extern. Această configurare este mai complicată și nu este acceptată de acest tutorial, totuși, codul / pagina PHP pentru a verifica și a conduce Arduino este prevăzut cu funcționalități de bază.
Înainte de a încărca codul pe Arduino, poate fi necesar să configurați următoarele:
- SenderId: trebuie mai întâi să adulmeci SenderId, vezi Adulmecarea codurilor Nexa la pasul precedent
- PIR_id: trebuie mai întâi să adulmeci SenderId, vezi Adulmecarea codurilor Nexa la pasul precedent
- Adresă IP LAN: setați un IP al LAN-ului dvs. pe ecranul Ethernet Arduino. Valoare implicită: 192.168.1.99
Pentru procedura de detectare a codului Nexa, vă rugăm să consultați Pasul # 1.
Dosar complementar
Încărcați fișierul nexardu4.txt atașat pe serverul dvs. extern PHP și redenumiți-l în nexardu4.php
Timp RTC setat
Pentru a seta ora / data pe RTC, folosesc schița SetTime care reunește biblioteca DS1307RTC.
Pasul 4: informații valoroase
E bine să știi comportamentul
-
Când Arduino se află sub „Control automat al luminii”, poate trece prin patru stări diferite în raport cu iluminarea ambientală și ora din zi:
- De veghe: Arduino așteaptă să vină noaptea.
- Activ: Noaptea a venit și Arduino a aprins luminile.
- Somnolent: luminile sunt aprinse, dar vine timpul pentru a le stinge. Începe la „time_to_turn_off - PIR_time”, adică dacă time_to_turn_off este setat la 22:30 și PIR_time setat la 20 de minute, atunci Arduino va intra în starea somnolentă la 22:10.
- Inactiv: Noaptea trece, Arduino a stins luminile și Arduino așteaptă ca zorii să devină treji.
- Arduino ascultă întotdeauna semnalele trimise de telecomenzi. Aceasta oferă posibilitatea de a afișa starea luminilor (pornite / oprite) pe web atunci când este utilizată telecomanda.
- În timp ce Arduino este trezit, încearcă să stingă luminile tot timpul, prin urmare, semnalele ON trimise de un control remonte pentru a aprinde luminile ar putea fi capturate de Arduino. În cazul în care acest lucru se întâmplă, Arduino va încerca să stingă din nou luminile.
- În timp ce Arduino este activ, încearcă să aprindă luminile tot timpul, prin urmare, semnalele OFF trimise de o telecomandă pentru a stinge luminile ar putea fi capturate de Arduino. În cazul în care acest lucru se întâmplă, Arduino va încerca să aprindă din nou luminile.
- În stare somnolentă, luminile pot fi aprinse / oprite cu ajutorul unei telecomenzi. Arduino nu va contracara.
- În starea somnolentă, numărătoarea inversă PIR va începe să se reseteze din „time_to_turn_off - PIR_time” și astfel timpul_to_turn_off se prelungește cu 20 de minute de fiecare dată când PIR detectează mișcare. Un „semnal PIR detectat!” mesajul va fi afișat în browserul web atunci când se întâmplă acest lucru.
- În timp ce Arduino este inactiv, luminile pot fi activate și oprite prin telecomandă. Arduino nu va contracara.
- O resetare sau un ciclu de alimentare al Arduino îl va aduce în modul activ. Aceasta înseamnă că, dacă Arduino a fost resetat după time_turn_off, atunci Arduino va aprinde luminile. Pentru a evita acest lucru, Arduino trebuie să fie adus în modul manual (bifați „Light Automatic Control”) și așteptați până dimineața pentru a reveni la „Light Automatic Control”.
- Așa cum am menționat mai sus, Arduino așteaptă ca zorii să se activeze din nou. Din această cauză, sistemul se poate păcăli direcționând o lumină suficient de puternică către senzorul de lumină care să depășească pragul de „luminozitate minimă”. În cazul în care acest lucru se întâmplă, atunci Arduino va trece la starea activă.
- Valoarea toleranței este de o importanță ridicată pentru a evita clătinarea și oprirea sistemului în jurul valorii de prag Luminozitate minimă. Luminile cu LED-uri, datorită pâlpâirii lor și capacității lor mari de reacție, pot fi o sursă de comportament de flap. Creșteți valoarea toleranței dacă întâmpinați această problemă. Folosesc valoarea 7.
Bine de știut despre cod
- După cum puteți observa, codul este foarte mare și folosește o cantitate considerabilă de biblioteci. Acest lucru compromite cantitatea de memorie liberă necesară pentru heap. Am observat un comportament instabil în trecut, oprind sistemul, mai ales după apeluri web. Prin urmare, cea mai mare provocare pe care am avut-o a fost să-i limitez dimensiunea și utilizarea diverselor variabile pentru a face sistemul stabil.
- Codul care exploatează serverul intern - folosit de mine acasă, rulează acum din februarie 2016 fără probleme.
- Am depus eforturi considerabile pentru a îmbogăți codul cu explicații. Profitați de acest lucru pentru a vă juca cu parametri diferiți, cum ar fi numărul de trimiteri de coduri Nexa pe rafală, timpul de sincronizare NTP etc.
- Codul nu include ora de vară. Acest lucru trebuie ajustat prin intermediul browserului web atunci când se aplică.
Câteva puncte de luat în considerare
- Adăugați antenele la modulele de frecvență radio (RF) TX și RX. Vă va economisi timp plângându-vă de două puncte principale: rezistența și raza de acțiune a semnalului RF. Folosesc un fir de 50 Ohmi lungime de 17,28 cm (6,80 in).
- Acest instrument intructibil poate funcționa și cu alte sisteme de automatizare a casei, cum ar fi Proove, de exemplu. Una dintre numeroasele condiții de îndeplinit este să le funcționezi pe frecvența de 433,92 MHz.
- O mare durere de cap cu Arduino este de a face față bibliotecilor care pot fi actualizate de-a lungul timpului și brusc nu sunt compatibile cu schița dvs. „veche”; aceeași problemă se poate ridica la actualizarea Arduino IDE. Feriți-vă că acesta ar putea fi cazul nostru aici - da, și problema mea.
- Mai mulți clienți web simultani cu diferite moduri de lumină creează o stare „intermitentă”.
Captură de ecran
În caruselul de imagini de mai sus, veți găsi o captură de ecran a paginii web afișată atunci când apelați Arduino prin browserul dvs. web. Având în vedere configurația IP implicită a codului, adresa URL ar fi
Un aspect care ar putea fi supus îmbunătățirii este poziționarea butonului „trimitere”, deoarece are efect asupra tuturor casetelor de intrare și nu numai asupra „Controlului automat al luminii”, așa cum s-ar putea crede. Cu alte cuvinte, dacă doriți să modificați oricare dintre valorile posibile, trebuie întotdeauna să apăsați butonul „trimiteți”.
Documentație detaliată / avansată
Am atașat următoarele fișiere, astfel încât acestea să vă poată ajuta să înțelegeți întreaga soluție, în special pentru depanare și îmbunătățire.
Arduino_NexaControl_IS.pdf oferă documentație privind soluția Server intern.
Arduino_NexaControl_ES.pdf oferă documentație despre soluția Server extern.
Referințe externe
Nexa System (suedeză)
Pasul 5: Finalizat
Acolo ai totul terminat și în acțiune!
Carcasa Arduino Uno poate fi găsită în Thingiverse ca „Arduino Uno Rev3 cu carcasă Ethernet Shield XL”.
Recomandat:
Lumină LED cu birou inteligent - Iluminare inteligentă cu Arduino - Spațiul de lucru Neopixels: 10 pași (cu imagini)
Lumină LED cu birou inteligent | Iluminare inteligentă cu Arduino | Neopixels Workspace: Acum câteva zile petrecem mult timp acasă, studiem și lucrăm virtual, așa că de ce să nu ne îmbunătățim spațiul de lucru cu un sistem de iluminare personalizat și inteligent bazat pe LED-urile Arduino și Ws2812b. Aici vă arăt cum vă construiți Smart Lumina LED de birou care
Realizați un sistem de control inteligent pentru casă pe STONE HMI Disp: 23 de pași
Realizați un sistem de control inteligent la domiciliu pe STONE HMI Disp: Introducere în proiect Următorul tutorial vă arată cum să utilizați modulul de afișare tactil STONE STVC050WT-01 pentru a crea un sistem simplu de control al aparatului casnic
Sistem de iluminare inteligent pe pasarelă - Echipa Sailor Moon: 12 pași
Sistemul inteligent de iluminare Walkway - Echipa Sailor Moon: Bună! Acesta este Grace Rhee, Srijesh Konakanchi și Juan Landi și împreună suntem Team Sailor Moon! Astăzi vă vom aduce un proiect DIY în două părți pe care îl puteți implementa chiar în propria casă. Sistemul nostru final de iluminat inteligent pe pasarelă include un ul
Control inteligent al ventilatorului Raspberry Pi folosind Python și Thingspeak: 7 pași
Control inteligent al ventilatorului Raspberry Pi folosind Python și Thingspeak: Prezentare succintă În mod implicit, ventilatorul este conectat direct la GPIO - aceasta implică funcționarea sa constantă. În ciuda funcționării relative silențioase a ventilatorului, funcționarea sa continuă nu este o utilizare eficientă a unui sistem de răcire activ. În același timp
R Pi - Control de la distanță PA și sistem de iluminare: 4 pași (cu imagini)
R Pi - Control de la distanță PA și sistem de iluminare: Acesta este un proiect simplu pentru a face anunțuri audio și pentru a aprinde și a stinge luminile unui PI de la distanță de la un browser web. Iată de ce aveți nevoie: 1) Raspberry Pi cu Apache și PhP preinstalat. Am folosit un Pi v1 vechi pe care îl aveam întins. Imi asum asta