Sistemul de monitorizare, alarmare și automatizare proiectat este compus din trei părți și anume: [306945]

[anonimizat], [anonimizat]-[anonimizat], se pot monitoriza eventualelor alarmele deoarece acestea pot prefața un impact negativ asupra rețelelor de telecomunicații și se pot automatiza instalațiile de climatizare care pot menține funcționarea echipamentelor în parametrii normali de funcționare [11].

Operatorii de telecomunicații pot fi afectați prin pagube însemnate dacă nu monitorizează parametrii următori: temperatura ambientală necorespunzătoare a site-urilor, [anonimizat]-uri. [anonimizat].

[anonimizat] a [anonimizat] o [anonimizat], deal sau munte. Administratorii de rețea (tehnicieni sau ingineri) [anonimizat].

[anonimizat]:

– [anonimizat];

– partea de relee care se ocupă cu automatizarea sistemului proiectat;

– pagina web de monitorizare ce asigură interfața dintre interacțiunea între om și calculator.

Schema bloc a [anonimizat] 3.1:

Figura 3.1 Schemă bloc a [anonimizat]:

– proiectarea hardware a sistemului prin alegerea și interconectarea componentelor hardware;

– [anonimizat];

– realizarea sistemului și testarea funcționării în parametrii a fiecărei componente a sistemului.

Etapele parcurse pentru construirea sistemului vor fi prezentate detaliat cu ajutorul subcapitolelor următoare.

3.1 [anonimizat]:

– placa de dezvoltare Arduino UNO R3 este unitatea centrală a sistemului;

– controlerul de rețea Arduino Ethernet Shield W5100, interfață ethernet pentru serverul web;

– [anonimizat], două module senzori de curent și un modul senzor de tensiune;

– două unitați relee care comandă cu ajutorul plăcii de dezvoltare următoarele dispozitive periferice: [anonimizat];

– dispozive folosite pentru monitorizarea accesului în site: buton contact închidere ușă (microswitch cu 2 poziții), buton armare alarmă (întrerupător cu 2 poziții pornit-oprit), modul led RGB și modul buzzer activ pentru sunetul de alarmă;

– dispozitive folosite la circuitul de alimentare: priză dublă alimentare, alimentator de la rețea 12V, 2.5A, acumulator Eagle Battery ES 12V, 1.3AH/20HR, modul coborâre tensiune LM2596 și multipriză alimentare improvizată;

– routerul wireless Bandbridge Atheros reprezintă în machetă echipamentul radio pentru transmisia de date;

– fire și conectori folosiți pentru transferul de date și alimentare a părților electronice.

3.2 Placa de dezvoltare Arduino UNO R3

Unitatea centrală a sistemului de monitorizare, alarmare și automatizare este placa de dezvoltare Arduino UNO R3. Arduino UNO este bazată pe un microcontroler de 16 biți ATmega328p fiind format din 20 pini care pot fi intrări și ieșiri, din care 6 pini sunt pini analogici de intrare, 14 pini sunt digitali din care 6 pini pot fi utilizați ca pini de ieșire PWM (Pulse-width modulation), un oscilator de 16MHz, o programare în circuit (ICSP), un port conexiune USB, o mufă de alimentare și un buton de resetare. Atmega328 are o memorie flash de 32 KB (din care 0,5 KB este ocupat de bootloader), o memorie SRAM de 2 KB și o memorie EEPROM de 1 KB (care poate fi citită și scrisă cu ajutorul bibliotecii EEPROM) [20]. Arduino UNO este una dintre cele mai populare plăci de dezvoltare folosite în cadrul dezvoltării de proiecte electronice, întrucât este ușor de configurat, are un număr destul de mare de pini și este compatibilă cu un număr foarte mare de shield-uri, care permit adăugarea diverselor funcționalități.

R3 din numele microcontrolerului reprezintă faptul că placa de dezvoltare a ajuns la a treia revizie, ce are o mulțime de modificări față de predecesoarele sale și anume: numărul de pini a fost suplimentat, aceștia fiind duplicați ai pinilor anteriori, pinii I2C (A4 și A5) au fost scoși lângă AREF pe marginea plăcii fiind pinii SDA și SCL, lângă pinul de reset există un pin IOREF care este un pin de 5V, chip-ul controlerului USB ATmega8U2 care avea o memorie flash de 8 KB a fost înlocuit de Atmega16U2 care are o memorie flash de 16 KB și butonul de RESET este poziționat lângă portul USB, fiind mai ușor de acționat după o modificare de program [19].

Mai jos în figura 3.2 este prezentată placa de dezvoltare Arduino UNO.

Figura 3.2 Placa de dezvoltare Arduino UNO

Arduino UNO R3 dispune de următorii pini [22]:

– pinul IOREF – este pinul care furnizează tensiune de alimentare la care funcționează microcontrolerul. De obicei furnizează tensiune de 5V dar poate sa furnizeze și tensiune de 3.3V;

– pinul RESET – este pinul utilizat în proiectele unde se dorește adăugarea unui buton de resetare adițional sau unde cel de pe placă este inaccesibil;

– pinul 3V3 – pinul care furnizează o tensiune de alimentare de 3.3V generată de regulatorul plăcii;

– pinul 5V – pinul care furnizează o tensiune de alimentare de 5V care poate fi utilizat ca sursă de alimentare pentru alimentarea microcontrelerului și a altor componente. Alimentarea poate fi făcută cu ajutorul unui VIN printr-un regulator de pe placă, poate fi furnizată de un cablu USB sau de la altă sursă de alimentare cu 5V;

– pinii GND – pinii de nul;

– pinul Vin – pinul care furnizează tensiunea de intrare a plăcii Arduino atunci când se utilizează un alimentator dedicate (între 5 – 20V);

– pinii A0 – A5 – pinii analogici de intrare care oferă 10 biți de rezoluție adică 1024 de valori diferite;

– pinul A4 sau SDA – pinul de date seriale SDA și pinul A5 sau SCL – pinul pentru ceasul serial SCL sunt pinii care asigură comunicația magistralei I2C;

– pinul 0 sau RX – pinul digital folosit pentru a primi date seriale TTL;

– pinul 1 sau TX – pinul digital folosit pentru a transmite date seriale TTL;

– pinii 2 și 3 – pinii digitali care pot să fie configurați pentru întreruperile externe;

– pinii 3, 5, 6, 9, 10 și 11 – pinii digitali de ieșire PWM;

– pinii 10 (SS – selectarea dispozitivului Slave cu care Master-ul comunică), 11 (MOSI – linia Master de a transmite date către dispozitive periferice), 12 (MISO – linie pentru trimiterea datelor către dispozitivul Master), 13 (SCK – semnalul de clock generat de dispozitivul Master pentru sincronizarea transmisiei de date) – pini digitali care asigură comunicarea SPI cu ajutorul bibliotecii SPI;

– pinul 13 – la pinul digital 13 este conectat un LED care este încorporat în placă, care atunci când pinul este în starea High, ledul este aprins, iar când este LOW este stins;

– pinul AREF – pinul care furnizează tensiunea de referință pentru intrările analogice;

Pinii pot furniza un curent cu intensitatea de 40mA la tensiunea electrică de funcționare de 5V și au un rezistor de ridicare intern de 20 – 50KOhm (deconectat în mod implicit) care se activează cu modul de funcționare INPUT_PULLUP.

În cadrul proiectului am ales ca alimentarea cu energie electrică a controlerului să se facă prin portul USB fiindu-i asigurată o alimentare cu tensiune de funcționare 5V curent continuu oferită de un modul coborâre tensiune LM2596 utilizat în machetă cu rolul coborârii tensiunii de 12V oferită de acumulator. Am încercat alimentarea cu 12V direct de la acumulator dar am observat că funcționarea microcontrolerului era instabilă. Am utilizat alimentarea cu 5V care era folosită pentru alimentarea routerului wireless deoarece oferă o funcționare în parametrii optimi.

Se poate alimenta cu energie electrică și de la sursă externă cum ar fi un alimentator dedicat care are posibilitatea să asigure un interval de tensiune de 6-12 V curent continuu. Dacă se folosește un alimentator direct de la rețeaua de curent este preferabil ca alimentarea să se facă într-un interval de tensiune de 7 – 9V curent continuu, dacă limita superioară de tensiune este depășită poate duce la supraîncălzirea regulatorului de tensiune și prin urmare la funcționarea necorespunzătoare sau chiar defectarea controlerului.

Arduino UNO R3 este ultima actualizare adusă platformei Duemilanove, care constă în înlocuirea cip-ului FTDI FT232RL cu un procesor produs de Atmel Atmega 16U2, care preia functiile de convertor USB-serial, pe care le făcea vechiul cip FT232. Datorită acestui procesor auxiliar placa de dezvoltare are propriul bootloader USB, oferind posibilitatea programatorilor să scrie un alt program pentru acesta.

Arduino UNO are trei cronometre numite timer0, timer1 și timer2 [10]. Fiecare dintre cronometre are un contor care este incrementat pe fiecare bifă a ceasului cronometrului.

Întreruperile de temporizare permit efectuarea unei sarcini la intervale foarte precise, indiferent de ce se întâmplă în codul programului. Întreruperile cronometrului CTC Mode (Clear Timer on Compare Match) sunt declanșate atunci când contorul atinge o valoare specificată, stocată în registrul de comparare a potrivirii. Odată ce un contor de timp ajunge la această valoare, se va șterge (resetarea la zero) la următoarea bifă a ceasului, iar apoi va continua să numere până când va atinge din nou valoarea de comparație. Alegerea valorii de comparare a potrivirii și stabilirea vitezei cu care cronometrul crește numărătorul, putem controla frecvența întreruperilor cronometrului.

Pentru programarea microcontrolerului am folosit mediul de dezvoltare integrat Arduino IDE (Integrated Development Environment). Arduino IDE fiind principalul program de editare a textului unde se introduce codul program înainte de a fi încărcat pe placa de dezvoltare pe care am dorit să o programăm. Utilizând protocolul STK500, folosim bootloader-ul preinstalat pentru încărcarea codului program, nefiind necesară utilizarea unui programator extern. Se poate programa controlerul și fără utilizarea bootloader-ului prin standardul de programare serială ICSP (In Circuit Programming Serial) [19]. Arduino IDE folosește limbajul de programare C++. După ce am încărcat secvența de cod, aceasta rămâne salvată în cadrul memoriei flash chiar și după ce nu mai avem alimentare. În momentul în care realimentăm placa nu mai este nevoie să ne reconectăm și să retransmitem codul întrucât el este deja acolo și este rulat automat.

Placa de dezvoltare Arduino UNO este utilizată de o mare comunitate de utilizatori și are o plajă extinsă de biblioteci care poate fi folosită pentru o multitudine de proiecte. Există kit-uri pentru dezvoltatori începători ce conține breadbord-uri, conectori, fire, led-uri care ușurează munca dezvoltatorilor. Singurele dezavantaje sunt frecvența destul de scăzută a microprocesorului și memoria nu foarte cuprinzătoare de tip flash și EEPROM. Un alt amănunt care nu se pliază foarte bine cu transmiterea datelor la distanță (conceptul IoT) este acela că placa nu vine cu un adaptor ethernet inclus, dar se poate rezolva prin achiziționarea separată a unui controler de rețea compatibil (shield).

Pinii plăcii Arduino UNO pot fi utilizați ca pini de intrare sau de ieșire utilizând funcțiile: „pinMode()”- definim modul de funcționare al pinilor folosiți (INPUT sau OUTPUT), „digitalRead()”- alocăm pinilor folosiți variabile pentru citire senzori și „digitalWrite()”-alocăm pinilor folosiți în modul INPUT o valoare inițială.

3.3 Controlerul de rețea Arduino Ethernet Shield W5100

Controlerul de rețea Arduino Ethernet Shield W5100 a fost aleasă datorită necesității transmiterii la depărtare a datelor obținute local de către sistemul de monitorizare, alarmare și automatizare proiectat. Am folosit placa de dezvoltare Arduino UNO și Arduino Ethernet Shield W5100 pentru a crea un server web care să găzduiască pagină web care va permite monitorizarea sistemului proiectat asigurând interfața dintre interacțiunea între om și calculator.

Arduino Ethernet Shield W5100 este simplu spus un controler de rețea de 10/100 cu un singur chip integrat conceput pentru diverse aplicații din sistemele încorporate, fiind compatibil atât cu placa de dezvoltare Arduino UNO cât și cu modelul Arduino MEGA. Modelul W5100 a fost conceput pentru a ușura implementarea conectivității pe internet fără sistem de operare. Este un controler foarte eficient datorită ușurinței de integrare, stabilității în funcționare, performanței oferite în raport cu costurile sistemului încorporat.

Arduino Ethernet Shield este bazat pe un microcontroler cu chipset Wiznet W5100 fiind format din 20 de pini care pot fi intrări sau ieșiri, 14 pini sunt digitali din care 4 pini asigură ieșire PWM, 6 pini sunt pini analogici de intrare, un oscilator de cristal de 16 MHz, un port conector ethernet RJ45, o mufă de alimentare, un conector ICSP și un buton de resetare. În figura 3.3 este prezentată placa de rețea Arduino Ethernet Shield W5100 [21].

Figura 3.3 Arduino Ethernet Shield W5100

Arduino Ethernet Shield W5100 poate fi folosită fie ca server, fie ca și client și este capabilă de a suporta până la 4 conexiuni simultan. Controlerul-ul de rețea W5100 permite ca placa de dezvoltare Arduino UNO să fie conectat la rețeaua de internet. Controlerul W5100 utilizează biblioteca Arduino Ethernet, oferind posibilitate plăcii de rețea de a obține o stivă de rețea, TCP/IP. Suportă protocoale de rețea cum ar fi: TCP, UDP, ICMP, IPv4 ARP, IGMP, PPPoE, Ethernet. Slotul de card microSD din componența controlerului W5100 poate fi utilizat pentru a stoca date pentru a fi utilizate în rețea.

Arduino UNO comunică cu controlerul W5100 prin folosirea pinilor digitali 11, 12 și 13. Comunicarea se realizează prin magistral SPI, pinul digital 10 fiind utilizat pentru conexiunea cu controlerul W5100 și pinul digital 4 fiind utilizat pentru conexiunea cu cardul microSD, având posibilitatea ca numai una din conexiuni să fie activă la un moment dat.

Datorită faptului că am utilizat toți pinii plăcii Arduino UNO și din nevoia utilizării unui nou pin am făcut o modificare a pinilor controlerului W5100. Nefolosind cardul microSD în proiectarea sistemului am decis să îndoi pinul digital 4 al controlerului W5100 ca să nu mai comunice cu placa Arduino UNO, eliberând în felul acesta un nou pin care va fi disponibil pentru conectare. Pe pinul digital 4 de pe placa de dezvoltare am conectat direct un modul de releu utilizat pentru controlul sistemului de răcire prin ventilație. Arduino Ethernet Shield W5100 este prevăzută cu o mufă standard ethernet RJ45, un buton de “RESET”, ce resetează atât placa de rețea cât și Arduino UNO.

Placa conține următoarele LED-uri cu caracter informativ:

– PWR – ce indică faptul că Arduino Ethernet Shield W5100 și placa de dezvoltare Arduino UNO sunt alimentate;

– LINK – ce indică prezența unei legături de rețea și clipește când placa are trafic de date (transmite sau primește date);

– 100M – ce indică prezența unei conexiuni de rețea la viteza de 100 Mb/s (spre deosebire de 10 Mb/s);

– FULLD – ce indică existența unei conexiuni la rețea complet duplex;

– COLL – ce indică detectarea coliziunilor de rețea atunci când clipește;

– RX – ce indică primirea datelor de către placă atunci când clipește;

– TX – ce indică trimiterea datelor de către placă atunci când clipește.

3.4 Unitățile de senzori și relee utilizate în proiectarea hardware a sistemului

În proiectarea hardware a sistemului de monitorizare, alarmare și automatizare am utilizat atât unități de senzori cât și relee de comandare a echipamentelor. Prin definiție senzorii sunt dispozitivele care măsoară o mărime pe care apoi o transformă într-un semnal pe care utilizatorul îl citește, fie că măsurarea este calitativă sau cantitativă.

Releele sunt dispozitivele care pot aduce anumite modificări unui circuit cum ar fi închiderea și deschiderea în funcție de parametrii definiți [12]. Relele pot permite cu ajutorul unui curent de intensitate mică controlarea unui curent de intensitate mare.

Unitățile de senzori dedicate utilizate sunt: modul senzor de nivel apă, modul senzor de temperatură și umiditate, modul senzor de tensiune și două module senzori de curent. Pentru monitorizarea stării ușii de acces în site am utilizat un buton contact microswitch cu 2 poziții. Pentru armarea alarmei site-ului am utilizat un buton întrerupător cu 2 poziții (pornit-oprit), folosit pentru exemplificare în cadrul machetei realizate. În locul unui simplu întrerupător cu 2 poziții, pentru armarea alarmei site-ului putem folosi de exemplu un sistem cu cititor de carduri de acces sau o tastatura pentru controlul accesului în site.

În proiectarea și dezvoltarea sistemului s-a urmărit monitorizarea parametrilor următori:

– starea mediului ambiental prin monitorizarea nivelului de apă, a temperaturii și a umidității din camera tehnică a site-ului;

– starea alimentării cu energie electrică a site-ului prin monitorizarea alimentării de la rețea cât și alimentarea de la acumulator;

– accesul fizic în camera tehnică a site-ului (autorizat sau neautorizat) prin monitorizarea stării ușii (deschisă sau închisă).

Obținerea în timp real a acestor date este foarte importantă pentru monitorizarea și alarmarea administratorilor de rețea din cadrul NOC-urilor, în acest fel orice deranjament poate fi soluționat în cel mai scurt timp posibil și eventualele întreruperi de telecomunicații să fie evitate. Automatizarea sistemului proiectat constă în faptul că: la deschiderea ușii de acces în camera tehnică a site-ului pornirea automată a sistemului de iluminat, la accesul neautorizat în site, pornirea automată a alarmei sonere pentru descurajarea intruziunilor și în funcție de valoarea temperaturii din camera tehnică a site-ului funcționarea automată a sistemului de răcire (ventilator) sau a sistemului de încălzire (radiator). Modulele de senzori și relee folosite pentru realizarea proiectului sunt compatibile cu biblioteticilor Arduino și sunt descrise mai jos.

3.5 Senzorul de nivel de apă

Pentru monitorizarea unei posibile inundații a camerei tehnice din site în sistemul proiectat am folosit un modul senzor de nivel de apă. Senzorul ales este unul simplu, de dimensiuni mici, care are un consum redus de energie, o sensibilitate ridicată și performanțe bune. Senzorul poate fi folosit atât pentru identificarea nivelului de apă cât și pentru identificarea căderii picăturilor de apă. În cadrul sistemului proiectat l-am folosit ca senzor de detectare a nivelului de apă, care va fi de ajutor pentru identificarea posibilelor inundații ale camerei tehnice a site-ului.

Senzorul funcționează cu tensiunea de lucru 3 – 5V, cu un curentul de lucru mai mic de 20mA , obținând performanțe bune când este utilizat împreună cu un controler Arduino. Senzorul are un led Power ce indică faptul că senzorul este alimentat. Temperatura de lucru a senzorului este între 10 – 30°C iar umiditatea de lucru este între 10 – 90% fără condensare.

Detectarea ridicării sau a căderii nivelului de apă se face instant datorită seriilor de fire paralele dispuse pe suprafața senzorului care sunt expuse direct volumului de apă. Senzorul este ușor de instalat și de utilizat, făcând conversia apei în semnal analogic iar valorile analogice de ieșire putând fi citite direct de către Arduino.

Conectarea senzorului la Arduino UNO a fost realizată cu ajutorul pinilor existenți pe carcasa senzorului în felul următor: pinul de alimentare + (plus) l-am conectat la un pin de alimentare de 5V din multipriza de alimentare, pinul de masă – (minus) l-am conectat la un pin de masă din multipriza de alimentare și pinul de date S l-am conectat la pinul analogic A0.

Pinul utilizat pe placa Arduino l-am declarat cu variabila globală „WaterSensorPin=A0” de tip „int” care reprezintă numere întregi. Apoi am declarat variabila senzorului de nivel de apă „StatusApă” de tip „String” care reprezintă un șir de caractere. Am definit modul de funcționare al pinului folosind funcția „pinMode()” de tipul „INPUT_PULLUP”.

Citirea senzorului se realizează cu ajutorul funcției „analogRead()” care poate citi valori de la 0 la 1024. Partea de monitorizare a sistemului afișează în pagina HTML valoarea nivelului de apă afișând mesajul „Nivel apă: _ _ _ _”. Partea de alarmare a sistemului, funcționează adaugând în tabelul cu “Mesaje importante”, o coloană colorată cu portocaliu dacă valoarea nivelului de apă depășește valoarea de 150 („StatusApă>150”) afișând mesajul: „Nivel apă ridicat!”. Mai jos se poate vedea senzorul de nivel de apă prezentat în figura 3.4.

Figura 3.4 Senzorul de nivel de apă

3.6 Senzorul de temperatură și umiditate AM2320

Pentru monitorizarea temperaturii și umidității în sistemul proiectat am folosit senzorul de temperatură și umiditate AM2320. Senzorul AM2320 este un senzor digital de dimensiuni foarte mici, care are o precizie foarte bună, este ușor de utilizat și este foarte eficient din punct de vedere al costurilor având un preț de achiziție mic. Am ales senzorul AM2320 și datorită consumului de energie al acestuia extrem de redus și distanței de transmisie a semnalului care poate ajunge la peste 20 de metri. Senzorul AM2320 este de o calitate excelentă, oferind un răspuns rapid și o puternică capacitate de combatere a interferențelor.

Performanțele senzorului AM2320 la măsurarea temperaturaturii sunt între -40 – 80°C având o precizie de 0.5°C la o temperatură de 25°C, iar umiditatea este măsurată în intervalul 0 – 99%RH având o precizie de 3%. Principiul de funcționare al măsurării umidității și a temperaturii este făcută de un senzor capacitiv de umiditate care masoară umiditatea relativă a mediului ambiant iar temperatura mediului ambiant este masurată de un termistor.

Senzorul AM2320 arată foarte mult cu senzorii de temperatură și umiditate DHT11 și DHT22, dar spre deosebire de senzorii clasici DHT, are o interfață I2C și nu este nevoie să folosim un protocol specific pentru sincronizarea timpului, pentru a comunica cu senzorul [23]. Senzorul de temperatură și umiditate AM2320 este prezentat în figura 3.5 de mai jos.

Figura 3.5 Senzorul de temperatură și umiditate AM2320

Conectarea senzorului AM2320 la Arduino UNO a fost realizată cu ajutorul pinilor existenți pe carcasa senzorului în felul următor: pinul de alimentare 1 (VCC) l-am conectat la un pin de alimentare de 5V din multipriza de alimentare, pinul de masă 3 (GND) l-am conectat la un pin de masă din multipriza de alimentare, pinul de date seriale 2 (SDA) l-am conectat la pinul analogic A4 care la Arduino UNO este predefinit ca pin SDA și pinul pentru ceasul serial 4 (SCL) l-am conectat la pinul analogic A5 care la Arduino UNO este predefinit ca pin SCL. Am declarat biblioteca „AM2320” și variabila senzorului de temperatură și umiditate „THsensor”. Am declarat variabilele „StatusTemp” și „StatusUmid” de tip „float” care au valori ale numerelor reale cu două zecimale. Citirea valorilor senzorului se realizează în funcția „THsensor.Read()” care alocă variabilelor „THsensor.t” și „THsensor.h” valorile citite de la senzori.

Partea de monitorizare a sistemului afișează în pagina HTML valoarea temperaturii afișând mesajul „Temperatură (Celsius): _ _ . _ _” și valoarea umidității relative afișând mesajul „Umiditate (%RH): _ _ . _ _”. În funcție de valorile de temperatură citite partea de automatizare din sistemul proiectat acționează releele care comandă sistemele de climatizare (ventilator sau radiator) în funcție de pragurile de ventilație și căldură definite cu ajutorul constantelor „VentMAX”, „VentMIN”, „CăldurăMAX” și „CăldurăMIN”.Partea de alarmare a sistemului, funcționează adaugând în tabelul cu “Mesaje importante”, o coloană colorată cu galben în funcție de valoarea temperaturii. Dacă temperatura este mai mică decât 27°C („StatusTemp<27”) afișează mesajul: „Temperatură joasă!” iar dacă temperatura este mai mare decât 29°C („StatusTemp>29”) afișează mesajul: „Temperatură înaltă!”.

3.7 Senzorii de curent

Pentru monitorizarea alimentării site-ului cu energie electrică în sistemul proiectat am folosit doi senzori de măsurare a intensității curentului electric. Primul senzor „AmpIn” este folosit la măsurarea curentului de intrare în acumulator și indică eventualele întreruperi cu energia electrică furnizată de alimentatorul conectat direct la rețea. Cel de-al doilea senzor „AmpOut” este folosit pentru măsurarea curentului de ieșire din acumulator și ne permite monitorizarea stării acumulatorului. Monitorizarea intensității curentului electric este benefică deoarece putem observa defecțiuni ale sistemului de alimentare. Modificarea intensității curentului și creșterea puterii poate conduce la defectarea sursei de alimentare sau a acumulatorului.

Senzorii de curent folosiți sunt Hall ACS712, unde tensiunea de alimentare trebuie să fie între 4,5 – 5,5V, consum de curent este de 10mA iar curentul maxim măsurat este de 20A. Senzorul este unul de dimensiuni mici care are un led ce indică faptul că senzorul este alimentat. Senzorul se montează în serie cu circuitul de alimentare, prinderea firelor făcându-se cu ajutorul a două contacte cu șurub.

Conectarea senzorilor la Arduino a fost realizată cu ajutorul pinilor existenți pe carcasele senzorilor în felul următor: pinii de alimentare VCC i-am conectat la pinii de alimentare de 5V din multipriza de alimentare, pinii de masă GND i-am conectat la pinii de masă din multipriza de alimentare și pinii de date OUT i-am conectat la pinul analogic A1 pentru citirea curentului de la alimentatorul de la rețea și la pinul analogic A2 pentru citirea curentului de ieșire din acumulator.

Pinii utilizați pe placa Arduino i-am declarat cu variabilele globale „AmpIn=A1” și „AmpOut=A2” de tip „int” care reprezintă numere întregi. Apoi am declarat variabilele „Amp1=0” și „Amp2=0” de tip „float” care reprezintă tipuri de date pentru numerele cu virgulă. Numerele cu virgulă sunt adesea folosite pentru a aproxima valorile analogice și care sunt continue deoarece au o rezoluție mai mare decât numerele întregi. Am definit modul de funcționare al pinilor folosind funcția „pinMode()” de tipul „INPUT”. Citirea senzorului se realizează cu ajutorul funcției „analogRead()”. Deoarece este o citire digitală se folosește o formulă care ține cont de eșantionarea și de eroarea de măsurare a senzorului.

Citirea valorilor obținute de senzori se face de către Arduino care trimite datele citite către serverul web pentru a putea fi afișate în pagina HTML. Partea de monitorizare a sistemului afișează în pagina HTML valorile intensității curentului afișând mesajele „Ain=_ . _ _ _ A (intrare acumulator)” și „Aout=_ . _ _ _ A (ieșire acumulator)”. Partea de alarmare a sistemului, funcționează adaugând în tabelul cu “Mesaje importante”, o coloană colorată cu roșu dacă valoarea curentului de intrare în acumulator scade sub valoarea de 0.2A („Amp1<0.2”) afișând mesajul: „Lipsă energie electrică de la rețea!”. Senzorul de curent ACS712 este prezentat mai jos în figura 3.6.

Figura 3.6 Senzorul de curent ACS712

3.8 Senzorul de tensiune

Pentru monitorizarea stării acumulatorului din sistemul proiectat pe lângă ampermetrul am folosit și un senzor de tensiune. Senzorul este folosit pentru măsurarea tensiunii de ieșire din acumulator și ne permite determinarea stării de încărcare a acumulatorului. Prin monitorizarea tensiunii de alimentare se pot evita evenimente ce pot genera deranjamente sau defecțiuni ale echipamentelor de comunicații ce au efect întreruperea serviciilor.

Senzorul de tensiune ales utilizează un divizor de potențial cu scopul reducerii tensiunii de intrare cu un factor de 5. Cu ajutorul unei game de intrare analogică 0 – 5V, putem măsura o tensiune până la 25V cu precizia de detecție în plaja de 0,02445 – 25V DC.

Senzorul se montează în paralel cu circuitul de alimentare, borna de alimentare conectându-se la contactul cu șurub VCC iar cea de masă la contactul cu șurub GND. Conectarea senzorilor la Arduino a fost realizată cu ajutorul pinilor existenți pe carcasa senzorului în felul următor: pinul de alimentare + (plus) l-am conectat la un pin de alimentare de 5V din multipriza de alimentare, pinul de masă – (minus) l-am conectat la un pin de masă din multipriza de alimentare și pinul de date S l-am conectat la pinul analogic A3.

Pinul utilizat pe placa Arduino l-am declarat cu variabila globală „VoltOut=A3” de tip „int” care reprezintă număr întreg. Apoi am declarat variabila „Volt=0” de tip „float” care reprezintă tipuri de date pentru numerele cu virgulă. Am definit modul de funcționare al pinului folosind funcția „pinMode()” de tipul „INPUT”. Citirea senzorului se realizează cu ajutorul funcției „analogRead()”. Deoarece este o citire digitală se folosește o formulă care ține cont de eșantionarea și de eroarea de măsurare a senzorului.

Citirea valorilor obținute de senzori se face de către Arduino, care trimite datele citite către serverul web pentru a putea fi afișate în pagina HTML. Partea de monitorizare a sistemului afișează în pagina HTML valoarile tensiunii afișând mesajul „Vout=_ _ . _ _ _ V (ieșire acumulator)”. Senzorul de tensiune este prezentat mai jos în figura 3.7.

Figura 3.7 Senzorul de tensiune

3.9 Unitățile de relee

Pentru acționarea instalațiilor automatizate în sistemul proiectat am folosit două module de relee cu două canale, din care am folosit trei canale pentru a controla iluminatul, ventilatorul și radiatorul din cadrul site-ului. Modulele de relee pot să controleze, cu ajutorul plăcii de dezvoltare Arduino UNO, instalații sau echipamente ce funcționează cu o tensiune electrică înaltă.

Sarcina maximă la care releele pot funcționa este de 250V și 10A curent alternativ sau 30V și 10A curent continuu, iar optocuploarele funcționează la tensiunea de operare de 5V cu un curent de 5mA. Modulele sunt de dimensiuni mici și au două leduri ce indică activarea fiecărui releu. Conectarea echipamentelor acționate se realizează la bornele cu șurub, fiecare modul se poate conecta în mod normal închis sau normal deschis. Există o bornă comună care este notată cu K1 sau K2. Conectarea modulelor le-am făcut în modul normal deschis, atunci când pinul de control este alimentat borna normal închis este deconectată fiind făcută legătura între borna comună și borna normal deschis.

În figura 3.8 este prezentată conectarea echipamentelor la terminalele releelor și pinii de comunicare cu Arduino pentru comandă și control.

Figura 3.8 Module relee și modul de conectare

Conectarea releelor la Arduino a fost realizată cu ajutorul pinilor existenți pe carcasele releelor în felul următor: pinii de alimentare VCC i-am conectat la pini de alimentare de 5V din multipriza de alimentare, pinii de masă GND i-am conectat la pini de masă din multipriza de alimentare, pinul de date IN1 (releu ventilație) l-am conectat la pinul digital 4 și pinul de date IN2 (releu căldură) l-am conectat la pinul digital 6. Pinul de date IN1 (releu LED iluminat) l-am conectat la microswitch-ul ce determină starea ușii (deschisă sau închisă). Atunci când ușa este deschisă releul primește comandă să alimenteze LED-ul ce asigură iluminatul în site.

Pinii utilizați pe placa Arduino i-am declarat cu variabilele globale „ReleuVentilație=4” și „ReleuCăldură=6” de tip „int” care reprezintă număre întregi. Am definit modul de funcționare al pinilor folosind funcția „pinMode()” de tipul „OUTPUT”. Apoi am alocat pinilor valoarea 1 cu ajutorul funcției „digitalWrite()” însemnând faptul că atât ventilația cât și căldura sunt oprite.

3.10 Dispozitive folosite pentru monitorizarea accesului în site

Pentru monitorizarea accesului în site în sistemul proiectat am folosit un buton contact închidere ușă și un buton armare alarmă. Pentru monitorizarea stării ușii de acces am folosit un microswitch cu două poziții (normal deschis) iar pentru armarea alarmei de descurajare a intruziunilor am folosit un întrerupător cu două poziții (pornit – oprit) care a fost folosit pentru exemplificare în cadrul machetei realizate. În locul unui simplu întrerupător cu două poziții, pentru activarea alarmei site-ului putem folosi de exemplu un sistem cu cititor de carduri de acces sau o tastatura pentru controlul accesului în site.

Conectarea microswitch-ului la Arduino (conform figurii 3.10) a fost realizată cu ajutorul a doi pini existenți pe carcasa modulului în felul următor: primul pin (firul de culoare mov) care comunică cu lamela de acționare a fost legat la un pin de alimentare de 5V din multipriza de alimentare iar al doilea pin a fost conectat la Arduino cu ajutorul pinul digital 2 (firul gri) și la releul ce acționează iluminatul cu ajutorul pinului IN1 (firul roșu). Conectarea întrerupătorului la Arduino a fost realizat cu ajutorul celor doi pini disponibili în felul următor: primul pin a fost legat la un pin de alimentare de 5V din multipriza de alimentare iar al doilea pin a fost conectat la Arduino cu ajutorul pinul digital 3.

În figura 3.9 de mai jos sunt prezentate butonul contact închidere ușă în partea din stânga și întrerupătorul cu două poziții în partea din dreapta.

Figura 3.9 Microswitch și întrerupător cu două poziții

Pentru descurajarea intruziunilor locale am folosit un modul buzzer activ pentru alarma sonoră și un modul led RBG pentru afișarea statusului alarmei.

Sistemul de monitorizare a accesului în site funcționează în felul următor:

– la accesul neautorizat în site sistemul pornește alarma sonoră pentru descurajarea intruziunilor neautorizate;

– în funcție de starea alarmei se afișează în mod automat cu ajutorul unui modul led RGB o culoare (roșu, verde și albastru) care indică starea sistemului de alarmă (roșu – intruziune, albastru – intervenție și verde – normal).

Buzzerul activ l-am ales datorită faptului că aveam nevoie de o alarmă sonoră în caz de efracție și datorită principiului de funcționare al modului. Spre deosebire de buzzerul pasiv care are nevoie de un semnal dreptunghiular, modulul activ genereaza un sunet continuu, de frecventa fixa, dacă este aplicat un semnal de 5V. Modulul emite sunet la o frecventa predefinită (2300 ± 300Hz) dacă este alimentat cu tensiunea de alimentare 3.3 – 5V, cu un curent maxim de 30mA și funcționează în parametrii optimi de temperatură cuprinși între -20 – 45°C.

Conectarea modului buzzer activ la Arduino a fost realizată cu ajutorul pinilor existenți pe carcasa modului în felul următor: pinul de alimentare VCC l-am conectat la un pin de alimentare de 5V din multipriza de alimentare, pinul de masă GND l-am conectat la un pin de masă din multipriza de alimentare iar pinul de date I/O l-am conectat la pinul digital 5. În figura 3.10 de mai jos sunt prezentate modulul buzzer activ (în stânga) și ledul RGB (în dreapta).

Figura 3.10 Modul buzzer activ și led RGB

Modulul ledului RGB este format dintr-un led tricromatic care cu ajutorul pinilor R, G, B cu trei intrări de tensiune PWM, poate fi ajustată secțiunea cu trei culori primare (roșu, verde, albastru) pentru a obține un efect de amestecare color. Modulul funcționează la tensiune de operare între 3.3 – 5V având rezistența curentă de 50mΩ și un consum maxim de 20mA pentru fiecare culoare. Conectarea ledului RGB la Arduino a fost realizată cu ajutorul celor patru pini existenți pe carcasa modului în felul următor: pinii de date R, G și B i-am conectat la pinii digitali 7, 8 respectiv 9 și pinul de masă – (minus) l-am conectat la un pin de masă din multipriza de alimentare.

Pinii utilizați pe placa Arduino i-am declarat cu variabilele globale „DoorPin=2”, „AlarmPin=3”, „SpeakerPin=5”, „Red=7”, „Green=8” și „Blue=9” tip „int” care reprezintă numere întregi. Am declarat variabilele „AlarmStatus” și „DoorStatus” de tip „int” care reprezintă numere întregi. Apoi am declarat variabilele „Intruziune=false” ce face ca alarma sonoră ce a fost pornită să nu se oprească atunci când ușa este închisă și variabilele „StatusAlarmă”, „StatusUșă” de tip „string” care reprezintă un șir de caractere.

Am definit modul de funcționare ai pinii folosind funcția „pinMode()” de tipul „OUTPUT”. Apoi am alocat pinilor o valoare inițială cu ajutorul funcției „digitalWrite()” de felul următor: „SpeakerPin” a primit valoarea 1, difuzorul fiind oprit iar „Red”, „Green” și „Blue” au primit valoare 0, culorile roșu, verde și albastru fiind stinse. După am configurat „Timer1” și am declarat procedura „Timer1”.

Citirea stării pinilor „AlarmPin” și „DoorPin” se realizează cu ajutorul funcției „digitalRead()”. În funcție de starea variabilelor „AlarmStatus” și „DoorStatus” am definit comandarea ledului RGB și a buzzerului în felul următor:

dacă alarma este armată și ușa este deschisă cu ajutorul funcției „digitalWrite()” am definit valoarea ledului „Red” să aibă valoarea 1 (ledul RGB se face de roșu), „SpeakerPin” să aibă valoarea 0 (pornește alarma sonoră) și „Intruziune=true” (se definește intruziunea);

dacă alarma este dezarmată, ușa este deschisă și nu este intruziune cu ajutorul funcției „digitalWrite()” am definit valoarea ledului „Blue” să aibă valoarea 1 (ledul RGB se face albastru);

dacă condiția intruziune nu este îndeplinită cu ajutorul funcției „digitalWrite()” am definit valoarea ledului „Green” să aibă valoarea 1 (ledul RGB se face verde).

După aflăm starea alarmei („ARMAT” sau „DEZARMAT”) și a ușii („ÎNCHISĂ” sau „DESCHISĂ”). Citirea valorilor obținute se face de către Arduino care trimite datele citite către serverul web pentru a putea fi afișate în pagina HTML. Partea de monitorizare a sistemului afișează în pagina HTML starea accesului în site afișând mesajele: „Status alarmă:” „ARMAT” sau „DEZARMAT” și „Status ușă:” „ÎNCHISĂ” sau „DESCHISĂ”.

Partea de alarmare a sistemului, funcționează adaugând în tabelul cu “Mesaje importante”, o coloană care afișează mesajul: „Echipă de intervenție în site.” dacă alarma este dezarmată, ușa este deschisă și nu este intruziune sau o coloană colorată cu roșu care afișează mesajul: „INTRUZIUNE!” dacă condiția intruziune este indeplinită.

Schema de conectare a tuturor senzorilor și releelor folosite pentru realizarea sistemului de monitorizare, alarmare și automatizare este prezentată în figura 3.11.

Figura 3.11 Schemă de conectare senzori și relee

3.11 Dispozitive folosite la circuitul de alimentare

Pentru alimentarea tuturor componentelor electronice din sistemul proiectat am folosit următoarele dispozitive: priză dublă alimentare, alimentator de la rețea 12V, 2.5A, acumulator Eagle Battery ES 12V, 1.3AH/20HR, modul coborâre tensiune LM2596, multipriză alimentare improvizată, conectori și fire de conectare. Circuitul de alimentare proiectat este format din mai multe părți: partea de alimentare de la rețeaua de energie electrică , partea de alimentare de rezervă și partea de alimentare între componentele electronice.

Schema bloc a circuitului de alimentare a componentelor electronice din cadrul sistemului proiectat este prezentată în figura 3.12.

Figura 3.12 Schemă bloc a circuitului de alimentare

În cadrul machetei realizate alimentarea site-ului cu energie electrică de la rețea de 220V a fost făcută cu ajutorul unei prize duble și a unui alimentator de 12V, 2.5A. Transferul de curent se face datorită unui cablu de alimentare cu ștecher la capăt care poate fi montat la orice priză. În una dintre cele două prize disponibile în site am conectat un alimentator de 12V, 2.5A care face posibilă alimentarea echipamentelor electronice din macheta sistemului proiectat.

Partea de alimentare de rezervă este formată dintr-un acumulator Eagle Battery ES 12V, 1.3AH/20HR care poate să alimenteze echipamentele electronice pe o perioadă de timp limitată dacă alimentarea de la rețea nu este posibilă. Autonomia acumulatorului este determinată de starea de încărcare a acumulatorului și de consumul echipamentelor alimentate de acesta.

În cadrul machetei sunt alimentate mai multe echipamente electronice care au tensiuni de funcționare diferite și anume: ventilatorul, radiatorul și iluminatul sunt alimentate cu tensiunea de 12V iar Arduino UNO și routerul wireless sunt alimentate cu tensiunea de 5V.

Pentru alimentarea cu 5V a unității centrale a sistemului (Arduino UNO) și a routerului wireless (ce simbolizează echipamentul radio pentru transmisia de date în machetă) am folosit un modul coborâre tensiune LM2596.

Modulul LM2596 are tensiunea de intrare între 4 – 40V (tensiunea de intrare trebuie să fie cu 1.5V mai mare decât tensiunea de ieșire, fără impuls), tensiunea de ieșire între 1.25 – 27V este reglabilă în mod continuu, curentul maxim de ieșire fiind de 3A, puterea de iesire fiind 50W fără răcire și 70W cu răcire, protecția la scurtcircuit fiind de 8A. Temperatura de lucru a modulului este între -40 – 85°C, la frecventa de functionare de 180 Khz, având o eficiență maximă de 96% , modulul având protecție la supratemperatură dar nu are protecție la alimentarea inversă. Pentru a obține tensiunea necesară reglajul se face în trepte de 0.1V cu ajutorul butonului de reglaj situat pe potențiometrul albastru și binențeles monitorizând tensiunea de la ieșire cu ajutorul unui multimetru. Conectarea circuitul de alimentare se face din direcția intrare (cu ajutorul celor două borne IN+ și IN-) iar tensiunea coborâtă se obține în direcția ieșire (OUT+ și OUT-) conform figurii 3.13 de mai jos.

Figura 3.13 Modul coborâre tensiune LM2596

Partea de alimentare între componentele electronice a fost făcută cu ajutorul unei multiprize de alimentare improvizată, a unor conectori și fire de conectare. Multipriza de alimentare suplimentează numărul redus de porturi de alimentare disponibile la Arduino UNO. Multipriza are două rânduri de pini fiecare cu câte 16 porturi, un rând pentru faza de alimentare de 5V și un rând pentru faza de nul GND.

3.12 Proiectarea și realizarea componentei software a sistemului

Proiectarea și realizarea arhitecturii software necesare funcționării sistemului a fost creată conform structurii prezentate în diagrama de program, codul sursă pentru placa de dezvoltare Arduino UNO fiind atașat acestei lucrări în Anexa 1. În figura 3.14 este prezentată diagrama de program pentru sistemul proiectat pentru monitorizarea, alarmarea și automatizarea unui site de telecomunicații.

Figura 3.14 Diagramă de program

Structura programului este construită din mai multe elemente principale și cuprinde partea de inițializare unde sunt declarate bibliotecile, constantele, variabilele globale care vor fi apelate în cadrul programului [3]. Bibliotecile declarate sunt “Ethernet.h” și “AM2320.h” ce sunt folosite pentru placa de rețea și pentru senzorul de temperatură și umiditate. Constantele “VentMAX”, “VentMIN”, “CăldurăMAX” și “CăldurăMIN” definite în partea de inițializare sunt praguri de temperatură utilizate pentru partea de automatizare a climatizării. Variabilele globale, sunt declarate pentru a putea fi apelate în cadrul programului, și conțin denumirile pinilor utilizați, adresa MAC și adresa IP a plăcii de rețea, inițializarea serverului HTTP pe portul 80 și alte variabile care se ocupă de starea senzorilor utilizați în proiect. După urmează procedura de inițializare a programului cu ajutorul funcției “setup()” denumită Diagramă Setup. După urmează declanșarea procedurii „Timer1” care este o buclă fără condiții de oprire folosită la partea de intruziune în site descrisă de Diagrama intruziune. Programul conține și o buclă principală “loop” care este o buclă fără condiții de oprire care citește senzorii utilizați în proiect (Diagrama citire senzori), comandă partea de automatizare ce acționează releele de încălzire și ventilație (Diagrama control relee temperatură). Apoi verifică condiția existenței clienților cu date de transmis iar dacă aceștia nu există așteaptă o secundă și după face un salt la începutul buclei. Dacă aceștia există și condiția “currentLineIsBlank=true” este adevărată verifică conectarea clienților la serverul HTML. Dacă găsește client conectat verifică dacă este disponibil iar dacă nu este îndeplinită condiția execută comanda “client.stop” după care face un salt la începutul buclei.

Dacă răspunsul este afirmativ atunci verifică condiția dacă este disponibilă o linie nouă care este goală. Dacă condiția “linie nouă și currentLineIsBlank=true” este adevărată serverul trimite Diagrama răspuns HTML care se ocupă de afișarea paginii HTML folosită pentru monitorizare și alarmare și după face break. După este verificată condiția existenței unei linii noi, iar dacă aceasta este goală (“currentLineisBlank=true”) programul face un salt până la condiția verificării existenței clienților conectați. Dacă mai există caractere de citit condiția “currentLineisBlank=false” este îndeplinită și după are loc saltul până la condiția verificării existenței clienților conectați.

3.13 Diagramă Setup

Diagrama Setup este procedura de inițializare a programului și a fost realizată cu ajutorul funcției “setup()”. De regulă funcția “setup()” este apelată când se începe o schiță, fiind utilizată pentru a inițializa variabile, modul de funcționare al pinilor sau pentru a începe utilizarea bibliotecilor etc. Funcția “setup()” va fi executată o singură dată, după fiecare pornire sau resetare a plăcii de dezvoltare Arduino. Funcția este executată atunci când placa de dezvoltate Arduino primește alimentare cu tensiune electrică.

Figura 3.15 Diagramă Setup

Conform figurii 3.15 cu ajutorul funcției prima dată am pornit portul ethernet, urmat de pornirea serverului HTML, urmat de definirea modului de funcționare al pinilor utilizați, urmat de alocarea pinilor Output o valoare inițială și ultimul pas fiind configurarea lui „Timer1”.

În cadrul programului software necesar funcționării sistemului proiectat am utilizat un timer din cele trei timere încorporate de către Arduino Uno. “Timer1” este un cronometru de 16 biți adică poate stoca o valoare maximă a contorului de 65535. Un timer este un cronometru sau un contor fiind o bucată de hardware încorporată în controlerul Arduino. “Timer1” este mai simplu spus un ceas și poate fi folosit pentru măsurarea evenimentelor de timp. Cronometrul poate fi programat de către niște registre speciale și se pot configura și trepte pentru cronometru, modul de funcționare și multe alte lucruri.

Odată ce cronometrul atinge valoarea maximă acesta se resetează la zero, procedura numindu-se overflow. Aceasta înseamnă că la 16MHz, chiar dacă setăm comparatorul de potrivire a comparării cu valoarea maximă a contorului, întreruperile vor avea loc la fiecare 65,536 / 16,000,000 , rezultând obținerea întreruperilor la aproximativ 4 ms , fiind foarte util pentru obținerea întreruperilor de doar o secundă. Utilizarea întreruperilor hardware cu ajutorul timerelor Arduino permit efectuarea unei sarcini la intervale foarte precise de timp, indiferent de ce se întâmplă în restul codului programului.

3.14 Diagramă intruziune

Diagrama intruziune urmează să fie executată la declanșarea procedurii “Timer1” care este o buclă fără condiții de oprire folosită la partea de intruziune în site. Procedura „Timer1” se execută la interval de o secundă. Diagrama intruziune pornește cu citirea stărilor variabilelor „AlarmStatus” și „DoorStatus” și se continuă cu trei părți: partea ce comandă ledul RGB și buzzerul, partea ce determină starea sistemului de alarmă (dezarmat sau armat) și partea ce determină starea ușii (deschisă sau închisă).

Figura 3.16 Diagramă intruziune

Conform figurii 3.16 de mai sus după pornirea procedurii se citesc stările variabilelor „AlarmStatus” și „DoorStatus”. După citirea variabilelor se verifică dacă este îndeplinită condiția “AlarmStatus=1” și “DoorStatus=0” (alarma este armată și ușa este deschisă). Dacă condiția este adevărată se definește ledul RGB să fie roșu (intruziune), buzzerul să fie pornit (alarma sonoră ce descurajează intruziunile neautorizate) și „Intruziune=1” (se definește intruziunea). Dacă condiția nu este îndeplinită se verifică dacă este îndeplinită condiția “AlarmStatus=0”, “DoorStatus=0” și „Intruziune=0” (alarma este dezarmată, ușa este deschisă și nu este intruziune). Dacă condiția este îndeplinită se definește ledul RGB să fie albastru fiind echipă de intervenție în site. Dacă condiția nu este îndeplinită se verifică condiția „Intruziune=0” iar dacă este îndeplinită se definește ledul RGB să fie verde (normal).

Partea ce determină starea sistemului de alarmă constă în verificarea condiției “AlarmStatus=1”. Dacă răspunsul este afirmativ “StatusAlarmă” este „ARMAT” iar dacă răspunsul este negativ “StatusAlarmă” este „DEZARMAT”, buzzerul este oprit și „Intruziune=0”. Partea ce determină starea ușii constă în verificarea condiției “DoorStatus=1”. Dacă răspunsul este afirmativ “StatusUșă” este „ÎNCHISĂ” (iluminatul este stins) iar dacă răspunsul este negativ “StatusUșă” este „DESCHISĂ” (sistemul de iluminat din site este aprins).

3.15 Diagramă citire senzori

Citirea senzorilor este definită în cadrul codului programului cu funcția “CitirePrelucrareInfoSenzori()” și este apelată la începutul declanșării funcției principale “loop()”. În figura 3.17 de mai jos este prezentată diagrama citire senzori.

Figura 3.17 Diagramă citire senzori

După pornirea procedurii de citire senzori se citesc pe rând stările nivelului de apă (“StatusApă”), starea temperaturii și umidității („StatusTemp” și „StatusUmid”), starea Ampermetrului 1 (calcul „Amp1” conform formulei, rezultatul obținut fiind în Amperi), starea Ampermetrului 2 (calcul „Amp1” conform formulei, rezultatul obținut fiind în Amperi), starea Voltmetrului (calcul „Volt” conform formulei, rezultatul obținut fiind în Volți) și urmează o întârziere (delay) de 10 ms necesară pentru citirea senzorilor.

3.16 Diagramă control relee temperatură

Partea de automatizare din sistemul proiectat se ocupă cu controlul releelor ce asigură comanda asupra încălzirii și ventilației. Comanda sistemelor de încălzire și ventilație este definită împreună cu citirea senzori în cadrul codului programului cu funcția “CitirePrelucrareInfoSenzori()” și este apelată la începutul declanșării funcției principale “loop()”. În codul programului în partea de inițializare au fost definite constantele “VentMAX=28.5”, “VentMIN=28.0”, “CăldurăMAX=27.9” și “CăldurăMIN=27.5” fiind utilizate ca praguri de temperatură pentru partea de automatizare a climatizării.

În figura 3.18 de mai jos este prezentată diagrama control relee temperatură.

Figura 3.18 Diagramă control relee temperatură

După pornirea procedurii de control relee temperatură se verifică condițiile de atingere a pragurilor de temperatură în funcție de care se comandă releele “ReleuCăldură” și “ReleuVentilație”. Dacă valoarea citită a temperaturii este mai mică de 27.5°C (“<CăldurăMIN”) se pornește încălzirea iar dacă valoarea este mai mare de 27.9°C (“>CăldurăMAX”) se oprește încălzirea, dacă valoarea citită a temperaturii este mai mare de 28.5°C (“>VentMAX”) se pornește ventilația iar dacă valoarea este mai mică de 28°C (“<VentMIN”) se oprește ventilația.

3.17 Diagramă răspuns HTML

Afișarea paginii web care este folosită pentru monitorizare și alarmare în cadrul sistemului proiectat este descrisă în cadrul diagramei răspuns HTML. Diagrama răspuns HTML conține afișarea tuturor informațiilor pentru monitorizarea de la distanță și afișarea mesajelor de alarmare în funcție de valorile primite de la senzori. În subcapitolele precedente au fost prezentate citirile stării senzorilor și mesajele aferente fiecărui senzor care sunt afișate în pagina web.

Pagina web a fost creată cu ajutorul limbajului HTML (HyperText Markup Language), fiind memorată în memoria plăcii Arduino UNO și afișând textul predefinit în funcție de valorile primite la un interval de reîmprospătare de 5 secunde [5]. HTML este simplu spus un limbaj de marcare folosit pentru crearea de pagini web sau aplicații web. Cu ajutorul limbajului pot fi prezentate texte, tabele, paragrafe, culori, fonturi sau imagini într-un format dorit. Limbajul este dezvoltat pentru crearea documentelor electronice numite pagini web, crearea fișierelor HTML fiind simplă, putând fi realizată în cadrul unui editor de text specializat sau a unui editor obișnuit.

Diagrama face parte din buclă principală “loop” și datele sunt trimise de către serverul web către pagina HTML folosită pentru monitorizare și alarmare dacă condiția “linie nouă și currentLineIsBlank=true” este adevărată.

După pornirea procedurii de răspuns HTML prima dată se trimite headerul HTML, unde este setată reîncărcarea automate a paginii la 5 secunde, după se trimite titlul paginii definit “Monitorizare site” unde este setată culoarea fundalului paginii ca fiind albastru deschis. După se trimite textul “Proiect monitorizare site” și se trimite tabelul folosit pentru mesajele de alarmare (partea de alarmare), unde este setat titlul tabelului “ Mesaje importante:” ambele fiind aliniate pe mijlocul paginii și scrise cu font îngroșat. Mesajele de alarmă care sunt afișate în tabel sunt afișate în funcție de anumite condiții.

În figura 3.19 de mai jos este prezentată diagrama răspuns HTML.

Figura 3.19 Diagramă răspuns HTML

Prima condiție care este verificată este “AlarmStatus=0”, “DoorStatus=0”, „Intruziune=0” (ușă deschisă și alarmă dezarmată) iar dacă este îndeplinită este adaugat în tabel o coloană cu mesajul „Echipă de intervenție în site.” După urmează verificarea condiției „Intruziune=1” (ușă deschisă și alarmă armată) care atunci când este îndeplinită adaugă în tabel o coloană colorată cu roșu cu mesajul „INTRUZIUNE!”. După urmează verificarea condiției „StatusApă>150” (valoarea nivelului de apă depășește valoarea de 150) care atunci când este îndeplinită adaugă în tabel o coloană colorată cu portocaliu cu mesajul „Nivel apă ridicat!”. După urmează verificarea condiției „Amp1<0.2” (dacă valoarea curentului de intrare în acumulator scade sub valoarea de 0.2A) care atunci când este îndeplinită adaugă în tabel o coloană colorată cu roșu cu mesajul „Lipsă energie electrică de la rețea!”. După urmează verificarea condiției „Amp1<0.2” (dacă valoarea curentului de intrare în acumulator scade sub valoarea de 0.2A) care atunci când este îndeplinită adaugă în tabel o coloană colorată cu roșu cu mesajul „Lipsă energie electrică de la rețea!”. După urmează verificarea condiției „StatusTemp<27” (dacă valoarea temperaturii este mai mică decât 27°C) care atunci când este îndeplinită adaugă în tabel o coloană colorată cu galben cu mesajul „Temperatură joasă!”. Ultima coloană posibilă din tabel este verificarea condiției „StatusTemp>29” (dacă valoarea temperaturii este mai mare decât 29°C) care atunci când este îndeplinită adaugă în tabel o coloană colorată cu galben cu mesajul „Temperatură înaltă!”. Dacă condițiile de mai sus nu sunt îndeplinite tabelul conține doar capul de tabel. După ce au fost verificare toate condițiile pentru partea de alarmare urmează partea de afișare a informațiilor primite de la senzori (partea de monitorizare).

Afișarea constă în adaugarea în partea din stânga a paginii ( imediat sub tabel) a următoarelor informații:

Status alarmă: ARMAT sau DEZARMAT;

Status ușă: DESCHISĂ sau ÎNCHISĂ;

Nivel apă: _ _ _ _;

Temperatură (Celsius):_ _ . _ _;

Praguri căldură (Celsius): 27.50 – 27.90;

Praguri ventilație(Celsius): 28.00 – 28.50;

Praguri alarmă de temp. (Celsius): <27 și >29;

Umiditate (%RH): _ _ . _ _;

Ain=_ . _ _ _ A (intrare acumulator);

Aout=_ . _ _ _ A (ieșire acumulator);

Vout= _ _ . _ _ _ V (ieșire acumulator).

În figura 3.20 de mai jos este prezentată diagrama de secvență a aplicației.

Figura 3.20 Diagramă de secvență a aplicației

Procedura Timer1 se declanșează automat la un interval de o secundă, independent de bucla principal de program, este inițializată în procedura de inițializare și comunică cu bucla principal prin intermediul variabilelor globale. Toate informațiile afișate în pagina web de monitorizare sunt în timp real iar reîmprospătarea datelor primite se face automat la un interval de 5 secunde.

Similar Posts