Cuprins:

Alarmă PIR către WiFi (și automatizare la domiciliu): 7 pași (cu imagini)
Alarmă PIR către WiFi (și automatizare la domiciliu): 7 pași (cu imagini)

Video: Alarmă PIR către WiFi (și automatizare la domiciliu): 7 pași (cu imagini)

Video: Alarmă PIR către WiFi (și automatizare la domiciliu): 7 pași (cu imagini)
Video: Lernen Sie, Ihr Geld zu verwalten wie der Barfuß-Investor (Untertitel auf Rumänisch) 2024, Iulie
Anonim
Image
Image
Alarmă PIR către WiFi (și automatizare la domiciliu)
Alarmă PIR către WiFi (și automatizare la domiciliu)

Prezentare generală

Această instrucțiune vă va oferi posibilitatea de a vizualiza ultima dată / oră (și, opțional, un istoric al timpurilor) din momentul în care au fost declanșate PIR-urile House Alarm (senzori infraroșii pasivi), în software-ul dvs. de automatizare a casei. În acest proiect, voi discuta despre modul de utilizare cu OpenHAB (software gratuit de automatizare a casei, pe care îl folosesc personal), deși va funcționa cu orice alt software sau aplicație de automatizare a casei care acceptă MQTT (de asemenea, descris mai târziu în acest articol). Această instrucțiune vă va conduce prin pașii necesari cu privire la modul de conectare a unei plăci de circuite și a Wemos D1 mini (o placă IOT care utilizează un cip ESP8266) care atinge zonele de alarmă din cutia de control a alarmelor, astfel încât atunci când o zonă (care conține unul sau mai multe PIR-uri) este declanșat, Wemos trimite un mesaj fără fir folosind protocolul MQTT către software-ul dvs. de automatizare a locuinței care, la rândul său, afișează ultima dată / oră a acelui declanșator. De asemenea, este furnizat codul Arduino pentru a programa Wemos.

Introducere

Imaginea de mai sus este ceea ce văd printr-unul dintre ecranele din aplicația OpenHAB de pe iPhone. Textul datei / orei este codat în culori pentru a oferi o reprezentare mai rapidă a momentului în care a fost declanșat PIR - va apărea roșu (declanșat în ultimul 1 minut), portocaliu (declanșat în ultimele 5 minute), verde (declanșat în ultimele 30 de minute), albastru (declanșat în ultima oră) sau altfel, negru. Dând clic pe dată / oră, se va afișa o vedere istorică a declanșatoarelor PIR, unde un 1 înseamnă declanșat, iar 0 este inactiv. Există multe utilizări pentru acest lucru, de exemplu, ar putea suplimenta soluția de prezență la domiciliu, poate detecta mișcarea dacă sunteți plecat și prin reguli OpenHAB, puteți trimite notificări la telefonul dvs., ați putea să o folosiți ca și mine pentru a vedea dacă copiii mei sunt ridicându-se în miez de noapte, declanșat de un PIR care locuiește în afara dormitoarelor lor!

OpenHAB este pur și simplu software-ul de automatizare a casei pe care îl folosesc, există multe altele - și dacă acestea acceptă MQTT, atunci puteți adapta cu ușurință acest proiect pentru a se potrivi cu software-ul pe care îl utilizați.

Ipoteze

Această instrucțiune presupune că aveți deja (sau veți configura):

  • Evident, un sistem de alarmă la domiciliu cu PIR (senzori infraroșii pasivi) și că aveți acces la cutia de comandă a alarmelor pentru a conecta cablajul necesar
  • Se deschide OpenHAB (software gratuit de automatizare a sursei open source), deși așa cum sa discutat, ar trebui să funcționeze cu orice software de automatizare a casei care poate include o legare MQTT. Alternativ, puteți modifica codul dvs. pentru a vă potrivi propriilor nevoi.
  • Broker Mosquitto MQTT (sau similar) instalat și obligatoriu configurat cu OpenHAB (MQTT este un protocol de tip abonare / publicare mesaje ușor și excelent pentru comunicarea între dispozitive)

Dacă nu rulați OpenHAB și un broker MQTT, consultați acest articol excelent pe site-ul web MakeUseOf

De ce am nevoie?

Pentru a crea controlerul fără fir, va trebui să obțineți următoarele părți:

  • Wemos D1 mini V2 (are un chip ESP8266 fără fir încorporat)
  • Un comparator LM339 (acest lucru va face verificarea PIR inactiv versus declanșat)
  • O sursă de alimentare de 5V DC pentru Wemos (SAU, un convertor DC-DC buck. Notă: este posibil ca un regulator de tensiune LM7805 să nu funcționeze pentru această aplicație, așa cum am discutat mai târziu în acest proiect)
  • Două rezistențe pentru un divizor de tensiune (dimensiunea va depinde de tensiunile de alarmă, discutate mai târziu în proiect)
  • Un rezistor de 1K ohm pentru a acționa ca un rezistor de tracțiune pentru controlul puterii LM339
  • Un MOSFET 2N7000 (sau similar) pentru a porni logic LM339 (posibil opțional, discutat mai târziu în proiect)
  • O placă de dimensiune adecvată pentru configurarea și testarea circuitului
  • O grămadă de fire pentru a conecta totul
  • Unelte necesare: freze laterale, sârmă cu un singur miez
  • Un multimetru DC (obligatoriu!)

Pasul 1: Caseta de control a sistemului de alarmă

Caseta de control a sistemului de alarmă
Caseta de control a sistemului de alarmă

Mai întâi câteva avertismente și declinări de responsabilitate

Personal, am un sistem de alarmă Bosch. Vă recomand cu tărie să descărcați manualul relevant pentru sistemul dvs. special de alarmă și să vă familiarizați cu acesta înainte de a începe, deoarece va trebui să opriți sistemul de alarmă pentru a conecta zonele. De asemenea, v-aș recomanda să citiți acest articol în întregime înainte de a începe!

Mai jos este o listă cu câteva lucruri pe care ar trebui să le știți înainte de a începe - asigurați-vă că le citiți și le înțelegeți înainte de a continua! Nu îmi asum responsabilitatea dacă vă înșelați sistemul de alarmă și / sau trebuie să plătiți instalatorul pentru a remedia problema. Cu toate acestea, dacă citiți și înțelegeți următoarele și luați măsurile de precauție necesare, ar trebui să vă simțiți bine:

1. Sistemul meu de alarmă avea o baterie de rezervă în interiorul cutiei și, de asemenea, avea un comutator de manipulare în interiorul capacului (care oferă acces la placa sistemului de alarmă), deci chiar opriți alarma extern, atunci când scoateți panoul frontal al comenzii cutia a declanșat alarma! Pentru a evita acest lucru în timp ce lucram la proiect, am ocolit protecția împotriva manipulării, deconectând apoi scurtcircuitând comutatorul de manipulare (firul roșu gros așa cum se arată în fotografia de mai sus)

2. La alimentarea sistemului de alarmă, după aproximativ 12 ore, panoul de control al alarmei a început să emită un sunet cu coduri de eroare. După ce am determinat codurile de eroare prin manual, am aflat că mă avertiza că:

  • Data / ora nu a fost setată (pentru reconfigurare aveam nevoie de codul master și secvența de taste din manual)
  • Că bateria de rezervă nu a fost conectată (soluție ușoară, am uitat doar să reconectez bateria)

3. În alarma mea, există 4 blocuri de conectare a zonei (etichetate Z1-Z4) pentru ca PIR să se conecteze pe placa principală de alarmă, totuși - sistemul meu de alarmă este de fapt capabil de 8 zone. Fiecare bloc de conexiune de zonă poate rula de fapt 2 x zone fiecare (Z1 face Z1 și Z5, Z2 face Z2 și Z6 și așa mai departe). Sistemul de alarmă are protecție de manipulare încorporată pentru a opri cineva să spună, deschizând capacul la sistemul de alarmă așa cum s-a menționat mai sus sau tăiați firele într-un PIR. Face distincție între fiecare manipulare a zonei prin intermediul rezistențelor EOL (sfârșitul liniei). Acestea sunt rezistențe de dimensiuni specifice, care se află la "capătul liniei" - cu alte cuvinte, în interiorul PIR (sau al comutatorului de manipulare a cutiei de control, sau a cutiei de sirene sau a oricărui lucru care este conectat la acea zonă) După cum sa menționat, aceste rezistențe sunt utilizate ca "tamper" protecție '- din punct de vedere tehnic, dacă cineva taie cablurile la un PIR - deoarece sistemul de alarmă așteaptă să vadă o anumită rezistență din acel PIR, atunci dacă rezistența se schimbă, presupune că cineva a manipulat sistemul și va declanșa alarma.

De exemplu:

La alarma mea, Zona "Z4" are 2 fire în ea, una se oprește la PIR în holul meu și una se oprește la comutatorul de manipulare a cutiei de control alarmei. În interiorul holului PIR, are un rezistor de 3300 ohmi. Celălalt fir care rulează către comutatorul de manipulare a cutiei de control, are un rezistor de 6800 ohm cablat în serie. Acesta este modul în care sistemul de alarmă (în mod logic) face distincția între tampoanele „Z4” și „Z8”. La fel, zona "Z3" are un PIR (cu rezistor de 3300 ohm în el) și, de asemenea, comutatorul de manipulare a sirenei (cu rezistor de 6800 ohm în el) care alcătuiește "Z7". Instalatorul de alarmă ar fi preconfigurat sistemul de alarmă, astfel încât să știe ce dispozitiv este conectat la fiecare zonă (și a modificat dimensiunea rezistorului EOL pentru a se potrivi, deoarece sistemul de alarmă este programat să știe ce dimensiune au diferitele rezistențe EOL. în niciun caz nu ar trebui să schimbați valoarea acestor rezistențe!)

Deci, pe baza celor de mai sus, deoarece fiecare zonă poate avea mai multe dispozitive atașate și ea (cu valori de rezistență diferite) și amintind formula V = IR (tensiune = amperi x rezistență), atunci aceasta poate însemna, de asemenea, că fiecare zonă poate avea tensiuni diferite. Ceea ce ne conduce la pasul următor, măsurând fiecare zonă IDLE vs tensiune TRIGGERED …

Pasul 2: Măsurarea tensiunii zonei de alarmă

Măsurarea tensiunii zonei de alarmă
Măsurarea tensiunii zonei de alarmă
Măsurarea tensiunii zonei de alarmă
Măsurarea tensiunii zonei de alarmă

Odată ce ați obținut acces la placa principală a sistemului de alarmă (și ați ocolit comutatorul de manipulare dacă aveți unul; conform pasului anterior) porniți din nou sistemul de alarmă. Acum trebuie să măsurăm tensiunea fiecărei zone atunci când aceasta este IDLE (fără mișcare în fața PIR) vs TRIGGERED (PIR a detectat mișcare) Prindeți un pix și hârtie, astfel încât să puteți nota citirile de tensiune.

AVERTISMENT: Cea mai mare parte a sistemului dvs. de alarmă este cel mai probabil să funcționeze pe 12V DC, totuși va avea alimentarea inițială de energie la 220V (sau 110V) AC, cu un transformator care transformă puterea de la AC la CC. CITIȚI manualul și luați măsuri de precauție suplimentare, asigurându-vă că NU măsurați niciun terminal de curent alternativ !!! Conform capturii de ecran a sistemului meu de alarmă de pe această pagină, puteți vedea că partea de jos a imaginii este alimentată de curent alternativ, transformată în 12V DC. Măsurăm 12V DC în casetele roșii evidențiate. Nu atingeți niciodată alimentarea de curent alternativ. Aveți grijă extremă!

Măsurarea tensiunii PIR

Am 4 x PIR conectate la Z1 până la Z4. Măsurați fiecare dintre zonele dvs. după cum urmează.

  1. Mai întâi, identificați terminalul GND și terminalele de zonă de pe panoul de alarmă. Le-am evidențiat în imaginea prezentată în manualul alarmei mele Bosch.
  2. Prindeți multimetrul și setați măsurarea tensiunii la 20V DC. Conectați cablul negru (COM) de la multimetru la terminalul GND de pe alarmă. Așezați cablul roșu (+) din multimetrul dvs. pe prima zonă - în cazul meu etichetat „Z1”. Notați citirea tensiunii. Efectuați aceiași pași pentru zonele rămase. Măsurătorile mele de tensiune sunt după cum urmează:
  • Z1 = 6,65V
  • Z2 = 6,65V
  • Z3 = 7,92V
  • Z4 = 7,92V

Conform celor de mai sus, primele mele două zone au doar PIR atașate și ele. Ultimele două zone au atât PIR-uri, cât și protecție împotriva manipulării prin cablu (manipulare cutie de control Z3, manipulare sirene Z4) Rețineți diferențele de tensiune.

3. Pentru acest pas următor veți avea nevoie probabil de 2 persoane. De asemenea, va trebui să știți care PIR se află în ce zonă. Întoarceți-vă și citiți tensiunea din prima zonă. Acum puneți pe cineva din casa dvs. să meargă în fața PIR, tensiunea ar trebui să scadă. Rețineți noua citire a tensiunii. În cazul meu, tensiunile citesc după cum declanșează PIR-urile:

  • Z1 = 0V
  • Z2 = 0V
  • Z3 = 4,30V
  • Z4 = 4,30V

Conform celor de mai sus, pot vedea că atunci când zonele 1 și 2 sunt declanșate, tensiunea scade de la 6,65V la 0V. Cu toate acestea, atunci când zonele 3 și 4 sunt declanșate, tensiunea scade de la 7.92V la 4.30V.

Măsurarea sursei de alimentare de 12V

Vom folosi terminalul de 12V DC de la cutia de control a alarmelor pentru a alimenta proiectul nostru. Trebuie să măsurăm tensiunea de la alimentarea de 12V DC a alarmei. Deși afirmă deja 12V, trebuie să cunoaștem o citire mai precisă. În cazul meu, se citește de fapt 13.15V. Notați acest lucru, veți avea nevoie de această valoare în pasul următor.

De ce măsurăm tensiunea?

Motivul pentru care avem nevoie pentru a măsura tensiunea pentru fiecare PIR este din cauza circuitului pe care îl vom crea. Vom folosi un cip comparator LM339 quad diferențial (sau un comparator quad op-amp) ca componentă electrică de bază pentru acest proiect. LM339 are 4 comparatoare de tensiune independente (4 canale) unde fiecare canal ia 2 x tensiuni de intrare (o intrare inversantă (-) și o intrare fără inversare (+), vezi diagrama) Dacă tensiunea tensiunii de intrare inversoare ar trebui să scadă mai mică decât tensiunea care nu se inversează, atunci ieșirea aferentă va fi trasă la masă. La fel, dacă tensiunea de intrare neinversibilă scade mai mică decât intrarea inversantă, atunci ieșirea este trasă la Vcc. În mod convenabil, în casa mea am 4 x PIR / zone de alarmă - prin urmare, fiecare zonă va fi conectată la fiecare canal de pe comparator. Dacă aveți mai mult de 4 x PIR-uri, veți avea nevoie de un comparator cu mai multe canale sau de un alt LM339!

Notă: LM339 consumă energie în nano-amperi, deci nu va afecta rezistența EOL a sistemului de alarmă existent.

Dacă acest lucru este confuz, continuați cu următorul pas oricum, va începe să aibă mai mult sens odată ce îl vom conecta!

Pasul 3: Crearea unui divizor de tensiune

Image
Image

Ce este un divizor de tensiune?

Un divizor de tensiune este un circuit cu 2 rezistențe (sau mai multe) în serie. Furnizăm tensiune în (Vin) la primul rezistor (R1) Celălalt picior al lui R1 se conectează la primul picior al celui de-al doilea rezistor (R2), iar celălalt capăt al lui R2 se conectează la GND. Luăm apoi o tensiune de ieșire (Vout) din conexiunea dintre R1 și R2. Această tensiune va deveni tensiunea noastră de referință pentru LM339. Pentru mai multe informații despre modul de funcționare a divizoarelor de tensiune, consultați videoclipul YouTube Adohms

(Notă: rezistoarele nu au polaritate, deci pot fi conectate în ambele sensuri)

Calculând tensiunea de referință

Presupunând că tensiunea scade atunci când PIR este declanșat (acest lucru ar trebui să fie cazul pentru majoritatea alarmelor), atunci ceea ce încercăm să obținem, este să obținem o citire a tensiunii care este aproape la jumătatea distanței dintre cea mai mică tensiune de ralanti și cea mai mare tensiune declanșată, aceasta va deveni tensiunea noastră de referință.

Luând alarma mea ca exemplu …

Tensiunile de ralanti ale zonei au fost Z1 = 6,65V, Z2 = 6,65V, Z3 = 7,92V, Z4 = 7,92V. Prin urmare, cea mai mică tensiune la ralanti este de 6,65V

Tensiunile declanșate în zonă au fost: Z1 = 0V, Z2 = 0V, Z3 = 4.30V, Z4 = 4.30V. Prin urmare, cea mai mare tensiune declanșată este de 4,30V

Deci, trebuie să alegem un număr la jumătatea distanței dintre 4.30V și 6.65V (nu trebuie să fie exact, doar aproximativ) În cazul meu, tensiunea de referință trebuie să fie în jur de 5.46V. Notă: Dacă cea mai mică ralanti și cea mai mare tensiune declanșată sunt foarte apropiate una de cealaltă din cauza mai multor zone care cauzează o gamă de tensiuni diferite, poate fi necesar să creați 2 sau mai multe divizoare de tensiune.

Calculând valorile rezistenței noastre pentru divizorul de tensiune

Acum avem o tensiune de referință, trebuie să calculăm ce rezistențe de dimensiune avem nevoie pentru a crea un divizor de tensiune care să ne furnizeze tensiunea de referință. Vom folosi sursa de tensiune de 12V DC (Vs) de la alarmă. Cu toate acestea, conform pasului anterior, când am măsurat alimentarea de 12V DC, am obținut de fapt 13,15V. Trebuie să calculăm divizorul de tensiune folosind această valoare ca sursă.

Calculați Vout folosind legea ohmilor …

Vout = Vs x R2 / (R1 + R2)

… sau utilizați un calculator de divizare a tensiunii online:-)

Va trebui să experimentați cu valorile rezistenței până când veți obține ieșirea dorită. În cazul meu, a funcționat cu R1 = 6.8k ohm și R2 = 4.7K ohm, calculat în formă lungă după cum urmează:

Vout = Vs x R2 / (R1 + R2)

Vout = 13,15 x 4700 / (6800 + 4700)

Vout = 61, 805/11, 500

Vout = 5,37V

Pasul 4: conectați LM339

Cablarea Wemos D1 Mini
Cablarea Wemos D1 Mini

Divizorul de tensiune la LM339 inversează intrările

După cum sa discutat mai devreme în ceea ce privește comparatorul LM339, va fi nevoie de 2 x intrări. Unul va fi o tensiune de la fiecare PIR la fiecare terminal fără inversare (+) a canalelor, celălalt va fi tensiunea de referință la terminalul nostru (-) inversor. Tensiunea de referință trebuie să alimenteze toate cele 4 intrări de inversare a comparatorului. Opriți sistemul de alarmă înainte de a efectua acești pași.

  • Rulați un fir de la blocul de 12V DC de pe sistemul de alarmă la șina + de pe panoul dvs. *
  • Rulați un fir de la blocul GND de pe sistemul de alarmă la - șina de pe panoul dvs. **
  • Instalați comparatorul LM339 în mijlocul panoului (crestătura indică cel mai apropiat de pinul 1)
  • Instalați rezistențele de 2 x pentru a crea un circuit divizor de tensiune și un fir pentru tensiunea divizată
  • Rulați firele de la Vout „divizat în tensiune” la fiecare terminal inversor LM339

* SFAT: utilizați o clemă de aligator pentru alimentare, dacă este posibil, deoarece acest lucru face mai ușor să furnizați energie ON / OFF proiectului dvs. ** IMPORTANT! Poate fi necesar un MOSFET DACĂ alimentați Wemos de la panoul de alarmă! În cazul meu, LM339, Wemos și Alarmă primesc toate alimentarea de la aceeași sursă (adică: sistemul de alarmă în sine) Acest lucru îmi permite să pornesc alimentarea la toate cu o singură conexiune de alimentare. Cu toate acestea, în mod implicit pinii GPIO de pe Wemos sunt definiți ca pinii "INPUT" - adică iau orice tensiune este aruncată asupra lor și se bazează pe acea sursă pentru a oferi niveluri corecte de tensiune (niveluri min / max), astfel încât Wemos să câștige ' nu prăbușiți sau ardeți. În cazul meu, sistemul de alarmă își pornește puterea și începe să facă secvența de pornire foarte repede - atât de rapid, de fapt, încât face acest lucru înainte ca Wemos să poată porni și să declare pinii GPIO drept „INPUT_PULLUP” (tensiune ridicată intern în interiorul cip). Aceasta nu înseamnă că diferențele de tensiune ar provoca blocarea Wemos atunci când întregul sistem a primit energie. Singura modalitate în jurul acestuia ar fi oprirea manuală și pornirea Wemos. Pentru a rezolva acest lucru, se adaugă un MOSFET și acționează ca un „comutator logic” pentru alimentarea LM339. Acest lucru permite Wemos-ului să pornească, să seteze pinii GPIO de 4 x comparatori ca „INPUT_PULLUP”, să întârzie câteva secunde și apoi (printr-un alt pin GPIO D5 definit ca OUTPUT) să trimită semnalul „HIGH” prin pinul GPIO D5 către MOSFET, care porneste logic LM339. Aș recomanda conectarea ca mai sus, dar dacă observați că Wemos se blochează așa cum am făcut-o, atunci va trebui să includeți MOSFET-ul cu un rezistor de 1k ohm. Pentru mai multe informații despre cum să faceți acest lucru, consultați sfârșitul acestui instructable.

Zone de alarmă la intrările LM339 fără inversare

Acum trebuie să rulăm fire din fiecare zonă de pe panoul de control al alarmelor către intrările comparatorului LM339. Cu sistemul de alarmă încă oprit, pentru fiecare zonă alimentați un fir la fiecare intrare fără inversare (+) de pe comparatorul LM339. De exemplu, în sistemul meu:

  • Sârma de la Z1 merge la intrarea LM339 1+
  • Sârma de la Z2 merge la intrarea LM339 2+
  • Sârmă de la Z3 merge la intrarea LM339 3+
  • Sârmă de la Z4 merge la intrarea LM339 4+

Consultați pin-out-ul LM339 de la pasul 3 dacă aveți un memento (este codat în culori cu imaginea panoului). După ce ați terminat, panoul dvs. de verificare ar trebui să apară similar cu imaginea prezentată în acest pas.

Porniți sistemul de alarmă și măsurați tensiunea care iese din divizorul de tensiune pentru a vă asigura că este egal cu tensiunea de referință calculată anterior.

