Cuprins:

NexArdu: Control inteligent iluminare: 5 pași
NexArdu: Control inteligent iluminare: 5 pași

Video: NexArdu: Control inteligent iluminare: 5 pași

Video: NexArdu: Control inteligent iluminare: 5 pași
Video: Séance ordinaire - 5 juillet 2021 2024, Iulie
Anonim
NexArdu: Control inteligent iluminare
NexArdu: Control inteligent iluminare

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:

  1. Control automat al iluminării
  2. 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:

  1. Un Arduino Uno (testat pe R3)
  2. Un scut Ethernet Arduino
  3. Un set Nexa sau similar care funcționează la 433,92 MHz
  4. Un senzor PIR (Passive InfraRed) care funcționează la 433,92MHz
  5. Un rezistor de 10KOhms
  6. Un LDR
  7. Un RTC DS3231 (numai versiunea serverului extern)
  8. Un transmițător de 433,92 MHz: XY-FST
  9. Un receptor de 433,92 MHz: MX-JS-05V

Minimul recomandat este:

  1. Un Arduino Uno (testat pe R3)
  2. Un set Nexa sau similar care funcționează la 433,92 MHz
  3. Un rezistor de 10KOhms
  4. Un LDR
  5. 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 …

Circuitul …
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:

  1. Asociați receptorul Nexa cu telecomanda.
  2. Încărcați Nexa_OK_3_RX.ino pe Arduino și deschideți „Serial Monitor”.
  3. Apăsați butonul telecomenzii care controlează receptorul Nexa.
  4. Luați notă de „RemoteID” și „ButtonID”.
  5. 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

Informatie pretioasa
Informatie pretioasa
Informatie pretioasa
Informatie pretioasa

E bine să știi comportamentul

  1. 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:

    1. De veghe: Arduino așteaptă să vină noaptea.
    2. Activ: Noaptea a venit și Arduino a aprins luminile.
    3. 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.
    4. Inactiv: Noaptea trece, Arduino a stins luminile și Arduino așteaptă ca zorii să devină treji.
  2. 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.
  3. Î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.
  4. Î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.
  5. În stare somnolentă, luminile pot fi aprinse / oprite cu ajutorul unei telecomenzi. Arduino nu va contracara.
  6. Î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.
  7. În timp ce Arduino este inactiv, luminile pot fi activate și oprite prin telecomandă. Arduino nu va contracara.
  8. 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”.
  9. 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ă.
  10. 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

  1. 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.
  2. Codul care exploatează serverul intern - folosit de mine acasă, rulează acum din februarie 2016 fără probleme.
  3. 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.
  4. 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

  1. 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).
  2. 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.
  3. 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.
  4. 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

Terminat!
Terminat!

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: