Realizarea unui sistem de achiziție de date și de control al echipamentelor [618075]
Universitatea “Politehnica ” din București
Facultatea de Electronică, Telecomunicații și Tehnologia Informației
Realizarea unui sistem de achiziție de date și de control al echipamentelor
auxiliare unei locuințe
Proiect de diplomă
prezentat ca cerință parțială pentru obținerea titlului de
Inginer în domeniul Electronică și Telecomunicații
programul de studii de licență Tehnologii și Sisteme de Telecomunicații
Conducători științifici Absolvent
S.l. dr. ing. Alexandru TATOMIRESCU Ioan BAICU
DR. ing. Mihnea UDREA
2018
Anexa 1 – scanata
Declarație de onestitate academică
Prin prezenta declar că lucrarea cu titlul “ Realizarea unui sistem de achiziție de date și de
contr ol al echipamentelor auxiliare unei locuințe ”, prezentată în cadrul Facultății de Electronică,
Telecomunicații și Tehnologia Informației a Universității “Politehnica” din București ca cerință
parțială pentru obținerea titlului de Inginer în domeniul Electr onică și Telecomunicații programul
de studii Tehnologii și Sisteme de Telecomunicații este scrisă de mine și nu a mai fost prezentată
niciodată la o facu ltate sau instituție de învățămâ nt superior din țară sau străinătate.
Declar că toate sursele utilizate, inclusiv cele de pe Internet, sunt indicate în lucrare, ca
referințe bibliografice. Fragmentele de text din alte surse, reproduse exact, chiar și în traducere
proprie din altă limbă, sunt scrise între ghilimele și fac referință la sursă. Reformularea în c uvinte
proprii a textelor scrise de către alți autori face referință la sursă. Înțeleg că plagiatul constituie
infracțiune și se sancționează conform legilor în vigoare.
Declar că toate rezultatele simulărilor, experimentelor și măsurătorilor pe care le p rezint
ca fiind făcute de mine, precum și metodele prin care au fost obținute, sunt reale și provin din
respectivele simulări, experimente și măsurători. Înțeleg că falsificarea datelor și rezultatelor
constituie fraudă și se sancționează conform regulamen telor în vigoare.
București, data Absolvent: [anonimizat]
_________________________
Cuprins
Lista figurilor ………………………….. ………………………….. ………………………….. ………………………….. ………… 9
Lista tabelelor ………………………….. ………………………….. ………………………….. ………………………….. ………. 11
Lista acronimelor ………………………….. ………………………….. ………………………….. ………………………….. …. 13
Introducere ………………………….. ………………………….. ………………………….. ………………………….. ………….. 15
Capitolul 1 – Conceptul de Locuință Inteligentă ………………………….. ………………………….. ………………… 17
1.1 Definire ………………………….. ………………………….. ………………………….. ………………………….. ….. 17
1.2 IoT (Internet of Things) ………………………….. ………………………….. ………………………….. ………… 18
Capitolul 2 – Rețele de senzori fără fir ………………………….. ………………………….. ………………………….. …. 23
2.1 Definire ………………………….. ………………………….. ………………………….. ………………………….. ………. 23
2.2 Topologii de rețele ………………………….. ………………………….. ………………………….. ……………………. 25
2.2 Standarde folosite ………………………….. ………………………….. ………………………….. …………………….. 25
2.3 Constrângeri impuse de rețelele de senzori fără fir ………………………….. ………………………….. ……. 26
Capitolul 3 – Resurse Folosite ………………………….. ………………………….. ………………………….. …………….. 29
3.1 Resurse Hardware ………………………….. ………………………….. ………………………….. …………………….. 29
3.1.1 Modulul de procesare ………………………….. ………………………….. ………………………….. …………. 30
3.1.2Senzorii de temperatură și de umiditate ………………………….. ………………………….. ………………. 33
3.1.3 Modulul de comunicație ………………………….. ………………………….. ………………………….. ……… 35
3.2 Resurse Software Folosite ………………………….. ………………………….. ………………………….. …………. 46
3.2.1 Arduino IDE ………………………….. ………………………….. ………………………….. ……………………… 46
3.2.2Sistemul de operare Raspbian ………………………….. ………………………….. ………………………….. .. 46
3.2.3 Conexiunea cu Raspbe rry PI ………………………….. ………………………….. ………………………….. .. 47
3.2.4 Serverul Apache ………………………….. ………………………….. ………………………….. …………………. 48
3.2.5 Limbaje folosite ………………………….. ………………………….. ………………………….. …………………. 49
Capito lul 4- Realizarea practică ………………………….. ………………………….. ………………………….. ………. 51
4.1 Proiectarea rețelei de comunicație fără fir ………………………….. ………………………….. ………………… 51
4.2 Realizarea comunicației între nodurile rețele i ………………………….. ………………………….. …………… 52
4.2.1 Nodul senzor ………………………….. ………………………….. ………………………….. ……………………… 55
4.2.2 Nodul de control ………………………….. ………………………….. ………………………….. ………………… 59
4.2.3 Nodul pr incipal ………………………….. ………………………….. ………………………….. ………………….. 61
4.3 Alegerea canalului de comunicare ………………………….. ………………………….. ………………………….. 67
Concluzii și contribuția personală ………………………….. ………………………….. ………………………….. ……….. 71
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. …………. 73
Anexă ………………………….. ………………………….. ………………………….. ………………………….. …………………. 75
Anexa 1 – Programele de pe nodurile rețelei ………………………….. ………………………….. …………………. 75
Anexa 2 – Codul interfeței grafice ………………………….. ………………………….. ………………………….. …… 78
Lista figurilor
Figura 1. 1 – Arhitectura generală IoT ………………………….. ………………………….. ………………………….. …. 19
Figura 1. 2 – Arhitectură sistem IoT centralizată ………………………….. ………………………….. ……………….. 20
Figura 1. 3 – Arhitectură contralizată de senzori (3) ………………………….. ………………………….. …………… 20
Figura 2. 1 – Structura unui nod al rețelei fără fir ………………………….. ………………………….. ………………. 24
Figura 2. 2 – Rețea de senzori fără fir ………………………….. ………………………….. ………………………….. ….. 24
Figura 2. 3 – Topologie de rețea cu mai multe hop -uri și cu un singur hop ………………………….. ………… 26
Figura 3. 1 – Caracteristici ale microcontrolerelor ………………………….. ………………………….. ……………… 30
Figura 3. 2 – Arduino UNO ………………………….. ………………………….. ………………………….. …………………. 31
Figura 3. 3 – Raspberry PI Zero W ………………………….. ………………………….. ………………………….. ………. 32
Figura 3. 4 – Senzor DHT11 ………………………….. ………………………….. ………………………….. ……………….. 33
Figura 3. 5 – AM2320 ………………………….. ………………………….. ………………………….. ………………………… 34
Figura 3. 6 – Modul radio nRF24L01+ ………………………….. ………………………….. ………………………….. …. 35
Figura 3. 7 – Comunicație SPI Master -Slave ………………………….. ………………………….. ……………………… 36
Figura 3. 8 – Comunicție Master – Multi -Slave ………………………….. ………………………….. …………………. 36
Figura 3. 9 – SPI folosind regiștrii de sh iftare ………………………….. ………………………….. ……………………. 37
Figura 3. 10 – Citirea și scrierea datelor prin SPI (12) ………………………….. ………………………….. ………… 37
Figura 3. 11 – Principiul de funcționare ESB ………………………….. ………………………….. …………………….. 40
Figura 3. 12 – Procedeul de comunicare ESB ………………………….. ………………………….. …………………… 41
Figura 3. 13 – Formatul pachetului ESB ………………………….. ………………………….. ………………………….. . 42
Figura 3. 14 – Formatul câmpului de control ………………………….. ………………………….. …………………….. 42
Figura 3. 17 –Modelul Multiciver ………………………….. ………………………….. ………………………….. ………… 45
Figura 3. 18 – PuTTY ……………….. ………………………………………………………………………………………………. …..48
Figura 3. 19 – VNC Viewer ………………………….. ………………………….. ………………………….. ………………… 48
Figura 4. 1 –Conexiune Arduino Nano – nRF24L01+…………………………………………………………………… 56
Figura 4. 2 – Structura programului de pe nodul cu senzor ………………………….. ………………………….. ….. 58
Figura 4. 3 – Structura nodului principal ………………………….. ………………………….. ………………………….. . 59
Figura 4. 4 – Structura programului de pe nodul de control ………………………….. ………………………….. …. 60
Figura 4. 5 – Conexiune Raspberry PI – nRF24L01+ ………………………….. ………………………….. ………… 61
Figura 4. 6 –Nivelurile nodului principal ………………………….. ………………………….. ………………………….. . 61
Figura 4. 7 – Detalii de conexiune ………………………….. ………………………….. ………………………….. ………. 62
Figura 4. 8 –Principiul de funcționare al nodului pri ncipal ………………………….. ………………………….. ….. 64
Figura 4. 9 –Interfața grafică ………………………….. ………………………….. ………………………….. ……………….. 65
Figura 4. 10 –Algoritm alegere canal de comunicație ………………………….. ………………………….. …………. 68
Figura 4. 11 –Rezultatul rulării programului de scanare ………………………….. ………………………….. ……… 69
Figura 4. 12 – Numărul de purtătoare într -un interval de timp pe un anumit canal ………………………….. 70
Lista tabelelor
Tabel 3.1 – Setarea puterii amplificatorului de semnal ………………………….. ………………………….. ………. 38
Tabel 3.2 – Moduril e de funționare ale integratului ………………………….. ………………………….. …………… 40
Tabel 4. 1 – Niveluri de amplificare ………………………….. ………………………….. ………………………….. ……. 54
Tabel 4. 2 – Conectarea pi nilor Arduino Nano – nRF24L01+ ………………………….. …………………………. 56
Tabel 4. 3 – Conectarea pinilor pentru DHT11 și AM2320 ………………………….. ………………………….. … 57
Lista acroni melor
ACK – Acknowledgement
ADC – Analog to Digital Converter
ARM – Advanced RISC Machine
CRC – Cyclic Redundancy Check
CSN – Chip Select Not
DAC – Digital to Analog Converter
ESB – Enhanced ShockBrust
FSK – Frequency -Shift Keying
GFSK – Gaussian Frequenc y-Shift Keying
GFSK – Gaussian Frequency -Shift Keying
GPIO – General Pin Input/Output
GUI – Graphical User Interface
HDMI – High -Definition Multimedia Interface
HTTP – Hypertext Transfer Protocol
I2C – Inter -Integrated Circuit
IoT – Internet of Things
IP – Internet Protocol
ISM – Industrial, Scientific and Medical
MISO – Master In Slave Out
MOSI – Master Out Slave In
PID – Packet Identifier
PWM – Pulse -Width Modulation
RAM – Random Access Memory
ROM – Read -Only Memory
RPI – Raspberry PI
SCK – Serial C lock
SOC – System on a chip
SPI – Serial Peripheral Interface
SS – Slave Select
SSH – Secure Shell
UC – Microcontreller
UP – Microprocesor
WSN – Wireless Sensor Network
15
Introducere
Comunicațiile fără fir se dezvoltă rapid, făcând posibilă crearea unor sisteme de rețele fără fir care să
poată colecta, analiza, evalua și valida în mod constant mediul înconjurător pentru a obține mai mult
control asupra factorilor care o influențează.
În această lucrare se va evidenția modul de realizare al unui si stem de achiziție de date și de control al
echipamentelor auxiliare unei locuințe. Acest proiect are la bază o rețea cu comunicație radio folosind
integratul nRF24L01+ .
Sistemul este ieftin și scalabil atât în ceea ce privește tipul de senzori, cât și numărul de noduri de senzori
sau de control, ceea ce îl face bine adaptat pentru o mare varietate de aplicații legate de monitorizarea
mediului. Spre deosebire de modelele rețelelor cu fir, model ele de rețele fără fir oferă o mai mare
flexibilitate în abordarea acestor probleme de mediu. Din acest motiv, este implementat un sistem de
rețea de senzori fără fir care poate face față acestei situații.
Pe lângă achiziția de date din mediul exterior și comandarea unor circuite cu scopul de a controla
echipamentele electronice auxiliare unei locuințe se va realiza și o interfață grafică, cu ajutorul căreia să
se realizeze o conexiune mai facilă cu utilizatorul.
Prin intermediul interfeței grafice se vor p utea monitoriza date precum temperatura, umiditatea și se vor
putea trimite anumite comenzi că tre noduri de rețea destinate controlului.
Acest proiect are la bază o rețea de noduri interconectate cu un nod principal la nivelul căruia se vor
centraliza date le primite de la celelalte noduri ale rețelei. Tot la nivelul acestui nod principal se vor realiza
și comenzile de control care po t fi adresate în timp real de că tre un utilizator .
În primul capitol se va face o introducere în conceptele de IoT si Smart Ho me, în capitolul doi se vor
prezenta topologiile de rețea ce pot fi abordate în astfel de aplicații, standardele de comunicație folosite
în comunicațiile fără fir c ât și constrângerile impuse de astfel de sisteme. În capitolul 3 se vor prezenta
atât echipa mentele fizice cat si resursele software folosite la realizarea acestei lucrări , iar in capitolul 4
vor fi prezentate etapele urmărite în dezvoltarea proiectului.
Arhitectura generală a sistemului, componentele hardware și software sunt prezentate în deta liu în
această lucrare.
16
17
Capitolul 1 – Conceptul de Locuință Inteligentă
O locuință inteligentă este un concept ce se referă la un spațiu fie el locuință, birou sau casă de vacanță
ce dispune de tehnologii moderne car e asigură automatizarea sistemelor și a echipamentelor electronice
aflate în aceasta. O astfel de locuință va asigura confort, securitate, siguranță și economie energetică.
În ultima vreme se investesc foarte multe resurse în dezvoltarea de si steme care să permită controlul
tuturor echipamentelor electronice auxiliare unei locuințe, chiar și de la distanță, prin intermediul
Internetului. Multe studii demonstrează că o astfel de locuință, pe lângă faptul că oferă un plus de confort
locuitorilor, asigură un consum mult mai redus de energie în comparație cu locuințele clasice.
O locuință nu este inteligentă prin modul de construire eficient sau prin modul de compartimentare, ci
prin diferite caracteristici precum tehnologiile interactive pe care le pune la dis poziție, precum iluminatul
în funcție de gradul de luminozitate din locuință, încălzirea eficientă bazată pe temperatura ambientală
aleasă de locatari, securitatea sporită, perdele care se deschid și se restrâng la dorința locatarilor și multe
altele.
Loca ția dispozitivelor inteligente dintr -o locuință trebuie să fie adaptată la configurația fizică a acesteia,
însă aceasta nu este singura problemă. Există de asemenea problema modului de interacțiune între
echipamentele interactive întrucât modul de com unica re între echipamente diferă de la un sistem la altul
deoarece rețeaua care stă la baza fiecăruia este unică.
În cadrul acestui capitol se va defini conceptul de locuință Inteligentă și se va face introducerea în
conceptul de Internet of Things (IoT) .
1.1 Definire
Locuințele inteligente mai sunt cunoscute ș i sub denumirea de locuințe automatizate, acestea au în
componența lor diverse dispozitive care controlează caracteristicile locuinței. Inițial acestea au avut ca
principal scop controlul comportamentelor un or si steme precum sistemul de încălzire, dar în ultima
vreme tehnologia a evoluat foarte mult astfel că orice echipament electronic din casă poate fi inclus în
acest sistem. În plus locuința inteligentă nu doar controlează prin pornirea și oprirea echipame ntelor din
aceasta ci poate real iza și o monitorizare a activită ții locatarilor și adaptarea condiții lor mediului ambiant
la necesităț ile acestora sau realizarea de acțiuni după cum cere utilizator ul.
Numeroase studii au demonstrat că în cazul locuințelor inteligente consumul de energie este mai redus
decât în cazul locuințelor clasice. Acestea oferă un consum redus de energie întrucât echipamentele
auxiliare locuinței sunt c ontrolate într-un mod continu u și automatizat în funcție de nevoile locatari lor.
18
1.2 IoT (Internet of Things)
Internetul obiectelor (Internet of Things) denumește o rețea de obiecte fizice „inteligente”, interconectate,
care au implementată tehnologia necesară pentru a fi capabile să sesizeze și să comunice date despre
starea lor, precu m și de a interacționa cu mediul exterior.
Explozia IoT actuală are potențialul de a schimba substanțial activitatea industrială, mediul și modul în
care oamenii vor lucra și trăi.(1) Unele estimă ri preconizează ca până în anul 2 020 numărul de obiecte
inteligente i nterconectate va tinde spre numă rul de circa 200 de miliarde , de la telefoanele mobile, tablete,
televizoare și alte obiecte electrocasnice, la dispozitive ce sunt capabile să monitorizeze și să transmită
parametrii de s ănătate și de mobilitate a i oamenilor sau animalelor, de calitatea apei sau a aerului,
domeniul putând să se extindă până la dispozitive și elemente de monitorizare și control al parametrilor
unor echipamente industriale complexe sau al produselor aflate î n containere pentru livrare etc. (2)
Având în vedere potențialul impresiona nt de utilizare practică a soluțiilor dezvoltate în baza acestui
concept constată m că prioritatea ce i se acordă în ultima perioadă este puternic motivată .
Totodată acest concept aduce o serie de schimbă ri în viziunea tehnologică precum:
• Necesitatea extinderii obiectelor inteligente prin standardizarea a noi soluții de comunicație;
• Punerea în valoare a datelor privind evoluțiile stărilor acestor obiecte pri n centralizarea lor pe
diferite infrastructuri.
Punerea în valoare a datelor este realizată prin achiziția, stocarea și transmiterea acestora în infrastructuri
centralizate precum și realizarea de analize mai amănunțite a acestora folosindu -se unele sistem e
specializate. Această anal iză se face în special pentru a extrage și pentru a sintetiza informația relevantă.
În ultima vreme s -au dezvoltat foarte multe soluții de interconectare a obiectelor inteligente și s -a ajuns
la dezvoltarea unor concepte precum orașe inteligente, case inteligente, sisteme de monitorizare a
gradului de poluare etc.
În ur ma unei analize s -a constatat că principalele funcționalităț i oferite de conceptul IoT pot fi grupate
în cinci catego rii:
• Achiziționarea și prelucrarea datelor;
• Conectivitatea și protocoalele de comunicație;
• Serviciile de monitorizare;
• Autorizarea și autentificarea;
• Analiza datelor și procesarea acestora și asigurarea unei interfețe cu utilizatorul pentru acces la
funcționalităț ile sistemului.
Arhitectura generală a conceptului IoT este î mpărțită în patru niveluri principale ce sunt figurate în
imaginea de mai jos.
19
Figura 1. 1 – Arhitectura generală IoT
• Nivelul de achiziție
La acest nivel înt âlnim diferite tipuri de sen zori precum : RFID, de t emperatură , de umiditate sau orice
alt tip de senzori. Principalul scop al acestui nivel este de a identifica în mod unic obiectele și de a
colabo ra cu ele în vederea achiziționă rii de date din mediul exterior prin intermediul unor senzori.
La baza acestu i nivel, de cele mai multe ori, stau rețelele de senzori care sunt capabile să achiziționeze
date din mediul exterior pe o suprafață extinsă, în funcție de topologia rețelei și de tipul sistemului
respectiv.
• Nivelul de rețea
Scopul acestui nivel este de a transmite datele obț inute la nivelul de achiziție că tre orice sistem de
procesare a informației prin intermediul rețelelor de comunicație existente precum Internetul, rețeaua de
telefonie mobilă sau oricare rețea de încredere.
• Nivelul de procesare ș i de le gătură
Acest nivel constă în sisteme de procesare a informațiilor care sunt capabile să ia măsuri automate bazate
pe datele r ezultate în urma unei procesări și asigură legă tura sistemului cu baza de date în care sunt
stocate datele.
• Nivelul de aplicație
La acest nivel sunt realizate aplic ațiile de IoT bazate pe necesită țile fiecărei industrii în parte precum
casele inteligente sau orașele inteligente.
Cele mai întâlnite tehnologii care sunt implicate în acest concept sunt rețelele d e senzori fără fir,
dispo zitivele cu microprocesor încorporat și protocoalele de comunicație.
Una dintre arhitecturile propuse de conceptul IoT este cea centralizată ilustrată și în imaginea de mai jos
și are la bază o infrastructură locală independentă. O astfel de soluție este relevantă în situația î n care se
dorește automatizarea unei locuințe.
20
Figura 1. 2 – Arhitectură sistem IoT centralizată
La nivelul unei locuție această implementare poate fi realizată folosindu -se o rețea locală de senzori care
respe ctă arhitectura centralizată ca și în imaginea de mai jos.
Figura 1. 3 – Arhitectură centralizată de senzori (3)
Așa cum se poate vedea în imaginea1.3, în locuință este implementată o rețea wireless de senzo ri. Având
arhitectură centralizată local, datele se vor centraliza la nivelul nodului principal notat 00 ce coordonează
întreaga rețea. La nivelul său se centralizează datele primite de la restul noduri lor urmând să fie distribuite
către o interfață indepe ndentă la care utilizatorul să aibă acces. Pentru a respecta arhitectura vom
21
presupune că nodul principal 00 es te de fapt un gateway capabil să găzduiască un server. În situația în
care utilizatorul dor ește să aplice o constrâ ngere sistemului poate să facă asta prin int ermediul unei
interfețe, constrâ ngerea fiind trimisă la nodul principal care va trebui să ia o decizie.
Având în vedere că pe viitor vor apă rea din ce în ce mai multe date de tip IoT aceste metode se vor
concentra pe înțelegerea comportam entului unui echipament, vor apă rea noi abordări în domeniul
algoritmilor ce stau la baza analizei de date și se vor dezvolta noi echipamente de analiză.
Odată cu creș terea numă rului de echipamente IoT va trebui o atenție acordată și administră rii acestor
echipamente. Această administrare include:
• Monitorizarea echipamentelor IoT;
• Raportarea și analiza defectă rilor;
• Administrarea securității;
• Actualizarea resurselor software ș i hardware.
Un alt aspect important care trebuie luat în considerare în cazul unei in frastructuri IoT este securitatea,
întrucât acest concept introduce o serie de riscuri de securitate specifice. Datorită componentelor acestor
sisteme pr ecum: dispozitivele inteligente, platformele la care se conectează acestea, sisteme de operare
sau rețe lele de comunicații , vor fi necesare tehnologii noi pentru a asigura protecția la atacurile
cibernetice care în ultima vreme au luat amploa re. Pentru securizare trebuie să se realizeze criptarea
comunicațiilor și să se dezvolte tehnici de ră spuns la intenț iile de interacțiune ale echipamentelor
impost oare.
Securizarea tehnologiilor IoT va fi un proces greu de dezvoltat deoarece majoritatea dispozitivelor dintr –
o astfel de infrastructură dispun de resurse de procesare reduse ș i de sisteme de operare care n u suportă
metode de securizare prea sofisticate. Este de așteptat ca în acest domeniu atacurile ș i amenințările de
securitate să evolu eze odată cu tehnologia în sine. Î n consecință este necesar ca soluțiile hardware ș i
software al e sistemelor IoT să fie co ntinu u actualizabile în cazul apariției a noi tipuri de amenințări.
22
23
Capitolul 2 – Rețele de senzori fără fir
Având în vedere tema aleasă este foarte important să vorbim despre rețele de senzori fără fir (WSN). P e
baza unor astfel de rețele se pot realiza o gamă foarte vari ată de aplicații care au la bază capacitatea unor
circuite de a achiziționa date din mediul înconjurător prin intermediul senzorilor, de a le procesa, și de a
le utiliza. Foarte multe proiecte p ot fi dezvoltate , datorită acestor rețele de senzori , precum cele ce doresc
realizarea d e locuințe inteligente, orașe inteligente etc.
În zilele noastre cercetarea rețelelor de senzori este un domeniu în plină dezvoltare și deschide noi direcții
de cercet are ce includ: controlul senzorilor, protocoale de comunicație, eficientizarea resurselor
energetice, capacitatea și durata de viață a rețelei.
Realizarea rețelelor de senzori wireless este o modalitate de a ajuta la identificarea unor probleme de
mediu. U na dintre metode implică crearea unei rețele de senzori fără fir (WSN) în care fiecare senzor
transmite fără fir datele sau valoarea acelui senzor către nodul pri ncipal.
În capitolul acesta se vor defini rețelele de senzori wireless, se vor prezenta princi palele topologii de
rețele și se vor evidenția unele constrâ ngeri impuse de aceas tă tehnologie.
2.1 Definire
O rețea de senzori wireless reprezintă o mulțime de echipamente interconectat e între ele în vederea
comunicării. Pentru realizarea unei rețele de date fără fir este necesară o configurție aparte pentru
nodu rile de rețea, întrucât pe lângă modulul de procesare care măsoară și stochează datele este necesar
și un modul de comunicație prin radio -frcvență.
Un nod de rețea combină 3 mari funcționalități :
• Achiziția de date
• Procesarea detelor
• Comunicarea
De o bicei procesarea datelor este fă cută de u n microcontroler care reprezintă componenta principală la
care se interconectează atât senzorii cât și modulul care asigură comunicarea.
Modulul care se ocupă de comunicația radio trebuie ales în funcție de aplicaț ie, luând în calcul aria de
acoperire a rețelei. Există o gamă variată de module de comunicaț ie prin radiofrecvență ce funcționează
în ba nda ISM. Dacă dorim automatizarea unei locuințe se pot folosi mo dule care să asigure o suprafață
mică de acoperire precum nRF24L 01+ sau dacă de exemplu , dorim să monitorizăm animalele sălbatice
în aria de acoperire a unei rezervații naturale se poate folosi un modul RF M96 care are la bază proto colul
de comun icație LoRa care asigură acoperire pe distanțe mai mari. Indiferent de modulul de comunicație
radio trebuie asigurată comuni carea între acesta și un modul de control prin diferite protocoale de
comunicare precum SPI sau I2C.
Modulu l care se ocupă de procesare, mă surare și stocare poate fi constituit de un microcontroler precum
Atmega328 p sau STM32 sau chiar de un minicalculator precum cele produse de Rasp berry PI. Acest
modul trebuie să fie capabil să achiziționeze date din exterior prin intermediul senzorilor.
24
Avân d în vedere că majoritatea senzorilor sunt analogici se poate impune ca modulul de procesare să
dispună de pini analogici de intrare, conver toare de la semnal analogic la semnal digital (ADC). Pentru
a putea atașa un modul de comuniație în radiofrecvență t rebuie avut în considerare tipul de conexiune pe
care î l suportă modulul respectiv.
Arhitectura unui astfel de nod de rețea este ilustrată în imaginea de mai jos.
Figura 2. 1 – Structura unui nod al rețelei fără fir
Figura de mai jos exemplifică o rețea de senzori fără fir care transmite date din locații diferite către niște
noduri principale de la care mai departe sunt transmise prin intermediul Internetului spre a fi stocate,
analizate, procesate și interpretate.
Figura 2. 2 – Rețea de senzori fără fir
25
2.2 Topologii de rețele
O rețea este alcătuită din noduri dispuse sub o anumită topologie. Prin to pologie de rețea se înțelege
dispunerea fizică în teren a elementelor care compun rețeaua de comunicație.
Cea mai întâlnită to pologie de rețea este punct la punct. Rețelele punct la punct dispun de numeroase
conexiuni între perechi de noduri individuale. Pentru a se realiza o conexiu ne este posibil ca un pachet
să trebuiască să treacă prin unul sau mai multe nodu ri intermediare. De obicei se folosesc șapte topologii
în cadrul acestei legături. (4)
Topologiile rețelelor punct -la-punct:
• Structură de tip inel;
• Structură neregulată;
• Structură centralizată (Stea);
• Structură completă (Multistea );
• Structură de tip linie;
• Structură ierarhizată (Arbore);
• Structură de tip Magistrală.
Nodurile implicate într -o topologie de rețea pot fi echipamente de interconectare sau terminale , iar arcele
pot reprezenta conexiuni fizice (directe sau indirecte).
2.2 Standarde folosite
Cea mai răspândită tehnologie de rețea wireless pentru echipamentele mobile este familia de standarde
IEEE 802.11 care a fost elaborată în anul 1997. Aceasta ocupă benz i de frecvențe diferite , de exemplu
pentru IEEE 802.11b și IEEE 8 02.11g este folosită banda de 2.4 GHz, iar protocolul IEEE 802.11 a
folosește banda de frecvență de 5GHz.
Standardul IEEE 802.11 a avut o contribuție notabilă în rețelele wireless timpurii și încă mai este folosit
în rețelele cu senzo ri multimedia care nec esită o lă rgime de bandă mai mare, dar consumul său mare de
putere îl face inadecvat în rețelele fără fir de senzori de joasă putere.
Pentru a satisface nevoile de consum redus de putere ale rețelelor fără fir s -a decurs la dezvoltarea unui
nou protocol ca re să asigure un consum redus de energie și care să aibă rata de transfer mai redusă.
Protocolul IEEE 802.15.4 a fost special dezvoltat pentru comunicațiile fără fir ce se fac pe distanțe scurte
cu un consum redus de putere.
26
Figura 2. 3 – Topologie de rețea cu mai multe hop -uri și cu un singur hop
Într-o rețea de senzori wireless cu o topologie cu un singur hop, fiecare nod comunică cu nodul principal
făcând un singur salt. Această topologie este ideală pentru rețele ce necesită o ac operire mică cum ar fi
un aparta ment , o casă de dimensiune mică , o grădina , etc.
În multe situații rețelele de se nzori wireless trebuie să acopere zone de întinderi mari, iar în acele situații
acest tip de topologie care execută un singur salt , în vederea comunicării , nu este p otrivită. P entru a
asigura o comunicare pe distanțe mari și pentru a asigura o putere de emisie mare, folosind un singur
salt, este nevoie de un consum mare de energie.
Pentru a rezolva acest neajuns s-a pus problema dezvoltării unei topologii de rețea de tip plasă care să
asigure o comunicare prin executarea mai multor salturi până la nodul principal. A stfel, consumul de
energie este menținut redus, dar este necesar ca numă rul de noduri să fie crescut. Principala problemă a
acestei t opologii de tip plasă este aceea că implică de zvoltarea unei metode de dirijare a datelor de la un
nod la altul , pentru a se evita coliziunile dintre pachetele de date venite de la diverse noduri.
2.3 Constrângeri impuse de rețelele de senzori fără fir
Analizând mai în amănun t rețelele de senzori fără fir se constată că , spre deosebire de alte sisteme
distribuite , impun o gamă de constrângeri pe care la alte tipuri de sisteme nu le vom întâlni. De cele mai
multe ori aceste constrângeri atrag după ele și m odificări asupra structurii rețelelor și duc la elaborarea a
noi protocoale de comunicare diferite de cele din alte tipuri de sisteme distribuite.
Voi enumera mai jos constrângerile acestor tipuri de rețele:
• Nodurile dispun de energie limitată
• Incompatibil itatea cu algoritmii de centralizare existenți
• Amplasarea în condiții nefavorabile a nodurilor
• Siguranța datelor stocate și achiziționate de un nod
27
Rețelele de noduri cu senzori fără fir necesită un consum redus de energie deoarece , de cele mai multe
ori acestea sunt alimentate de acumulatori care trebuiesc încărcați periodic sau înlocuiți. Pentru a rezolva
această constrângere este necesară dezvoltarea unei soluții de încărcare a acumulatorilor unui nod de
rețea.
De obicei , în practică , datorită dimensiuni lor mari și constrângerilor referitoare la consumul de energie ,
rețelele de senzori wireless sunt neadaptabile unui algoritm centralizat.
Întrucât nodurile vecine trebuie să com unice între ele în vederea realizării unui algoritm de comunicare
local, în urm a rea lizării unei astfel de conexiuni la nivel local , apare avantajul eficientizării consumului
de energie.
Amplasarea în condiții nefavorabile este o constrângere ce se referă la faptul că de multe ori acest e tipuri
de rețele deservesc sist eme de monitori zare și control care achiziționează date din mediul înconjurător în
condiții nefavorabile precum : praf, umiditate, ploaie, îngheț, zăpadă, etc.
Constrângerea , în ceea ce privește siguranț a datelor stocate și prelucrate la nivelul fiecărui nod, este
importa ntă întrucât comunicațiile de tip wireless se realizează în benzi de frecvențe libere și de aceea pot
fi ușor interceptate de entități străine. Această constrângere poate fi remediată folosindu -se criptarea
comunicațiilor, blocarea accesului la date prin a utentificare sau chiar blocarea totală a accesului.
28
29
Capitolul 3 – Resurse Folosite
3.1 Resurse Hardware
După cum a fost prezentată structura unei rețele în ca pitolul precedent , se constată c ă pentru rea lizarea
unui sistem de achiziție de date și de comandă este nevoie de o rețea de s enzori wireless care să cuprind ă
o serie de noduri care s ă realizeze interacțiunea cu mediul exterior și un nod la nivelul căruia să se
realizeze centralizarea acestor date.
Un nod de rețea are la bază două elemente principale:
• Modulul de procesare
• Modulul de comunicare
Pentru realizarea acestui p roiect s -au ales soluții care s ă acopere toate necesitățile unui astfel de sistem
precum : consumul redus de energie, mobilitatea, dis tanța maximă de comunicare dintre noduri și nu în
ultimul rând costul redus al echipamentelor necesare realizării unui astfel de nod.
Analizând aceste necesități am constatat că modulul de procesare pentru un nod senzor poate fi realizat
cu ușurință cu aju torul un ui microcontroler de joasă putere.
Pentru nodul principal la nivelul căruia se face centralizarea datelor venite din rețea, având în vedere că
acesta va tre bui s ă fie capabil s ă asigure gă zduirea unui server cât și să asigure o conexiune la Intern et
am ales folosirea unui minicalculator Raspberry PI Zero W . Acest model de minicalculator este unul
dintre cele mai mici calculatoare realizate la momentul de față, aspect ce poate reprezenta de multe ori
un avantaj.
Pe lângă pă rțile de procesare prezent ate mai sus se pune și problema comunicării într -o rețea fără fir.
Pentru a rezolva și acest aspect am ales fol osirea unui modul de comunicare fabricat de firma Nordic
Semiconductors , și anume nRF24L01+.
Cipul nRF24L01+ este un dispozitiv des tinat transmi terii și recepțion ării datelor prin radiofrecvență
folosind banda de frecvențe dintre 2.4 – 2.4835 GHz , cu un consum foarte redus de putere. Această bandă
este nelicențiată , fiind folosită pentru dezvoltarea proiectelor industriale, de cercetare și medic ale (ISM).
În cadrul acestui capitol se vor prezenta resursele fizice necesare realizării unui sistem de achiziție de
date și de control ce are la bază o rețea de senzori fără fir.
30
3.1.1 Modulul de procesare
Microcontrolere
Un microcontrol er este un tip de circuit care integrează un microprocesor și alte dispozitive per iferice
într-un singur chip punâ ndu-se accent pe un cost redus de producție și consum redus de energie electrică.
Principala diferență dintre un microcontroler (µC) și un microproces or (µP) o constituie faptul că un µC –
ul integrează memoria de program, memoria de date și alte interfețe de intrare -ieșire sau periferice. (5)
Acest lucru se poate vedea sugestiv în imaginea 3.1.
Cele mai notabile caracteristici ale unui microcontroler sunt dimensiunea mică, consumul redus de putere
și nu în ultimul rând costul redus . (6)
Figura 3. 1 – Caracteristici ale microcontrolerelor
Caracteristicile unui microcontroler sunt următoarele :
• unitatea centrală de procesare (µP core) cu o arhitectura care poate fi pe 8, 16, 32 sau 64 de biți;
• memorie de date RAM (volatilă) sau Flash/EEPROM (nevolatilă) pentru date sau program;
• porturi digitale de intrare -ieșire;
• interfețe seriale (RS232, SPI, I2C, CAN, RS485);
• timere, generatoare de PWM sau watchdog;
• convertoare analog -digitale/ digital -analogice;
• suport pentru programare și debugging (7)
Datorită integrării numărului mare de periferice într -un singur c ip și a costului redus de producție, un
microcontroler operează la fr ecvențe de zeci de MHz, acest lucru implicând viteza sa redu să de operare,
cu un ordin de m ărime mai mică de cât în cazul unui microprocesor.
31
Pentru alegerea unui micr ocontroler trebuie u rmărite niș te repere în funcție de necesitățile proiectului,
de cele mai multe ori acestea fiind:
• Configurația
• Dimensiunile cipului
• Limbajul de programare
• Prețul
Atunci câ nd alegem un microcontroler trebuie luată în considerare configurația acestuia în ce ea ce
privește dacă dispune sau nu de convertoare analogice -digitale sau digitale -analogice (ADC/DAC),
număr ul de pini de intrare sau de ie șire, fie ace știa analogici sau digitali, tipul de comunicație de care
dispune, cât și timpul de r ăspuns , care trebui e să fie unul cât mai mic.
Costul unui µC depinde în mare mă sură de numă rul de periferice integrate. Cu câ t numă rul acestora este
mai mare cu atâ t nivelul de integrare creș te ducând la un cost de producție mai mare. Din această cauză,
arhitecturile de µC p e piață la ora actuală variază î n limite destul de largi, de la c ipuri cu doar 6 pini de
I/O până la procesoare digitale de semnal (DSP) sau procesoare cu arhitecturi ARM. (7)
Pentru acest proiect ca și modulul de procesare am ale s folosirea unor plăci de dezvoltare Arduino
realizate în jurul unui microcontroler Atmega328p.
Figura 3. 2- Arduino UNO
Arduino este o placă de dezvoltare care are la bază un microcontroler Atmel AVR pe 8 biți. Softul de
dezvoltare este constituit dintr -un bootloader propriu și un compilator ce dispune de un limbaj de
programare asemănător cu limbajul C/C++.
Acest microcontroler conține un convertor analog digital (ADC) cu o rezoluție de 10 b iți, aceasta
însemnând că există 1024 val ori sau divizări ale tensiunii de referință disponibile. Achiziția de date de la
senzori, procesarea acestora, analizarea și afișarea rezultatelor sunt principalele operații pe care trebuie
să le îndeplinească în cadrul aplicațiilor.
Aplicațiile dezvoltate pe o astfel de platformă sunt accesibile și prin intermediul altor platforme precum
LabVIEW, Matlab, Python si C/C++. (8)
32
Această placă ajută la citirea informațiilor de la dispozitive de intrare precum senzori, antene,
potenți ometr e și poate distribui informație către dispozitive de ieș ire precum un LED, difuzor, afișoare
sau că tre memorii externe.
În imaginea 3.3 se poate observa arhitectura generală a unei plăci Arduino. Principala componentă este
microcontrolerul Atmega 328p , pe care îl putem observa în mijlocul plăcii. L a nivelul acestuia se
realizează recepția și transmisia de date. Mufa USB este folosită pentru a conecta partea aceea a plăcii
care este folosită la încărcarea programului pe microcontroler cu ajutorul calcul atorul ui. Tensiunea sa de
funcționare este de 5V, ac easta putând fi oferită de la un alimentator sau din USB. Pinii analogici de la
A0 la A5 sunt folosiți ca pini de intrare, iar pini i de intrare/ieșire digitali sunt numerotați de la 2 la 13.
Arduino dispu ne de pini de alimentare care pot avea 3.3V și 5V.
Minicalculatorul Raspberry PI
Figura 3. 3– Raspberry PI Zero W
Aceste plăci stau la baza a multe aplicații de IoT. Ele au în componența lor, asemeni unui calculator, un
proceso r, un cip grafic, o memorie volatilă (RAM), o se rie de conectori ce asigur ă conexiunea cu alte
periferice cat ș i o mufă de alimentare. A cest minicalculator funcționează ca și un calculator obișnuit ,
având nevoie de minim o tastatur ă necesară scrierii progr amelor și a comenzilor ș i a unui monitor pentru
afișarea grafică de date și imagini.
Placa Raspberry Pi Zero W este considerată unul din cele mai mici calculatoare de pe piață care are la
bază un procesor realizat de Broadcom .
Acest minicalculator dispune de un procesor cu frecvența de lucru de 1GHz ș i o memorie RAM de 512
MB. Acest lucru va ajuta atât la rularea unor programe de nivel jos cât și rularea unor algoritmi complecși.
O altă caracteristică este aceea că pe acest calculator se pot rula cu ușuri nță distribuții ale sistemelor de
operare Linux precum Raspbian sau chiar și sistemul de operare Windosws IoT.
33
Raspberry Pi Zero W pune la dispoziție conectivitate WiFi și Bluetooth, acest lucru oferind posibilitatea
integrării în domeniul IoT. Pentru expu nerea imaginilor și a datelor avem conectivitatea HDMI.
Pentru aplicații , în care unul din scopuri este de a achiziționa imagini, acest minicalculator dispune de
un slot pentru cameră video cât și de conexiuni de tip microUSB pentru date. O parte din ace ste aspecte
pot fi observate și pe Figura 3.3 .
Caracteristici tehnice:
• Procesor SoC BCM2835;
• Frecvența de operare a procesorului: 1 GHz;
• Memorie RAM: 512MB;
• Conectivitate WiFi 2.4GHz;
• Conectivitate Bluetooth;
• Slot card microSD;
• Conector miniHDMI;
• Conector micro -B USB pentru alimentare;
• Conector micro -B USB pentru date;
• Conector CSI pentru cameră foto/video;
• Pinout de 40 pini GPIO;
• Compatibil cu extensiile HAT/pHAT;
• Dimensiuni: 65 x 30 x 5 mm.
3.1.2Senzorii de temperatură și de umiditate
Pentru a realiza nodurile cu senzori am ales folosirea a doi senzori de temperatură și umiditate digitali și
anume DHT11 și AM2320.
Primul senzor este DHT11 (Figura 3.4) .
Figura 3 . 4– Senzor DHT11
Acesta are următoarele specificații tehnice:
• Tensiune a de alimentare: 3v3 -5v;
• Curentul maxim 2.5 mA;
• Gama de măsurare a umidității: 20% -95% RH ;
34
• Acuratețea măsurării umidității: ±5% RH ;
• Gama de măsurare a temperaturii: 0 °C – 60 °C ;
• Acurateț ea măsurării temperaturii: ±2 °C ;
• Nu funcționează sub 0°C .
Temperatura este măsurată de un NTC, iar umiditatea este măsurată folosindu -se un senzor capacitiv.
Este precalibrat și oferă la ieșire un semnal digital. (9)
Cel de -al doilea senzor este unul mai precis ș i anume AM2320.(Figura 3.5)
Figura 3. 5- AM2320
• Tensiune de alimentare: 3.1V – 5.5V;
• Tensiune de alimentare recomandată: 5V;
• Curent maxim consumat: 950uA;
• Curent mediu consumat: 350uA;
• Curent de ieșire: maxim 8mA;
• Interval măsurare umiditate: 0%RH – 99.9%RH;
• Rezoluție măsurare umiditate: 0.1%RH;
• Interval măsurare a temperaturii : -40 ~ +80 °C;
• Poate comunica prin interfe țele I2C sau 1Wire.
Acesta poat e mă sura o umiditate cu acuratețe de 4%RH la o temperatură de 25 °C. (10)
35
3.1.3 Modu lul de comunicație
Construirea unei rețele de senzori fără fir impune folosirea a multe resurse hardware și software. Fiecare
nod necesită pe lâ ngă dispozitivul de achiziție de date și un dispozitiv de conexiu ne fără fir .
În cadrul acestui proiect ca și m odule de comunicație s -au folosit integratele r adio nRF24L01+.
Figura 3. 6– Modul radio nRF24L01+
Cipul nRF24L01+ este un dispozitiv des tinat transmiterii și recepționă rii datelor în domeniul radio.
Acesta lucrează la frecventa ISM d e 2.4 GHz și suportă rate de biți de 250kbps, 1Mbps și 2Mbps .
Acest modul poate fi programat prin intermediul interfeței de comunicare SPI. Un alt aspect notabil al
acestui modul de comunicații este faptul că este capabil să întrețină șase comunicații dif erite simultan.
Din punct de vedere al caracteristicilor radio acest integrat folosește modulaț ia GFSK (Gaussian
Frequency -Shift Keying). GFSK este o formă specială a modulației clasice FSK (Frequency -Shift
Keying) unde informația binară este transpusă în diferențe discrete de frecvență ale purtătoarei. GFSK
este folosită de asemenea și în alte tehnologii precum Bluetooth.
Acest integrat de comunicații suportă 126 de canale de frecvenț e independente ș i funcționează în banda
dintre frecvențele 2400 MHz și 2 525 MHz, dar din aceste 126 doa r 83 sunt libere în toate țările. D e
exemp lu, în America frecvența de 2483 MHz nu este liberă.
Atunci când alegem să folosim rata de biți de 250 kbps sau 1 Mbps integratul nRF24L01+ va folosi o
bandă de 1 MHz, pe când în sit uația în care rata de biți este setată la 2 Mbps banda va fi de 2 MHz.
Interfața de comunicație SPI
Pentru ca m odulul de comunicație nRF24L01+ să comunice cu modulul de procesare folosește un
protocol de comunic ație serială sincron numit SPI (Serial Perip heral Interface), dezvoltat de compania
Motorola. Acest tip de conexiune permite comunicarea bidirecțională între dispozitive , adică transferul
datelor se poate face în ambele direcții simultan (full -duplex). Dispozitivele implicate într-o astfel de
conexi une comunică folosind o relație de tipul master/multi slave (adică nu sunt suportați mai mulți
masteri), master -ul fii nd dispozitivul ce inițiază transmiterea pachetelor de date.
Conexiunea SPI se mai numește și conexiune 4 fire deoarece implică 4 fire de legătură între d ispozitivele
ce folosesc această interfață de comunicarea și în figura 3.7. (11)
• SCLK – Serial Clock (aceas ta este ieșirea master -ului)
36
• MOSI/MISO – Master Output, Slave Input (acesta este ieșire a master -ului)
• MISO /SOMI – Master Input, Slave Output (acesta este ieșirea slave -ului)
• SS – Slave Select (activa pe 0 logic, ieșirea master -ului)
Figura 3. 7– Comunicație SPI Master -Slave
Se observă că în cadrul ac estui tip de conexiune avem două fire pe care se tra nsmit date (MOSI ș i MISO).
De asemenea , se mai observă că slave -ul este selectat cu ajutorul semnalului de selectare (SS), pentru
fiecare slave fiind nevoie de un fir de selecție individual ca în Figura 3.8 .
Figura 3. 8– Comunicție Master – Multi -Slave
Pentru a iniția o comunicație de tip SPI m asterul trebuie să aibă frecvenț a de ceas cel mult egală cu cea
suportată de slave. Masterul setează apoi cipul slave cu care vrea să comunice, punâ nd 0 pe linia de SS
dinspre acesta.
În timpul unui ciclu SPI, tra nsmiterea datelor este complet bidirecțională:
– masterul trimite un bit pe l inia MOSI, iar slave -ul îl citește de pe aceeaș i linie;
– slave -ul trimite un bit pe l inia MISO, iar slave -ul îl citește de pe aceeaș i linie;
37
Acest tip de comunicație implică de regula doi regișt rii de shiftare (Shift Register), unul în mast er și unul
în slave, conectați în ciclu:
Figura 3. 9– SPI folosind regiștrii de shiftare
În cazul proiectului de față modul ul de comu nicare va funcționa în modul slave , iar m odulul de comandă
va funcționa î n modul master . În vederea comunicării se pot alege vite ze de comunicare de la 1Mbps
până la 2 Mbps.
Așa cum se poate vedea și în figura3. 10pentru a se iniția o comuni cație între mo dulul de comandă și
cipul nRF24L01+ trebuie ca bitul CSN să fie setat la 0 logic. Atâta timp cât pinul CSN este setat la 0
modulul de comunicare va avea activată comunicația SPI, iar în vederea comunicării va fi necesară și
setarea pinului CE pentru a scoa te cipul din starea de așteptare .
Figura 3. 10– Citirea și scrierea datelor prin SPI (12)
Setul de instrucțiuni necesare configurării unei conexiuni SPI se poate vedea în tabelul din anexă.
Procedeul de citire al datelor din regiștrii modulului de comunicare constă în trimiterea unei comenzi de
citire alături de adresa locației de la care se dorește cit irea, iar apoi dimensiunea în oc teți a dat elor pe
care dorim să le citim.
38
Conexiunea fără fir
Așa cum am spus ma i sus integratul este capabil să folosească trei rate de biți precum 250 kbps, 1 Mbps
sau 2 Mbps. Pentru configurarea acestora se va seta valoarea registrului RF_SETU P, în funcție de rata
de biți dorită. Pentru a seta rata de 250 kbps se setează R F_DR_LOW sau cei 2 biți din RF_DR_HIGH.
Atunci câ nd RF_DR_LOW este setat, RF_DR_HIGH va fi ignorat.
Foarte important în vederea comunicării este setarea frecvenței radio a canalului pe care se dorește
realizarea comunicației. Domeniul de fr ecvențe în care se poate comunica este într e 2.4 GHz și 2. 525
GHz. Pentru a realiz a o comunicație cu ratele de biți de 250 kbps sau 1 Mbps trebuie ca lățimea de bandă
să fie de 1 MHz, iar pentru o rat ă de biți de 2 Mbps între canale se va alege o bandă de 2 MHz într e
canale.
Pentru selectarea frecvenței canalului de comunicare se va seta registrul RF_CH, iar pentru calculul
frecvenței se va folosi formula următoare:
F = 2400 kHz + RF_CH (MHz)
Pentru a putea comunica dou ă module trebuie să folosească același canal, pe acee ași frecvență și aceeași
rată de biți de transmisie /recepție.
Tot în vederea realizării unei conexiuni este necesară setarea puterii amplificatorului de semnal. Pentru
configurarea acestei puteri avem la dispo ziție biții RF_PWR din registru l RF_SETUP. Setă rile acestora
sunt ilustrate în tabelul de mai jos.
RF_PWR Amplificarea
antenei Curentul
consumat
11 0 dBm 11.3 mA
10 -6 dBm 9 mA
01 -12 dBm 7.5 mA
00 -18 dBm 7mA
Tabel 3.1 – Setarea puterii amplificatorului de semnal
Moduri le de operare ale modulului de comunicare
Modul Oprit (Power O ff Mode)
În acest mod de operare cipul nRF24L01+ este oprit, în consecință consumul său de putere va fi foarte
redus. To ate valorile stocate în regiștrii sunt păstrate și conexiunea SPI este de asemenea păstrată activ ă
permițând în orice moment s chimbarea valorilor din regiștrii . Pentru a trece din acest mod în modul
pornit , trebuie setat bitul PWR_UP din registrul CONFIG la 0.
Modul de Așteptare (Standby Mode)
Acest mod de funcționare este de dou ă tipuri: modul de așteptare 1 (Standby Mode 1) și modul de
așteptare 2 (Standby Mode 2). În ambele moduri valorile din regiștrii interni sunt salvate.
39
• Modul de așteptare 1
Acest mod este activat setând bitul PWR_UP din registrul CONFIG la 1 logic, adică tot timpul când nu
se trimite ceva. Intrarea în acest mod se face când bitul CE este setat la 1 ș i iese din acest mod când este
setat pe 0. Acest mod de operare este utilizat datorită timpului mic de trecere de la modul RX/TX pe care
îl oferă și pentru a r educe c onsumul de curent prin faptul că își menține starea de activare doar pentru
intervale de timp mici.
• Modul de așteptare 2
Acest mod de operare este utilizat atunci când integratul utilizează comunicarea pe mai multe canale.
Cipul nRF24L01+ intră î n modul de operare 2 atunci câ nd bitul CE e ste setat la 1 logic și când coada de
transmisie (TX FIFO) este liberă. Dacă un nou pachet este încărcat în co ada de transmisie circuitul va
începe transmiter ea sa după o întârziere de 130 µs dat orată funcționarii c ircuitului.
Modul de Recepție (RX Mode)
Acest mod de funcționare este unul activ deoarece cipul radio nRF24L01+ este folosit ca și receptor.
Pentru a iniția acest mod d e funcționare trebuie setați biții PWR_UP, PRIM_RX și CE la 1 logic.
În acest mod cipul este capabil să efectueze o că utare continuă a semnalelor ce conțin pachete valide, iar
dacă un astfel de semnal este detectat , conținutul mesajului recepționat va fi trimis într -un slot vacant
din coada de recepție. Deci , în acest mod de operare , cipul a scultă, iar atun ci când primeș te un mesaj
valid care are CRC -ul și adresa corectă stochează acest pachet într -o coadă. Există situații în care coada
este plină, iar atunci pachetele recepționate se vor pierde nefiind spațiu pentru stocarea lor.
Tot în cadr ul acestui mod de operare se poate folosi și detectorul de semnal (RPD – Recived Power
Detector), acesta fiind activ doar când în mediu există un semnal cu putere mai mare de -64dBm pentru
o durata de timp de cel puțin 40 us. (12)
Ieșirea din acest mod d e operare se face doar atunci câ nd m icrocontrolerul care gestionează stă rile va
impune modul de așteptare 1 sau modul oprit.
Modul de Transmisie (TX Mode)
Modul de transmisie este de asemenea un mod activ de operare în cadrul căru ia se face transmiterea
pachetelor. Pentru a intra în acest mod de f uncționare sunt necesare urmă toarele etape:
• setarea bi tului PWR_UP la 1 logic;
• setarea bitului PRIM_RX la 0 logic;
• în coada de transmisie (TX FIFO) să existe un pachet;
• iar bitul CE treb uie să fie setat la 1 logic mai mult de 10 µs.
Cipul nRF24L01+ va rămâne în modul de transmisie până când termină de transm is un pachet complet.
Atunci câ nd bitul CE este setat la 0 logic starea sa se va schimba cu starea de așteptare și atunci câ nd CE
este setat la 1 logic dacă există un pachet în coada de transmis ie (TX FIFO) se va începe o nouă
transmisie . Dacă după o comunicare între două dispozitive coada de transmisi e este goală , atunci starea
sa va fi schimbată în starea de așteptare 2.
40
Modurile de o perare ale integr atului împreună cu configurările de regiștrii necesare pot fi observate în
tabelul de mai jos:
Mod de
funcționare PWR_UP PRIM_RX Pin CE Starea cozii
RX 1 1 1 –
TX 1 0 1 Golire buffere pe
RF
TX 1 0 Pulsuri de minim
10 us Un singur pache t e
trimis din coadă
Standby – II 1 0 1 Cozi goale
Standby – I 1 – 0 Nu se transmite
nimic
Power Down 0 – – –
Tabel 3.2– Modurile de funționare ale integratului
Protocolul de comunicare Enhanced ShockB rust (ESB)
Enhanced ShockB rusteste un protocol de comunicație ce suportă transmiteri bidirecționale de pachete de
date, stocarea pachetelor în niște cozi specifice, transmiterea mesajelor de confirmare (ACK) și
retransmiterea a utomată în cazul unei comunicații eșuate. ESB poate rea liza comunicație radio cu un
consum foarte redus de putere, iar dezvoltarea codul ui de implementare este ușoară, a cesta fiind
încapsulat în cipul de comunicație radio nRF24L01+ .
Acest protocol care realizează tranzacția de pachete este inițiat de procesul de transmisie și se termină cu
succes atunci când emițătorul primește un mesaj de confirmare (ACK) de la receptor. Pentru a realiza o
conexiune bidirecțională receptorul are posibilitatea să atașeze un mesaj util mesajului de confirmare.
(12)
Figura 3. 11– Principiul de funcționare ESB
41
Dacă în cadrul operației de transmisie ( TX) nu se primește un mesaj de confirmare (ACK) după realizarea
primei transmisiuni, se vor iniția noi retransmiteri pană când pachetul de confirmare ( ACK ) va fi primit.
ESB pune la dispoziție:
• încapsularea autom ată a pachetelor și sincronizarea comunicați ei
• trimiterea și recepționarea unor mesaje de înștiințare
• retrimiterea pachetelor automat
• alocarea dinamică a dimensiunii mesajului transmis
• 6 adrese de comunicare pentru o conexiune în stea
La ba za funcționă rii acestui protocol stau niște principii foarte simple. Î n timpul funcționării integratului
acesta ascultă mediul exterior și la recepția unui pachet se verifică CRC -ul, iar în c azul în care acesta
corespunde celui calcu lat la nivelul receptorului se v a trimite un mesaj de aprobare ( ACK ), iar a poi se
vor salva datele într -una dintre cozile goale de recepție . Există și situații în care câmpurile de CRC nu
corespund și în situația r espectivă pachetele vor fi ignorate și receptorul va trimite un mesaj de NAK.
Mesajul ACK reprezi ntă o înștiințare pozitivă, adică un mesaj care confirmă primirea unui pachet valid,
pe când NAK este u n mesaj ce înștiințează transmițătorul că nu a primit un pachet valid. Acest p rocedeu
este ilustrat sugestiv î n organigram a din figura 3.12.
Figura 3. 12 – Procedeul de comunicare ESB
42
Formatul Pachetelor Enhanced ShockBrust
Acest tip de pachet este format din cinci câmpuri: preambul, adresă, control, încărcătură si CRC(Cyclic
Redundancy Check). Acest format poate fi vă zut in figura de mai jos .
Preambul
1 octet Adresa integratului
3-5 octeți Câmp de control
9 biți Date
0-32 octeți CRC
1-2 octeți
Figura 3. 13 – Formatul pachetului ESB
Câmpul de preambul
Este o secvență de biți folosită pentru a sin croniza demodulatorul c u receptorul (fluxul de biți de la
intrare). Această secvență numită preambul are dimensiunea de 8 biți ș i este fie secvența 01010101 fie
10101010.
• în situația în care primul bit al adresei este 1 atunci secvența de preambul v a fi setată automat la
10101010
• dacă primul bit al adresei este 0 atunci s ecvența de preambul va fi setată la 01010101.
Acest lucru este făcut pentru a asigura faptul că există suficiente t ransmisiuni inițiale astfel încâ t
receptorul să aibă timp să se stabilizeze.
Câmpul de adresă
În această secvență este stocată adresa receptorulu i. Ac eastă adresă ne asigură că un pachet c are este
detectat este într -adevă r recepționat de recep torul corect, în acest mod se previne comuni carea nedorită
între sisteme diferite ce comunică prin intermediul aceluiași canal de comunicație. Această adresă se
poate configura în registrul SETUP_AW. Valoare a acestei adrese este dată de că tre utilizator pr in scrierea
regiștrilor RX_ADDR_P0 -5, corespunzător fiecărui pipe.
Câmpul de control
Încărcătură utilă
6 biți PID
2 biți NO_ACK
1 bit
Figura 3. 14 – Formatul câmpului de control
Câmpul de control al pachetului are în componența sa un câmp de 6 biți în care se stoch ează lungimea
încărcăturii, un câmp de 2 biți care conține un identificator al pachetului (PID) și un bit NO_ACK .
• Lungimea încărcăturii
Acest câmp de 6 biți specifică lungimea încărcăturii u tile în octeți. Lungimea încărc ăturii poate varia
între 0 ș i 32 de octeți. Acest câmp va fi activat doar dacă se folosește alocarea dinamică a încărcăturii.
• Identificatorul (PID)
Acest câ mp de 2 biți ajută la detectarea faptului că un pachet este transmis acum sau este unul retransmis.
Acest lucru ajută la prevenirea recepționării aceluiași pachet de mai multe ori, câmpul acesta este automa t
43
incrementat de fiecare dată câ nd transmițătorul primește un pachet prin interfața SPI (pachet ce urmează
a fi transmis).
• Flag-ul de infirmare (NO_A CK)
Acest flag poate fi utilizat doar când bitul NO_ACK este setat pe 1 logic. Într -o comunicație de tipul
acesta este uneori util ca t ransmițătorul să fie informat că receptorul a primit cu s ucces pachetul. Acest
lucru se face prin setarea bitului NO_A CK la 0 logic, iar în situația î n care o as tfel de informație nu este
utilă se poate opta pentru n eutilizarea acestei opțiuni setâ nd bitul NO_ACK la 1 logic. (12)
Câmpul încărcăturii utile
În acest câmp se stochează, așa cum îi spun e și numele, conținutul util a l pachetului pe care dormim să
îl transmitem. Acesta poate avea o dimensiune variabilă de la 0 p ână la 32 octeți.
CRC (Cyclic Redundancy Check)
Acest câmp est e de 1 sau 2 o cteți și este primordial în detecția erorilor de comun icare și anume
redundanța recepției acel uiași pachet. El este calculat î n funcție d e câmpul de adresă și de câ mpul
încărcăturii. N iciun pachet nu va fi primit dacă acest câ mp nu este recunoscut. Acest mecanism este
implicit setat la valoarea 1 și poate fi modificat în registrul CONFIG la bitul CRC.
La calcular ea acestui câmp se folosesc două ecuații polinomiale:
• 1 octet : 𝑋8+𝑋2+𝑋+1, valoarea de început 0xFF
• 2 octeți : 𝑋16+𝑋12+𝑋5+1 ,valoarea de început fiind 0xFFFF (12)
Alocarea statică sau di namică a dimensiunii pachetelor
Mecanismul „Enhanced ShockBrust ” permite două tipuri de alocări: statică și dinamică. În lipsa oricărei
preferințe alocarea memoriei pentru pachete este cea statică. Folosind alocarea static ă toate pachetele
transmise într e emițător și receptor au aceeaș i dimensiune.
Folosirea alocării statice se face modificând registrul RX_PW_Px din cadrul circuitului de recepție.
Dimensiunea încărcăturii utile , de la nivelul circuitului de transmitere , este dată de numărul de octeți
numă rați la nivelul cozii de transmisie (TX_FIFO) ș i trebuie obligatoriu să fie aceeași dimen siune ca și
cea a valorii stocate î n registrul RX_PW_Px de la nivelul circuitului de recepție.
Al doilea mod de alocare a dimen siunii î ncărcăturii utile este cel dinamic. Acest mod permite emițătorului
să transmită mesaje cu dimensiune variabil ă către receptor. A locare a dinamică oferă avantajul că nu mai
este necesar ca în cazul unei transmi siuni de pachete de dimensiuni diferite , dimen siunea standard să fie
aleasă în funcție de dimensiunea celui mai mare pachet.
La nivelul receptorului mesajul poate fi deco dificat de că tre nRF24L01+ într -un mod automat folosind
tot registrul RX_PW_Px. Microcontrolerul poate citi lungimea mesajului primit folosindu -se de comanda
R_RX_PL_WIND. Pentru act ivarea acestui tip de alocare a dimensiunii trebuie setat bitul EN_DPL din
cadrul registrului FUTURE la 1 logic, i ar la nivelul receptorului registrul DYNPD trebuie setat. (12)
44
Procedeul autom at de tranzacționare de pachete
Acest procedeu este foarte util deoarece per mite retrimiterea unui pachet pană când acesta a fost
recepționat corect. Atunci când pachetul a fost primit cu succes este trimis în mod automat un pachet de
confirmare că tre emiț ător, numit ACK, iar în situația în care emițătorul nu primește acest pachet va
reiniția transmiterea mesajului.
Pentru activarea modului de transmitere al pachetelor ACK este necesară setarea registrului EN_AA,
având, de asemene a, posibilitatea să transmi tă ală turi de acest mesaj de confirmare și un mesaj util.
Modul acesta permite retransmitere a ultimului pachet dintr -o coadă de transmisie până când
transmițătorul primește înapo i mesajul ACK sau până când emiț ătorul a epuizat nu mărul stabilit de
retransmi teri al mesajelor. Acest numă r de retransmiteri este configurabil setând b iții ARC din cadrul
registrului SETUP_RETR.
Tot în cadrul acestui procedeu automat se poate seta și timpul dintre două retrimiteri consecutive ale
emițătorului. Dacă rata de bit este setată la 1 sau 2 Mbps este suficient un timp de 500 µs, iar pentru rata
de 250 kbps este un timp variabil în funcție și de dimen siunea pachetului transmis, timpul variind într e
500 µs și 1500 µs. (12)
Cele trei etape ale modulu i de r etransmitere sunt următoarele :
• Transmiterea pachetului ;
• Recepți onarea pachetului ;
• Primirea sau nu a pachetului de confirmare urmată de trecerea la modul de transmisie .
Aceste 3 etape sunt comutate automat atunci câ nd modul de retransmisie este activa t, în situația în care
se dorește folosirea unui mod de retrimitere și înștiințare de către utilizator dar cu dezavantajul reducerii
puterii de calcul.
Modelul MultiCeiver
Acest model are la bază modelul de topologie stea prezentat în capitolul an terior și se referă la faptul că
acest modul de comunicare este capabil să comunice prin intermediul a șase conducte (pipe -uri)diferite
cu șase dispozitive simultan. În cadrul acestui model o conductă este văzută ca un canal l ogic suprapus
peste unul fizic. Integra tul nRF 24l01+ este capabil să răspundă la șase canale logice folosind a celași
canal fizic.
45
Figura 3. 15–Modelul Multiciver
Toate pi pe-urile logice au în comun urmă toarele setări:
• CRC activ/inactiv (este activ mereu atunci când modul Enhanced ShockBurst este activ)
• Modul de calcul ac CRC -ului pe 1 sau 2 octeți
• Dimensiunea adresei
• Frecve nța canalului de comunicație
• Viteza cu care se realizează comunicația
• Amplificarea semnalului (LNA)
Toate canalele de comunicație logice sunt activate setând registrul EN_RXADDR. Implicit doar canalele
logice 0 și 1 sunt ac tive, fiecare alt canal logic fiind configurat prin intermediul registrului
RX_ADDR_PX.
Fiecare canal logic poate avea adrese de până la 5 octeți. Canalul logic 0 are o adresă unică față de 1, iar
canalele lo gice de la 1 la 5 folosesc acee ași 4 cei mai semnificativi octeți, doar cel mai nesem nificativ
octet fiind diferit.
Într-o comunicație u n receptor poate comunica cu mai mul ți emițători pe canale de comunicație diferite.
Pentru a evita , în astfel de situații , transmiterea unui mesaj de confirmare greșit către un alt transmițător
se vor folosi adresele de transmitere care trebuie să corespun dă cu cea a canalului logic pe care s -a primit
pachetul, ia r transmițătorul trebuie să aibă ca și adresă de transmitere tot adresa cana lului logic la care a
trimis pachetul inițial. (12)
46
3.2 Resurse Software Folosite
3.2.1 Arduino IDE
Arduino IDE este un mediu de dezvoltarea ușoară și rapidă de programe pentru plăcile de dezvoltare
Arduino. Acesta este de f apt un program gratuit care asigură o programare simplificată pentru
microcontrolerele Atmega.
Cu ajutorul programului Ard uino IDE se pot scrie programe ușor ce mai apoi pot fi încărcate prin
intermediul cablului USB pe microcontrolerul Atmega. După încărcarea codului pe microcontroler este
apoi rulat de acesta. Arduino IDE folosește o variație a limbajelor de programare C și C++. Înainte de a
începe scrierea de cod propriu -zis pe Arduino IDE trebuie selectate tipul de placă folosit și portul serial
prin c are este realizată conexiunea. (13)
Un cod s cris în acest mediu de dezvoltare trebuie să res pecte niște reguli de sintaxă. Înainte de a începe
scrierea unui co d în Arduino IDE trebuie cunoscu te câteva noțiuni de bază:
• Codul scris în limbajul Arduino se numește sketch
• Un sketch Arduino se execută mereu de la cap la coadă
• Sketch -ul scris pentru Arduin o conține cinci părți:
o La fel ca și în alte limbaje de programare codul trebuie să aibă un antet în care să se explice
pe scurt ce face sketch -ul respectiv
o Declararea variabilelor globale
o După declararea variabilelor urmează rutina setup (). În cad rul acest ei funcții se vor seta
condițiile inițiale ale regiștrilor și se vor executa operații pe care dorim să le rulăm o
singură dată. Tot în cadrul acestei funcții este necesară și inițializarea comunic ației seriale
ce ne va fi folositoare la utilizarea monitoru lui serial din cadrul programului Arduino IDE.
o După realizarea funcț iei setup () urmează funcția loop() care este așa -zisa parte principală
a sketch -ului. În cadrul acestei funcții se găsește partea de cod cea mai importantă, aici
fiind practic tot algoritm ul programului realizat. În momentul rulării unui sketch, odată ce
programul va ajunge în această buc lă o va executa continu u atâta timp cât sketch -ul va
rula.
o După funcția loop() vor fi scrise funcțiile specifice programul ui ce vor pute fi apoi
apelate î n funcția loop().
3.2.2 Sistemul de operare Raspbian
Acest sistem de operare este oferit gratuit și are la bază sistemul de oper are Debian 7 “Wheezy”. Numele
său a fost obținut prin combinarea celor dou ă nume Raspberry și Debian (Rasp și bian).
Raspbian e ste special optimizat pentru a suporta setul de instrucțiuni al arhitecturii ARMv6 care stau la
baza minicalculatorului Raspberry Pi.
47
Prin folosirea acestui sistem de operare avem avantajul utilizării a peste 3500 de pachete software
gratuite , special crea te pentru el și optimizate pentru a rula pe hardware -ul ARM11 al acestui
minicalculator.
Acest sistem de operare este unul de tip “hard -float”, adică oferă posibilitatea de a opera în vir gulă mobilă
prin emularea unui hardware. În cele mai recente distribu ții ale sistemului de operare Raspbian cele mai
semnificative elemente necesare lui Debian Whee zy au fost mulate pe necesitățile arhitecturii ARMv6,
deși distribuția de baza necesită ARMv7. În acest fel a fost sporită performanța aplicațiilor ce folosesc
operații în virgulă mobilă , deoarece sistemele de operare precedente folosesc setări de tipul “soft – float”,
care s unt mai puțin eficiente, pentru că, în această configurație operațiile aritm etice ce funcționează în
virgulă mobilă pentru arhitectura ARMv6 sunt emulate software.
3.2.3 Conexiunea cu Raspberry PI
Există situații în care conexiunea la distanță este o metodă mai simplă sau situații în care natura
proiectului impune o conexiune la distanță. Pentru a realiza o conexiun e la distanță prin intermedi ul
Internetului este necesară cunoașterea adresei IP a echipamentului pe care vrem să îl accesăm, a numelui
de utilizator de pe acel echipament și a parolei.
În rețelele locale există două tipuri de alocare a adreselor IP, a locare statică și dinamică. Dacă alocarea
este statică este suficientă salvarea acelei adrese IP alocate prima dată și folosirea ei în conexiunea SSH.
Dacă alocarea se face dinamic atunci va fi nevoi e mereu de conectarea unui monitor ș i a unei tastaturi
pentru aflarea adresei IP alocate . Aflarea adresei IP se face deschizând o fereastră de terminal în care se
va executa comanda “Hostname -I”.
SSH – Secure SHell
SSH (Secure SHel l) reprezintă un protocol de reț ea criptografic care permite ca datele transferate să
beneficieze de un canal sec urizat. În cadrul acestei conexiuni orice informație trimisă către rețea este
automat criptată, iar când ajunge la calculatorul de la destinație este decriptată tot automat. Acest lucru
poate fi văzut ca o criptare transparentă , întrucât utilizatorul nu e ste afec tat în nici un fel de aceas tă
operație de criptare, el putând să își desfă șoare activitatea în mod normal fără să știe că datele transmise
sunt criptate în timpul transmiterii în rețea.
Protocolul SSH asigură trei caracteristici principale: autentif icarea, criptarea și integritatea datelor
transmise într -o conexiune.
1.Autentificare : este realizată o identificare precis ă a celui care inițiază conexiunea
2.Criptare: datel e sunt complet criptate astfel încâ t doar destinatarul autentificat le poate decr ipta
3.Integritate: garantează că datele care circulă in timpul conexiunii ajung nealterate
Conexiunea la Raspberry Pi prin intermediul protocolu lui SSH oferă posibilitatea rulă rii unei console de
terminal pe dispoz itivul respectiv. Această metodă este foa rte rapidă în situația î n care utilizatorul
cunoa ște un limbaj de scr ipting precum bash necesar sistemului de operare Linux.
48
În situația în care utilizatorul folosește sistemul de operare Windows, pentru a folosi acest tip de
conexiune va avea nevoie de un program ce emulează un terminal fiind un client pentru SSH , spre
exemplu programul gratuit Putty, iar în situația în care utilizatorul folosește Linux, acesta vine de obicei
cu un astfel de program instalat implicit.
VNC Connect
Această metodă de conexiun e este foarte prietenoasă, punând la dispoziție o interfață grafică foarte
intuitivă. Folosind această metodă avem acces la întregul sistem de operare de pe Raspberry Pi, oferind
avantajul unei conexiuni prietenoase, acest mod de conectare es te foarte util utilizatorilor ca re nu sunt
familiarizați cu linia de comandă.
Pentru realizarea unei conexiu ni de tipul acesta este nece sară cunoașterea adresei IP, a numelui de
utilizator și a parolei asociata acestuia.
Figura 3. 16 – PuTTY Figura 3. 17 – VNC Viewer
3.2.4 Serverul Apache
Apache este un server de tip HTTP gratuit. Acest tip de server a jucat un rol major în dezvoltarea webului,
stând la baza a 65% din paginile web actuale.
Un astfel de server este foarte util și în cadrul aplicațiilor de IoT deoarece poate fi rulat cu ușurință pe un
nod principal care are ca modul de procesar e un mi nicalculator precum Raspberry PI.
Serverul Apache poate deservi găzduirea interfeței grafice a unei aplicații IoT pr in intermediul căreia se
realiz ează comanda și monitorizarea acelui proiect. Interfața grafică poate fi realizată în HTML, iar partea
de programare, cât și transmiterea comenzilor către kernel pot fi realizate în limbajele de programare
PHP sau JavaScript.
49
3.2.5 Limbaje folosite
HTML este acronimul de la Hypertext Markup Language, ceea ce este de fapt limbajul pe care browserele
de Internet îl înțeleg și cu ajutorul lui pot fi afiș ate paginile web.
PHP este un limbaj de programare care ajută la cre area de pagini de Internet dinamice. Acest a se folosește
împreună cu limbajul HTML
Javastript (JS) este de asemenea un limbaj de programare orientat pe obiecte. Este foarte util în adăugarea
de funcționalități în paginile web, acest limbaj putând fi interpretat și de către browser.
Pentru a progra ma atât modulele de comunicare cât și modulele de procesare având în vedere
echipamentele fizice folosite precum microcontrolere Atmega sau minicalculatorul Raspberry PI am ales
limbajul de programare C ++. Acesta este un limbaj de programare standardizat c are este foarte întâlnit
în cadrul proiectelor ce au la bază microcontrolere sau minicalculatoare de genul Raspberry PI.
50
51
Capitolul 4 – Realizarea practică
Realizarea practică a acestui proiect a presupus o serie de etape precum :
• Alegerea echipamentelor
• Alegerea topologiei de rețea
• Realizarea conexiunii între nodurile rețelei
• Alegerea canalului de comunicare pentru evitarea interferenței
• Realizarea interfeței grafice pentru monitorizare și control
În figura de mai jos este ilustrată arhitectura sistemului realizat.
Figura 4. 1 Arhitectura generală a sistemului realizat
În cadrul acestui capitol se vor prezenta aceste etape ce au stat la baza realizării unui sistem de achiziție
de date și de control al unei locuințe.
4.1 Proiectarea rețelei de comunicație fără fir
Pentru un proiect ce are ca scop realizarea unei rețele de senzori f ără fir sunt necesare două compo nente
principale.
Prima componentă este nodul de rețea ce va deservi ca și nod p rincipal al rețele i. Acesta va trebui să aibă
pe lâ ngă modulul de comunicare un modul de procesare , capabil să ruleze un server , care va trebui să
găzduiască interfața grafică cu utilizatorul. Pentru aceasta nodul principal trebuie să asigure conexiun ea
52
la Internet. Pentru realizare a nodul ui de rețea principal am ales folosirea unui minicalculator Raspberry
PI Zero W ce a fost prezentat în capitolul 3.
A doua componentă ce stă la baza realizării unei rețele fără fir este nodul propriu -zis, cel care are inte grată
unitatea de com andă sau senzorii. La nivelul a cestei componente se va face achiziția de date din mediul
exterior și se vor lua anumite decizii în privința unor comenzi . Pentru a realiz a aceste o perații nodul
trebuie să dispună de pini de intrare analogici , pentru a putea prelua date de la senzori ,cât și de un
convertor analog -digital , pentru a asigura convertirea datelo r analogice venite din mediul ex terior. Având
în considerare aceste aspecte, am ales folosirea unei plăci de dezvoltare Arduino ce are la bază un
microcontroler Atmega328p. Alegerea acestei plăci de dezvoltare a fost făcuta datorită avantaje lor pe
care le aduce. Pe lângă programatul facil , acest mediu de programare beneficia ză de foarte multă
documentație și exemple pe Internet.
În cadrul acestui proiect se va realiza o rețea de senzori fără fir ce sunt c apabili să m ăsoare temperatura
și umiditatea aerului din mediul înconjurător. Aceste noduri vor prelua datele pe care le vor comu nica
prin radiofrecvență nodul ui principal. La nivelul nodului principal se vor procesa datele și se vor
centraliza la nivelul unei interfețe grafice prietenoase. De la nivelul interfeței grafice , pe lâ ngă
monitorizarea datelor venite de la senzori , se vor putea da și niște comenzi care să ofere controlul
anumitor echipamente electronice auxiliare unei locuințe. Controlul se va realiza prin folosirea unor
relee.
Exista două modalități de control:
• prima fiind prin comandare a locală a unui pin de pe placa Ras pbbery PI ;
• a doua este de a comanda un pin prin intermediul unei comenzi trimise prin radiofrecvență către
un nod de control fără fir.
Pentru a asigura comu nicarea toate nodurile rețelei trebuie să aibă în componența lor modulele de
comun icare nRF24L01+. A cestea asigură o comunicație de tip stea în care un nod principal poate să
comunice cu șase noduri secundare simultan. Având în ved ere că suprafața de acoperire câ t și numă rul
de noduri sunt mici am ales folosirea topologiei de rețea de tip stea pentru rea lizarea acestui proiect .
4.2 Realizarea comunicației între nodurile rețelei
Funcțiile principale
Pentru a realiza comunicarea î ntre două noduri de rețea trebu ie asigurate niște etape de pregătire ale
cipului de comunicare nRF24L01+.
Program area, atât a nodului principal câ t și a nodurilor secundare , a fost realizată utilizându -se librăria
C dezvoltată de TMRh20 încă din anul 2014. Am ales folosirea acestei librării întrucât este foarte bine
documentată , conține toat e funcțiile ce asigură comunica ția SPI între modulul de procesare și modulul
de comunicare, cât și funcțiile necesare pro gramării cipului de comunicare. Prin intermediul acestei
librării se realize ază programarea regiș trilor modulului de comunicație într-un mod prietenos și optim.
Etape le realizării unei comunică ri între noduri sunt următoarele:
53
• Asigurarea comunicației SPI între modulul de comandă și integratul nRF24L01+
• Realizarea configurării cipului de comunicare
• Setarea canalului de comunicare
• Selectarea ratei de biți
• Selectarea canalelor de comunicare logice atât pentru transmitere cât și pentru recepție
• Ascultare a mediului exterior în vederea recepționării unor pachete de la nodurile rețelei sau
transmiterea de pachete către alte noduri ale rețelei.
Structura generală a unui program scris în limbajul Arduino este constituită din două părți principale
void_setup() și void_loop() .
În cadrul funcției void_setup() se vor realiza toate inițializările microcontrolerului, iar în funcția
void_ loop() se va scrie programu l ce va fi executat î ntr-o buclă .
În vederea asigurării unei comunicări corecte între nodurile unei rețele fără fir, pe fiecare dintre noduri
vor trebui asigurate unele inițial izări și configurări de regiștrii . Mai jos vor fi prezentate câteva din
funcțiile principale ce stau la baza unei inițializări corecte ale cipului de comunicare.
• Funcția de inițializare generală
Pregătirea cipului pentru a începe comunicarea se face cu ajutorul funcției radio.begin(). Această funcție
se va apela la începutul funcției principale void_setup () .
În cadr ul acestei funcții se va realiza comunic ația serială SPI între integrat și modulul de comandă.
Aceasta v a asigura pornirea procesului de configu rare corect setând anumiți regiș trii la niște valori
implicite care să fie valabile pentru cele mai multe platforme hardware precum rata de biți la 1 Mbps.
Tot la nivelul acestei funcții se va dezactiva și alocarea dinamică a dimensiunii pachetelor setând la 0
logic registrul DYNPD. Este foarte important ca la inițializare să se seteze un canal de comun icație al
cărei frecvențe să fie liberă î n toate țările. P entru aceasta în cad rul acestei funcții se va se ta canalul de
comunicare la numă rul 76.
• Funcția de deschidere a canale lor logice de citire
După inițializare este necesară și deschiderea canalelor lo gice de comunicare. Acest lucru se va face
folosindu -ne de conceptul de pipe-uri (canale de comunicație logice).
Se pot deschide două tipuri de canale de comun icare :de scriere și de citire. Pentru a deschide un astfel
de canal de comunicare logic de citir e se va apela funcția : openReadingPipe(uint8_t numar, const uint8_t
* adresa)
Se observă că această funcție se apelează prin doi p arametri : primul reprezintă numă rul canalu lui logic
pe 8 biți, iar al doi lea este reprezentat de un pointer și reprezintă adr esa canalului respectiv.
Șase astfel de canale logice pot fi deschise simultan. Convențional s -a stabilit ca pipe -ul 0 să fie folosit
pentru scriere, iar restul să fie folosite pentru citire.
• Funcția de deschidere a canalelor logice de scriere
54
Pentru a deschide un canal logic de scriere se va folosi o funcție specială care are urmă torul antet:
openWritingPipe(const uint8_t * address)
Pe un nod de comunicare nu pot fi deschise mai multe canale de scriere , spre deosebire de cana lele de
citire ce pot fi în numă r de 5.
Se observă că această funcție este apelată doar prin intermediul unei adrese. De menționat este ca această
adresă de scriere trebuie să coincidă cu una d in adresele de citire de pe celă lalt dispozitiv în vederea
realizării unei comunicații.
• Funcția de setare a canalului de comunicare
Setarea canalului de comunicar e este o etapă foarte importantă , dacă ne dormi să realizăm o comunicare
între două nodu ri. Acest integrat de comunicare fără fir suportă până la 126 de canale fizice de
comunicare .
Pentru setarea canalului de comunicare se va folosi funcția set.Channel (unit8_t canal) ce va fi apelată
prin i ntermediul numă rului efectiv al ca nalului de comuniare dorit. Numă rul canalului dorit va fi scris în
cadrul acestei funcții în registrul RF_CH.
• Funcția de setare a nivelului puterii de emisie
După alegerea canalului urmează alegerea niv elului puterii de tr ansmisiune. Acest integrat suportă 4
niveluri de amplificare ce sunt ilustrate în tabelul de mai jos.
RF_SETUP(RF_PWR) Puterea de ieșire Consum ul de curent
11 0 dBm 11.3 mA
10 -6 dBm 9.0mA
01 -12 dBm 7.5 mA
00 -18 dBm 7.0 mA
Tabel 4. 1–Niveluri de amplificare
Antetul funcției ce realizează setarea ni velului de amplificare este urmă torul: setPALevel(uint8_t nivel ).
Nivelul este setat în cad rul funcției prin setarea biților RF_PWR din cadrul registrului RF_SETUP așa
cum se vede în tabelul de mai sus. Funcția es te apelată printr -o variabilă pe 8 biți ce constituie chiar
nivelul dorit.
• Funcția de setare a ratei de biți
Pentru setarea ratei de biți în v ederea comunicării este necesară alegerea uneia dintre cele trei posibilități
puse la dispoziție de acest integrat. Acestea sunt de 250 kbps, 1 Mbps și 2 Mbps.
Antetul funcției în cadrul căreia se face setarea acestei rate de biți este : setDataRate(rf24_datarate_e
speed) .
55
Se poate observa că această funcție este apelată prin intermediul unei variabile cu tip abstract definit ce
reprezintă chiar una din cele trei rate binare disponibile. În cadrul acestei funcții se realizea ză setarea
bitului RF_DR din registrul RF_SETUP.
În alegere a unei rate de bit trebuiesc lua te în considerare faptul că o rată binară mică față de una mare
este foarte utilă în cazul în care se dorește o sensibilitate mare la recepție, dar , pe de altă parte , o rată
binară mare ajută la un consum mai redus de putere și reduce de asemenea și riscul de coliziune între
pachete.
Pentru ca două noduri să comunice este foarte important să folosească pe lângă același canal și aceeași
rată de bit.
• Funcția de retrimit ere
Există uneori situații în care pachetul transmis nu este recepționat de receptor din diverse motive precum
coliziunea între pachete la recepție sau ecranarea temporară a căii de comunicare.
Pentru a asigura o transmisiune sigură este foarte util un me canism care să asigure retransmiterea unui
mesaj până când se primește un mesaj de înști ințare afirmativ sau până câ nd un numă r de retransmiteri a
fost fă cut. Această funcție se găsește în librăria RF24.h și are următorul antet: setRetries(uint8_t delay,
uint8_t count).
Această funcție se apelează prin două variabile delay și count. Delay reprezintă timpul dintre do uă
retrimiteri consecutive. Ace astă variabilă poate lua ca valoare p ână la 15 m ultiplii ale valorii 250 us, 0
însem nând de fap t 250 us, iar 15 4000 us. A doua variabilă prin care este apelată funcția reprezintă
numărul de retrimiteri efectiv, acest a putând lua valori de la 0 până la maxim 15.
4.2.1 Nodul senzor
Așa cum am prezentat în Capitolul 3, cipu l nRF24L01+ dispune de comunica ție SPI. Co nexiunea dintre
cipul de comunicație și modulul de procesare se face asemănător cu imaginea de mai jos.
56
Figura 4. 2–Conexiune Arduino Nano – nRF24L01+
Modulul de procesare al datelor ales este Arduino Nano ce are la bază microcontrol erul Atmega 328p.
Pinii au fost conectați în conformitate cu tabelul de mai jos:
Tabel 4. 2–Conectarea pinilor Arduino Nano – nRF24L01+
Modulul radio nRF34L01+ lucrează pe interfa ța SPI la tensiune de 3v3. Totuși, acesta are integrată o
logică ce este compatibilă cu tensiuni de 5V, ceea ce asigură interfața rea acestu ia cu dispozitive care
lucrează la nivelur i logice de 5V.
Consumul de curent al modulul ui radio nRF24L 01+ poate atinge valori de vârf de p ână la 150mA. Acest
curent este de așteptat atunci câ nd acesta trans mite proces electric ce necesită un consum crescut de
energie în ori ce dispozitiv de radio frecvență .
Soluția pentru a asigura a cest curent de vârf care durează câteva fracțiuni de secundă este de a plasa în
layout -ul circuitului un condensator de 10uF între linia de VSS și GN D a modulului radio. Această
opțiune a sigură o componentă pasivă care este mereu încă rcată cu sarcină și gata să furnizeze această
sarcină dispozitivului radio at unci câ nd acesta are nevoie de ea, în speță în momentele de consum maxim
de curent când poate sursa de alimentare de VCC nu poate furniza atât de repede tot curentul necesar
modulului.
Singura condiție este c a acest condensator să fie poziționat cât ma i aproape de consumatorul să u, în cauză
modulul radio nRF24L01+ , deoarece altfel efect ul acesta de a răspunde repede în timp se pierde pe
traseele cir cuitului electronic.
Programul care rulează pe acest nod este unul scris în limbajul Arduino care respec tă formatul clasic cu
două funcții principale: void_setup() și void_loo p().
În funcția void_setup() s-au realiza t toate inițializările:
• Realizarea conexiunii SPI între cele două module
• Setarea canalului de comunicare
• Setarea nivelului puterii de emisie
• Setarea ratei de biți
• Activarea pachetelor d e confirmare (ACK) Pinii
Modulului Descriere Arduino
Nano
1 GND GND
2 VCC 3.3V
3 CE DIO8
4 CSN DIO7
5 SCK DIO13
6 MOSI DIO11
7 MISO DIO12
8 IRQ NOT
57
• Setarea numă rului de retrimiteri și a intervalului d e timp dintre acestea
• Trecerea cipului în modul pornit
În cadrul funcției loop(void) se vor realiza deschiderea de canale logice de transmitere, preluarea
parametrilor temperatură și umiditate din mediul înconjurător folosind un senzor de temperatură.
În cadrul acestui proiect se vor achiziționa date de la două noduri cu senzori din locaț ii diferite, deci vor
fi necesari doi senzori de temperatură. Pentru aceasta am ales folosir ea a doi senzori unul fii nd AM2320,
iar cel de -al doilea fiin d DHT11 .
Conexiunea fizică între cei doi senzori și Arduino Nano este ilustrată în tabelele de mai jos.
Tabel 4. 3–Conectarea pinilor pentru DHT11 și AM2320
Datele preluate de la senzor se vor atribui unei variabile cu tipul de date abs tract definit ce conține două
variabile float corespunzătoare celor doi parametrii. După toate acestea , variabila cu tipul definit va fi
transmisă pe un canal de comunicație logic. Operațiile pe care le execută nodul senzor sunt explicate pe
scurt în organ igrama de mai jos.
58
Figura 4. 3 – Structura programului de pe nodul cu senzor
59
4.2.2 Nodul de control
Nodul de control respectă aceeași conexiune hardware ca și nodul senzor. Diferențele dintre acestea două
sunt că nodul senzor re alizează transmiterea de date la nodul principal, iar acesta recepționează da te de
la nodul principal.
Figura 4. 4 – Structura nodului principal
La nivelul nodului principal se face citirea din fișierul text a parametrului introdus d e la interfața grafică.
Acest parametru reprezintă de fapt temperatura dorită în locuință. De la nivelul nodului principal am ales
transmiterea unui simbol sau a unei secvențe de simboluri care să ne indice modul în care dorim să
acționăm asupra releelor . Dacă nodul primește secvența “999” atunci va scrie 1 logic la pinul 1 ceea ce
va duce la deschiderea releului, deci va decupla alimentarea electrică. Dacă se va primi simbolul “3”,
înseamnă că temperatura introdusă este mai mică decât cea măsurată, deci pinul 1 va fi setat tot la 1 logic ,
iar dacă se va primi caracterul “4” atunci înseamnă ca temperatura introdusă este mai mare decât cea
măsurată deci se va dori pornirea releului, atunci se va scrie 0 logic la pinul 1 .
Similar se va realiza și controlul pinului 2, structura programului care rulează pe nodul de control poate
fi observată în organigrama de mai jos:
60
Figura 4. 5 – Structura programului de pe nodul de control
61
4.2.3 Nodul principal
Figura 4. 6 – Conexiune Raspberry PI – nRF24L01+
Pentru realizarea nodului principal am ales folosirea minicalculatorului Raspberry PI Zero W.
Pentru realizarea programului de conexiune în rețeaua fără fir am folosit limbajul de programare C sub
sistemul de operare Linux.
Așa cum se poate vedea în imaginea de mai jos, nodul principal, este realizat folosindu -se două niveluri.
La baza primului niv el stă programul care realizează conexiunea cu modulul radio nRF24L01+ și care
execută centralizarea datelor în fi șiere text.
Figura 4. 7–Nivelurile nodului principal
Al doilea nive l conține partea de server ce gă zduiește interfața grafică la nivelul căreia se face
monitorizarea și controlul.
VCC 3.3V
GND GND
CSN GPIO08
CE GPIO17
MOSI GPIO10
MISO GPIO09
SCK GPIO11
IRQ NEC.
62
Programul ce stă la baza realizării comunicației între nodul principal și restul rețelei a fost realizat în
limbajul de programare C++ pentru care am folosit librăria realizată de TMRh20. Docume ntația sub
forma de Doxyfile se poate gă si la adresa din anexa (13). Această librărie reprezintă un driver foarte bine
optimizat pentru cipul nRF24L01+.
În antetul programului nod_principal.cpp de pe nivelul principal se observă patru secțiuni. În prima
secțiune sunt incluse librăriile necesare realizării programului.
A doua secțiune este cea de variabile globale unde se vor defini variabile ce ajută la extragerea
informațiilor din fiș ierele text, pointerii cu care se vor parcurge fișierele text și pipe -urile de comunicare.
Pentru declararea pipeuri -lor de comunicare s -au folosit niște adrese hexazecimale ce vor fi stocate într –
un vector de 6 elemente.
Pentru definirea structurii pachetului recepționat, având în vedere că datele venite de la nodurile senzori
sunt o temperatură și o umiditate , s-a definit un tip abstr act de date care să conțină două variabile de tip
float.
În func ția principală este realizat practic tot algoritmul de comunicare. În cadrul acestei funcții se vor
efectua următoarele etape:
• Se ap elează funcția care realizează inițializarea cipului radio: radio_init().
Această funcție realizează inițializarea comunicației SPI, setează canalul de comunicație, nivelul puterii
de emisie, rata de biți, dacă dorim sau nu pachet de confirmare , dacă dorim să ret rimitem de un anumit
număr de ori un pachet, precum și afișarea în linia de comandă a detaliilor de conexiune pentru a verifica
corectitudinea conexiunii precum în imag inea de mai jos.
Figura 4. 8 – Detalii de conexiune
• Se vor deschide canalele logice de comunicare pentru recepția și transmisia datelor.
Această funcție conține instrucțiu ni care realizează deschiderea unui can al logic de comunicare pentru
scriere și a 5 canale logice pentru citire.
63
• Într-o buclă infinită se vor realiza transmiterea de comenzi și recepția de date.
Folosind funcția input_param() se vor prelua datele introduse prin intermediul interfeței grafice. Datele
introduse de către utilizator prin interfața grafică sunt stocate într -un fiș ier text. Această funcție realizează
citirea unui parametru și stocarea sa într-o variabilă dintr -un fișier text.
După citirea acestui parametru , care este temperatura propriu -zisă pe care o dorim în locuință , se va
executa funcția condition() , care va face compararea acestui param etru cu temperatura existentă citită de
la un nod senzor din rețea. În funcție de rezultatul comparației se vor lua niște hotărâri în vederea
transmiterii unui cod unic corespunzător unei comenzi l a un nod ce va executa controlul unui releu pentru
pornirea și stingerea unei centrale termice.
Cu cele prezentate mai sus am asigurat controlul unei centrale termice având ca reper o temperatură pe
care o primim de la un nod senzor din locuință. Pentru re cepționarea acelei temperaturi de la nodul senzor
trebuie ca în bucla principală să fie făcută și preluarea datelor de la nodurile cu senzori. Pentru acest lucru
se va trece cipul de comunicare în modul de recepție folosindu -se funcția startListening(), iar apoi se va
apela funcția receptie(). În cadrul acestei funcții se vor asculta toate canalele logice de comunicare ș i
atunci câ nd sunt date de recepționat acestea vor fi salvate într -un fișier text. Tot în cadrul acestei funcții
sunt realizate și niște afișări în linia de comandă a informaț iilor recepționate , cât și a numă rului de canal
logic de pe care s -a realizat recepția. După ce a fost scris programul acesta a fost compilat folosindu -se
compilatorul g++, rularea sa făcâ ndu-se clasic, f olosind comand a sudo ./numeprogram.
Princip iul de funcționare al acestui nod este reprezentat și în organigrama de mai jos.
64
Figura 4. 9–Principiul de funcționare al nodului principal
Instalarea și configurarea serverului
La nivelul nodului princi pal, așa cum s -a prezentat și mai sus , vom rula un serve r Apache care este
capabil să gă zduiască interfaț a grafică web ce va putea fi accesată din interiorul rețelei locale.
În cazul proiectului de față , pentru a folosi cât mai optim resursele acestuia , am ales folosirea unui sistem
de operare care nu dispune de interfață grafică. D e aceea , toata configurarea se va face din linia de
comandă. Modul de configurare va fi explicat în cele ce urmează. Înainte de orice operație trebuie
asigurată conexiunea la Internet a minicalculatorului Raspberry PI.
Pentru a realiza acest lucru trebuie configurat manual un fișier , la nivelul căruia se stochează numele
routerului folosit (SSID) și parola acestuia (PSK). Pentru a ajunge la acest fișier s e va executa în linia d e
comandă instrucțiunea: cd /etc/wpa_supplicant , după deschiderea acestui director se va edita cu ajutorul
unui editor de text precum nano fișierul de configurare wpa_supplicant.conf folosind comanda: sudo
nano wpa_supplicant.conf . După deschiderea acestu i fișier va trebui scris manual nume le routerului și
parola acestuia .
65
Având în vedere că nodul principal este un minicalculator Raspberry Pi ce are ca sistem de operare o
distribuție Linux specială pentru acest di spozitiv , numită Raspbian , am urmă rit urmă toarele etape pentru
a instala serverul Apache:
-În primul rând va trebui realizată o reînnoire a pachetelor existente în baza de date a Linux -ului, pentru
a beneficia de ultimele versiu ni de aplicații existente. Acest lucru se face folosind comanda: sudo a pt-
get update ;
-După actualizarea listei de aplicații urmează instalarea propriu -zisă. Instalarea serverulu i Apache este
făcută executâ nd în linia de comandă a comenzii: sudo apt -get install apache2 .
-Apoi pentru verificarea instală rii se va deschide într -un browser o pagină folosind adresa locală a
dispozitivului ce gă zduieș te serverul. Pentru aflarea adresei locale se va introduce î n linia de comandă
instrucțiunea : hostname -I. Dacă instalarea a fost făcută cu succes va trebui să se deschidă o pagin ă care
să confirme acest lucru.
-Calea către fișierul ce găzduiește interfața grafică este: " /var/www/html ". Aici , dacă executăm comanda
de listare " ls -l" vom identifica pagina princi pală care are numele index.html .
Realizarea interfeței grafice
Pentru a asigur a o metodă ușoară de vizualizare a datelor preluate de la senzori și pentru a asigura
controlul am creat o interfață grafică HTTP. Aceasta poate fi accesată local atunci când atât dispozitivul
de pe care se face controlul cât și nodul principal sunt conect ate în aceeași rețea. Interfața grafică poate
fi vizualizată în figura 4.6.
Figura 4. 10–Interfața grafică
66
Această interfață grafică a fost realizată cu ajutorul limbajului HTML îmbinat cu CSS, PHP și JavaScript.
Se observă că acesta interfață grafică asigură monitorizarea indicând , în niște casete de text portocalii ,
datele venite de la nodurile cu senzori. Pe lângă datele venite de la senzori se oferă și posibilitatea
controlului prin intermediul unor butoane sau a unor casete de text în care se introduc parametrii doriți.
Aspectele plă cute ale butoanelor, casetelor în care sunt afișați parametrii sau caseta în care sunt introduși
parametrii , au fost realizate folosindu -se limbajul CSS. Prin intermediul acestui limbaj am realiz at
dimensionarea, aranjarea în pagină cât și colorarea acestora pentru un aspect mai plăcut.
Pentru monitorizare am constat at că, datorită faptului că datele de la nod urile secundare vin în continuu ,
dacă se realizează o simplă afișare a acestora în interfața grafică , acestea nu se vor actualiza decât după
ce vom reîmprospăta pagina WEB. Pentru a realiza o reîmprospătare locală, doar pe conținutul acelor
casete de t ext, am realizat niște funcții î n JavaScrip care să realizeze a ctualizarea la intervale de o
secundă.
Realizarea controlului
Așa cum am spus mai sus se pot realiza două tipuri de control:
• Control local
• Control prin radiofrecvență
Controlul lo cal
Pentru controlul local am creat niște butoane căro ra le-am aplicat u n stil realizat în CSS care se numesc
sugestiv .button{} . La apăsarea unui buton acesta își schimbă starea, iar noua stare este trimisă către un
script realizat în php. Acest script verifică starea butonului și în funcție de ace asta va trimite o comandă
către kernelul de Linux folosind funcția shell_exec() , care va activa sau va dezactiva un pin GPIO de pe
Raspberry PI.
Pentru a realiza un control în timp al acestor stări , am folosit o pictogramă între butoane care își schimbă
culoarea. Atunci când pinul este activat devine verde, iar atunci când este dezactivat iconița devine roșie.
Deoarece la fiecare apăsare de buton sau reactualizare a paginii stare a butonului revenea la cea inițiala ,
am ales f olosirea unui f ișier text în care să suprascriu starea cure ntă la fiecare apăsare de buton , pentru a
simula astfel o variabilă non volatilă ce stochează starea , și anume salvarea stării butonului. Pentru a
folosi această metodă a f ost n ecesară crearea unui număr de fișiere text egal cu numă rul de butoane.
Se obs ervă ca între butoane există o iconiță. A ceasta va fi folosită pentru cele două st ări ale butoanelor,
pornit și oprit. Pentru cele două stări am realizat în CSS dou ă stiluri diferite , unul de culoare roșie și unul
verde icon_red{} și icon _green{} . Atunci c ând un buton este apăsat starea acestuia e ste stocată într -un
fișier text, iar î n funcție de această stare se va face o verificare în cad rul unui script php unde se va lua
deciz ia colorării iconiței. D acă a fost apă sat butonul de pornit se va aplica stilul cu culoare verde, iar dacă
se va apăsa butonul de op rit, iconiței i se va aplica sti lul cu culoare a roșie.
67
Control prin radiofrecvență
Pentru realizarea co ntrolului prin radiofrecvență a fost necesară comun icarea între interfața grafică ș i
softul care re alizează centralizarea datelor. În primul rând am realizat o casetă de text în care atunci când
se introduc date acestea sunt salvate într -un fișier text pe server . Fișierul text este deschis și citit în
cadrul programului principal scris în C++ , iar con ținutul său este stocat într -o variabilă locală. Aceas tă
variabilă va fi comparată cu temperatura preluată de la nodul senzor din casă și se vor lua două decizii:
dacă temperatura este mai mare decât cea măsurată se va transmite simbolul “3” către nodul ce realizează
controlul, iar dacă temperatura este mai mică decât cea măsurat ă se va transmite secvența “4” către nodul
de control. Dacă se dorește oprire a definitivă a releului conectat la nodul de control se va transmite
secve nța “999”.
Pe lângă controlul în funcție de un parametru introdus de utilizator, acest program mai asigură și controlul
unui releu conectat la un pin GPIO la apăsarea unui buton pe interfața grafică. În interfața grafică am
definit un 2 butoane care la apăsare schimb ă o variabil ă într -un fișier text. Atunci câ nd butonul de pornit
este apăsat variabila din fișier se va schimba la 1 logic, iar când butonul de pornit va fi apăsat variabila
din acel fișier va fi schimbată. Pentru a se realiza controlul prin radio -frecven ță, similar se va aborda un
algoritm similar ca cel de mai sus, în care datele din acest fișier vor fi stocate într -o variabilă și transmise
prin radio -frecvență la nodul de control.
4.3 Alegerea canalului de comunicare
Pentru a asigura o conexiune bună între nodurile rețelei wireless este foarte importantă aleg erea canalului
de comunicație radio pe care rețeaua va trimite pachetele. Este foarte important ca două noduri care
doresc să comunice să folosească același canal de comunicare. Pentru aleger ea canalului de comunicare
s-a folosit un program care efectuează o cerceta re a fiecărui canal în vederea analizei numărului de
purtătoare existente pe acel canal într-un interval de timp explorat anterior . Astfel , am putut determina
un canal optim , pentru a re aliza o comunicație fără interferențe și fără coliziuni între pachete.
Programul a f ost realizat în C++ și rulat sub sistemul de operare Linux pe Raspberry PI. Acesta are
structura din organigrama de mai jos:
68
Figura 4. 11–Algoritm alegere canal de comunicație
La baza acestui prog ram stă funcția de verificare a numărului de purtătoare pe fiecare ca nal de
comunicare. Această funcț ie este numită sugestiv scanare(). În cad rul aceste i funcții se realizează
parcurgerea fiecărui canal de comunicare, trecerea cipului în modul de recepție pentru 128 de
microsecunde pentru a verifica gradul de ocupare, apoi t recer ea modulului de comunicare î n modul oprit.
După ce am ținut cipul î n modul de recepț ie pentru 128 de microsecunde se va executa ve rificarea
numărul ui de purtătoare de pe acel canal folosind funcț ia testCarrier(). Această funcție verifică gradul
de ocupare de pe un cana l de comunicație .
Programul a fost compilat folosind compilatorul g++. După rulare el va afișa în linia de comandă ni ște
date ca în figura de mai jos:
69
Figura 4. 12–Rezultatul rulării programului de scanare
Încadrat cu roșu este evidențiat, de sus în jos, gradul de ocupare de pe un canal la mai multe momente de
timp. In momentul efectuării măsurătorii am activat funcția Bluetooth pe telefonul mobil și s e poate
observa , încadrat cu galben ,că în momentul pornirii acestei funcții gradul de ocupare al unor can ale a
crescut foarte mult , întrucât această comunicație se real izeaz ă în banda dintre 2.4 și 2.48 GH z.
Pentru a observa mai ușor aceste date am realizat un program în M atlab în care sunt evidențiate grafic
gradele de ocupare ale canalelor (figura 4.9 ). Programul are ca date de int rare acele valori pe car e le
returnea ză program ul de scan are. Se poate observa î n imaginea de mai jos gradul de ocupare pe fiecare
canal. Ce l mai mare grad de ocupare detectat este pe canalul 24 și folosindu -ne de formula de calcul a
frecvenței canalului F = 2400 kHz + RF_CH (MHz) constatăm că frecvența canalului cel mai ocupat
este 2424 MHz care este în banda Bluetooth deci presupunerea de mai sus este confirmată.
Pentru realizarea acestui proiect am ales folosirea canalului 1 întrucât gradul de ocupare pe acel canal
este satisfăcător.
70
Figura 4. 13– Numărul de purtătoare într -un interval de timp pe un anumit canal
71
Concluzii și contribuția personală
Scopul acestei lucrări a fost realizarea unui sistem de monitorizare și de control al echipamentelor
electronice auxiliare unei locuințe folosindu -se o rețea de noduri fără fir care să faciliteze efortul uman .
Conexiunea dintre nodurile rețelei a fost realizată cu ajutorul modulelor de comunicație nRF24L01+,
care s -au dovedit a fi potrivite acestei a plicații. Acestea funcționează î n banda dintre fre cvențele 2400
MHz și 2525 MHz și o feră posibilitatea comunicării prin intermediul a 126 de canale radio la trei rat e de
biți de 250kbps, 1Mbps și 2Mbps .
La dezvoltarea acestui sistem pe lângă asigurare a conexiunii rețelei fără fir s -a realizat și o interfață
grafică prin intermediul căreia un utilizator să poată interacționa într-un mod prietenos cu acesta în
vederea realizării monitorizării și controlului .
Rețeaua este formată din trei componente principale și anume nodul principal , nodul de monitorizare și
nodul de control. L a nivelul nodului principal se centralizează datele ș i se transmit comenzile către nodul
de control , nodur ile de monitorizare realizează achiziția de temperatură și umiditate din mediul
înconjurător și le transmite prin intermediul radio -frecvenței către nodul principal , iar nodul de control
primește niște mesaje de la nodul principal și în func ție de acestea ia decizii în vederea activării sau
dezactivării unor relee conectate la pinii de ieșire de pe acesta .
Pe lângă controlul prin radiofrecvență am realizat și un control prin conexiunea WiFi . Acest control are
la bază niște comenzi locale ce sunt date prin intermediul unui scrip t ce rulează la nivelul interfeței
grafice. Aceste comenzi sunt trimise către Shell în Linux și vor activa sau dezactiva niște pini de pe nodul
principal în vederea comandării unor relee.
Pentru realizarea acestei lucrări am folosit tehnologii noi precum limbajele de formatare HTML,CSS,
am realizat funcții pentru actualizarea datelor de la nivelul interfeței grafice î n Java Script și am realizat
comenzi către Shell , citiri și scrieri de fișiere folosind PHP. Pentru programul de pe nodul principal am
utilizat limbajul de programare C++.
În concluzie acest proiect și -a atins scopul, întrucât este capabil atât de realizarea controlului cât și de
monitorizarea mediului înconjurător. Principalul avantaj pe care îl aduce u n astfel de sistem este sporirea
confortului locuitorilor unei locui te, întrucât atât monitorizarea cât și controlul se realizează de la nivelul
unei interfețe g rafice prietenoase. Un alt avant aj al acestui si stem este scalabiliat ea rețelei, întrucât este
foarte ușoară agregarea la sistem a unui nou nod de care să realizeze controlul unor echipamente
electronice sau monitorizarea mediului.
72
73
Bibliografie
1. Hype Cycle for the Internet of Things, https://www.gartner.com/doc/3770369/hype -cycle -internet –
things – , accesat la: 21.04.2018.
2. Perera C., “Sensing as a service model for smart cities supported by Internet of Things”, în
Transactions on Emerging Telecommunications Technologies, vol. 25, no. 1, 2014, pp. 81 -93.
3. Abid Rahim, “Design and Implementation of a Low Cost Wireless Sensor Network using Arduino
and nRF24L01(+)”, în International Journal of Scientific Research Engineering & Technology
(IJSRET), Volumul 5, nr 5, Mai 2016.
4. Dumitrache I., Ingineria reglării automate, Editura Politehnica Press, 2005.
5. Introducere în Microcontrollere, http://andrei.clubcisco.ro/cursuri/3pm/lab1.pdf , accesat la:
18.05.2018.
6. Laborator microcontrolere. Platformă cursuri. Disponibil pe:
http://andrei.clubcisco.ro/cursuri/3pm/lab1.pdf, accesat la: 04.05.2018.
7. Microcontrolerul, http://retele.elth.ucv.ro/Bratu%20Cristian/MAP/001%20 -%20Curs%20001%20 –
%20MAP%20 -%20Microcontrolerul.pdf , accesat la: 06.05.2018.
8. P. Aradi, “Offline and onlin e thermostat experiment with Lab VIEW and Arduino \ Analysis and
evaluation of implementation based on user responses,” în International symposium on small scale
Intelligent Manufacturing Systems, pp. 127 –131, Iunie 2016.
9. DHT11, DHT22 and AM2302 Sensor s, https://cdn -learn.adafruit.com/downloads/pdf/dht.pdf ,
accesat la: 10.06.2018.
10. Digital Temperature and Humidity Sensor,
http://akizukidenshi.com/download/ds/aosong/AM2320.pdf, accesat la 14.06.2018.
11. Laboratorul 6 – Serial Peripheral Interface, http://cs.curs.pub.ro/wiki/pm/pm/lab/lab6 , accesat la:
24.05.2018.
12. Datasheet n rf24l01+,
https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specif
ication_v1_0.pdf , accesat la 15.05.2018.
13. Intro to Arduino, http: //www.instructables.com/id/Intro -to-Arduino/?ALLSTEPS , accesat la:
28.05.2018.
74
75
Anexă
Anexa 1 – Programe le de pe nodurile rețelei
Program de pe nodul principal
#include <cstdlib>
#include <iostream>
#include <RF24/RF24.h>
using namespace std;
float in;
const uint64_t pipes[6] = { 0xF0F0F0F0D2LL,
0xF0F0F0F0E1LL,
0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL,
0xF0F0F0F0F1, 0xE7E 7E7E700LL};
FILE *f;
FILE *f2;
FILE *f3;
FILE *f4;
FILE *f5;
FILE *f6;
float a;
float temperatura;
float buton;
struct pachet
{
float temp;
float hum;
} p;
RF24 radio(RPI_V2_GPIO_P1_15, RPI_V2_GPIO_P1_24,
BCM2835_SPI_SPEED_8MHZ);
void radio_ini t()
{
radio.begin();
radio.setChannel(1);
radio.setPALevel(RF24_PA_MAX);
radio.setDataRate(RF24_1MBPS);
radio.setAutoAck(1);
radio.setRetries(2,15);
radio.setCRCLength(RF24_CRC_8);
radio.printDetails();
}
void condition()
{
if (in==999){
a=999;
radio.stopListening();
radio.write( &a, sizeof(a) );
}
if (in<=temperatura){
a=3;
radio.stopListening();
radio.write( &a, sizeof (a) );
}
if (in>temperatura && in !=999){
a=4;
radio.stopListening();
radio.write( &a, sizeof(a) );
} if (buton == 0){
radio.stopListening();
radio.write( &buton, sizeof(buton));
}
if (buton == 1){
radio.stopListening();
radio.write( &buton, sizeof(buton));
}
}
void receptie()
{
uint8_t pipe = 1;
if ( radio.available(&pipe) )
{
radio.read( &p,sizeof(p));
if (pipe == 1)
{
f = fopen
("/var/www/html/temperatura.txt","w+b");
f2 = fopen
("/var/www/html/umiditate.txt" , "w+b");
fprintf(f,"%.2f", p.temp);
fprintf(f2, "%.2f", p.hum);
printf("Temperatura = %f
umiditatea = %f si pipe -ul =
%i\n\r",p.temp,p.hum,pipe);
fclose(f);
fclose(f2);
delay(5);
}
else
{
f4 = fopen
("/var/www/html/temperatura1.txt" , "w+b");
f5 = fopen
("/var/www/html/umiditate1.txt" , "w+b");
fprintf(f4,"%.2f", p.temp);
fprintf(f5, "%.2f", p.hum);
printf("Temperatura = %f
umiditatea = %f si pipe -ul =
%i\n\r",p.temp,p.hum,pipe);
temperatura=p.temp;
fclose(f4);
fclose(f5);
delay(5);
}
delayMicroseconds(5);
}
}
int main(int argc, char** argv)
{
radio_init();
radio.printDetails();
printf("<<<INCEPE COMUNICAREA>>> \n");
delay(1);
while(1)
{
76
delay (100);
radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(1,pipes[1]);
radio.openReadingPipe(2,pipes[2]);
radio.openReadingPipe(3,pipes[3]);
radio.openReadingPipe(4,pipes[4]);
radio.openReadingPipe(5,pipes[5]);
radio.stopListening();
f3 = fopen
("/var/www/html/test.txt","r+b");
fscanf (f3, "%f", &in);
printf (" \n\r in = %f \n" , in); fclose(f3);
f6 = fopen
("/var/www/html/buton1.txt","r+b");
fscanf (f3, "%f", &buton);
printf (" \n\r in = %f \n" , buton);
fclose(f3);
condition();
radio.startListening();
receptie();
}
}
Programul de pe nodul cu senzor DHT11
#include <SPI.h>
#include "RF24.h"
#include <Wire.h>
#include <SimpleDHT.h>
#define pinDHT11 2
const uint64_t pipes[2] = {0xF0F0F0F0D2LL,
0xF0F0F0F0E1LL};
struct pachet {
byte temp;
byte hum;
} p;
SimpleDHT11 dht11;
RF24 radio(7,8);
void setup(void) {
Serial.begin(115200);
radio.begin();
radio.setChannel(1);
radio.setPALevel(RF24_PA_MAX);
radio.setDataRate(RF24_1MBPS);
radio.setAutoAck(1);
radio.setRetries(2,15);
radio.setCRCLength(RF24_CRC_8);
radio.openWriting Pipe(pipes[0]);
radio.openReadingPipe(1,pipes[1]);
radio.startListening();
radio.powerUp();
}
void loop(void){
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(pinDHT11,
&p.temp, &p.hum, NULL)) !=
SimpleDHTErrSuccess)
{
Serial.print("Citirea senzorulul DHT11 a
esuat … ");
Serial.println(err);delay(1000);
return;
}
delay (500);
Serial.print("Se transmite: ");
Serial.print((int)p.temp);
Serial.print(" *C, ");
Serial.print((int)p.hum);
Serial.println(" H");
pp.temp = (float)p.temp;
pp.hum = (float)p.hum;
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
radio.stopListening();
delay (1000);
bool x = radio.write(&pp,sizeof(pp));
if(!x)
{
Serial.println("Comunicare
esuata!!!");
}
else
{
Serial.println("Comunicare cu
Succes!!!");
}
}
Programul de pe nodul cu senzor AM2320
#include <SPI.h>
#include "RF24.h"
#include <Wire.h>
#include <AM2320.h>
AM2320 th;
RF24 radio(7,8);
const uint64_t pipes[2] = {0xF0F0F0F0D2LL,
0xF0F0F0F0E2LL};
77
struct data {
float temp;
float hum;
}d;
void setup(void) {
Serial.begin(115200);
radio.begin();
radio.setChannel(1);
radio.setPALevel(RF24_PA_MAX);
radio.setDataRate(RF24_1MBPS);
radio.setAutoAck(1);
radio.setRetries(2,15);
radio.setCRCLength(RF24_CRC_8);
radio.startListening();
Serial.println(F("*** Transmite….."));
radio.powerUp();
}
void loop(void){
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
radio.st opListening();
th.Read();
delay(1000);
d.temp = th.t;
d.hum = th.h;
if(!radio.write(&d,sizeof(d)))
{Serial.println("Transmitere esuata!!!");
}
else {
Serial.println("Transmis cu scuces!!!");
}
Serial.print("S -a transmis :");
Serial.print(d.temp);
Serial.p rint("*C ");
Serial.print(d.hum);
Serial.print(" %");
Serial.print(" \n");
}
Programul de pe nodul de control
#include <SPI.h>
#include "RF24.h"
#define PIN1 2
#define PIN2 3
RF24 radio(7,8);
const uint64_t pipe = 0xF0F0F0F0D2LL;
float pachet_rece ptionat;
void setup(void) {
Serial.begin(115200);
pinMode(PIN1, OUTPUT);
pinMode(PIN2, OUTPUT);
digitalWrite(PIN1, HIGH);
digitalWrite(PIN2, HIGH);
radio.begin();
radio.setChannel(1);
radio.setPALevel(RF24_PA_MAX);
radio.setDataRate(RF2 4_1MBPS);
radio.setAutoAck(1);
radio.setRetries(2,15);
radio.setCRCLength(RF24_CRC_8);
radio.openReadingPipe(0,pipe);
radio.startListening();
radio.powerUp();
}
void loop(void){
while(radio.available())
{
radio.read(&pachet_receptionat ,sizeof(pach
et_receptionat));
Serial.println(pachet_receptionat);
delay(100);
if ((int)pachet_receptionat == 999)
{
digitalWrite(PIN1, HIGH);
Serial.println("OFF");
Serial.println(pachet_receptionat);
}
if ((int) pachet_receptionat == 3){
digitalWrite(PIN1, HIGH);
Serial.println("OPRIT");
Serial.println(pachet_receptionat);
}
if((int)pachet_receptionat==4)
{
digitalWrite(PIN1, LOW);
Serial.println("PORNIT");
Serial.p rintln(pachet_receptionat);
}
if((int)pachet_receptionat==0)
{
digitalWrite(PIN2, HIGH);
Serial.println("BUTON PORNIT");
Serial.println(pachet_receptionat);
}
if((int)pachet_receptionat==1)
{
digitalWrite(PIN 2, LOW);
Serial.println("BUTON PORNIT");
78
Serial.println(pachet_receptionat);
} }
}
Programul de scanare al canalelor
#include <cstdlib>
#include <iostream>
#include <RF24/RF24.h>
using namespace std;
RF24 radio(22, 0);
const uint8 _t num_canale = 126;
uint8_t val[num_canale];
int i;
const int repetari = 100;
int reset_array=0;
void init(){
radio.begin();
radio.setAutoAck(false);
radio.startListening();
radio.stopListening();
radio.printDetails();
}
void scanare()
{
int repetari_cnt = repetari;
while(repetari_cnt –)
{
int i = num_canale;
while (i –)
{
radio.setChannel(i);
radio.startListening();
delayMicroseconds(128);
radio.stopListening();
if ( radio.testCarrier() ) ++val[i];
}
}
}
void afisare_nr(){
i = 0;
while ( i < num_canale )
{
printf("%x",min(0xf,(val[i]&0xf)));
++i;
}
printf(" \n");
}
int main(int argc, char** argv)
{
init();
for (;;)
{
memset(val,0,sizeof(val));
scanare();
afisare_nr();
}
}
Anexa 2 – Codul interfeței grafice
<!DOCTYPE HTML>
<html lang="en">
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/li
bs/font-awesome/4.7.0/css/font –
awesome.min.css">
<head>
<style>
#balon_temp {
position: centre;
border-radius: 100px;
background: #FAAC58;
padding: 40px;
width: 120px;
height: 25px;
display: inline -block;
}
#balon_param { position: centre;
border-radius: 80px;
background: #ff3300;
padding: 30px;
width: 110px;
height: 20px;
display: inline -block;
}
#icon_gree n1{
font-size: 50px;
color: green;
}
#icon_red1{
font-size: 50px;
color: red;
}
#icon_green2{
font-size: 50px;
79
color: green;
}
#icon_red2{
font-size: 50px;
color: red;
}
#submit_text{
margin-top: 10px;
display: inline -block;
}
#submit_button{
margin-top: -19px;
margin-bottom: 20px;
padding:20px 25px;
display: inline -block;
}
</style>
<?php
error_reporting(0);
$temp_dorita=$_POST["temp_dorita"];
$power1=0;
$power2=0;
?>
<!– Script PhP de controlat pinii GpIO
lui Raspberry PI –>
<?php
shell_exec("/usr/local /bin/gpio -g mode 2
out");
shell_exec("/usr/local/bin/gpio -g mode 3
out");
if(isset($_GET['buton1_on']))
{
$file=fopen('buton.txt','w');
fwrite($file,'1');
fclose($file);
shell_exec("/usr /local/bin/gpio -g write 3
0");
}
else if(isset($_GET['buton1_off']) )
{
$file=fopen('buton.txt','w');
fwrite($file,'0');
fclose($file);
shell_exec("/usr/local/bin/gpio -g write 3
1");
}
else if(isset($_GET['buton2_on']))
{
$file1=fopen('buton1.txt','w');
fwrite($file1,'1');
fclose($file1);
}
else if(isset($_GET['buton2_of f']))
{
$file1=fopen('buton1.txt','w');
fwrite($file1,'0');
fclose($file1);
}
else if(isset($_GET['buton3_on']))
{ $file1=fopen('buton3.txt','w');
fwrite($file1,'1');
fclose($file1);
shell_exec("/usr/local/bin/gpio -g write 2
0");
}
else if(isset($_GET['bu ton3_off']))
{
$file1=fopen('buton3.txt','w');
fwrite($file1,'0');
fclose($file1);
shell_exec("/usr/local/bin/gpio -g write 2
1");
}
else if(isset($_GET['centrala_off']))
{
$file2=fopen('test.txt','w');
fwrite($file2,'999');
fclose($file2);
}
?>
<!– Scripturi de refresh pe campuri
locale in JavaScript –>
<meta http -equiv="Content -Type"
content="text/html; charset=utf8" />
<script type="text/javascript">
function refresh1()
{
var req = new XMLHttpRequest();
console.log("Grabbing Value");
req.onreadystatech ange=function() {
if (req.readyState==4 && req.status==200)
{
document.getElementById('temp').inne
rText = req.responseText;
}
}
req.open("GET", 'temperatura.txt', true);
req.send(null);
}
function refresh2()
{
var req = new XMLHttpRequest();
console.log(" Grabbing Value");
req.onreadystatechange=function() {
if (req.readyState==4 && req.status==200)
{
document.getElementById('hum').inner
Text = req.responseText;
}
}
req.open("GET", 'umiditate.txt', true);
req.send(null);
}
function refresh3()
{
var req = ne w XMLHttpRequest();
console.log("Grabbing Value");
req.onreadystatechange=function() {
if (req.readyState==4 && req.status==200)
{
80
document.getElementById('temp1').inn
erText = req.responseText;
}
}
req.open("GET", 'temperatura1.txt', true);
req.send(null) ;
}
function refresh4()
{
var req = new XMLHttpRequest();
console.log("Grabbing Value");
req.onreadystatechange=function() {
if (req.readyState==4 && req.status==200)
{
document.getElementById('hum1').inne
rText = req.responseText;
}
}
req.open("GET", 'umi ditate1.txt', true);
req.send(null);
}
function refresh5()
{
var req = new XMLHttpRequest();
console.log("Grabbing Value");
req.onreadystatechange=function() {
if (req.readyState==4 && req.status==200)
{
document.getElementById('param').inn
erText = req.re sponseText;
}
}
req.open("GET", 'test.txt', true);
req.send(null);
}
function init()
{
refresh1()
var
int=self.setInterval(function(){refresh1()
},3000);
refresh2()
var
int=self.setInterval(function(){refresh2()
},3000);
refresh3()
var
int=self.setInterval(f unction(){refresh3()
},3000);
refresh4()
var
int=self.setInterval(function(){refresh4()
},3000);
refresh5()
var
int=self.setInterval(function(){refresh5()
},5);
}
</script>
<!– Pagina efectiva GUI –> <link rel="stylesheet"
href="css/style.css">
<title>Casa Inteligenta</title>
</head>
<body onload="init()">
<h1 style="text -align: center;"><span
style="black ; font -family: Times New
Roman; font -size: 70px; text -align:
justify;">Monitorizare &
Control</span></h1>
<div id="main">
<div id="updateMe" style="text -align:
center;">
<!–<img src="img.jpg" alt="Trulli"
width="550" height="250"> –>
<form method="get"
action="index.php">
<table
style="width: 75%; text –
align: left; margin -left: auto; margin –
right: 17%;"
border="0" cellpadding="2"
cellspacing="2">
<!– Mai jos se vor afisa in
niste containere definite in css cu numele
de balon_temp{} temperaturile si
umiditatile citite din fisierele text
scrise in condul din back -end –>
<h1>TEMPERATURA & UMIDITATEA
AFARA</h1>
<h1 id="balon_temp">
<span id=
"temp"></span><strong>°c</strong>
</h1>
<h1 id="balon_temp">
<span id=
"hum"></span><strong>%</strong>
</h1>
<h1>TEMPERATURA & UMIDITATEA
IN CASA</h1>
<h1 id="balon_temp" >
<span id=
"temp1"></span><strong>& deg;c</strong>
</h1>
<h1 id="balon_temp" >
<span id=
"hum1"></span><strong>%</strong>
</h1>
<h1> Control </h1>
<!– Aici se vor realiza
butonele de control care intre ele contin
o iconita care isi va schimba star ea in
functie de clasa din css apelata –>
<tr>
<p style="text -align:
center;"><button class="button"
name="buton1_on">Releu1 ON</button>
<?php
81
$file=fopen('buton.txt','r');
$power1 =
fread($file,1);
fclose($file);
if ($power1 ==
0)
echo '<i
class="fa fa -power-off"
id="icon_red1"></i>';
else
echo '<i
class="fa fa -power-off"
id="icon_green1"></i>';
?>
<button
class="button" name="buton1_off" >Releu1
OFF</button></p>
</tr>
<tr>
<p style="text –
align: cente r;"><button class="button"
name="buton2_on">Releu2 ON</button>
<?php
$file1=fopen('buton1.txt','r');
$power2 =
fread($file1,1);
fclose($file1);
if ($power2 == 0)
echo '<i class="fa fa -power-off"
id="icon_red2"></i>';
else
echo '<i cla ss="fa fa -power-off"
id="icon_green2"></i>';
?>
<button class="button" name="buton2_off"
>Releu1 OFF</button></p>
</tr>
<tr>
<p style="text -align: center;"><button
class="button" name ="buton3_on">Releu1
ON</button>
<?php
$file=fopen('buton3. txt','r');
$power1 = fread($file,1);
fclose($file);
if
($power1 == 0)
echo '<i class="fa fa -power-off"
id="icon_red1"></i>';
else
echo '<i class="fa fa -power-off"
id="icon_green1"></i>'; ?>
<button class="but ton"
name="buton3_off" >Releu1 OFF</button></p>
<p
style="text -align: center;"><button
class="button"
name="centrala_off">CENTRALA_OFF</button>
</tr>
</form>
<form
method="post">
<br/>
<!– Aici este formul in care se vor
introduce parametrii doriti pentru a -i
trimite ma i departe la nodul de control –
>
<label> <h2>Temperatura
dorita</h2></label>
<input type="text" id="submit_text"
name="temp_dorita" value="" style="font –
size: 55pt" size="2"/>
<input type="submit"
id="submit_button" value="Submit"
class="button"/>
<?php
if($temp_dorita!= NULL){
$file=fopen('test.txt','w');
fwrite($file,$temp_dorita);
fclose($file);}
$file3=fopen('test. txt','r');
$stare = fread($file3,3);
if ($stare == 999)
echo '<h1 id="balon_param"><span id=
""></span><strong>OFF</strong></h1>';
else
echo '<h1 id="balon_param"><span id=
"param"></span><strong>°c</strong></h1
>';
82
fclose($file3);
?>
</form>
</table> </div>
</div>
</body>
</html>
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Realizarea unui sistem de achiziție de date și de control al echipamentelor [618075] (ID: 618075)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