Pasul 5: Cablarea Wemos D1 Mini

Cablarea Wemos D1 mini

Acum avem toate intrările LM339 îngrijite, acum trebuie să conectăm Wemos D1 mini. Fiecare pin de ieșire LM339 merge la un pin Wemos GPIO (intrare / ieșire de uz general) pe care îl vom desemna prin cod ca pin de intrare. Wemos ia până la 5V maxim ca tensiune Vcc (sursă de intrare) (deși reglează acest lucru intern până la 3,3V) Vom folosi un regulator de tensiune LM7805 foarte comun (EDIT: a se vedea mai jos) pentru a lăsa șina de 12V pe panou până la 5V pentru a alimenta Wemos. Fișa tehnică pentru LM7805 indică faptul că avem nevoie de un condensator conectat pe fiecare parte a regulatorului pentru a netezi puterea, așa cum se arată pe imaginea plăcii. Piciorul mai lung al condensatorului este pozitiv (+), deci asigurați-vă că acesta este conectat în mod corect.

Regulatorul de tensiune preia tensiunea (pinul din stânga), masă (pinul din mijloc) și ieșirea din tensiune (pinul din dreapta) Verificați dublu pin-out dacă regulatorul de tensiune variază de la LM7805.

(EDIT: Am constatat că amplificatoarele provenite de la panoul de alarmă erau prea mari pentru ca LM7805 să poată fi manevrate. Acest lucru a provocat multă căldură în micul radiator al LM7805 și a provocat eșecul acestuia și, la rândul său, a provocat oprirea Wemos-ului funcționează. Am înlocuit LM7805 și condensatoarele cu un convertor DC-DC în schimb și nu am avut probleme de atunci. Acestea sunt foarte ușor de conectat. Pur și simplu conectați tensiunea de intrare de la alarmă, conectați-vă mai întâi la un multimetru și utilizați șurubul potențiometrului și reglați până când tensiunea de ieșire este de ~ 5V)

Pinii de intrare GPIO

Pentru acest proiect, folosim următorii pini:

  • zona Z1 => pinul D1
  • zona Z2 => pinul D2
  • zona Z3 => pinul D3
  • zona Z4 => pinul D5

Conectați ieșirile de la LM339 la pinii GPIO aferenți de pe placa Wemos, conform imaginii plăcii afișate în acest pas. Din nou, am codat color intrările și ieșirile potrivite, pentru a face mai ușor de văzut ce se referă la ce. Fiecare pin GPIO din Arduino este definit ca un „INPUT_PULLUP”, ceea ce înseamnă că vor fi trase până la 3,3V în condiții de utilizare normală (IDLE), iar LM339 le va trage în jos în cazul în care PIR va fi declanșat. Codul detectează modificarea HIGH la LOW și trimite un mesaj fără fir către software-ul dvs. de automatizare a locuinței. Dacă aveți probleme cu această funcționare, este posibil să aveți intrările de inversare vs non-inversare în mod greșit (dacă tensiunea de la PIR crește atunci când este declanșată, așa cum se întâmplă cu majoritatea PIR-urilor hobby, atunci veți dori conexiunile invers)

IDE Arduino

Eliminați Wemos din panoul de testare, acum trebuie să încărcați codul pe acesta (link alternativ aici) Nu voi intra în detalii despre cum să faceți acest lucru, deoarece există o mulțime de articole pe web despre încărcarea codului în Wemos sau în alt ESP8266 placi tip. Conectați cablul USB la placa Wemos și la computer și porniți Arduino IDE. Descărcați codul și deschideți-l în proiectul dvs. Va trebui să vă asigurați că placa corectă este instalată și încărcată pentru proiectul dvs., precum și portul COM corect selectat (Instrumente, Port). De asemenea, veți avea nevoie de bibliotecile corespunzătoare instalate (PubSubClient, ESP8266Wifi) Pentru a include placa Wemos în schița dvs., consultați acest articol.

Va trebui să modificați următoarele linii de cod și să le înlocuiți cu propriul SSID și parola pentru conexiunea dvs. wireless. De asemenea, modificați adresa IP pentru a indica propriul broker MQTT.

// Wifi

const char * ssid = "your_wifi_ssid_here"; const char * password = "your_wifi_password_here"; // MQTT Broker IPAddress MQTT_SERVER (172, 16, 223, 254)

Odată modificat, verificați codul, apoi încărcați-l pe placa Wemos printr-un cablu USB.

Note:

  • Dacă utilizați diferite porturi GPIO, va trebui să reglați codul. Dacă utilizați mai multe sau mai puține zone decât am, va trebui, de asemenea, să ajustați codul și TOTAL_ZONES = 4; constant pentru a se potrivi.
  • La pornirea sistemului meu de alarmă, sistemul de alarmă ar efectua un test de putere la toate cele 4 x PIR-uri care au tras toate GPIO-urile conectate la masă, determinând Wemos să creadă că zonele sunt declanșate. Codul va ignora trimiterea de mesaje MQTT dacă vede toate cele 4 x zone active în același timp, deoarece presupune că sistemul de alarmă este pornit.

Link de descărcare alternativ la cod AICI

Pasul 6: Testare și configurare OpenHAB

Testare și configurare OpenHAB
Testare și configurare OpenHAB

Testarea MQTT

MQTT este un sistem de mesagerie „abonare / publicare”. Unul sau mai multe dispozitive pot vorbi cu un „broker MQTT” și „se pot abona” la un anumit subiect. Orice mesaj primit de la orice alt dispozitiv care este „publicat” pe același subiect, va fi trimis de către broker către toate dispozitivele care s-au abonat la acesta. Este un protocol extrem de ușor și simplu de utilizat și perfect ca un sistem de declanșare simplu, cum ar fi cel de aici. Pentru testare, puteți vizualiza mesajele MQTT primite de la Wemos către brokerul dvs. MQTT executând următoarea comandă pe serverul dvs. Mosquitto (Mosquitto este unul dintre multele software MQTT Broker disponibile). Această comandă se abonează la mesajele keepalive primite:

mosquitto_sub -v -t openhab / alarm / status

Ar trebui să vedeți mesaje primite de la Wemos la fiecare 30 de secunde cam cu numărul „1” (adică „Sunt în viață”). Dacă vedeți „0” constante (sau fără răspuns), atunci nu există nicio comunicare. După ce vedeți numărul 1 care vine, atunci înseamnă că Wemos comunică cu brokerul MQTT (căutați „MQTT Ultima voință și testament” pentru mai multe informații despre cum funcționează acest lucru sau vedeți această intrare de blog foarte bună)

După ce ați dovedit că comunicarea este funcțională, putem testa că o stare de zonă este raportată prin MQTT. Abonați-vă la următorul subiect (# este un wildcard)

mosquitto_sub -v -t openhab / alarm / #

Ar trebui să apară mesajele de stare obișnuite, la fel ca și adresa IP a Wemos-ului. Mergeți în fața unui PIR și ar trebui să vedeți, de asemenea, informațiile despre zonă care indică faptul că este DESCHIS, apoi o secundă sau ceva mai târziu, că este ÎNCHIS, similar cu următoarele:

openhab / alarmă / stare 1

openhab / alarm / zone1 OPEN

openhab / alarm / zone1 ÎNCHIS

Odată ce acest lucru funcționează, putem configura OpenHAB pentru a avea acest lucru frumos reprezentat în GUI.

Configurare OpenHAB

Următoarele modificări sunt necesare pentru OpenHAB:

fișier de transformare „alarm.map”: (opțional, pentru testare)

CLOSED = Inactiv OPEN = Declanșat NULL = Necunoscut- = Necunoscut

Fișierul de transformare „status.map”:

0 = Eșuat

1 = Online - = JOS! NULL = necunoscut

fișierul „articole”:

String alarmMonitorState "Alarm Monitor [MAP (status.map):% s]" {mqtt = "<[mqttbroker: openhab / alarm / status: state: default]"} String alarmMonitorIPAddress "Alarm Monitor IP [% s]" {mqtt = "<[mqttbroker: openhab / alarm / ipaddress: state: default]"} Numărul zone1_Chart_Period "Zona 1 Grafic" Contact alarmZone1State "Zona 1 State [MAP (alarm.map):% s]" {mqtt = "<[mqttbroker: openhab / alarm / zone1: state: default "} String alarmZone1Trigger" Lounge PIR [% 1 $ ta% 1 $ tr] "Number zone2_Chart_Period" Zone 2 Chart "Contact alarmZone2State" Zone 2 State [MAP (alarm.map):% s] "{mqtt =" <[mqttbroker: openhab / alarm / zone2: state: default "} String alarmZone2Trigger" First Hall PIR [% 1 $ ta% 1 $ tr] "Number zone3_Chart_Period" Zone 3 Chart "Contact alarmZone3State" Zone 3 State [MAP (alarm.map):% s] "{mqtt =" <[mqttbroker: openhab / alarm / zone3: state: default "} String alarmZone3Trigger" Bedroom PIR [% 1 $ ta% 1 $ tr] "Number zone4_Chart_Period "Diagrama Zonei 4" Contact alarmZone4State "Statul Zonei 4 [MAP (alarm.map):% s]" {mqtt = "<[mqttbroker: openha b / alarm / zone4: state: implicit "} String alarmZone4Trigger" Main Hall PIR [% 1 $ ta% 1 $ tr]"

fișierul „sitemap” (inclusiv graficul rrd4j):

Element text = alarmZone1Trigger valuecolor = [<= 60 = "# ff0000", <= 300 = "# ffa500", <= 600 = "# 008000", 3600 = "# 000000"] {Frame {Switch item = zone1_Chart_Period label = Asocieri „Perioadă” = [0 = „Oră”, 1 = „Zi”, 2 = „Săptămână”] Imagine url = "https:// localhost: 8080 / rrdchart.png" vizibilitate = [zone1_Chart_Period == 0, zone1_Chart_Period = = Uninitialized] Imagine url = "https:// localhost: 8080 / rrdchart.png" vizibilitate = [zone1_Chart_Period == 1] Imagine url = "https:// localhost: 8080 / rrdchart.png" vizibilitate = [zone1_Chart_Period == 2]}} Element text = alarmZone2Trigger valuecolor = [<= 60 = "# ff0000", <= 300 = "# ffa500", <= 600 = "# 008000", 3600 = "# 000000"] {Frame {Switch item = zone2_Chart_Period label = "Perioada" mapări = [0 = "Ora", 1 = "Ziua", 2 = "Săptămâna"] Imagine url = "https:// localhost: 8080 / rrdchart.png" vizibilitate = [zone2_Chart_Period == 0; == 2]}} Element text = alarmZone3Trigger valuecolor = [<= 60 = "# ff0000", <= 300 = "# ffa500", <= 600 = "# 008000", 3600 = "# 000000"] {Cadru {Comutare element = zone3_Chart_Period label = "Perioada" mapări = [0 = "Ora", 1 = "Ziua", 2 = "Săptămâna"] Imagine url = "https:// localhost: 8080 / rrdchart.png" vizibilitate = [zone3_Chart_Period == 0, zone3_Chart_Period == Uninitialized] Image url = "https:// localhost: 8080 / rrdchart.png" vizibilitate = [zone3_Chart_Period == 1] Imagine url = "https:// localhost: 8080 / rrdchart.png" vizibilitate = [zone3_Chart_Period == 2]}} Text item = alarmZone4Trigger valuecolor = [<= 60 = "# ff0000", <= 300 = "# ffa500", <= 600 = "# 008000", 3600 = "# 000000"] {Frame {Switch item = zone4_Chart_Period label = " Perioada "mapări = [0 =" Ora ", 1 =" Ziua ", 2 =" Săptămâna "] Url imagine =" https:// localhost: 8080 / rrdchart.png "vizibilitate = [zone4_Chart_Period == 0, zone4_Chart_Period == Uninitialized] Imagine url = "https:// localhost: 8080 / rrdchart.png" vizibilitate = [zone4_Chart_Period == 1] Imagine url = "https:// localhost: 8080 / rrdchart.png" vizibilitate = [zone4_Chart_Period == 2] }} // OPȚIONAL, dar la îndemână pentru diagnosticarea stării și a adresei IP ss Element text = alarmMonitorState Element text = alarmMonitorIPAddress

fișierul „reguli”:

regula „Schimbarea stării zonei de alarmă 1”

când articolul alarmZone1State s-a schimbat în OPEN apoi postUpdate (alarmZone1Trigger, nou DateTimeType ()) alarmZone1State.state = CLOSED end

regula „Schimbarea stării zonei de alarmă 2”

când articolul alarmZone2State s-a schimbat în OPEN apoi postUpdate (alarmZone2Trigger, nou DateTimeType ()) alarmZone2State.state = CLOSED end

regula „Schimbarea stării zonei de alarmă 3”

când articolul alarmZone3State s-a schimbat în OPEN apoi postUpdate (alarmZone3Trigger, nou DateTimeType ()) alarmZone3State.state = CLOSED end

regula „Schimbarea stării zonei de alarmă 4”

când articolul alarmZone4State s-a schimbat în OPEN, apoi postUpdate (alarmZone4Trigger, nou DateTimeType ()) alarmZone4State.state = CLOSED end

Poate fi necesar să modificați ușor configurația OpenHAB de mai sus pentru a se potrivi cu propria dvs. configurare.

Dacă aveți probleme cu declanșarea PIR-urilor, începeți de la început și măsurați tensiunile pentru fiecare parte a circuitului. Odată ce sunteți mulțumit de acest lucru, verificați cablajul, asigurați-vă că există o bază comună, verificați mesajele de pe Wemos printr-o consolă de depanare serială, verificați comunicarea MQTT și verificați sintaxa fișierelor dvs. de transformare, articole și sitemap.

Noroc!

Recomandat: