Sunteți pe pagina 1din 100

Universitatea “Politehnica” din București

Facultatea de Electronică, Telecomunicații și Tehnologia Informației

Dispozitiv mobil de monitorizare a mediului cu tehnologie LoraWAN

Proiect de diplomă
prezentat ca cerință parțială pentru obținerea titlului de
Inginer în domeniul Electronică, Telecomunicații și
Tehnologia Informației
programul de studii de licență Rețele și Software de Telecomunicații

Conducător științific Absolvent


Ş.l. dr. ing. Adrian Florin PĂUN Florin-Alexandru ROTARU

2020
Cuprins
LISTA FIGURILOR .............................................................................................................. 9
LISTA TABELELOR .......................................................................................................... 11
LISTA ACRONIMELOR .................................................................................................... 13
INTRODUCERE .................................................................................................................. 15
Studiu de caz – gazele periculoase pentru sănătatea umană .................. 17
Arhitectura generală a sistemului ............................................................ 21
2.1. Senzorul mobil .............................................................................................................. 21
2.2. Nodul central ................................................................................................................. 22
Descrierea hardware a sistemului propus ............................................... 23
3.1. Blocul de alimentare ...................................................................................................... 23
3.2. Blocul componentelor Senzori ....................................................................................... 23
3.2.1. Dispozitiv de înregistrare și măsurare a temperaturii.............................................. 24
3.2.1.1. Definiții ......................................................................................................... 24
3.2.1.2. Aparate de măsură.......................................................................................... 24
3.2.1.3. Senzorul de temperatură B57861S0202H040 ................................................. 25
3.2.2. Dispozitiv de înregistrare și măsurare a umidității ................................................. 26
3.2.2.1. Definiții ......................................................................................................... 26
3.2.2.2. Aparate de măsură.......................................................................................... 27
3.2.2.3. Modul senzor de umiditate DHT11 ................................................................ 27
3.2.3. Dispozitiv de înregistrare și măsurare a concentrației de gaz .................................. 29
3.2.3.1. Definiții ......................................................................................................... 29
3.2.3.2. Aparate de măsură.......................................................................................... 30
3.2.3.3. Modul Senzor de gaz MQ-135........................................................................ 31
3.2.3.4. Modul Senzor de gaz MQ-9 ........................................................................... 34
3.2.3.5. Modul Senzor de gaz MQ-4 ........................................................................... 36
3.2.3.6. Modul Senzor de gaz MQ-7 ........................................................................... 38
3.3. Blocul de comandă – microcontrolerul Atmega164A ..................................................... 41
3.3.1. Specificații generale .............................................................................................. 41
3.3.2. Convertorul Analog–Digital (ADC)....................................................................... 42
3.3.3. Dispozitivele periferice de comunicație ................................................................. 46
3.3.3.1. Protocolul 1-Wire........................................................................................... 46
3.3.3.2. Protocolul SPI (Serial Peripheral Interface) .................................................... 47
3.3.3.3. Protocolul UART (Transmisia serială) ........................................................... 50
3.4. Blocul de comunicație radio........................................................................................... 52
3.4.1. LoRa ..................................................................................................................... 52
3.4.1.1. Noțiuni generale ............................................................................................. 52
3.4.1.2. Rata de transmisie a datelor ............................................................................ 54
3.4.1.3. Bugetul de legătura (Link Budget).................................................................. 55
3.4.1.4. Structura pachetelor LoRA ............................................................................. 61
3.4.2. LoRaWAN ........................................................................................................... 62
3.4.2.1. Noțiuni generale ............................................................................................. 62
3.4.2.2. Clase LoraWAN............................................................................................. 63
3.4.2.3. Rețele ............................................................................................................. 64
3.4.3. Modul LoRaWAN SX127X .................................................................................. 64
3.4.3.1. Regiștrii ......................................................................................................... 64
3.4.3.2. Moduri de operare ale modemurilor LoRa ...................................................... 66
3.4.3.3. Configurația regiștrilor pentru modificarea parametrilor LoRa ....................... 70
Raspberry Pi 3 Model B+ ......................................................................... 71
4.1. Descrierea hardware ...................................................................................................... 71
4.2. Sistemul de operare ....................................................................................................... 73
4.3. Date către pagina web .................................................................................................... 73
Implementarea hardware și software a sistemului propus ..................... 75
5.1. Schema electronică a sistemului de achiziție .................................................................. 75
5.2. Schema electronică a Nodului central ............................................................................ 77
5.3. Pași intermediari în dezvoltarea proiectului.................................................................... 78
5.4. Medii de dezvoltare și programe folosite........................................................................ 85
5.4.1. Limbajul C ............................................................................................................ 85
5.4.2. Limbajul Python .................................................................................................... 86
5.4.3. Altium design ........................................................................................................ 86
5.4.4. PuTTY .................................................................................................................. 86
5.5. Organigramele codului .................................................................................................. 87
Concluzii ................................................................................................... 89
6.1. Concluzii personale ....................................................................................................... 89
6.2. Perspective de îmbunătățire ........................................................................................... 89
6.3. Bibliografie ................................................................................................................... 90
ANEXĂ ................................................................................................................................. 91
LISTA FIGURILOR
Figura 1.1 Impactul poluării aerului asupra sănătății umane.................................................... 19
Figura 2.1 Arhitectura generală a sistemului ........................................................................... 21
Figura 3.1 Alimentările Senzorului mobil și a Nodului central................................................ 23
Figura 3.2 Variația rezistenței cu temperatura pentru un termistor NTC.................................. 25
Figura 3.3 Senzorul de temperatură B57861S0202H040 ......................................................... 25
Figura 3.4 Structura externă și internă a senzorului DHT11 .................................................... 27
Figura 3.5 Structura internă a senzorului de umiditate ............................................................ 28
Figura 3.6 Structura și configurația senzorului DHT11 ........................................................... 28
Figura 3.7 Procesul de comunicare al senzorului DHT11 ........................................................ 29
Figura 3.8 Vedere de ansamblu a senzorului MQ-135............................................................. 31
Figura 3.9 Structura internă a senzorului MQ-135 .................................................................. 31
Figura 3.10 Schema de conectare a senzorului MQ-135 în circuit ........................................... 32
Figura 3.11 Caracteristica de sensibilitate a MQ-135 la diferite gaze ...................................... 33
Figura 3.12 Dependența de temperatură și de gradul de umiditate relativă a MQ-135 ............. 33
Figura 3.13 Vedere de ansamblu a senzorului MQ-9 .............................................................. 34
Figura 3.14 Caracteristica de sensibilitate a MQ-9 la diferite gaze .......................................... 35
Figura 3.15 Dependența de temperatură și de gradul de umiditate relativă a MQ-9 ................. 35
Figura 3.16 Vedere de ansamblu a senzorului MQ-4 .............................................................. 36
Figura 3.17 Caracteristica de sensibilitate a MQ-4 la diferite gaze .......................................... 37
Figura 3.18 Dependența de temperatură și de gradul de umiditate relativă a MQ-4 ................. 37
Figura 3.19 Vedere de ansamblu a senzorului MQ-7 .............................................................. 38
Figura 3.20 Structura internă a senzorului MQ-7 .................................................................... 38
Figura 3.21 Caracteristica de sensibilitate a MQ-7 la diferite gaze .......................................... 39
Figura 3.22 Dependența de temperatură și de gradul de umiditate relativă a MQ-7 ................. 40
Figura 3.23 Schema pinilor de uz general ............................................................................... 42
Figura 3.24 Semnal analogic eșantionat la rezoluții diferite .................................................... 42
Figura 3.25 Schema completă a convertorului ADC al Atmega164......................................... 43
Figura 3.26 Implementare SPI cu o singură componentă master și una slave .......................... 47
Figura 3.27 Utilizarea registrului de shift-are.......................................................................... 48
Figura 3.28 Configurația hardware pentru comunicarea cu două registre de shift-are .............. 49
Figura 3.29 Modulație de tip chirp spread spectrum ............................................................... 52
Figura 3.30 Comparații între diverși factori de împrăștiere ai modulației LoRa ....................... 54
Figura 3.31 Caracteristici ale rețelelor Wireless ...................................................................... 56
Figura 3.32 Free Space Path Loss în comunicația Tx−Rx....................................................... 57
Figura 3.33 Nivele de putere a semnalului .............................................................................. 58
Figura 3.34 Semnalul narrowband vs. Semnalul wideband ..................................................... 59
Figura 3.35 Perioada unui simbol LoRa .................................................................................. 60
Figura 3.36 Structura pachetului LoRa ................................................................................... 61
Figura 3.37 Stiva OSI ............................................................................................................. 62
Figura 3.38 LoRa în stiva OSI ................................................................................................ 63
Figura 3.39 Memoria SX127X ............................................................................................... 65
Figura 3.40 Structura uni pachet ascendent ............................................................................. 67
Figura 3.41 Structura unui pachet descendent ......................................................................... 67
Figura 3.42 Structura câmpului Antet ..................................................................................... 68
Figura 4.1 Raspberry Pi 3 Model B+ ...................................................................................... 72
Figura 4.2 Structura SPI ........................................................................................................ 72
Figura 4.3 Diagrama de funcționare a unui sistem IoT ............................................................ 74
Figura 5.1 Schema electronică a Senzorului mobil.................................................................. 76
Figura 5.2 Schema electronică a Nodului central .................................................................... 77
Figura 5.3 PCB-ul destinat Senzorului mobil .......................................................................... 78
Figura 5.4 Montajul modulelor senzorilor de gaze .................................................................. 78
Figura 5.5 Versiunea finală a Senzorului mobil ...................................................................... 79
Figura 5.6 Funcția de inițializare UART ................................................................................. 79
Figura 5.7 Funcția de scriere prin UART ................................................................................ 80
Figura 5.8 Configurarea în PuTTY a conexiunii ..................................................................... 80
Figura 5.9 Testarea modulelor LoRa ...................................................................................... 81
Figura 5.10 Configurarea ADC .............................................................................................. 81
Figura 5.11 Faza de testare a ADC ......................................................................................... 82
Figura 5.12 Primele date ale senzorilor de gaze citite de ADC și trimise pe UART ................. 82
Figura 5.13 Configurarea senzorului DHT11 .......................................................................... 83
Figura 5.14 Configurarea senzorului de temperatură ............................................................... 83
Figura 5.15 Prima versiune a codului Python.......................................................................... 84
Figura 5.16 Afișarea în linia de comandă Raspberry a datelor primite pe UART .................... 84
Figura 5.17 Procesarea datelor pentru senzorul de gaze MQ-135 ............................................ 84
Figura 5.18 Ultima versiune a interfeței de debugging ............................................................ 85
Figura 5.19 Organigrama codului C pentru Senzorul mobil .................................................... 87
Figura 5.20 Organigrama codului Python pentru Nodul central .............................................. 88
LISTA TABELELOR
Tabel 3.1 Caracteristici generale ale senzorului B57861S0202H040 ....................................... 26
Tabel 3.2 Caracteristici generale ale senzorului DHT11 ......................................................... 28
Tabel 3.3 Formatul de date în procesul de comunicare al senzorului DHT11 .......................... 29
Tabel 3.4 Elementele constitutive ale senzorului MQ-135 ...................................................... 32
Tabel 3.5 Elementele constitutive ale senzorului MQ-7 .......................................................... 39
Tabel 3.6 Caracteristici tehnice Atmega164A ......................................................................... 41
Tabel 3.7 ADMUX – Registrul de selecție multiplexor al ADC .............................................. 44
Tabel 3.8 ADCSRA – Registrul de control și stare A al ADC ................................................. 44
Tabel 3.9 ADCL și ADCH – Registru de date al ADC............................................................ 45
Tabel 3.10 ADCSRB – Registrul de control și stare B al ADC ............................................... 45
Tabel 3.11 Zgomotul maxim acceptat pentru diferite valori ale BW și SF ............................... 57
Tabel 3.12 Comparația bugetului de legătură între LoRa și FSK ............................................. 60
Tabel 3.13 Tipuri de mesaje MType ....................................................................................... 68
Tabel 3.14 Conținutul FCtrl pentru mesaje ascendente ........................................................... 69
Tabel 3.15 Conținutul FCtrl pentru mesaje descendente ......................................................... 69
Tabel 3.16 CRC pentru diferite stări ale bitului RxPayloadCrcOn – cazul antetului explicit.... 70
Tabel 3.17 CRC pentru diferite stări ale bitului RxPayloadCrcOn – cazul antetului implicit ... 70
Tabel 4.1 Schema pinilor de uz general pentru Raspberry Pi A și B ........................................ 71
Tabel 4.2 Pini suplimentari pentru versiunea B rev.2 .............................................................. 72
LISTA ACRONIMELOR
ACK = Acknowledge
ADC = Analog to Digital Converter (Convertor Analogic-Digital)
AH = Absolute Humidity (Umiditatea Absolută)
b/s = Bits per second (Biţi pe secundă)
BW = Bandwidth (lățimea de Bandă)
CDMA = Code Division Multiple Access (Acces Multiplu cu Diviziune de Cod)
CPU = Central Processing Unit (Unitatea Centrală de Procesare)
CR = Coding Rate (Rata Codului)
CRC = Cyclic Redundancy Check (Cod Ciclic de Redundanță)
CS = Chip Select (Selectarea Cipului)
EEPROM = Electrically Erasable Programmable Read-Only Memory (Memorie care poate fi
ștearsă electric, programabilă numai în citire)
FSK = Frequency Shift Keying (Manipularea Schimbării de Frecvență)
GND = Ground (Împământare)
GPIO = General Purpose Input/Output (Intrare/Ieșire de Uz General)
HDMI = High-Definition Multimedia Interface (Interfață multimedia de înaltă definiție)
I2C = Inter Integrated Circuits (Circuite Inter-Integrate)
IoT = Internet Of Things (Internetul Lucrurilor)
LoRa = Long Range Radio (Radio cu Rază Lungă de acțiune)
LoRaWAN = Long Range Radio Wide Area Networks (Rețele Radio cu Rază Mare de acțiune)
LPG = Liquefied Natural Gas (Gaz Petrolier Lichefiat)
LSB = Least Significant Bit (Bitul Cel mai puțin Semnificativ)
MAC = Media Access Control (Controlul Accesului la Mediu)
MCU = Microcontroller Unit (Unitatea microcontrolerului)
MISO (SPI) = Master Input, Slave Output (Intrare Master, Ieșire Slave)
MOSI (SPI) = Master Output, Slave Input (Ieșire Master, Intrare Slave)
MSB = Most Significant Bit (Bitul Cel mai Semnificativ)
NF= Noise Factor (Factorul de zgomot)
NTC = Negative Temperature Coefficient (Coeficient de temperatură negativ)
OSI = Open Systems Interconnection (Interconectarea Sistemelor Deschise)
PWM = Pulse Width Modulation ( Factor de umplere)
RAM = Random Access Memory ( Memorie cu Acces Aleator)
Rb = Bit Rate (Rata de Bit)
RF = Radio Frequency (Radio Frecvență)
RH = Relative Humidity (Umiditatea Relativă)
RISC = Reduced Instruction Set Computing (Procesor cu Set Redus de Instrucțiuni)
SCK = Serial Clock (Ceas Serial)
SCLK (SPI) = SCLK (Ceas Serial (ieșire din master))
SDI = Serial Data In (Intrare Date Serial)
SDO = Serial Data Out (Ieșire Date Serial)
SF = Spreading Factor (Factor de Împrăștiere)
SNR = Signal-to-noise ratio (Raport Semnal-Zgomot)
SPI = Serial Peripheral Interface (Interfață Serială cu Dispozitivele Periferice)
SRAM = Static Random Accessed Memory (Memorie Statică Accesată Aleatoriu)
SS = Slave Select (Selectare Slave)
USB = Universal Serial Bus ( Magistrală Serială Universală)
WEB = World Wide Web

Acronimele care nu au fost enunțate aici, s-au detaliat în structura textului lucrării.
INTRODUCERE
Lucrarea ce urmează a fi prezentată are două obiective principale.
Primul, care se intitulează a fi unul de natură socială și culturală, este acela de conștientizare
a populației în ceea ce privește mediul înconjurător, în speță de a aduce la cunoștință calitatea aerului
pe care îl respirăm. În sprijinul acestui obiectiv și al pasiunii pentru natură și electronică, s-a născut
și al doilea obiectiv, de natură inginerească, care s-a conturat prin crearea unui senzor mobil, eficient
energetic, pentru monitorizarea calității aerului utilizând tehnologia LoraWAN pentru comunicația
cu un nod central.
Lucrarea debutează cu un studiu de caz al gazelor periculoase pentru sănătatea umană,
continuă cu detalierea pașilor de proiectare, realizare, analiză și testare a unei soluții mobile de
monitorizare a parametrilor mediului cu tehnologie IoT, culminând cu rezumatul ideilor emise și
consecințele care se impun în legătură cu problemele dezbătute.
Este foarte important de precizat că senzorul se va proiecta și realiza cu mai multe blocuri
componente, și anume: blocul de alimentare, blocul componentelor senzori, blocul de comandă și cel
de comunicație radio. De asemenea, se va realiza condiționarea semnalelor si se va implementa codul
pentru achiziția datelor de la senzorii hardware (temperatură, umiditate și gaze periculoase).
Odată cu dezvoltarea rețelelor și a Internetului, dispozitivele electronice fără fir, de mici
dimensiuni, au cunoscut o creștere considerabilă a importanței pe care o au în viața noastră. Astfel,
fiecare dispozitiv inteligent deține mai multă putere de calcul decât majoritatea calculatoarelor
construite cu un deceniu în urmă. Totodată aceste dispozitive comunică cu o rețea globală doar prin
intermediul undelor de radiofrecvență.
Astfel, de câțiva ani, balanța a început să încline în favoarea dispozitivelor electronice de mici
dimensiuni ceea ce a dus și la un grad crescut de inovație în domeniul electronicii.
Nevoia utilizatorului a devenit mai acută în vederea interacțiunii distante cu dispozitivele
electronice personale, precum și a conectării acestor dispozitive într-o rețea accesibilă din orice punct
al globului.
Această direcție nu a rămas fără ecou în industria producătoare de dispozitive electronice,
apărând numeroase soluții pentru satisfacerea acestor nevoi ale utilizatorilor. Observăm o creștere
considerabilă a importanței pe care industria o dă domeniului IoT (Internet of Things) ce presupune
interconectarea nu doar a dispozitivelor electronice inteligente cât şi a electrocasnicelor într-o reţea
accesibilă de la distanţă.
Lucrarea de față abordează o astfel de soluție, mai precis o reţea de senzori de diferite tipuri,
conectate într-o reţea fără fir, bazându-ne doar pe radiofrecvență şi pe aer ca mediu de transmisiune.
Inovația pe care o presupune electronica în astfel de proiecte trebuie dublată de cunoștințe de
programare a componentelor ce intră în construcția unei astfel de rețele. Având în vedere noutatea
proiectelor de acest gen precum şi nivelul crescut de erori ce pot apărea pe parcursul implementării,
pe parte de software, soluția a fost aceea de alege pentru senzorul mobil, un limbaj de programare de
nivel jos, mai precis, limbajul C. Acesta presupune numeroase metode de verificare şi de analiză a
codului rezultat în implementarea proiectului, precum şi resurse nelimitate de exemple şi
documentație. Pentru a diversifica lucrarea, pentru partea de recepție Lora, am folosit un Raspberry
Pi pe care l-am programat în Python, pentru ușurința de a trimite datele recepționate în timp real de
la senzorul mobil, către un serviciu de cloud dedicat proiectelor de tip IoT, în speță celor de
monitorizare a calității aerului.

15
16
Studiu de caz – gazele periculoase pentru sănătatea
umană [1]

Aerul pe care îl respirăm

Respirăm din momentul în care ne naștem și până când murim. Este o nevoie constantă și
vitală, nu doar pentru noi, ci pentru toate formele de viață de pe Pământ. Calitatea precară a aerului
ne afectează pe toți: este nocivă pentru sănătatea noastră și pentru sănătatea mediului, iar acest lucru
duce la pierderi economice. Dar din ce este format aerul pe care îl respirăm și de unde provin diverșii
poluanți?

Ceea ce numim noi poluare a aerului este…

Nu toate substanțele din aer sunt considerate a fi poluanți. În general, poluarea aerului este
definită ca existenta anumitor poluanți în atmosferă, la niveluri care afectează în mod negativ
sănătatea umană, mediul și patrimoniul nostru cultural (clădiri, monumente și materiale). În contextul
legislației, este luată în considerare doar poluarea din surse antropice, deși poluarea poate fi definită
în sens mai larg în alte contexte.
Nu toți poluanții atmosferici provin din surse antropice. Numeroase fenomene naturale,
inclusiv erupțiile vulcanice, incendiile forestiere și furtunile de nisip eliberează poluanți în atmosferă.
Particulele de praf pot circula pe distanțe foarte mari, în funcție de vânt și de nori. Indiferent dacă
provin din surse antropice sau naturale, odată ce aceste substanțe ajung în atmosferă, ele pot fi
implicate în reacții chimice și pot contribui la poluarea aerului. Cerul senin și vizibilitatea ridicată nu
sunt neapărat semne ale unui aer curat.
În pofida îmbunătățirilor semnificative din ultimele decenii, poluarea aerului în Europa
continuă să ne deterioreze sănătatea și mediul. În special, poluarea cu particule și poluarea cu ozon
determină riscuri grave pentru sănătatea cetățenilor europeni, afectând calitatea vieții și reducând
speranța de viață. Totuși, diferiții poluanți au diferite surse și un impact diferit. Este important să
privim mai îndeaproape principalii poluanți.

Particulele minuscule care plutesc în aer

Particulele reprezintă poluantul atmosferic care afectează cel mai mult sănătatea oamenilor în
Europa. Gândiți-vă la particule ca la pulberi atât de fine încât pot pluti în aer. Unele dintre aceste
particule sunt atât de mici (o treizecea parte din a cincea parte a diametrului unui fir de păr uman),
încât nu numai că pătrund foarte adânc în plămânii noștri, ci ajung și în sânge, la fel ca oxigenul.
Unele particule sunt emise direct în atmosferă. Altele sunt rezultatul reacțiilor chimice în care
sunt implicate gaze precursoare, precum dioxidul de sulf, oxizii de azot, amoniacul și compușii
organici volatili.
Aceste particule pot fi formate din diverși compuși chimici, iar impactul pe care îl au asupra
sănătății noastre și asupra mediului depinde de componența lor. De asemenea, particulele pot conține
și unele metale grele, precum arsenul, cadmiul, mercurul și nichelul.
Un studiu recent al Organizației Mondiale a Sănătății (OMS) arată că poluarea cu particule
fine (PM2.5, adică particule cu un diametru de cel mult 2,5 microni) ar putea reprezenta o problemă
mai mare pentru sănătate decât se estimase anterior. Potrivit studiului OMS „Review of evidence on
health aspects of air pollution” (Analiza datelor privind aspectele legate de sănătate ale poluării
aerului), expunerea pe termen lung la particulele fine poate cauza ateroscleroză, consecinţe negative
asupra sarcinii și boli respiratorii în copilărie. Studiul sugerează, de asemenea, posibila existență a

17
unei legături cu dezvoltarea neurologică, funcţia cognitivă și diabetul și întărește legătura cauzală
dintre PM2.5 și decesele cauzate de afecţiuni cardiovasculare și respiratorii.
În funcţie de compoziţia lor chimică, particulele pot afecta și clima globală, prin încălzirea
sau răcirea planetei. De exemplu, carbonul negru, unul dintre compușii frecvenţi ai funinginii, în
principal sub formă de particule fine (cu diametrul mai mic de 2,5 microni), rezultă din arderea
incompletă a combustibililor – atât combustibili fosili, cât și lemn. În zonele urbane, emisiile de
carbon negru sunt cauzate în cea mai mare parte de transportul rutier, în special de motoarele diesel.
Pe lângă impactul asupra sănătății, carbonul negru din particule contribuie la schimbările climatice
prin absorbția căldurii solare și încălzirea atmosferei.

Ozonul: legătura dintre trei atomi de oxigen

Ozonul este o formă specială și foarte reactivă a oxigenului, constând în trei atomi de oxigen.
În stratosferă – unul dintre straturile superioare ale atmosferei – ozonul ne protejează de radiațiile
ultraviolete periculoase ale soarelui. În straturile inferioare ale atmosferei – troposfera – ozonul este
însă în fapt un important poluant care afectează sănătatea publică și natura.
Ozonul de la nivelul solului este format ca rezultat al unor reacții chimice între gazele
precursoare, precum oxizii de azot și compușii organici volatili nemetalici. Metanul și monoxidul de
carbon au, de asemenea, un rol în formarea ozonului.
Ozonul este puternic și agresiv. Nivelurile ridicate de ozon corodează materialele, clădirile și
ţesuturile vii. Acesta reduce capacitatea plantelor de a realiza fotosinteza și împiedică absorbția
dioxidului de carbon. De asemenea, ozonul împiedică reproducerea și creșterea plantelor, ceea ce are
ca rezultat recolte mai scăzute și reducerea dezvoltării pădurilor. În corpul uman, ozonul provoacă
inflamații în plămâni și bronhii.
Odată expuse ozonului, organismele noastre încearcă să împiedice pătrunderea acestuia în
plămâni. Acest reflex reduce cantitatea de oxigen pe care o inhalăm. Inhalarea unui volum mai mic
de oxigen determină creșterea activității inimii. Astfel, pentru persoanele care deja suferă de boli
cardiovasculare sau respiratorii, precum astmul, expunerea la o cantitate mare de ozon poate agrava
afecțiunile sau chiar cauza decesul.

Ce alți poluanți se mai găsesc în aer?

Ozonul și particulele nu sunt singurii poluanți atmosferici care cauzează preocupări în Europa.
Mașinile noastre, camioanele, centralele electrice și alte unități industriale au nevoie de energie.
Aproape toate vehiculele și unitățile utilizează o formă de combustibil pe care îl ard pentru a obține
energie.
Arderea combustibililor modifică de obicei forma multor substanțe, inclusiv a azotului – gazul
aflat în cea mai mare concentrație în atmosfera noastră. Atunci când azotul reacționează cu oxigenul,
în aer se formează oxizi de azot (inclusiv dioxid de azot, NO2). Atunci când azotul reacționează cu
atomii de hidrogen, se creează amoniacul (NH3), care este un alt poluant atmosferic cu efecte adverse
grave asupra sănătății umane și asupra naturii.
În fapt, procesele de combustie eliberează o varietate de poluanți atmosferici, variind de la
dioxid de sulf și benzen, până la monoxid de carbon și metale grele. Unii dintre acești poluanți au
efecte pe termen scurt asupra sănătății umane. Alții, inclusiv unele metale grele și poluanții organici
persistenți, se acumulează în mediu. Astfel, aceștia pot pătrunde în lanțul nostru alimentar și, în cele
din urmă, pot ajunge în farfuriile noastre.
Alți poluanți, precum benzenul, pot deteriora materialul genetic al celulelor și pot cauza
cancer în cazul expunerii pe termen lung. Deoarece benzenul este utilizat ca aditiv pentru benzină,
aproximativ 80 % din benzenul eliberat în atmosferă în Europa provine de la arderea combustibililor
utilizați de vehicule.
18
Un alt poluant cunoscut care cauzează cancerul, benzo(a)pirenul (BaP), este emis în principal
în urma arderii lemnului sau cărbunelui în sobele locuințelor private. Gazele de eșapament ale
vehiculelor, în special la vehiculele cu motoare diesel, reprezintă o altă sursă de BaP. Pe lângă cancer,
BaP poate, de asemenea, cauza iritații ale ochilor, nasului și bronhiilor. BaP se găsește, de obicei, în
particule fine.

Figura 1.1 Impactul poluării aerului asupra sănătății umane

Măsurarea impactului asupra sănătății umane

Deși poluarea aerului este prezentă peste tot, nu afectează pe toată lumea în aceeași măsură și
în același mod. Cele mai multe persoane sunt expuse poluării atmosferice în zonele urbane, din cauza
densităților mai mari ale populației. Unele grupuri sunt mai vulnerabile, inclusiv persoanele care
suferă de boli cardiovasculare și respiratorii, persoanele cu căi respiratorii sensibile și care suferă de
alergii ale căilor respiratorii, persoanele în vârstă și sugarii.
Nu este ușor de estimat care este măsura exactă a prejudiciului adus sănătății noastre și
mediului de poluarea atmosferică. Există însă numeroase studii pornind de la diverse sectoare sau
surse de poluare.
Potrivit proiectului Aphekom, cofinanțat de Comisia Europeană, poluarea aerului în Europa
determină o reducere a speranței de viață cu aproximativ 8,6 luni per persoană.
19
Unele modele economice pot fi utilizate pentru a estima costurile poluării aerului. Aceste
modele conțin în general costurile în termeni de sănătate cauzate de poluarea aerului (scăderea
productivității, costurile medicale suplimentare etc.), precum și costurile generate de recoltele mai
mici și deteriorarea anumitor materiale. Totuși, aceste modele nu includ toate costurile cauzate de
poluarea atmosferică pentru societate.
Există, de asemenea, studii care estimează posibilele câștiguri care ar putea fi obținute prin
îmbunătățirea calității aerului. De exemplu, studiul Aphekom preconizează că reducerea nivelurilor
anuale medii ale PM2.5 la nivelurile din orientările Organizației Mondiale a Sănătății ar avea ca
rezultat creșterea speranței de viață. Doar atingerea acestui obiectiv se preconizează că ar determina
posibile creșteri ale speranței de viață variind de la 22 de luni în medie per persoană în București și
19 luni în Budapesta, la 2 luni în Malaga și mai puțin de jumătate de lună în Dublin.

20
Arhitectura generală a sistemului

Figura 2.1 Arhitectura generală a sistemului

2.1. Senzorul mobil


Sistemul de achiziție este construit în jurul unui microcontroler de tip Atmega164A ce
achiziționează datele de la cei 4 senzori analogici de gaze (MQ-135, MQ-9, MQ-7, MQ-4), un senzor
de temperatură analogic (termistor NTC) și un senzor digital de temperatură și umiditate (DHT11).
Aceste date sunt transmise cu un modul LoRa SX1278 către un nod LoRa cu conexiune la Internet.
Senzorii de gaze sunt conectați la sursa de alimentare de 5V prin intermediul pinilor de VCC
și GND. Pentru conectarea lor la microcontroler se pot utiliza trei metode:
Se poate folosi doar ieșirea digitală ce ne avertizează dacă concentrația de gaz depășește un
anumit nivel stabilit cu ajutorul unui potențiometru aflat pe modulul de gaz.
Se poate folosi doar ieșirea analogică pentru a obține o informație cantitativa a concentrației
de gaz. Această metoda necesitând un convertor analog-numeric (ADC) și o putere de calcul
semnificativă pentru un microcontroler clasic.
Presupune conectarea ambelor ieșiri, atât cea analogica cat si cea digitala, cea analogica
oferind informație cantitativa iar cea digitala oferind un răspuns rapid la creșteri bruște a concentrației
de gaz, putând acționa o alarmă sau o electrovalvă.
Senzorul DHT11 a fost conectat la microcontroler pe portul C pe pinul 1. Pentru a putea
comunica cu acest senzor putea fi folosit orice pin digital al microcontrolerului deoarece acesta

21
folosește protocolul de comunicare 1-Wire, protocol de comunicare pentru care microcontrolerul nu
are prevăzut niciun periferic dedicat.
Senzorul de temperatură a fost realizat cu ajutorul unui termistor cu coeficient negativ de
variație cu temperatura. Pentru a putea măsura rezistenta acestuia folosind ADC-ul
microcontrolerului a fost necesară conectarea lui într-un divizor de tensiune rezistiv, transformând
astfel variația rezistenței într-o variație a tensiunii. Pentru acest lucru am folosit pinul PA4.
Pentru a putea folosi cât mai mult din gama dinamica a ADC-ului, domeniul de variație al
tensiunii de la ieșirea divizorului rezistiv cât și al senzorilor de gaze, trebuie sa fie cat mai apropiat
de domeniul de intrare al ADC-ului (0-REF). În cazul circuitului prezentat a fost aleasă ca referință
pentru ADC tensiunea de alimentare a uC (mai exact 5V).
Deoarece modulul LoRa comunică folosind o interfață UART, interfața acestuia trebuie
conectată la interfața UART a microcontrolerului folosind pinii PD1 și PD0. Utilizând acești pini,
putem folosi pentru transmisia datelor perifericul dedicat pentru comunicația UART fiind necesară
doar setarea parametrilor de comunicație. Pentru a seta o comunicație de tip UART transparent pinii
M0 și M1 trebuie conectați la GND.

2.2. Nodul central

Nodul central este reprezentat de gateway-ul LoRa alcătuit dintr-un microcalculator


Raspberry Pi 3B+ cu conexiune la Internet și un modul LoRa, legătura dintre aceste blocuri fiind
făcută pe interfața UART.
Deoarece modulul LoRa comunică folosind un nivel logic de 5V, a fost necesară divizarea
tensiunii până la o valoare de 3,3V suportată de Raspberry Pi.

22
Descrierea hardware a sistemului propus
3.1. Blocul de alimentare

Pentru alimentarea cu tensiune electrică a circuitului Senzorului mobil, am folosit un


alimentator clasic de 5V capabil să susțină curent de sarcină de până la 1,5A.
Din cauza consumului mare de curent al senzorilor, alimentarea dintr-un acumulator nu a fost
posibilă. Dacă ne referim strict la senzorii de gaze, aceștia au nevoie de un element de încălzire și
necesită un curent de 150mA pentru fiecare în parte. Pentru a realiza o măsurătoare corecta, acest
element de încălzire trebuie să funcționeze timp de câteva ore. Din acest motiv, alimentarea senzorilor
doar în momentul citirii nu este posibilă.
În ceea ce privește alimentarea Nodului central, mai exact a plăcuței Raspberry Pi, am
folosit un alimentator de telefon de 5V, cu USB 2.0, capabil să susțină curent de sarcina de maxim
1A.

Figura 3.1 Alimentările Senzorului mobil și a Nodului central

3.2. Blocul componentelor Senzori

La modul general, un senzor este un obiect al cărui scop este de a detecta evenimente externe
sau schimbări în mediu și apoi de a reda un rezultat corespunzător. Un senzor este un tip de traductor,
care poate furniza diferite tipuri de rezultate, de obicei semnale electrice sau optice. De exemplu, un
termocuplu generează ca rezultat o tensiune cunoscută în corespondență cu temperatura mediului.
Similar, un termometru de sticlă cu mercur convertește temperatura măsurată prin creșterea sau
scăderea nivelului unui lichid ce poate fi citit pe un tub de sticlă gradat.
Raportându-ne strict la acest proiect, singurele constrângeri întâmpinate la conectarea unor
senzori potriviți aplicației în cauză au fost reprezentate de tensiunea de alimentare, condițiile de lucru
și gama de valori returnată. Astfel, din variata gamă de senzori care puteau fi selectați pentru montaj,
am ales senzori analogici care se alimentează la 5V și care au un domeniu de răspuns între 0 și 5V.
Acești senzori sunt sensibili la diverși stimuli precum temperatură și anumite tipuri de gaze nocive.
De asemenea am folosit și un senzor digital pentru a putea determina nivelul de umiditate din mediu,
acesta putând fi alimentat cu o tensiune ce variază între 3.3 și 5V.

23
3.2.1. Dispozitiv de înregistrare și măsurare a temperaturii
3.2.1.1. Definiții
Temperatura se definește ca fiind mărimea ce poate stabili dacă un sistem este rece sau cald.
Astfel că în cazul în care materialul prezintă o temperatură mai ridicată, acesta se stabilește ca fiind
mai cald, iar dacă materialul prezintă o temperatură mai scăzută, acesta se stabilește ca fiind mai rece.
La nivel atomic, temperatura indică viteza cu care atomii dintr-o substanță se mișcă, iar atunci
când viteza crește, crește și temperatura, stabilindu-se o proporționalitate directă. Totodată, la 0℃,
atomii sau moleculele încetează să se miște, așadar, în acest punct, aceștia au cea mai mică energie
termică.
Ca unitate de măsură, în sistemul internațional este gradul Kelvin [°𝐾], dar mai există și gradul
Celsius [℃] și gradul Fahrenheit [℉].

T[℃] = T[°𝐾] - 273,15;

T[℉] = 1,8×T[°𝐾] - 459,67 [1] [2]

3.2.1.2. Aparate de măsură


Aparatele de măsură care determină temperatura trebuie să țină cont de următorii factori:
• Maximul valorii de măsurat;
• Precizia indicației aparatului;
• Sensibilitatea aparatului la solicitări mecanice și la acțiunea chimică a mediului în care
lucrează;
• Distanța la care se face măsurarea;
• Dacă temperatura trebuie numai citită, sau și înregistrată ori eventual reglată după un program
etc.
În funcție de dependența dintre temperatură și proprietățile fizico-chimice, se cunosc
următoarele tipuri de aparate de măsură:
a) Aparate care funcționează pe baza fenomenului de dilatare a corpurilor cu temperatura
(termometru cu: lichid, mercur, alcool; termometre metalice; termometre bimetalice;
etc.)
b) Aparate care funcționează pe baza variaților rezistenței electrice cu temperatura
(termometre cu rezistență electrică, termistori, etc.)
c) Aparate care funcționează pe baza efectului termoelectric (termocuple, pirometre
termoelectrice etc.)
d) Aparate care funcționează pe baza radiației corpurilor (pirometre cu radiații, etc.)
e) Aparate speciale (culori termoscopice, fototermometre, indicatoare piroscopice,
indicatoare fuzibile, etc.)
În general, aparatele de măsurat sunt compuse din două elemente distincte:
• Traductorul de temperatură;
• Aparatul indicator.
Traductorul de temperatură este un element sensibil care transformă variația unei alte mărimi
(lungime, presiune, rezistență electrică, tensiune electrică).
Aparatul indicator este elementul care posedă o scară gradată și un reper indicator. [3]

24
3.2.1.3. Senzorul de temperatură B57861S0202H040

Senzorul de temperatură B57861S0202H040 face parte din clasa senzorilor în miniatură cu


fire flexibile și este termistor cu coeficient negativ de variație cu temperatura (de tip NTC).
Termistoarele NTC sunt rezistențe neliniare care își modifică caracteristicile de rezistență cu
temperatura. Pur și simplu, pe măsură ce temperatura crește, rezistența termistorului scade. Modul în
care rezistența unui termistor scade este legat de o constantă cunoscută în industria termistorului ca
beta (β).

Figura 3.2 Variația rezistenței cu temperatura pentru un termistor NTC


Beta se măsoară în grade Kelvin (K) și se calculează pe baza formulării date mai jos.

R
ln(R T1 )
T2
β=
1 1
(T − T )
1 2
Unde:
RT1 = Rezistența la temperatura 1
RT2 = Rezistența la temperatura 2
T1 = Temperatura 1 [°K]
T2 = Temperatura 2 [°K]

Figura 3.3 Senzorul de temperatură B57861S0202H040

25
Serie B57861S
Nume complet B57861S202H40
Descriere detaliată Termistor NTC 2K
Rezistență în Ohmi @ 25 °C 2K
Toleranța rezistenței ±3%
Putere - Max 60mW
Temperatura de Operare -55°C ~ 155°C
Tipul de montare Lipire la cald cu aliaj de Sn-Pb
Nivelul de sensibilitate la umiditate (MSL) 1 (nelimitat)
Condiții de stare fără plumb/stare RoHS Fără plumb/Conform cu RoHS
B25/100 3560K
Toleranța valorii B: ±1%
Tabel 3.1 Caracteristici generale ale senzorului B57861S0202H040
B25/100 = Valoarea lui coeficientului beta (β) determinată de raportul dintre rezistența măsurată la
25℃ și rezistența măsurată la 100℃.

Ecuația pentru temperatură în funcție de rezistență pentru un termistor:

3.2.2. Dispozitiv de înregistrare și măsurare a umidității


3.2.2.1. Definiții
Umiditatea se definește ca fiind cantitatea de vapori de apă ce este conținută într-un eșantion
de aer. Aceasta indică probabilitatea ca precipitațiile să apară și nu numai: poate indica și ceață sau
rouă. Umiditatea este starea gazoasă a apei și este invizibilă.
Umiditatea se exprimă în trei moduri:
a) Umiditatea absolută reprezintă cantitatea de vapori conținută într-un volum de aer
egal cu unitatea (în grame).
mH2O = masa vaporilor de apă; vnet = volumul de apă;
AH = umiditatea absolută (Absolute Humidity).
b) Umiditatea relativă reprezintă raportul dintre presiunea parțială a vaporilor de apă
în condițiile date și presiunea parțială a vaporilor în condițiile de echilibru, la
aceeași temperatură.
pH2 O
RH (Relative Humidity) = Φ =
p∗H2 O
pH2 O = presiunea parțială a vaporilor de apă în condițiile date;
p ∗ H2 O = presiunea parțială a vaporilor de apă la echilibru termic;
c) Umiditatea specifică este numită și raportul de umiditate și reprezintă raportul dintre
masa vaporilor de apă dintr-un eșantion de aer și masă de aer uscat pentru același
eșantion.
m
SH (Specific Humidity) = mv
a

26
mv = masa vaporilor de apă dintr-un eșantion;
ma = masa de aer uscat din același eșantion; [4]

3.2.2.2. Aparate de măsură


Printre aparatele de măsură care pot determina umiditatea menționăm:
• Higrometrul – acesta fiind un instrument ce măsoară cantitatea vaporilor de apă din aer,
sol sau diferite spații închise și are ca principiu de funcționare modificarea lungimii unui
fir de păr în funcție de nivelul de umiditate.
• Hidrometrul – acesta fiind un aparat de măsură a densității și a vitezei de curgere a
lichidelor. De asemenea, poate fi un manometru metalic cu scara gradată în unități de
coloană de apă sau o miră cu ajutorul căreia se măsoară nivelul unui curs de apă.
• Psihrometrul – acesta fiind un dispozitiv folosit în meteorologie ce măsoară conținutul de
vapori de apă din aer. Acesta este alcătuit din două termometre: unul uscat și unul umed,
prevăzut cu un ventilator. În funcție de diferența de temperatură dintre cele două
termometre și de presiunea atmosferică, umiditatea se determină cu ajutorul diagramelor
sau a tabelelor psihrometrice.

3.2.2.3. Modul senzor de umiditate DHT11

Figura 3.4 Structura externă și internă a senzorului DHT11


Senzorul digital DHT11 de temperatură și umiditate este un senzor compozit ce are un semnal
digital calibrat de ieșire utilizând exclusiv tehnica achiziției semnalelor digitale. Fiecare senzor
DHT11 este strict calibrat în laboratoarele de producție. Coeficienții de calibrare sunt salvați ca
programe în memoria OTP, acestea urmând a fi folosite de către semnalele interne de procesare.
Senzorul DHT11 are o dimensiune redusă și un consum scăzut de putere.

Acest senzor include o componentă de măsurare de tip rezistiv și o componentă de măsurare


NTC. Așadar, senzorul se conectează la un microcontroler de 8 biți de înaltă performanță oferind o
calitate excelentă, un răspuns rapid, rezistență la interferențe și eficiența costurilor.

Viteza de citire a acestui senzor variază în funcție de mărimea citită, astfel: pentru umiditate,
timpul de răspuns este cuprins între 6 și 15 secunde, iar pentru temperatură, intervalul este între 6 și
30 secunde.

27
Acuratețea măsurării Acuratețea măsurării
Nume Senzor Intervalul de măsurători
umidității temperaturii
20-90%RH
DHT11 ±5%RH ±2℃
0-50 ℃
Tabel 3.2 Caracteristici generale ale senzorului DHT11
Ne vom concentra asupra componentei sensibilă la umiditate, întrucât pentru măsurarea
temperaturii am folosit în această lucrare senzorul de temperatură B57861S0202H040 detaliat
anterior.

Figura 3.5 Structura internă a senzorului de umiditate


Componenta de detectare a umidității are doi electrozi cu substrat de menținere a umezelii (de
obicei o sare sau un polimer plastic conductiv) intercalat între ei. Ionii sunt eliberați de substrat pe
măsură ce vaporii de apă sunt absorbiți de acesta, ceea ce la rândul său crește conductivitatea dintre
electrozi. Schimbarea rezistenței dintre cei doi electrozi este proporțională cu umiditatea relativă.
Umiditatea relativă mai mare scade rezistența dintre electrozi, în timp ce umiditatea relativă mai mică
crește rezistența dintre electrozi.

Figura 3.6 Structura și configurația senzorului DHT11


În această structură se observă modul de conectare al acestui senzor la microcontroler și
anume prin interfața de comunicare single-wire. Cum se utilizează o comunicație single-bus
simplificată pentru a transfera informația, integrarea în proiect se va face destul de ușor.
În momentul în care MCU trimite un semnal de start, senzorul DHT11 își schimbă modul de
la cel redus de energie la modul de rulare, așteptând ca MCU sa își termine semnalul de start. Odată
ce acest semnal este complet, senzorul DHT11 trimite un semnal de răspuns de 40 biți către MCU ce
include umiditatea relativă și informații despre temperatură. Utilizatorii pot alege să citească datele
din răspuns. Fără primirea semnalului de start de la MCU, DHT11 nu va trimite răspuns către acesta.
Odată ce informațiile sunt colectate, senzorul DHT11 va trece în modul redus de energie până la
primirea unui nou semnal de start de la MCU.
28
Figura 3.7 Procesul de comunicare al senzorului DHT11
Pentru a putea interpreta informația primită de la senzorul DHT11 în mod corect, este nevoie
să fie implementat un protocol de interpretare în Microcontrolerul Atmega164.
Astfel, formatul de date este următorul:

Parte zecimală Parte fracționară Parte întreaga date Parte fracționară


Biții de paritate
date umiditate date umiditate temperatură date temperatură
8 biți 8 biţi 8 biţi 8 biţi 8 biţi
Tabel 3.3 Formatul de date în procesul de comunicare al senzorului DHT11
Biții de paritate sunt folosiți pentru a verifica dacă datele din primii 32 de biţi au fost trimise
cu succes. În acest mod, se face o însumare a primilor 4 regiștrii pentru a rezulta biții de paritate iar
dacă suma este corectă, înseamnă că informațiile au fost transmise în mod corect.

Dacă, spre exemplu, cei 40 de biţi au fost:

0011 0101 | 0000 0000 | 0001 1000 | 0000 0000 | 0100 1101
Umiditate | Umiditate | Temperatură | Temperatură | Paritate
Parte întreaga | Parte fracționară | Parte întreaga | Parte fracționară | Sumă de verificare

Calcul:
0011 0101 + 0000 0000 + 0001 1000 + 0000 0000 = 0100 1101
Umiditate: 0011 0101 = 0x35 = 53% RH Datele au fost
Temperatură: 0001 1000 = 0x18 = 24℃ recepționate corect
Paritate: 0100 1101 = 0x4D = 77

Dacă datele primite nu sunt corecte, adică nu se verifică suma, atunci se renunță la mesaj și
se așteaptă unul nou.

3.2.3. Dispozitiv de înregistrare și măsurare a concentrației de gaz

3.2.3.1. Definiții

Atmosfera este masa gazoasă care înconjoară planeta noastră și este împărțită în straturi cu
diferite densități ale gazelor. Stratul cu cea mai mică grosime și aflat cel mai jos (la nivelul solului)
este numit troposferă. Acesta este stratul în care trăiesc plantele și animalele și unde se produc tiparele
meteorologice pe care le cunoaștem. Altitudinea până la care ajunge acest strat este de aproximativ 7
kilometri la poli și 17 kilometri la ecuator.
29
La fel ca restul atmosferei, troposfera este dinamică. În funcție de altitudine, aerul are o
densitate diferită și o compoziție chimică diferită. Aerul circulă în permanentă în jurul globului,
traversând oceane și vaste zone de uscat. Vântul poate transporta organisme de dimensiuni mici,
inclusiv bacterii, virusuri, semințe și specii invazive de la o zonă la alta.
Ceea ce numim noi aer este cunoscut sub denumirea de “aer uscat” ce conține aproximativ
78% azot, 21% oxigen și 1% argon. În aer există și vapori de apă, reprezentând între 0,1 % și 4 % din
troposferă. Aerul mai cald conține de obicei o cantitate mai mare de vapori de apă decât aerul mai
rece.
Aerul conține, de asemenea, cantități foarte mici de alte gaze, cunoscute drept gaze reziduale,
inclusiv dioxid de carbon și metan. Concentrațiile acestor gaze minore în atmosferă sunt în general
măsurate în părți pe milion (ppm). De exemplu, concentrațiile de dioxid de carbon, unul dintre gazele
reziduale cele mai importante și aflat în cele mai mari cantități în atmosferă, au fost estimate la
aproximativ 391 ppm sau 0,0391% în 2011 (indicatorul AEM privind concentrațiile atmosferice).
În plus, există mii de alte gaze și particule (inclusiv funingine și metale) emise în atmosferă
atât de surse naturale, cât și antropice.
Compoziția aerului din atmosferă se modifică în permanentă. Unele substanțe din aer au un
mare potențial reactiv, cu alte cuvinte au o mai mare predispoziție de a interacționa cu alte substanțe
pentru a forma unele noi. Atunci când unele dintre aceste substanțe reacționează cu altele, pot forma
poluanți „secundari” dăunători pentru sănătatea noastră și pentru mediu. Căldura, inclusiv cea solară,
este de obicei un catalizator care facilitează sau declanșează reacțiile chimice.

3.2.3.2. Aparate de măsură

Traductoarele pentru analiza gazelor (analizoarele de gaze) sunt destinate, în general,


măsurării unui singur component dintr-un amestec de gaze. Funcționarea lor se bazează pe măsurarea
unui parametru fizic sau electrochimic al amestecului analizat.
În funcție de parametrul măsurat, analizoarele de gaze sunt de mai multe tipuri:
• cu măsurarea conductivității termice;
• cu măsurarea căldurii de reacție;
• cu măsurarea absorbției în infraroșu;
• cu măsurarea susceptibilității magnetice;
• cu măsurarea emisiei optice;
• cu măsurarea masei atomice, etc.

În această lucrare, ne interesează studiul unor traductoare electrochimice, pe care le vom


denumi în continuare senzori de gaze.
Un senzor de gaze electrochimic acționează prin permiterea gazelor să difuzeze printr-o
membrană poroasă la un electrod unde acesta este fie oxidat, fie redus chimic. Cantitatea de curent
produsă este determinată de cât de mult gaz este oxidat la electrod, care indică concentrația gazului.
Senzorul are în componență un strat chimic care poate sesiza prezența eventualului gaz și ca urmare
poate genera un semnal de ieșire corespunzător scopului. Cu toate acestea, senzorii sunt supuși unor
elemente corozive și contaminare chimică și poate dura doar 1-2 ani înainte de a fi necesară o
înlocuire.

30
3.2.3.3. Modul Senzor de gaz MQ-135 [5]

Figura 3.8 Vedere de ansamblu a senzorului MQ-135

Senzorul de gaz MQ-135 are o sensibilitate ridicată la amoniac (NH3), NOx, alcool, benzen,
CO2 și de asemenea poate monitoriza bine fumul precum și alte gaze nocive. Este un senzor care
oferă răspuns rapid, stabilitate și perioadă lungă de viață. Printre caracteristici merită menționat costul
scăzut de achiziție și circuitul de acționare simplu.

Fiind un senzor accesibil este utilizat pe scară largă în echipamente de control al calității
aerului pentru clădiri/birouri, detecția de gaze domestice, alarmă de gaze industriale și detector
portabil de gaze.

Figura 3.9 Structura internă a senzorului MQ-135

Materialul sensibil al senzorului de gaz MQ-135 este dioxidul de staniu (SnO2), care are o
conductivitate mai mică în aerul curat. Când există gaz de poluare țintă, conductivitatea senzorului
devine mai mare odată cu creșterea concentrației de gaz. Utilizatorii pot converti schimbarea
conductivității în semnalul de ieșire corespunzător al concentrației de gaz printr-un simplu circuit.
Condițiile de operare impun o tensiune de alimentare a filamentului de 5V AC sau DC, iar
pentru electrozi se recomandă o tensiune de alimentare mai mică de 24V DC. Pe rezistența de
31Ω±3Ω a filamentului se disipă o putere maximă de 900mW. Pentru o precizie maximă senzorul
trebuie preîncălzit aproximativ o oră.
Din figura de mai sus se diferențiază următoarele elemente:

31
Nr. crt. Componentă Material
1 Strat sensibil la gaz SnO2
2 Electrod Au
3 Linia electrodului Pt
4 Bobina de încălzire Aliaj Ni-Cr
5 Tubular ceramic Al2O3
6 Rețea anti-explozie Oțel inoxidabil
7 Inel de susținere Ni placat cu Cu
8 Baza de rășină Bachelită
9 Pin de conectare Ni placat cu Cu
Tabel 3.4 Elementele constitutive ale senzorului MQ-135
Conectarea senzorului pentru măsurare este prezentată în figura de mai jos:

Figura 3.10 Schema de conectare a senzorului MQ-135 în circuit


Tensiunea Vout variază direct proporțional cu concentrația de gaz detectată de la o valoare de
0.4V, în aerul curat, la 5V, în prezența amoniacului concentrat, pe o rezistență de sarcină de 10KΩ.
Pentru a calcula sensibilitatea se folosesc următoarea formule matematice:

RS Vc
PS = Vc 2 × (R 2 (1) Rs = V × RL (2)
S +RL ) RL −1

Unde:
Ps = Puterea de sensibilitate
Vc = Tensiunea de alimentare a electrodului
Rs = Rezistența senzorului la diferite concentrații de gaze
RL = Rezistența de sarcină
VRL = Tensiunea de ieșire

32
Figura 3.11 Caracteristica de sensibilitate a MQ-135 la diferite gaze

Figura 3.11 ilustrează caracteristica tipică a senzorului MQ-135, pe axa ordonatelor fiind
raportul Rs/R0, iar pe axa absciselor concentrația de gaz în ppm. Măsurătorile sunt realizate la o
temperatură de 20℃, la un nivel al umidității de 65%, o concentrație a O2 de 21% și o valoare a
rezistenței de sarcină (RL) de 20KΩ. R0 semnifică rezistența senzorului la o concentrație de 100ppm
de amoniac (NH3). Se observă de asemenea sensibilitatea scăzută la alte gaze în afară de cele
menționate mai sus.

Figura 3.12 Dependența de temperatură și de gradul de umiditate relativă a MQ-135


Figura de mai sus ilustrează dependența senzorului MQ-135 de temperatură și de gradul de
umiditate relativă. R0 semnifică rezistența senzorului la o concentrație de 100ppm de amoniac
(NH3) în aer, măsurătorile fiind realizate la o temperatură de 20℃ și un nivel al umidității relative
de 33%. RS reprezintă rezistența senzorului la o concentrație de 100ppm de amoniac (NH3) în aer la
diferite temperaturi și nivele de umiditate.

33
3.2.3.4. Modul Senzor de gaz MQ-9

Figura 3.13 Vedere de ansamblu a senzorului MQ-9

Senzorul de gaz MQ-9 are o sensibilitate ridicată la monoxidul de carbon (CO), gazul petrolier
lichefiat (LPG) și metan (CH4). Este un senzor care oferă răspuns rapid, stabilitate și perioadă lungă
de viață. Printre caracteristici merită menționat costul scăzut de achiziție și circuitul de acționare
simplu.
Structura internă a senzorului MQ-9 corespunde cu cea a senzorului MQ-135 (Figura 3.9).
Fiind un senzor accesibil este utilizat pe scară largă în echipamente de control al calității
aerului pentru clădiri/birouri, detecția de gaze domestice, alarmă de gaze industriale și detector
portabil de gaze.
Materialul sensibil al senzorului de gaz MQ-9 este dioxidul de staniu (SnO2), care are o
conductivitate mai mică în aerul curat. Când există gaz de poluare țintă, conductivitatea senzorului
devine mai mare odată cu creșterea concentrației de gaz. Utilizatorii pot converti schimbarea
conductivității în semnalul de ieșire corespunzător al concentrației de gaz printr-un simplu circuit.
Condițiile de operare impun o tensiune de alimentare a filamentului de 5V AC sau DC, iar
pentru electrozi se recomandă o tensiune de alimentare mai mică de 10V DC. Pe rezistența de
31Ω±3Ω a filamentului se disipă o putere maximă de 350mW. Pentru o precizie maximă senzorul
trebuie preîncălzit aproximativ o oră.
Elementele constitutive ale senzorului MQ-9 corespund cu cele ale senzorului MQ-135
(Tabelul 3.4).
Schema de conectare a senzorului MQ-9 în circuit corespunde cu cea a senzorului MQ-135
(Figura 3.10).

Tensiunea Vout variază direct proporțional cu concentrația de gaz detectată de la o valoare de


0.4V, în aerul curat, la 5V, în prezența monoxidului de carbon concentrat, pe o rezistență de sarcină
de 10KΩ.
Pentru a calcula sensibilitatea se folosesc aceleași formule matematice (1) și (2), ca la senzorul
MQ-135.

34
Figura 3.14 Caracteristica de sensibilitate a MQ-9 la diferite gaze
Figura 3.14 ilustrează caracteristica tipică a senzorului MQ-9, pe axa ordonatelor fiind
raportul Rs/R0, iar pe axa absciselor concentrația de gaz în ppm. Măsurătorile sunt realizate la o
temperatură de 20℃, la un nivel al umidității de 65%, o concentrație a O2 de 21% și o valoare a
rezistenței de sarcină (RL) de 10KΩ. R0 semnifică rezistența senzorului la o concentrație de 1000ppm
de gaz petrolier lichefiat (LPG). Se observă de asemenea sensibilitatea scăzută la alte gaze în afară
de cele menționate mai sus.

Figura 3.15 Dependența de temperatură și de gradul de umiditate relativă a MQ-9


Figura de mai sus arată dependența senzorului MQ-9 de temperatură și de gradul de umiditate
relativă. R0 semnifică rezistența senzorului la o concentrație de 1000ppm de gaz petrolier lichefiat
(LPG) în aer, măsurătorile fiind realizate la o temperatură de 20℃ și un nivel al umidității relative de
33%. RS reprezintă rezistența senzorului la o concentrație de 1000ppm de gaz petrolier lichefiat (LPG)
în aer la diferite temperaturi și nivele de umiditate.

35
3.2.3.5. Modul Senzor de gaz MQ-4 [1]

Figura 3.16 Vedere de ansamblu a senzorului MQ-4

Senzorul de Gaz MQ-4 are următoarele caracteristici principale: sensibilitate crescută la


metan (CH4) sau gaz natural, sensibilitate scăzută la alcool sau fumul de țigară, răspuns rapid,
stabilitate și perioadă de viață lungă.
Acest tip de senzor este utilizat pentru detectarea pierderilor de gaz din echipamentele de
familie și cele din industrie. Senzorul este capabil să recunoască CH4, gazul petrolier lichefiat (LPG),
evitând zgomotul introdus de aburii de alcool, fumul de la gătit și fumul de țigară.
Structura internă a senzorului MQ-4 corespunde cu cea a senzorului MQ-135 (Figura 3.9).
Avantajele senzorului MQ-4 sunt vizibile la nivel economic și al eficienței ce se bazează pe
un circuit de control simplu. Un alt avantaj al acestuia este sensibilitatea crescută față de metan,
propan și butan și sensibilitatea scăzută la vapori de alcool sau alte gaze ale mediului înconjurător
fiind folosit cu încredere în aplicațiile pentru detecția pierderilor de gaz dintr-un mediu domestic.
Senzorul este capabil să detecteze o concentrație între 300 și 10000 ppm a gazelor la care
sensibilitatea este crescută.
Materialul sensibil al senzorului este dioxidul de staniu (SnO2), care are o conductivitate
scăzută în aer curat. Conductivitatea acestuia crește odată cu creșterea concentrației de gaz.
Condițiile de operare impun o tensiune de alimentare a filamentului de 5V AC sau DC, iar
pentru electrozi se recomandă o tensiune de alimentare mai mică de 24V DC. Pe rezistența de
31Ω±3Ω a filamentului se disipă o putere maximă de 900mW. Pentru o precizie maximă senzorul
trebuie preîncălzit aproximativ o oră.
Elementele constitutive ale senzorului MQ-4 corespund cu cele ale senzorului MQ-135
(Tabelul 3.4).
Schema de conectare a senzorului MQ-4 în circuit corespunde cu cea a senzorului MQ-135
(Figura 3.10).

Tensiunea Vout variază direct proporțional cu concentrația de gaz detectată de la o valoare de


0.4V, în aerul curat, la 5V, în prezența metanului concentrat, pe o rezistență de sarcină de 20KΩ.
Pentru a calcula sensibilitatea se folosesc aceleași formule matematice (1) și (2), ca la senzorul
MQ-135.

36
Figura 3.17 Caracteristica de sensibilitate a MQ-4 la diferite gaze [6]
Figura 3.17 ilustrează caracteristica tipică a senzorului MQ-4, pe axa ordonatelor fiind
raportul Rs/R0, iar pe axa absciselor concentrația de gaz în ppm. Măsurătorile sunt realizate la o
temperatură de 20℃, la un nivel al umidității de 65%, o concentrație a O2 de 21% și o valoare a
rezistenței de sarcină (RL) de 20KΩ. R0 semnifică rezistența senzorului la o concentrație de 1000ppm
de metan (CH4) în aer. Se observă de asemenea sensibilitatea scăzută la alte gaze în afară de cele
menționate mai sus.

Figura 3.18 Dependența de temperatură și de gradul de umiditate relativă a MQ-4 [6]


Figura de mai sus ilustrează dependența senzorului MQ-4 de temperatură și de gradul de
umiditate relativă. R0 semnifică rezistența senzorului la o concentrație de 1000ppm de metan (CH4)
în aer, măsurătorile fiind realizate la o temperatură de 20℃ și un nivel al umidității relative de 33%.
RS reprezintă rezistența senzorului la o concentrație de 1000ppm de metan (CH 4) în aer la diferite
temperaturi și nivele de umiditate.

37
3.2.3.6. Modul Senzor de gaz MQ-7

Figura 3.19 Vedere de ansamblu a senzorului MQ-7


Senzorul de gaz MQ-7 are o sensibilitate ridicată la monoxidul de carbon (CO) și de asemenea
poate monitoriza nivelul de hidrogen (H2). Este un senzor care oferă răspuns rapid, stabilitate și
perioadă lungă de viață. Printre caracteristici merită menționat costul scăzut de achiziție și circuitul
de acționare simplu.

Figura 3.20 Structura internă a senzorului MQ-7


Avantajele senzorului MQ-7 sunt vizibile la nivel economic și al eficienței ce se bazează pe
un circuit de control simplu. Un alt avantaj al acestuia este sensibilitatea crescută față de monoxidul
de carbon (CO) și față de hidrogen (H2), fiind folosit cu încredere în aplicațiile pentru detecția
pierderilor de gaz dintr-un mediu domestic, alarmă de gaze industriale și detector portabil de gaze.
Senzorul este capabil să detecteze o concentrație între 10 și 10000 ppm a gazelor la care sensibilitatea
este crescută.

Materialul sensibil al senzorului este dioxidul de staniu (SnO2), care are o conductivitate
scăzută în aer curat. Conductivitatea acestuia crește odată cu creșterea concentrației de gaz.

Condițiile de operare impun o tensiune de alimentare a filamentului de 5V AC sau DC, iar


pentru electrozi se recomandă o tensiune de alimentare mai mică de 10V DC. Pe rezistența de
31Ω±3Ω a filamentului se disipă o putere maximă de 350mW. Pentru o precizie maximă senzorul
trebuie preîncălzit aproximativ o oră.

38
Din figura de mai sus se diferențiază următoarele elemente:

Nr. crt. Componentă Material


1 Strat sensibil la gaz SnO2
2 Electrod Au
3 Linia electrodului Pt
4 Bobina de încălzire Aliaj Ni-Cr
5 Tubular ceramic Al2O3
6 Rețea anti-explozie Oțel inoxidabil
7 Inel de susținere Plastic
8 Baza de rășină Bachelită
9 Pin de conectare Ni placat cu Cu
Tabel 3.5 Elementele constitutive ale senzorului MQ-7
Schema de conectare a senzorului MQ-7 în circuit corespunde cu cea a senzorului MQ-135
(Figura 3.10).
Tensiunea Vout variază direct proporțional cu concentrația de gaz detectată de la o valoare de
0.4V, în aerul curat, la 5V, în prezența monoxidului de carbon concentrat, pe o rezistență de sarcină
de 10KΩ.
Pentru a calcula sensibilitatea se folosesc aceleași formule matematice (1) și (2), ca la senzorul
MQ-135.

Figura 3.21 Caracteristica de sensibilitate a MQ-7 la diferite gaze


Figura 3.21 arată caracteristica tipică a senzorului MQ-7, pe axa ordonatelor fiind raportul
Rs/R0, iar pe axa absciselor concentrația de gaz în ppm. Măsurătorile sunt realizate la o temperatură
de 20℃, la un nivel al umidității de 65%, o concentrație a O2 de 21% și o valoare a rezistenței de
sarcină (RL) de 10KΩ. R0 semnifică rezistența senzorului la o concentrație de 100ppm de monoxid
de carbon (CO) în aer. Se observă de asemenea sensibilitatea scăzută la alte gaze în afară de cele
menționate mai sus.

39
Figura 3.22 Dependența de temperatură și de gradul de umiditate relativă a MQ-7
Figura de mai sus arată dependența senzorului MQ-7 de temperatură și de gradul de umiditate
relativă. R0 semnifică rezistența senzorului la o concentrație de 100ppm de monoxid de carbon (CO)
în aer, măsurătorile fiind realizate la o temperatură de 20℃ și un nivel al umidității relative de 33%.
RS reprezintă rezistența senzorului la o concentrație de 100ppm de monoxid de carbon (CO) în aer la
diferite temperaturi și nivele de umiditate.

40
3.3. Blocul de comandă – microcontrolerul Atmega164A

3.3.1. Specificații generale


Microcontrolerul Atmega164A de înaltă performanță și consum mic de energie face parte din
familia de microcontrolere AVR Atmel a “Microchip Technology”. Este un microcontroler pe 8 biți
bazat pe arhitectura RISC, ce combină memoria flash ISP de 16KB cu capacități de citire în timp ce
scrie, 512B EEPROM, 1KB SRAM, 32 linii I/O de uz general, 32 de registre de lucru de uz general,
un contor în timp real, trei temporizatoare/contoare flexibile cu moduri de comparare și PWM, două
USART-uri, o interfață serială cu 2 fire orientată pe octeți, un convertor ADC de 8 biți cu 10 canale
cu etapă de intrare diferențială opțională cu câștig programabil, temporizator programabil de
supraveghere cu oscilator intern, Port serial SPI, o interfață de test JTAG (conform IEEE 1149.1)
pentru depanare și programare on-chip și șase moduri de economisire a energiei selectabile de
software. Dispozitivul funcționează între 1,8-5,5 volți.

Producător MICROCHIP (ATMEL)


Tip circuit integrat microcontroler AVR
Capacitate memorie EEPROM 512B
Capacitate memorie SRAM 1kB
Capacitate memorie Flash 16kB
Carcasă DIP40
Frecvență sincronizare 20MHz
Număr canale PWM 6
Număr timere 8bit 2
Număr timere 16bit 1
Montare THT
Tensiune alimentare 1.8...5.5V DC
Temperatura de lucru -40...85°C
Număr întreruperi externe 32
Număr canale output compare 6
Număr comparatoare 1
Număr canale input capture 1
Număr adaptoare A/D 10bit 8
Gama ATMEGA
Număr canale capacitive 16

Tabel 3.6 Caracteristici tehnice Atmega164A

41
Figura 3.23 Schema pinilor de uz general

3.3.2. Convertorul Analog–Digital (ADC)

Lumea înconjurătoare este alcătuita în esență din semnale analogice: lumina, sunetul, căldura.
Pentru a putea fi măsurate într-un sistem de calcul digital, aceste semnale trebuie convertite în valori
numerice discrete.
Un convertor analog–digital (ADC) este un circuit electronic care convertește o tensiune
analogica de la intrare într-o valoare digitala. Aceasta poate fi reprezentata în mai multe feluri în
funcție de codificarea datelor: binar, cod Gray sau cod complement al lui 2.
O caracteristică importantă a unui ADC o constituie rezoluția acestuia. Rezoluția indică
numărul de valori discrete pe care convertorul poate să le furnizeze la ieșirea sa în intervalul de
măsura. Deoarece rezultatele conversiei sunt de obicei stocate intern sub forma binară, rezoluția unui
convertor analog-digital este exprimată în biţi.

Figura 3.24 Semnal analogic eșantionat la rezoluții diferite

42
De exemplu, dacă rezoluția unui convertor este de 10 biţi, atunci el poate furniza 210=1024
valori diferite la ieșire. Dacă gama de măsurare este de 0-5V, rezoluția de măsurare va fi:

5V − 0V
= 0,005V = 5mV
1024

O alta caracteristică importata a unui convertor analog-digital o constituie rata de eșantionare.


Aceasta depinde de timpul dintre doua conversii succesive și afectează modul în care forma de unda
originală va fi redată după procesarea digitală. Figura de mai sus arată modul în care semnalul
eșantionat va fi reconstituit în urma trecerii printr-un convertor digital–analog (DAC). Semnalul
reprodus nu va fi identic 100% cu cel original. Dacă rata de eșantionare ar creste, este de la sine
înțeles că semnalul reprodus ar aproxima din ce în ce mai bine originalul.

Care este însă rata minima de eșantionare pentru a reproduce fără pierderi un semnal de o
frecvență dată? Teorema lui Nyquist spune că o rată de eșantionare de minim doua ori mai mare decât
frecvența semnalului măsurat este necesară. Acest lucru poate fi aplicat și daca avem în schimb un
semnal compus dintr-o mulțime de frecvențe, cum ar fi vocea umană sau o melodie. Limitele maxime
ale auzului uman sunt 20Hz–20kHz dar frecvențele obișnuite pentru voce sunt în gama 20-4000Hz,
de aceea centralele telefonice folosesc o rată de eșantionare a semnalului de 8000Hz. Rezultatul este
o reproducere inteligibilă a vocii umane, suficientă pentru transmiterea de informații într-o convorbire
obișnuită. Pentru reproducerea fidelă a spectrului audibil, se recurge la rate mai mari de eșantionare.
De exemplu, înregistrarea pe un CD are o rata de eșantionare de 44100Hz ceea ce este mai mult decât
suficient pentru reproducerea fidelă a tuturor frecvențelor audibile.
În funcție de modul în care se execută conversia, convertoarele analog-digitale pot fi de mai
multe tipuri:
• ADC paralel (Flash);
• ADC cu aproximare succesivă;
• ADC cu integrare (single-slope, dual-slope);
• ADC Sigma-delta (delta-sigma, 1-bit ADC sau ADC cu oversampling).
Convertorul analog-digital inclus în microcontrolerul Atmega164 este un ADC cu aproximări
succesive. Are o rezoluție de 10 biţi și poate măsura orice tensiune din gama 0-5V de pe opt intrări
analogice multiplexate. Dacă semnalul de la intrare este prea mic în amplitudine, convertorul are
facilitatea de preamplificare a acestuia în doua setări: de 10x sau de 200x.

Figura 3.25 Schema completă a convertorului ADC al Atmega164

43
ADC-ul conține un circuit de eșantionare cu memorare (Sample and Hold), care asigură faptul
că tensiunea de intrare în ADC este menținută la un nivel constant în timpul conversiei.

Registrele necesare pentru configurarea convertorului

Canalul de intrare analogic și câștigul diferențial sunt selectate prin configurarea biților MUX
din registrul ADMUX. Convertorul este activat prin setarea bit-ului ADEN din registrul ADCSRA.
Până ce bit-ul ADEN nu este setat, selectarea referinței de tensiune sau canalelor de intrare nu va avea
nici un efect.
Convertorul generează un rezultat de 10 biți prezentat în registrele de date ADC, ADCH și
ADCL. În mod normal, rezultatul este prezentat de la stânga la dreapta, însă poate fi modificat în
reprezentație de la dreapta la stânga prin setarea bit-ului ADLAR din registrul ADMUX. Dacă
rezultatul este prezentat de la dreapta la stânga și nu este necesară o rezoluție mai mare de 8 biți, este
suficientă doar citirea registrului ADCH. În caz contrar, ADCL trebuie citit primul, iar ADCH al 2-
lea, pentru a asigura faptul că informația din registrele de date aparțin aceleași conversii.
O conversie începe odată cu setarea în 1 logic a bitului ADSC. Acest bit rămâne 1 atât timp
cât conversia este în desfășurare și va fi desetat hardware când conversia s-a încheiat. De asemenea,
o conversie poate fi pornită automat prin mai multe căi. Pornirea automată (Auto Triggering) este
activată prin setarea bit-ului de activare a pornirii automate a ADC-ului, ADATE din registrul
ADCSRA. Sursa de pornire automată a ADC-ului este selectată prin setarea biților de selectare a
sursei, biții ADTS din registrul ADCSRB. Acest lucru oferă posibilitatea începerii conversiei la
intervale fixe de timp. Posibile surse de pornire automată sunt: comparatorul analogic, întrerupere
externă, compararea cu o valoarea predefinită a unui timer sau depășirea unui timer.

După încheierea unei conversii (bit-ul ADIF devine 1) iar rezultatul conversiei poate fi găsit
în registrele ADCL și ADCH.

Tabel 3.7 ADMUX – Registrul de selecție multiplexor al ADC


• REFS1 și REFS0 selectează referința de tensiune, adică valoarea maximă care poate fi
convertită. Utilizatorul poate alege dintre doua referințe interne, de 2.5V și 5V sau o
referința externă (orice valoare între 0V și 5V) care trebuie furnizată pe pinul AVcc. Pin-
ul AVcc reprezintă alimentarea separată a ADC-ului, însă tensiunea pe acest pin nu
trebuie să difere cu mai mult de ±0.3V față de Vcc.
• ADLAR selectează ordinea biților rezultatului conversiei (LSB-first sau MSBfirst).
• MUX4:0 selectează intrarea de pe care se face conversia. Se poate alege și un mod de
funcționare diferențial, caz în care se va măsura diferența de tensiune între cei doi pini
aleși.

Tabel 3.8 ADCSRA – Registrul de control și stare A al ADC


• ADEN este bitul de Enable și activează convertorul.
• ADSC: scrierea acestui bit pe 1 va genera automat o conversie de pe intrarea selectată.
44
• ADATE este bitul de Enable pentru trigger-mode în care o conversie este generată pe
frontul pozitiv al unui semnal furnizat extern de către utilizator.
• ADIF este bitul de întrerupere și va fi setat automat la terminarea unei conversii.
• ADIE este bitul de Enable pentru întrerupere. Aceasta va fi generată automat la fiecare
conversie dacă bitul respectiv este setat.
• ADPS2:0 selectează rata de eșantionare pentru convertor. Aceasta poate fi de maxim fclk/2
(fclk = frecvența de clock).

Tabel 3.9 ADCL și ADCH – Registru de date al ADC


• ADC9:0 reprezintă rezultatul conversiei ADC

Când o conversie ADC este finalizată, rezultatul se găsește în aceste două registre. Dacă sunt
canale diferențiale utilizate, rezultatul este prezentat în formă de complement față de 2.

Tabel 3.10 ADCSRB – Registrul de control și stare B al ADC


• Biții 7, 5:3 sunt rezervați pentru utilizări viitoare în Atmel. Pentru a asigura
compatibilitatea cu dispozitivele viitoare, acești biți trebuie să fie scriși cu 0 când se scrie
ADCSRB.
• ACME este bitul de Enable pentru Comparatorul Multiplexor Analogic. Atunci când
acest bit este 1 și ADC este oprit (ADEN în ADCSRA este zero), multiplexorul ADC
selectează intrarea negativă la comparatorul analogic.
• Biții 2:0 – ADTS2:0 Sursa de pornire automată a ADC-ului este selectată prin setarea
biților de selectare a sursei.

Relația dintre valoarea pusă în registrul de date al ADC și tensiunea măsurata este următoarea:

Vin × 1024
ADC =
Vref
Unde Vin este tensiunea măsurată iar Vref este tensiunea aleasă ca referință.

45
3.3.3. Dispozitivele periferice de comunicație
3.3.3.1. Protocolul 1-Wire [7]

Protocolul 1-Wire este un dispozitiv de comunicație de tip magistrală implementat de “Dallas


Semiconductor Corp”, ce furnizează date la viteză redusă, semnale și energie pe un singur fir.
Protocolul este similar conceptului I2C însă cu o frecvență mai mică a datelor și la un interval mai
larg. Acesta este folosit de obicei în comunicarea cu dispozitive mici și accesibile cum ar fi
termometrele digitale sau instrumentele pentru vreme. O rețea formată din dispozitive 1-Wire asociată
unui dispozitiv master se numește MicroLAN.
O caracteristică distinctă a unei magistrale este posibilitatea de a utiliza doar două fire: unul
pentru date și altul pentru masă. Pentru a realiza acest lucru, dispozitivele 1-Wire includ un
condensator de 800pF pentru a stoca energia și pentru a alimenta dispozitivul în perioadele în care
linia de date este activă.
Fiecare cip 1-Wire are un cod unic numit ID. Această caracteristică face posibilă folosirea
cipurilor pe post de cheie, în special în cadrul unui pachet iButton, pentru deschiderea unui sistem de
blocare, activarea și dezactivarea alarmelor anti-efracție, autentificarea utilizatorul în sistemele
informatice, operarea sistemelor de timp etc.
În acest proiect, sistemul 1-Wire este folosit de senzorul de temperatură și umiditate, DHT11.
Acest aspect oferă atât suplețe și robustețe proiectului, cât și ușurință în proiectarea schemei și
comunicarea cu microcontrolerul.
În orice sistem MicroLAN există întotdeauna o componentă master, care poate fi un PC sau
un microcontroler ce se va ocupa de tot ansamblul. Componenta master inițiază activitatea magistralei
și simplifică evitarea coliziunilor din cadrul magistralelor. Protocoalele sunt implementate în
componenta software pentru detectarea coliziunilor. După o coliziune, componenta master reîncearcă
comunicația cerută.
Mai multe dispozitive pot împărți aceeași magistrală. Fiecare dispozitiv de pe magistrală are
un număr serial unic pe 64 biți. Cel mai nesemnificativ bit din numărul serial este un număr de 8 biți
care ilustrează tipul dispozitivului. Cel mai semnificativ bit este un CRC standard pentru magistrala
1-Wire de 8 biți.
Protocolul 1-Wire (descris ulterior) este un algoritm pe care componenta master îl utilizează
pentru a citi adresele tuturor dispozitivelor din magistrală. Cât timp adresa include tipul dispozitivului
și un CRC, recuperarea listei de adrese produce un inventar real al dispozitivelor magistralei. În
spațiul adreselor de 64 biți se caută folosind arbori binari, permițând găsirea a 75 de dispozitive pe
secundă.
Rețeaua 1-Wire este fizic implementată ca un dispozitiv master cu canal deschis conectat la
mai multe dispozitive slave de același tip. Un singur rezistor pull-up este comun pentru toate
dispozitivele și acționează pentru a aduce magistrala la 3 sau 5 volți, și mai mult, poate furniza energie
către dispozitivele slave. Comunicarea este posibilă în momentul în care componenta master sau o
componentă slave pune magistrala în starea de zero logic – cu alte cuvinte în momentul în care se
conectează rezistorul de pull-up la masă prin rezultatul MOSFET.
Componenta master începe o transmisie cu un puls de reset, care menține firul la 0V pentru
cel puțin 480µs. Acest mecanism resetează fiecare dispozitiv slave prezent în magistrală. În
continuare, fiecare dispozitiv slave, devine prezent printr-un puls de prezență: menținerea magistralei
la nivel de zero pentru cel puțin 60µs după ce componenta master eliberează magistrala.
Pentru a putea fi trimis „1”, componenta master a magistralei trimite un puls de zero logic
foarte scurt (1-15µs). Pentru a putea fi transmis un „0”, componenta master trimite un puls de zero
pentru 60µs. Frontul negativ al pulsului este utilizat pentru a porni un timer monostabil în cadrul
componentei slave. Timer-ele slave-urilor sunt utilizate pentru citirea magistralei la 30µs după frontul
negativ. Pulsul timer-elor slave-urilor pentru transmiterea lui „0” trebuie sa dureze 60µs și pulsul
pentru transmiterea lui „1” nu poate dura mai mult de 15µs.
46
Secvența de bază este pulsul pentru reset urmat de o comandă de 8 biți iar apoi informația este
trimisă sau primită în grupuri de câte 8 biți.
În momentul în care o secvență de date este transferată, erorile pot fi detectate folosind un
CRC de 8 biți.
Pentru a găsi dispozitivele, componenta master transmite o comandă de enumerare și apoi o
adresă, ascultând după fiecare bit al unei adrese. În cazul în care componenta slave are toți biții din
adresă, ea va returna 0. Componenta master utilizează acest mecanism pentru a căuta sistematic o
secvență validă de biți ai unei adrese. Procesul este mult mai rapid decât un algoritm care caută toate
posibilitățile de numere pe 64 biți deoarece în momentul în care un bit este detectat ca fiind invalid,
toți biții ulteriori ai adresei sunt invalidați. O enumerație de 10-15 dispozitive se va termina foarte
rapid.
Locația dispozitivelor pe magistrală este uneori semnificativă. Pentru aceste situații,
producătorul are un dispozitiv special care fie trece prin magistrală, fie o închide. Așadar, un program
software poate explora secvențial domeniile magistralei.

3.3.3.2. Protocolul SPI (Serial Peripheral Interface) [8]

Interfața periferică serială (SPI) este un protocol hardware implementat de către “Motorola”
și adoptat mai târziu în industrie. Tehnologia microwire a companiei “National Semiconductor”
coincide cu SPI. SPI este numită și magistrală serială cu patru fire.
Interfața periferică serială sau magistrala SPI este o interfață de comunicare serială cu patru
fire utilizată de multe cip-uri periferice ale microprocesoarelor sau microcontrolerelor, ce permite
comunicarea acestora cu dispozitivele periferice. Chiar dacă a fost implementată la început pentru
comunicarea dintre procesorul host și periferice, este posibilă și o conexiune dintre două procesoare
prin SPI.
Magistrala SPI funcționează după următorul principiu: semnalele ce transportă date pot merge
în ambele direcții simultan. Această magistrală este o legătură de date sincronă combinată cu o
interfață Master/Slave și poate suporta o viteză mai mare de 1 megabaud sau 10Mbps. Folosind SPI
sunt posibile ambele protocoale, atât single-master cât și multi-master. Însă magistrala multi-master
este destul de rar utilizată fiind destul de dificilă și de obicei este limitată la o singură componentă
slave.
Date și controlul liniilor în sistemul SPI și conexiunea de bază
Protocolul SPI utilizează patru fire pentru transmiterea semnalului:
1. Master Out Slave In (MOSI): semnal generat de către componenta master, destinatar
fiind slave;
2. Master In Slave Out (MISO): semnal generat de către componenta slave, destinatar
fiind master;
3. Serial Clock (SCLK sau SCK): semnal generat de componenta master pentru
sincronizarea transferului de date între componenta master și cea slave;
4. Slave Select (SS) de la master către Chip Select (CS) a componentei slave: semnalul
SS este generat de componenta master pentru a selecta dispozitive periferice slave individual.

Figura 3.26 Implementare SPI cu o singură componentă master și una slave


47
Pot exista alte convenții de nume cum ar fi Serial Data In (SDI) în locul lui MOSI și Serial
Data Out în locul lui MISO. Printre aceste patru semnale logice, două dintre ele MOSI și MISO pot
fi grupate ca linii pentru date, iar celelalte două SS și SCLK pot fi grupate ca linii de control.
După cum se știe deja, într-o comunicație SPI poate exista o componentă master și mai multe
componente slave. În protocolul single-master, de obicei un singur dispozitiv SPI acționează ca SPI
Master ce controlează cursul datelor generând semnale de ceas (SCLK) și activând componentele
slave cu care se dorește o comunicare cu ajutorul semnalelor SS. Apoi se transmit sau se primesc
datele cu ajutorul celor două linii de date. Componenta master, de obicei fiind un microcontroler, va
emite mereu semnale de ceas către toate dispozitivele din magistrală chiar dacă acesta este selectat
sau nu.

Utilizarea fiecărui dintre cei patru pini depinde de dispozitiv. De exemplu, pinul SDI poate să
nu fie prezent dacă dispozitivul nu necesită intrare (de exemplu, ADC) sau pinul SDO poate să nu fie
prezent dacă dispozitivul nu necesită ieșire (de exemplu, controlerul LCD). Dacă un microcontroler
necesită doar comunicarea cu un singur periferic SPI sau cu o singură componentă slave, atunci pinul
CS din cadrul componentei slave poate lipsi. În cazul mai multor dispozitive slave este necesar un
semnal SS independent de la master către fiecare dispozitiv slave.

Comunicarea

Întotdeauna comunicarea este inițiată de către componenta master. Mai întâi, aceasta
configurează ceasul utilizând o anumită frecvență care este mai mică sau egală cu maximul frecvenței
suportate de dispozitivul slave. Componenta master selectează componenta slave dorită pentru
comunicare schimbând linia SS a unui periferic slave particular în starea low. Dacă este necesară o
perioadă de așteptare (de exemplu, pentru conversia din analog în digital) atunci componenta master
va trebui să aștepte cel puțin aceea perioadă de timp înainte de a porni ciclul de ceas.

Figura 3.27 Utilizarea registrului de shift-are


Componentele slave din magistrală care nu au fost activate de către master utilizând semnalul
propriu de selectare nu vor lua în considerare semnalele de intrare al ceasului și cel MOSI primite de
la componenta master, și nu vor trebui să comande semnale MISO. Acest lucru înseamnă că master
selectează o singură componentă slave o dată.
Cele mai multe dispozitive/periferice au o ieșire cu trei stări, ce merge în starea de impedanță
ridicată (deconectare) când dispozitivul nu este selectat. Dispozitivele fără aceste ieșiri nu pot împărți
magistrala SPI cu alte dispozitive pentru că selectarea cip-ului nu poate fi activată.
O transmisie completă a datelor poate fi efectuată în timpul unui ciclu de ceas. Acest lucru
înseamnă că master trimite un bit pe linia MOSI, componenta slave citește bitul de pe aceeași linie și
trimite un bit pe linia MISO care este citit de master de pe aceeași linie.

48
Figura 3.28 Configurația hardware pentru comunicarea cu două registre de shift-are
Transferul de date este organizat utilizând regiștrii de shift-are cu o dimensiune a unui cuvânt
de 8 biți (nu este limitat la 8 biți) atât în master cât și în slave. Ele sunt conectate în inel. În cazul în
care registrul de shift-are al componentei master depășește valoarea care încape pe linia MOSI,
componenta slave mută datele proprii în registrul ei de shift-are.

Diferite tipuri de configurații

Se presupune că există o componentă master, un microcontroler, ce comunică cu mai multe


periferice SPI. Există două moduri de configurație:
1. Componente slave în cascadă sau pe magistrală comună;
2. Componente slave independente sau configurație paralelă.

Avantajele sistemului SPI

• Comunicație full-duplex;
• Productivitate mai mare decât protocolul I2C;
• Nu limitează dimensiunea cuvintelor la 8 biți în cadrul transferului pe biți;
• Alegerea arbitrară a dimensiunii mesajului, conținutului și scopului;
• Interfațarea simplă cu hardware-ul;
• Mai puține cerințe de energie decât I2C datorită prezenței a mai puține circuite;
• Niciun mod de eșuare arbitrar sau asociat;
• Componentele slave utilizează ceasul componentei master și de aceea nu au nevoie
de oscilatoare de precizie;
• Nu sunt necesari transceiver-i;
• Cel mult un singur semnal unic al magistralei pe un dispozitiv (CS); toate celelalte
semnale sunt comune.

Dezavantajele sistemului SPI

• Necesită mai mulți pini decât I2C;


• Nu există adresare in-band. Semnalele de selectare a cip-ului out-of-band sunt
necesare pe magistralele comune;
• Nu există control hardware al fluxului de date;
• Nu se cunosc componentele slave;

49
• Magistralele cu mai multe componente master sunt foarte rare și complexe și de
obicei sunt limitate la o singură componentă slave;
• Nu există un standard formal;
• Tratarea doar a distanțelor scurte în comparație cu RS-232, RS-485 sau CAN.

3.3.3.3. Protocolul UART (Transmisia serială)

Introducere în UART

Porturile seriale au fost parte a computerelor personale încă de la începuturi. De departe cea
mai cunoscută tehnică de transmitere a datelor este UART (Universal Asynchronous Receiver
Transmitter). Fiecare port de comunicație dintr-un PC este un port serial asincron controlat de un
UART. Un port de comunicație poate avea o interfață convențională RS-232, o interfață similară cum
ar fi RS-485, sau portul poate fi dedicat pentru a fi utilizat de un modem intern sau alt dispozitiv. În
ziua de azi, PC-urile au alte tipuri de porturi seriale, cum ar fi USB sau Firewire, însă acestea
utilizează protocoale diferite și necesită componente diferite.
Deși interfețe seriale modern, cum ar fi USB, sunt mai rapide, au alte avantaje și sunt
recomandate spre a fi utilizate ori de câte ori este posibil, RS-232 și interfețe similar vor continua să
fie populare în aplicații cum ar fi monitorizare sau control. Aceste interfețe sunt ușor de programat,
permit cabluri foarte lungi și sunt utilizate cu ușurință împreună cu microcontrolere ieftine sau
computere mai vechi. Cum porturile USB sunt atât de răspândite în ziua de azi, apariția convertoarelor
USB–RS-232 sau RS–485 a fost doar o chestiune de timp. Convertorul se conectează la portul USB
al PC-ului și face translația între USB și alte interfețe, astfel încât porturile RS-232 sau RS-485 pot fi
adăugate cu ușurință oricărui sistem.
În primul PC IBM, UART-ul ce controla portul serial era circuitul 8250, cu o viteză maximă
de 57600 biți pe secundă. Începând de atunci, UART-urile din fiecare PC au continuat să emuleze
chip-ul original, cu toate că noile UART-uri adaugă buffere, viteze mai mari și alte funcționalități.
UART face translația între datele de tip serial și cele de tip paralel. Pe de o parte, UART face
conversia datelor de tip paralel de pe magistrala de sistem a PC-ului în date de tip serial pentru
transmitere. Pe de altă parte, UART face conversia datelor de tip serial recepționate în date de tip
paralel pe care CPU le poate interpreta pe magistrala sistemului. UART suportă și comunicații half-
duplex, și comunicații full-duplex. Pe o legătură full-duplex, UART poate trimite și recepționa în
același timp. În cazul half-duplex, doar un singur dispozitiv poate transmite la un moment dat,
utilizând semnale de control sau coduri ce determină când să transmită fiecare dispozitiv. Evident,
UART suportă de asemenea și comunicațiile simplex, pe o singură direcție.

Trimiterea datelor

Pe o legătură serială, transmițătorul emite biții unul câte unul, secvențial. O legătură între doar
două dispozitive poate avea o cale dedicată pentru fiecare direcție sau poate avea o singură cale
utilizată de ambele dispozitive. Un semnal necesar tuturor legăturilor seriale este semnalul de ceas,
pentru a controla fluxul de date. Transmițătorul și receptorul folosesc semnalul de ceas pentru a hotărî
când să trimită sau să citească fiecare bit. Există două tipuri de transmisie a datelor, sincronă și
asincronă, și fiecare utilizează semnalul de ceas într-un mod diferit:
a) În cazul transmisiei sincrone, emițătorul trimite biți pe frontul negativ, în timp ce
receptorul citește biți pe frontul pozitiv. Multe protocoale de tip sincron trimit MSB primul.
b) În cazul transmisiei asincrone, emițătorul utilizează un semnal de ceas intern pentru
a determina când să trimită fiecare bit, iar receptorul detectează frontul negativ al bitului de

50
START, apoi folosește un semnal de ceas intern pentru a citi biții următori în apropierea
centrului. Protocoalele asincrone trimit LSB primul.

Formatul Sincron

Într-o transmisiune sincronă, toate dispozitivele utilizează un generator de semnal de ceas


comun dat de către unul dintre dispozitive. Semnalul de ceas poate avea o frecvență constantă, sau
poate varia a intervale neregulate. Toți biții trimiși sunt sincronizați în funcție de semnalul de ceas.
Cu alte cuvinte, fiecare bit transmis este valid un timp finit după tranziția semnalului de ceas.
Receptorul folosește tranzițiile semnalului de ceas pentru a decide când să realizeze citirea fiecărui
bit care sosește. Însă, detaliile exacte ale fiecărui protocol pot varia. Formatele sincrone folosesc mai
multe metode de a semnaliza începutul și sfârșitul unei transmisii, inclusiv biți de Start și de Stop.
Interfețele sincrone sunt folosite pentru legături scurte, cu cabluri mai scurte de 4,5 metri, sau chiar
între componente de pe o singură placă electronică. Pentru legături mai lungi, formatele sincrone sunt
mai puțin practice datorită necesității transmiterii semnalului de ceas, ce necesită o linie în plus și
este pasibil zgomotului.

Formatul Asincron

În transmisiunile asincrone, legătura dintre dispozitive nu necesită o linie pentru semnalul de


ceas, deoarece fiecare capăt al legăturii este capabil de a-și furniza propriul semnal de ceas. Fiecare
capăt trebuie să se hotărască asupra frecvenței semnalului de ceas, apoi toate semnalele de ceas trebuie
să se conformeze cu o eroare cât mai mică. Fiecare byte transmis include un bit de Start pentru
sincronizarea semnalelor de ceas, și unul sau multi biți de Stop pentru a semnaliza sfârșitul unui
caracter.
O transmisiune asincronă poate folosi una dintre multele formate cunoscute. Probabil cel mai
popular format este 8-N-1, în care emițătorul trimite fiecare byte de date sub forma unui bit de Start
urmat de 8 biți de date, începând cu bitul 0 (LSB), și terminând cu un bit de Stop. Simbolul N din 8-
N-1 indică faptul că transmisiunea nu utilizează un bit de paritate. Alte formate pot include un bit de
paritate sub forma unui detector de erori. Paritatea poate fi: Par, Impar, Semn, Spațiu (Even, Odd,
Mark, Space). În cazul parității pare, bitul de paritate este setat sau desetat astfel încât biții de date
împreună cu bitul de paritate să conțină un număr par de biți 1. Un exemplu de format care utilizează
paritatea este 7-E-1. Emițătorul trimite un bit de Start, 7 biți de date, un bit de paritate și un bit de
Stop. Evident, ambele capete ale legăturii trebuie să cadă de acord asupra formatului. Receptorul
examinează datele primite și informează transmițătorul dacă s-a produs o eroare, în cazul în care
rezultatul nu are valoarea așteptată.
Paritatea de tip Semn sau Spațiu este o paritate fixă: la paritatea de tip Semn, bitul de paritate
este mereu 1, iar la cea de tip Spațiu, bitul de paritate este mereu 0. Acestea sunt mai puțin folositoare
ca și indicatori de eroare, însă o întrebuințare pentru ele este pentru rețelele pe 9 biți. Aceste rețele
utilizează un bit de paritate pentru a indica dacă un byte conține o adresă sau o informație.
Rata de bit a unei legături reprezintă numărul de biți pe secundă transmiși sau recepționați pe
unitatea de timp, de obicei exprimată în biți pe secundă (bps). Baud rate reprezintă numărul
evenimentelor, sau tranziții de date, ce pot avea loc într-o secundă. Cele două valori sunt deseori
identice, deoarece în cazul multor legături fiecare perioadă de tranziție reprezintă un nou bit. Pe liniile
telefonice, modemuri de înaltă viteză folosesc deplasări de fază sau alte metode de a coda mai mulți
biți într-o singură perioadă, astfel încât baud rate-ul este de fapt mult mai mic decât rata de bit.
Toți biții necesari transmiterii unei valori de la Start la Stop formează un cuvânt. Biții de date
dintr-un cuvânt formează un caracter. În unele legături, caracterele chiar reprezintă caractere text
(litere sau numere), pe când în cazul altor legături, caracterele reprezintă valori binare ce n-au legătură
cu textul. Numărul de caractere transmise pe secundă este egal cu rata de bit împărțită la numărul de
biți dintr-un cuvânt. Adăugând un bit de Start și unul de Stop byte-ului ce trebuie trimis mărește
51
timpul de transmisie al fiecărui byte cu 25% (deoarece vor exista 10 biți per byte în loc de 8). Cu
formatul 8-N-1, un byte se transmite la 1/10 din rata de bit; o legătură de 9600 bps transmite 960
bytes pe secundă.
Dacă receptorul are nevoie de timp suplimentar pentru a accepta datele primite, transmițătorul
poate lungi bitul de Stop până la 1.5 sau 2 biți. Scopul inițial pentru bitul de Stop mai lung a fost să
permită mașinilor de scris mecanice să se stabilizeze. Există și alte moduri de la genera biți de Start
și de Stop fără a folosi lățimea totală a unui bit. Interfața USB utilizează nivele diferite de tensiune
pentru a indica începutul și sfârșitul. Evident, pentru asta este nevoie de parte hardware care să suporte
aceste convenții.

3.4. Blocul de comunicație radio


3.4.1. LoRa [10]
3.4.1.1. Noțiuni generale
LoRa este modulația de tip spectru împrăștiat (spread spectrum modulation), care este derivată
din modulația chirp spread spectrum. Aceste tipuri de modulație renunță la rata de transmisie a datelor
în favoarea unei sensibilități mai mari care se traduce în final la distanțe mai mari de transmisie.

Figura 3.29 Modulație de tip chirp spread spectrum


Chirp Spread Spectrum a fost dezvoltat pentru a fi folosit în aplicații radar în anii 1940. De
asemenea este folosit în aplicații militare și comunicații care au nevoie de securitate sporită. În ultimii
20 de ani acest tip de modulație s-a regăsit în multe aplicații practice datorită consumului relativ mic
de putere și rezistență la interferență.
Chirp este un semnal sinusoidal a cărei frecvența scade sau crește în timp (de obicei între timp
și frecvența avem o relație sinusoidală). Că și celelalte tehnologii de tip spectru împrăștiat, chirp
folosește întreagă bandă pentru a transmite mesajul făcându-l rezistent la interferență. Mai mult
deoarece se utilizează o bandă largă a spectrului de frecvențe, spectrul răspândit va fi de asemenea
rezistent la fenomenul de fading cauzat de transmisia de mai multe cai.
Fenomenul de fading se descrie prin prezența obiectelor care reflectă semnalul în zona dintre
un transmițător și un receptor și care creează mai multe cai pe care semnalul transmis le urmează
către receptor. Ca rezultat receptorul va vedea superpoziția dintre fiecare copie a semnalului original,
afectată de o întârziere diferită în funcție de calea urmată. Fiecare copie a semnalului va avea o
atenuare, întârziere și fază diferită atunci când ajunge la receptor. Acest fenomen va duce de la
receptor la interferență, care poate fi constructivă sau destructivă, amplificând sau atenuând puterea

52
semnalului util. Interferențele puternice pot duce la o pierdere temporară a legăturii de comunicație,
datorită scăderii profunde a raportului semnalului zgomot.

LoRa (Long Range) operează la nivelul fizic din modelul OSI (Open Systems
Interconnection) și este folosită în comunicații fără fir pe distanțe lungi. Distanță este un termen
relativ, în cazul nostru în condiții teoretice se pot obține distanțe de transmisie de până la 40 km,
această distanță teoretică fiind însă afectată de mai mulți factori dintre care putem aminti: zgomotul
de pe canal, caracteristicile mediului de transmisiune și zona Fresnel.
Pentru a putea vorbi de transmisiuni trebuie să amintim teorema Shannon-Hartley care indică
capacitatea de transmisie a unui canal în prezența zgomotului. [7]

S
C = B × log 2 (1 + )
N
Unde:

C = Capacitatea canalului (bit/s)


B = Banda (Hz)
S = Puterea medie a semnalului recepționat (Watt)
N = Puterea medie a zgomotului (Watt)
S/N = Raportul semnal zgomot

După următoarele prelucrări de calcul:

S 1 S 1 S S
log 2 (1 + ) = × ln (1 + ) ≈ × ≈ 1,44 ×
N ln 2 N ln 2 N N

Vom obține relația:

C S
≈ 1,44 ×
B N

Din această ecuație putem deduce că pentru a putea transmite fără pierderi în cazul în care
raportul semnal zgomot 𝑆⁄𝑁 ≪ 1 putem folosi o bandă mai mare de frecvența. Astfel mărind bandă
putem compensa pentru degradarea raportului semnal-zgomot. Există mai multe sisteme de tip spread
spectrum dar toate au ceva în comun: cheia asociată canalului de comunicație. Felul în care această
cheie este introdusă în semnal definește tipul modulației. Termenul spread spectrum se referă la
utilizarea unui semnal cu perioada mult mai mică decât semnalul util pentru a mări bandă utilizată de
semnalul modulat. O consecință a acestui fapt este că energia utilizată este împrăștiată peste o bandă
mai mare astfel încât apare că și cum ar fi zgomot. Raportul în decibeli între semnalul modulat și
semnalul util se numește câștig de împrăștiere a spectrului. Valorile tipice ale acestui parametru
variază între 10 și 60 dB.
Procesul de creare a semnalului spread spectrum poartă numele de împrăștiere și poate avea
loc oriunde în interiorul lanțului de transmisiune înaintea antenei de transmisie. La receptor codul de
împrăștiere a semnalului este eliminat, semnalul revenind la bandă sa inițială. Desigur că același cod
folosit la modulare trebuie folosit și la demodulare. Beneficiile tehnologiilor spread spectrum sunt
rezistența la interferență și antibruiaj. De asemenea datorită folosirii codului (cheii de modulație) mai
multe semnale de tip spread spectrum pot fi transmise peste aceeași bandă în aceeași manieră că și
semnalele CDMA, receptorul decodând doar semnalul care conține cheia de modulație.

53
3.4.1.2. Rata de transmisie a datelor
În modulația LoRa împrăștierea spectrului este obținută generând un semnal care variază
continuu în frecvența, acest semnal purtând denumirea de chirp. Un avantaj al acestei metode îl
reprezintă echivalența între compensările de frecvența și sincronizare între transmițător și receptor,
reducând în mare măsură complexitatea receptorului. Lățimea de bandă a semnalului modulat este
egală cu lățimea de bandă a semnalului chirp. Semnalul de transmis este modificat să aibă o frecvență
mai mare, iar apoi este modulat cu semnalul chirp. Relația dintre rata biților, rata simbolurilor și rata
chirp pentru modulația LoRa este denumită după cum urmează:
1
R b = SF × SF
2
BW

Rb = Rata biților dorită (bit/s)


SF = Factor de împrăștiere (spreading factor) [ 6 … 12]
BW = Banda semnalului modulat (Hz)
2SF
TS =
BW
TS = Perioada unui simbol (s)

Figura 3.30 Comparații între diverși factori de împrăștiere ai modulației LoRa


1
RS =
TS
RS = Rata simbolurilor (inversul perioadei) (simboluri/s)
R C = R S × 2SF

BW
=> R C = × 2SF = BW
2SF

RC = Rata chip (chips/s)

54
Rata chip a unui cod este numărul de impulsuri pe secundă (chips/s) la care codul este transmis
(sau primit) și este mai mare decât rata simbolurilor, ceea ce înseamnă că un simbol este reprezentat
de mai multe chips.
În comunicațiile digitale, un chip este un impuls al unui cod de spectru răspândit cu secvență
directă (DSSS), cum ar fi o secvență de cod de zgomot pseudo-aleator (PN) utilizată în tehnici de
acces multiplu cu diviziune de cod (CDMA) cu diviziune de coduri de secvență directă.
Code Division Multiple Access (CDMA) este o metodă de acces canal utilizată de către
diverse tehnologii de comunicare radio. Această metodă permite ca în cazul în care sunt mai multe
emițătoare, să fie posibilă trimitea informației simultan pe un singur canal de comunicare. Acest lucru
dă posibilitate mai multor utilizatori partajarea pe o bandă de frecvențe. Pentru a efectua acest lucru
fără interferențe nejustificate între utilizatori, CDMA folosește o tehnologie de răspândire a spectrului
de frecvențe și un sistem de codificare special.
Într-un sistem binar cu secvență directă, fiecare chip este de obicei un impuls dreptunghiular
cu +1 sau −1 amplitudine, care este înmulțit cu o secvență de date (în mod similar +1 sau −1
reprezentând biții de mesaj) și este de o formă de undă purtătoare pentru a realiza semnal transmis.
Chipurile sunt, prin urmare, doar secvența de biți din generatorul de cod și sunt numite așa pentru a
evita confundarea lor cu biții de mesaj.
Modulația LoRa include și un mecanism de corectare al erorilor (FEC) care îmbunătățește
semnalul transmis, dar cu costul transmiterii unei informații redundante. Acest mecanism se
realizează prin codificarea datelor de 4 biți cu redundanțe în 5 biți, 6 biți, 7 biți sau chiar 8 biți.
Utilizarea acestei redundanțe va permite semnalului LoRa să suporte interferențe scurte. Valoarea
Coding Rate (CR) trebuie ajustată în funcție de condițiile canalului utilizat pentru transmiterea
datelor. Dacă există prea multe interferențe în canal, atunci se recomandă creșterea valorii CR. Cu
toate acestea, creșterea valorii CR va crește, de asemenea, durata transmisiei.
4
[ ]
R b = 𝑆𝐹 × 4 + 𝐶𝑅
2𝑆𝐹
[𝐵𝑊 ]
CR = Rata codului (code rate) [ 1 … 4]
Rata codului reprezintă raportul dintre biții utili trimiși și numărul total de biți transmiși.

3.4.1.3. Bugetul de legătura (Link Budget)


În tehnologia radio, există în esență trei caracteristici care pot fi utilizate pentru a caracteriza
o rețea radio:
• interval/distanță;
• viteza de transmitere a datelor;
• consumul de energie.
Este dificil să luăm în considerare toate cele trei criterii în aceeași măsura deoarece legile
fizicii stabilesc limite clare în acest caz. De exemplu, în cazul comunicației LoRa se pot transmite
date pe distanțe lungi cu un consum de energie relativ mic, dar cu o rată redusă a datelor.
În cazul tehnologiilor WiFi și Bluetooth, de exemplu, se ating rate de transfer al datelor foarte
mari, dar consumul de energie este relativ ridicat iar gama lor este foarte mică. Stațiile de bază ale
marilor furnizori de telecomunicații oferă rate de transfer al datelor mari și intervale de transfer relativ
mari, dar pentru aceasta trebuie să fie disponibilă o cantitate mare de energie. Prin urmare, alimentarea
cu energie electrică este întotdeauna un factor de planificare foarte important pentru astfel de
instalații.

55
Figura 3.31 Caracteristici ale rețelelor Wireless
În general, este posibilă o optimizare la a maximum 2 din criteriile menționate mai sus. Prin
urmare, trebuie luată decizia ce proprietăți au prioritate.
Bugetul de legătură indică calitatea unui canal de transmisie radio. Folosind un model simplu,
bugetul legăturii poate fi calculat prin adăugarea puterii de transmisie (puterea emițătorului, Tx), a
sensibilității receptorului (puterea receptorului, Rx), a câștigului antenei și a pierderii căii în spațiului
liber (FSPL).
În ceea ce urmează, voi calcula bugetul de legătură al comunicație LoRa, dar mai întâi trebuie
definit fenomenul de path loss.
Pierderea căii (path loss) semnalului radio indică câtă energie se pierde în spațiul liber la o
distanță între Tx și Rx. Cu cât distanța dintre Tx și Rx este mai mare, cu atât nivelul de energie este
mai mic. Pierderea căii este de obicei reprezentată după cum urmează:
4πd 2 4πdf 2
FSPL = ( ) =( )
λ c

FSPL = Pierderii căii în spațiului liber (Free Space Path Loss)


d = distanța între Tx și Rx (m)
λ = lungimea de undă a semnalului (m)
f = frecvența semnalului (Hz)
c = viteza luminii (m/s)

Există, de asemenea, o formulă de calcul logaritmică utilizată pe scară largă pentru calculul
FSPL:
4πdf 2 4πdf
FSPL(dB) = 10 log10 (( ) ) = 20 log10 ( )
c c

= 20 log10 (𝑑) + 20 log10 (𝑓) + 20 log10 ( )
𝑐

=> FSPL(dB) = 20 log10 (𝑑) + 20 log10 (𝑓) − 147,55

Atunci când distanța între Tx și Rx se dublează vom avea un path loss de 6dB în spațiul liber.

56
Figura 3.32 Free Space Path Loss în comunicația Tx−Rx
Pe partea receptorului (Rx), sensibilitatea receptorului este valoarea care afectează bugetul de
legătură și este unul dintre cei mai importanți parametri în determinarea performanței generale a unui
sistem de comunicații. Așa-numita sensibilitate Rx (sensibilitatea receptorului în cazul utilizării
LoRa) descrie puterea minimă de recepție posibilă și toleranța la zgomotul termic și se calculează
după cum urmează:

SRX = MDS + SNR

𝑀𝐷𝑆 = −174 dBm + 10log10 BW + NF

=> SRX = −174 + 10log10 BW + NF + SNR

SRX = Sensibilitatea receptorului (dB)


MDS = Puterea minimă detectabilă a semnalului (dB)
SNR = Raportul semnal-zgomot
BW = Banda semnalului (Hz)
NF = Factorul de zgomot acceptat de diferite valori alea factorului de împrăștiere (dB)

Valori ale NF pentru diferite lățimi de bandă și valori diferite ale SF:

SF
7 8 9 10 11 12
BW

125 kHz −123 dBm −126 dBm −129 dBm −132 dBm −133 dBm −136 dBm

250 kHz −120 dBm −123 dBm −125 dBm −128 dBm −130 dBm −133 dBm

500 kHz −116 dBm −119 dBm −122 dBm −125 dBm −128 dBm −130 dBm

Tabel 3.11 Zgomotul maxim acceptat pentru diferite valori ale BW și SF


Bugetul de legătură al unei rețele wireless reprezintă o măsură a tuturor câștigurilor și
pierderilor pornind de la transmițător, prin canalul de propagare până la receptor. Aceste câștiguri și
pierderi pot fi asociate cu antena, canalul de comunicații precum și pierderi datorate măsurătorilor.
Efecte asociate canalului cum ar fi transmiterea pe mai multe cai și efectul Doppler sunt luate
în considerare atunci când se calculează bugetul de legături de asemeni se mai adaugă și o margine
57
de rezervă în funcție de anticiparea stării canalului. Bugetul de legătură al unei conexiuni fără fire
poate fi exprimat ca:

PRX (dBm) = PTX (dBm) + GSISTEM (dB) − LSISTEM (dB) − lCANAL (dB) − M(dB)

PRX = valoarea puterii incidente la receptor (dBm)


PTX = valoarea puterii la emițător (dBm)
GSISTEM = câștiguri realizate de sistemul de comunicații (cum ar fi cele obținute folosind antene
direcționale); nu cuprinde canalul de comunicații (dB)
LSISTEM = pierderi realizate de sistemul de comunicații; nu cuprinde canalul de comunicații (dB)
lCANAL = pierderi datorate canalului de comunicații , care pot fi calculate folosind un model de
propagare (dB)
M = limita de fading (estompare); fie este calculată, fie este luată din date empirice

Figura 3.33 Nivele de putere a semnalului

Un canal de comunicații se spune că este limitat în legătură atunci când pierderile asociate
canalului fac ca puterea asociată semnalului incident la receptor să fie sub minimul necesar pentru
receptor pentru a demodula corect semnalul transmis. În practică operarea într-un spectru de licențe
nelicențiat nu asigură calitatea serviciului, în opoziție cu operarea într-un spectru licențiat, pentru care
s-a plătit o taxă pentru accesul exclusiv la acea porțiune de spectru. De obicei un dispozitiv care
funcționează într-o bandă nelicențiată este mai probabil să fie afectat de interferență datorită celorlalți
utilizatori ai spectrului de frecvența decât de bugetul de legătură.
Un scenariu tipic are în vedere câteva dispozitive aflate în vecinătate încercând în același
moment de timp să acceseze aceeași bandă de frecvențe pentru a transmite. În timp ce sunt mai multe
modalități de atenuare a efectelor interferenței care pot fi implementate fie prin intermediul
reglementării (cum ar fi limitarea ciclului de funcționare al emițătorului) sau prin mecanisme (cum
ar fi CSMA/CSMA-CA); prin natura nepredictibilă a interferențelor evaluarea canalului de la
emițător poate să nu coincidă cu condițiile canalului de la receptor și transmisia să fie blocată, cu
toate că pentru dispozitivul care transmite, transmisia pare să poată avea loc. Pentru a evita
interferența sistemelor care folosesc transmisii de tip bandă îngustă se implementează frecvent
înclinarea frecvenței (frequency hopping) pentru a evita o operație repetată pe același canal sau
frecvență. Această tehnică este folosită de sistemele de bandă îngustă pentru a atenua efectele căilor
multiple de transmisie. Cu toate acestea, reglementările în vigoare spun că schimbarea de frecvență
trebuie să fie pseudo-aleatoare. Acest tip de schimbare poate face ca transmițătorul sau receptorul să
facă un salt de frecvența pe un canal deja ocupat sau un alt dispozitiv să facă trecerea simultan pe
același canal.
58
Cerința de salt a frecvenței duce la o redundanța a pachetelor. Pentru ca receptorul să fie sigur
că mesajul i se adresează, transmițătorul va transmite din nou antetul mesajului, cu toate că
receptoarele moderne au nevoie doar de un mic preambul pentru sincronizare. În plus, în majoritatea
sistemelor receptorul rămâne doar pe un canal pentru câteva milisecunde, pentru a minimiza riscul de
interferență pe canal. Pentru o transmisie cu rată mică de transfer de date, raportul dintre numărul de
octeți utili și numărul total de octeți este destul de mic. Orice pierdere de sincronizare între
transmițător și receptor va necesita ca dispozitivele să treacă printr-o perioadă de redescoperire și
sincronizare.

Semnalele de tip bandă îngustă se vor folosi de o putere mai mare concentrată într-o lățime
de bandă mai mică și de saltul de frecvență pentru a transmite într-un spectru de frecvențe unde
coexistă și semnale de tip spectru împrăștiat. Pentru ca puterea folosită să fie necesară, sistemele de
tip bandă îngustă vor utiliza mai multă energie. Datorită unor schimbări recente de reguli în ceea ce
privește transmisia în benzile libere de frecvențe din Statele Unite, se permite acum dispozitivelor de
tip bandă împrăștiată să transmită la o putere semnificativ mai mare în timp ce se vor încadra în
continuare în limitele de densitate spectrală de putere. Profitând de această actualizare a
regulamentelor, un semnal de bandă largă (wideband) modulat LoRa cu lățime de bandă 500 kHz de
6 dB poate transmite până la +27 dBm, aproape de limita de +30 dBm permisă pentru semnalele de
bandă îngustă (narrowband), acest lucru fiind posibil fără restricții de timp de staționare a canalului.
După cum se poate observa și în figura de mai jos, la semnalele de tip bandă largă nu sunt restricții
în ceea ce privește timpul de staționare în respectiva bandă, pe când semnalele de tip bandă îngustă
au timp de staționare în bandă limitat.

Figura 3.34 Semnalul narrowband vs. Semnalul wideband


Astfel, la modulația de tip spectru împrăștiat, impactul semnalelor de interferență este redus
de câștigul de proces care este inerent modulației. Aceste semnale de interferență sunt împrăștiate de
procesul de demodulare și pot fi ușor eliminate prin filtrare.
Sistemele cu modulație în frecvență de bandă îngustă nu împrăștie semnalele interferente în
cadrul procesului de demodulare și pot suferi pierderi de pachete în prezența unui semnal de
interferență de tip bandă largă. Desigur că și sistemele cu modulație în frecvență de bandă largă sunt
supuse la interferență, produsă de sisteme cu modulație în frecvență de bandă largă adiacente. Cu
toate acestea, pentru semnale de tip bandă largă adiacente, putem apela la schimbarea factorului de
împrăștiere al semnalelor sau de schimbarea secvenței (chirp). În acest fel cel de al doilea semnal va
apărea ca zgomot și prin urmare va fi ignorat. Durata de transmisie în aer a unui semnal de tip bandă
largă poate fi mult mai lungă decât a unui semnal de bandă îngustă, așa că ne putem aștepta că mai
59
multe semnale bandă îngustă să fie interferente cu un singur semnal de tip bandă largă. Însă în
domeniul timp, interferența produsă de semnalul de bandă îngustă este mică comparativă cu perioada
semnalului de bandă largă.

Figura 3.35 Perioada unui simbol LoRa

Datorită redundanței prezente în modulațiile de tip spectru împrăștiat, fiecare bit de date este
răspândit în mai multe chipuri, modulația fiind relativ rezistentă la mecanismul de interferență care
apare ca impulsuri de scurtă durată. Modulația LoRa poate, de exemplu, să tolereze interferența de
putere arbitrară pe durata a 30 % din perioada unui simbol cu o degradare a sensibilității mai mică de
6 dB. Una dintre concepțiile greșite privind utilizarea modulației de tip bandă largă aduce în discuție
ineficiența spectrală, comparativ cu modulația bandă îngustă. Cu toate acestea putem face o
comparație între LoRa și FSK (frequency shift keying). Dacă presupunem că avem disponibilă o
lățime de bandă de 125 kHz, apoi presupunem că în această lățime de bandă avem 12 semnale de tip
bandă îngustă cu o rată a biților de 1.2 kb/s, atunci putem calcula teoretic capacitatea canalului.

Mod Rată de biți echivalentă (kb/s) Sensibilitate (dBm) Δ (dB)


FSK 1,2 – 122 –
LoRa SF = 12 0,293 –137 +15
LoRa SF = 11 0,537 –134,5 +12,5
LoRa SF = 10 0,976 –132 +10
LoRa SF = 9 1757 –129 +7
LoRa SF = 8 3125 –126 +4
LoRa SF = 7 5468 –123 +1
LoRa SF = 6 9375 –118 –3
Tabel 3.12 Comparația bugetului de legătură între LoRa și FSK
CapacitateaFSK = 12 ∗ 1.2 kb/s = 14.4 kb/s

Dacă luăm în considerare același spectru disponibil ca un singur canal de 125 kHz și folosind
avantajul factorilor de difuzare ortogonali capacitatea echivalentă a canalului este:

CapacitateaLoRa = 1 ∗ (SF12 + SF11 + SF10 + SF9 + SF8 + SF7 + SF6)


= 1 ∗ (293 + 537 + 976 + 1757 + 3125 + 5463 + 9375)b/s = 21,531 kb/s

60
Astfel, se poate observă că implementarea modulației LoRa asigură o capacitate totală a
canalului de 21,5 kb/s. Aceasta este o creștere a capacității canalului de aproape 50% în comparație
cu FSK.

3.4.1.4. Structura pachetelor LoRA

Pachetele LoRa sunt formate din trei componente:


• Preambul
• Antet (opțional)
• Încărcătura de date

Modemurile LoRa utilizează două formate pentru pachete: format implicit și format explicit.
Pachetul explicit conține un antet scurt care conține informații despre numărul de octeți, rata de codare
și dacă este utilizat sau nu CRC (cyclic redundancy check) în pachet. Pachetul are formatul prezentat
mai jos:

Figura 3.36 Structura pachetului LoRa


Preambulul este folosit pentru a sincroniza receptorul cu fluxul de date de intrare. Implicit
pachetul este configurat cu o secvență de 12 simboluri. Această secvență este programabilă, astfel
încât lungimea preambulului poate fi extinsă. Cu toate acestea secvența minimă pentru sincronizare
este de 12 simboluri. Lungimea preambulului poate fi modificată prin setarea registrului
PreambleLength cu valori cuprinse între 6 și 65535. Dând o lungime posibilă a preambulului de 6+4
până la 65535+4 simboluri, cele 4 simboluri fiind fixate și nu se pot modifică prin intermediul
software.
Receptorul efectuează un proces de detectare a preambulului care repornește periodic. Din
acest motiv lungimea preambulului trebuie să fie setată și la receptor și la emițător identic. În cazul
în care lungimea preambulului nu este cunoscută sau poate varia, lungimea maximă a preambulului
trebuie programată pe partea receptorului.

În funcție de modul de funcționare ales, sunt disponibile două tipuri de antet. Tipul antetului
este selectat de către bitul “ImplicitHeaderModeOn” care se află în registrul “RegModemConfig1”.
• Modul de antet explicit. Acesta este modul implicit de funcționare. Aici antetul va
furniza următoarele informații despre pachet: lungime încărcăturii în octeți, rata de
corecție a erorilor, dacă avem sau nu prezent un cod ciclic de redundanță de 16 biți
folosit pentru încărcătură, acest cod este doar pentru detecția erorilor. Valoarea
maximă pentru rata de corecție a erorilor este de 4/8, deci dintr-un total de 8 biți, 4 biți
vor fi biți de dat, 4 biți vor fi folosiți pentru redundanță. Antetul are propriul cod de
verificare a erorilor, pentru ca un receptor să poată ignora un pachet cu antet corupt.

61
• Modul de antet implicit. În anumite scenarii unde sarcina utilă, rata de codare și
prezența codurilor de detecție a erorilor sunt cunoscute în avans, este avantajos să
folosim modul de antet implicit pentru reducerea timpului de transmisie și reducere a
dimensiunii pachetului. În acest mod antetul este eliminat din pachet. În cazul acesta
trebuie configurat manual la receptor și la transmițător lungimea sarcinii utile, rata de
codare a erorilor și prezența sau absența codului detector de erori. Modul implicit
poate fi folosit doar cu factorul de împrăștiere SF = 6.

Încărcătura de date este un câmp de lungime variabilă care conține datele reale codificate la
rata de eroare, fie așa cum se specifică în antetul din modul explicit, fie în setările de înregistrare în
modul implicit. Se poate adăuga un CRC opțional.

Modulația LoRa este o implementare simplă pentru nivelul fizic care asigura un buget de
legături semnificativ pentru legături îmbunătățite față de modulația convențională de bandă îngustă.
În plus selectivitatea oferită de modificarea factorului de împrăștiere și protecția crescută la
interferență ne permit să obținem distanțe mai mari de transmisie chiar și în medii mai puțin
prietenoase. Folosirea factorilor de împrăștiere ortogonali permit modulației să îmbunătățească
eficiența spectrală a rețelei, deoarece pachetele cu factori diferiți de împrăștiere pot coexista în aceeași
bandă spectrală în același moment de timp.

3.4.2. LoRaWAN [12]

3.4.2.1. Noțiuni generale


După cum am vorbit în capitolul precedent, LoRa se referă la modulația de tip spectru
împrăștiat, iar LoRa MAC se referă la nivelul legătură de date corespondent cu stiva OSI (open
systems interconnection). LoRaWAN se referă la protocolul care este construit peste nivelul MAC
pentru a face sistemul mai scalabil.

Figura 3.37 Stiva OSI


Rețelele LoRaWAN sunt de obicei construite într-o topologie stea în care concentratoarele
(gateways) transportă mesajele între nodurile rețelei (end devices) și un server de rețea, apoi serverul
de rețea rutează respectivele pachete la serverul de aplicație care va lua decizii în funcție de pachetele

62
primite. Pentru a asigura transmisiile radio, protocolul LoRaWAN se bazează pe criptografia
simetrică folosind chei de sesiune derivate din cheile rădăcină ale dispozitivului, acestea fiind 2 chei
asimetrice, generate de producătorul dispozitivului. Toate comunicațiile sunt de tip bidirecțional, deși
comunicarea majoritară este de la nodurile rețelei (senzori, actuatori etc.) către concentratoare.
Comunicația între noduri și concentratoare este împărțită în mai multe canale de diferite frecvențe
care folosesc diferite rate de transmisie. Selectarea ratei de transmisie este un compromis între
distanța necesară pentru comunicație și durata mesajului. Comunicații cu rate de date diferite nu
interferează unele cu altele.
Ratele de transmisie a datelor în LoRa variază de la 0.3kbps până la 50kbps. Pentru a
maximiza durata bateriilor nodurilor rețelei cât și capacitatea generală a rețelei, rețeaua LoRa poate
gestiona rata de transmisie a datelor și parametrii comunicației de radiofrecvență ale nodurilor
folosind o schemă de tip rată de transmisie adaptivă (adaptive data rate). Un dispozitiv poate folosi
orice canal disponibil, în orice moment de timp, folosind orice rată de transmisie a datelor, atât timp
cât regulile următoare sunt respectate:
• Dispozitivul final (nodul) schimbă canalul într-o modalitate pseudo-aleatoare pentru
fiecare transmisie, astfel diversitatea de frecvența face sistemul mai rezistent la
interferențe.
• Dispozitivul respectă ciclul de transmisie (duty cycle) reglementat în banda de
frecvențe pe care o folosește.
• Dispozitivul respectă durata maximă de transmisie (timp de așteptare) în banda locală
și în funcție de reglementările local.

3.4.2.2. Clase LoraWAN

Toate dispozitivele LoRaWAN trebuie să implementeze cel puțin funcționalitatea de clasa A.


În plus ele mai pot implementa și funcționalități de clasele B și C, dar indiferent de caz toate
dispozitivele trebuie să implementeze funcționalitatea de clasa A.

Figura 3.38 LoRa în stiva OSI


Dispozitivele de clasa A permit o comunicație bidirecțională prin care fiecare dispozitiv
periferic (nod) beneficiază de o fereastră de transmisie către concentrator, urmată de două ferestre
scurte de ascultare pentru mesaje venite de la concentrator. Transmisia nodului este bazată pe nevoile
sale de transmisie cu o mică variație de timp aleatoare (ALOHA – tipuri de protocoale). Clasa A are
un consum scăzut de energie (comparativ cu clasele B și C) și este potrivită pentru aplicații care
necesită comunicații predominant dinspre dispozitivele finale spre concentratoare (uplink).
63
Comunicația în cealaltă direcție, dinspre concentratoare spre dispozitivele finale, poate avea loc doar
după ce a avut loc mesajul de tip uplink. Dacă este nevoie să se transmită un mesaj nodurilor rețelei,
acesta va fi reprogramat și transmis doar după ce s-a primit un mesaj de tip uplink.
Dispozitivele de clasa B permit mai multe sloturi de primire a mesajelor dinspre
concentratoare spre periferia rețelei, ele deschizând ferestre de recepție la ore programate pentru
nodurile rețelei. Pentru ca nodurile să își deschidă fereastră de recepție la ora programată, primește
de la concentrator un mesaj special de sincronizare.
Dispozitivele terminale de clasa C au ferestre de recepționare în mod continuu, fiind închise
numai atunci când transmit. Dispozitivul terminal de clasa C va utiliza mai multă energie decât clasa
A sau clasa B, dar oferă cea mai mică latentă pentru comunicație de la concentratoare spre periferia
rețelei.

3.4.2.3. Rețele
Rețeaua de tip stea. Rețeaua de tip stea este un tip de rețea ușor de implementat și este foarte
comună pentru dispozitivele care au constrângeri din punct de vedere al energiei consumate. De
obicei un punct central acționează ca concentrator pentru tot traficul generat de rețea. Tot traficul va
fi rutat de către concentrator. O rețea de tip stea minimizează traficul prin rețea. Pentru o rețea care
nu este constrânsă de numărul de linkuri este nevoie doar de 3 dispozitive și două legături pentru a
stabili o comunicație între oricare două dispozitive. În plus nodurile nu sunt conectate decât la
concentrator, fără a fi legate la alte noduri. De aici și ușurința de a le înlocui.
Centralizarea ajută și la securitate sporită, fiind posibilă scanarea pachetelor dintr-un loc
central. Un mare dezavantaj este faptul că nu avem redundanță în cazul defecțiunii concentratorului.
Rețeaua de tip plasă. În rețeaua de tip plasă, datele se propagă prin intermediul tuturor
nodurilor. Acest tip de rețea este cu tip de inundare deoarece fiecare mesaj ajunge la fiecare dispozitiv,
indiferent de rutare sau de destinația finală. Avantajul acestui tip de configurație îl reprezintă
capacitatea rețelei de a se vindeca și reconfigura în urma defectării unui dispozitiv sau grup de
dispozitive. Un dezavantaj este complexitatea relativ mai mare față de rețelele stea și traficul crescut
față de rețelele stea. De asemenea, un trafic crescut înseamnă și un consum de energie mai mare, așa
că acest tip de rețea nu este implementat în cazul în care rețeaua va avea constrângeri severe din punct
de vedere energetic.

3.4.3. Modul LoRaWAN SX127X


3.4.3.1. Regiștrii
Modulele LoRa SX1276/77/78/79 au în componentă trei tipuri de interfețe digitale: registre
cu configurație statică, registre de stare și o memorie tampon de tip primul-intrat primul-ieșit. Toate
pot fi accesate prin interfața SPI.
• Regiștrii de configurație sunt accesați prin intermediul interfeței SPI. Regiștrii pot fi
citiți din orice mod de funcționare care include și modul SLEEP, însă pot fi scriși doar
în modul SLEEP și STANDBY.
• Regiștrii de stare furnizează informații de stare în timpul funcționarii receptorului.
• Memoria tampon FIFO. Chipul LoRa SX1276/77/78/79 vine echipat cu 256 octeți
RAM memorie tampon care poate fi accesată doar în modul de funcționare LoRa.
Această memorie denumită memorie tampon de tip primul-intrat primul-ieșit este
complet accesibilă utilizatorului și permit accesul la mesajele trimise, primite și la
datele de configurație. Orice acces la memoria tampon FIFO se face prin interfața SPI.
Această memorie tampon poate fi citită în toate modurile de operare, de aici făcând
excepție modul SLEEP și atunci când se stochează conținutul ultimului mesaj primit.

64
Figura 3.39 Memoria SX127X
Datorită configurației cu două porturi a memoriei, este posibil să stocăm simultan atât
pachetele care trebuie transmise cât și pachetele primite în memoria tampon. Registrul
“RegFifoTxBaseAddr” specifică punctul în memorie unde informația care urmează să fie transmisă
este stocată. Similar pentru operația de recepție registrul “RegFifoRxBaseAddr” ne indică locul din
memorie unde informația va fi stocată în cazul recepției.
Inițial dispozitivul este configurat la pornire astfel încât jumătate din memoria disponibilă să
fie dedicată recepției (“RegFifoRxBaseAddr” inițializat la adresa 0x00) iar cealaltă jumătate este
dedicată pentru transmisie (“RegFifoTxBaseAddr” inițializat la adresa 0x80). Totuși adresele de bază
pentru recepție și transmisie sunt configurabile și pot trimite unde dorește programatorul în memoria
de 256 octeți. Pentru a exploata dimensiunea maximă a memoriei tampon în modul de recepție, putem
seta adresa la care trimit cele două registre “RegFifoTxBaseAddr” și “RegFifoRxBaseAddr” în partea
inferioară a memoriei (0x00). Conținutul memoriei tampon este șters atunci când dispozitivul este
pus în modul SLEEP, prin urmare accesul la memoria tampon nu este posibilă din modul SLEEP. Cu
toate acestea la comutarea între celelalte moduri conținut memoriei tampon este păstrat, astfel încât
un pachet recepționat să poată fi retransmis cu manipulare minimă a datelor din partea controlerului.
Memoria tampon se eliberează doar atunci când suprascriem datele aflate la o anumită locație
de memorie. Locațiile din memoria tampon care trebuie scrisă sau citită prin intermediul interfeței
SPI sunt definite de indicatorul (pointer) “RegFifoAddrPtr”. Deci înainte de orice operație de scriere
sau citire trebuie inițializat acest pointer cu adresa corespunzătoare. La scrierea sau citirea în memoria
tampon, pointerul de adresă se va incrementa automat.

Registrul “RegRxNbBytes” definește dimensiunea locului din memorie care trebuie scris în
cazul unei operații de recepție care s-a realizat cu succes. Registrul “RegPayloadLength” definește
dimensiunea locului din memorie care trebuie utilizat în cazul unei operații de transmisie. În modul
de operare cu antet implicit registrul “RegRxNbBytes” nu este utilizat deoarece numărul de octeți al
pachetului recepționat este cunoscut în avans. În celălalt mod de operare, modul cu antet explicit,
dimensiunea zonei din memoria tampon este setată la lungimea zonei de informație utilă, specificată
în antetul pachetului. Registrul “RegFifoRxCurrentAddr” indică locația ultimului pachet primit în
memoria tampon, astfel încât ultimul pachet primit poate fi citit cu ușurință utilizând pointerul
“RegFifoAddrPtr” care pointează către acest registru. Foarte important este că toate datele primite
vor fi scrise în memoria tampon chiar dacă codul de detecție al erorilor indică conținutul pachetului
ca fiind eronat. Acest lucru permite prelucrarea ulterioară a utilizatorului a pachetelor cu erori. De

65
asemenea, dacă dimensiunea pachetului recepționat depășește zona din memorie dedicată recepției,
atunci pachetul va fi recepționat și va suprascrie o parte din zona de memorie dedicată transmisiei.

Întreruperi. Două registre sunt utilizate pentru a controla întreruperile atunci când folosim
modulul LoRa:
• registrul “RegIrqFlagsMask” utilizat pentru a masca întreruperile. În acest registru,
fiecare bit corespunde unei întreruperi iar setarea unui bit pe 1 logic indică faptul că
întreruperea va fi mascată. În mod implicit toate întreruperile sunt disponibile.
• registrul “RegIrqFlags” indică ce tip de întrerupere a fost declanșată. În acest registru,
un bit cu valoarea 1 înseamnă declanșarea unei întreruperi. După servirea întreruperii,
bitul trebuie setat cu valoarea 0.

3.4.3.2. Moduri de operare ale modemurilor LoRa


Modurile de operare LoRa sunt activate pe modem setând bitul “LongRangeMode” din
registrul “RegOpMode”. În funcție de modul selectat avem următoarele cazuri:
• SLEEP – Mod economisire energie. În acest mod sunt accesibile doar registrele de
configurație prin intermediul interfeței SPI (serial peripheral interface). Doar în acest
mod ne este permis să schimbăm între modurile FSK/OOK și modul LoRa.
• STANBY – Oscilatorul și blocurile LoRa sunt oprite.
• FSTX – Acesta este un mod de sinteză a frecvenței pentru transmisie.
• FSRX – Acesta este un mod de sinteză a frecvenței pentru recepție.
• TX – Când suntem în acest mod chipul SX1276/77/78/79 activează celelalte blocuri
necesare pentru a transmite, pornește amplificatorul de putere și se întoarce la modul
de funcționare STANDBY.
• RXCONTINUOS - Când suntem în acest mod chipul SX1276/77/78/79 activează
celelalte blocuri necesare pentru a recepționa date. Starea aceasta se schimbă doar când
sunt modificați regiștrii pentru a schimba starea de funcționare.
• RXSINGLE - Când suntem în acest mod chipul SX1276/77/78/79 activează celelalte
blocuri necesare pentru a recepționa. După recepționarea primului pachet se întoarce
la modul de funcționare STANDBY.
• CAD - În acest mod chipul va verifica un canal introdus pentru a detecta un preambul
de mesaj LoRa.

Este posibil să accesăm orice mod din alt mod prin modificarea valorii din registrul
“RegOpMode”.
Erori în setarea frecvenței. Chipul SX1276/77/78/79 își ia frecvența centrală de la un
oscilator care are o precizie limitată. Erorile date de generarea eronată a frecvenței de referință vor
afecta frecvența centrală utilizată în cazul transmisiei și frecvența pe care se face recepția. În modul
LoRa este posibil să măsurăm diferența de frecvența dintre frecvența centrală pe care ascultă un
receptor și frecvența centrală a unui mesaj de tip LoRa.
Mesajele de legătură uplink. Aceste mesaje sunt transmise de nodurile rețelei către serverul
de rețea, prin intermediul concentratoarelor (unul sau mai multe) în funcție de câte ascultă frecvența
respectivă și respectiva rată de transmisie.
Modul de recepție continuă. În acest mod, modemul scanează canalul încontinuu după un
preambul. De fiecare dată când se detectează un preambul, pachetul va fi memorat, apoi modemul va
scana în continuare pentru apariția altui preambul. Dacă lungimea preambulului depășește valoarea
anticipat stabilită de registrele “RegPreambleMsb” și “RegPreambleLsb” (măsurate în perioade de
symbol), pachetul nu va fi recepționat. În schimb se va reîncepe ascultarea canalului. În cazul în care
s-a detectat un preambul mai lung nu se declanșează nicio întrerupere. În modul de recepție continuă
66
nu apare întreruperea “RxTimeout” (apare un alt semnal de întrerupere), spre deosebire de modul
recepție singulară, în care după apariția întreruperii chipul va trece din starea STANDBY în mod
automat.
Este de asemenea important de precizat că octeții recepționați sunt scriși în memoria tampon
în ordinea în care au fost recepționați. Asta înseamnă că primul octet al unui nou pachet va fi scris
după ultimul bit al pachetului precedent. Pointerul Rx nu este reinițializat cât timp lucrăm în modul
recepție continuă, prin urmare este datoria programatorului să se asigure că memoria tampon nu este
niciodată plină.
În modul de recepție continuă secvență prelucrării pachetelor este următoarea:
1. Din modul SLEEP sau STANDBY se selectează modul RXCONT;
2. La primirea unui mesaj cu un cod valid de detecție a erorilor este activată întreruperea
RxDone. Modulul rămâne în modul RxCONT așteptând următorul pachet LoRa;
3. Trebuie citită valoarea fanionului “PayloadCrcError” pentru a verifica integritatea
pachetului;
4. Dacă conținutul mesajului a fost validat de codul detector de erori, putem citi memoria
tampon;

Repetăm pașii 2, 3, 4 până când dorim să schimbăm modul de funcționare.


Este forte important de menționat ca în modul continuu regiștrii conțin informații doar despre
ultimul pachet recepționat.

Mesajele de tip ascendente. Sunt mesajele care vin dinspre dispozitivele aflate la periferia
rețelei (senzori, actuatori) și sunt trimise prin intermediul concentratoarelor către serverele de
aplicație.

Încărcătură
Preambul Antet CRC Antet CRC
utilă
Figura 3.40 Structura uni pachet ascendent
Câmpurile Antet, CRC Antet și CRC sunt introduse de către modulul radio când utilizăm
modul explicit.

Mesajele de tip descendent. Sunt mesajele transmise de serverele de aplicație către unul sau
mai multe noduri de rețea și sunt transportate cu ajutorul concentratoarelor.

Încărcătură
Preambul Antet CRC Antet
utilă
Figura 3.41 Structura unui pachet descendent
Fereastra de recepție. După fiecare mesaj ascendent, fiecare nod trebuie să deschidă 2
ferestre de recepție a mesajelor. Momentul de referință pentru începerea ascultării canalului îl
reprezintă sfârșitul transmisiei mesajului ascendent. Considerăm cele două ferestre de ascultare: RX1
și RX2. Prima fereastră RX1 utilizează aceeași frecvență și aceeași rată de transmisie că și mesajul
ascendent. Se deschide prima fereastră de recepție după așteptarea unui interval de timp
RECEIVE_DELAY1 de la terminarea transmisiei. A doua fereastră RX2 are o frecvență și o rată a
datelor configurabilă. Ascultarea canalului începe după RECEIVE_DELAY2 de la terminarea
transmisiei. Durata ferestrei de recepție trebuie să fie evident cel puțin egală cu perioada necesară
nodului să detecteze un preambul al pachetului.

67
Activitatea modemului în timpul ferestrelor de primire. Dacă un preambul este identificat
în timpul unei perioade de recepție, receptorul va sta activat până când se va termină demodularea
pachetului.
Avem următoarele condiții:
1. Mesajul este destinat acestui nod;
2. Pachetul a fost detectat și demodulat;
3. Integritatea pachetului se verifică.
Dacă aceste condiții sunt validate, atunci dispozitivul trebuie să nu mai deschidă a două
fereastră de recepție. Un nod al rețelei nu trebuie să transmită alt mesaj înainte să primească un mesaj
descendent, sau poate transmite doar după ce au trecut ambele ferestre de așteptare. Mesajele de date
sunt utilizate pentru a transfera atât comenzi MAC, cât și date de aplicație, care pot să fie combinate
într-un singur mesaj. Comenzile MAC se află în câmpul Antet. Conținutul MAC are câmpurile: antet
MAC și opțional mai poate conține câmpurile: FPort și FRMPayload.

Antet

1 octet 7 octeți 4 octeți


Antet MAC Conținut MAC CRC

FHDR Fport FRMPayload

DevAddr FCtrl FCnt FOpts


Figura 3.42 Structura câmpului Antet

Tipurile de mesaje MAC. Antetul MAC conține un câmp care se numește MType.
MType este un câmp de 3 biți care descriu 8 mesaje diferite MAC: Cerere alăturare, Acceptare
alăturare, Flux ascendent fără confirmare, Flux descendent fără confirmare, Flux ascendent cu
confirmare, Flux descendent cu confirmare, Menținere alăturare și Proprietar.

000 Cerere alăturare


001 Acceptare alăturare
010 Flux ascendent fără confirmare
011 Flux descendent fără confirmare
100 Flux ascendent cu confirmare
101 Flux descendent cu confirmare
110 Menținere alăturare
111 Proprietar
Tabel 3.13 Tipuri de mesaje MType

Dacă în antetul unui mesaj, câmpul MType conține valoarea 100 sau 101 (“confirmed data”
activat) înseamnă că receptorul va trebui să confirme primirea mesajului, pe când dacă câmpul MType
conține valoarea 010 sau 011 (“unconfirmed data”) receptorul nu trebuie să confirme primirea

68
mesajului. Valoarea 111 care semnifică “proprietary”, ceea ce înseamnă că există libertatea pentru a
implementa noi funcții.

Antetul MAC. Antetul MAC conține adresa dispozitivului (DevAddr), un octet pentru
controlul pachetului (FCtrl) și opțional poate cuprinde opțiuni pentru pachet (FOpts) până la 15 octeti
pentru diferite funcții MAC. Dacă FOpts este prezent, atunci acest câmp trebuie criptat.

7 6 5 4 [3…0]
ADR ADRACKReq ACK Class B FOptsLen
Tabel 3.14 Conținutul FCtrl pentru mesaje ascendente

7 6 5 4 [3…0]
ADR RFU ACK FPending FOptsLen
Tabel 3.15 Conținutul FCtrl pentru mesaje descendente

Controlul vitezei datelor utilizând antetul (ADR, ADRACKReq în FCtrl)

Rețelele LoRa permit dispozitivelor să aleagă individual oricare dintre ratele de transmisie
disponibile. Această caracteristică poartă numele de rată de date adaptivă (adaptive data rate – ADR)
și permite adaptarea și optimizarea ratei de transmisie și puterea utilizată pentru transmisie. Această
caracteristică de control ADR nu este disponibilă atunci când atenuarea canalului radio se schimbă
rapid și nu se oprește. Acest control se poate face și centralizat folosindu-se de serverul de aplicație
sau implementat în fiecare nod fără avea un control centralizat. În cazul în care nu este posibil
controlul centralizat este indicat să se folosească rate de transmisie diferite pentru fiecare dispozitiv,
pentru o ocupare mai eficientă a benzii de frecvență. Trebuie micșorat cât mai mult timpul în aer al
pachetelor pentru a evita coliziunile. Dacă pentru mesajele ascendente bitul ADR este setat, atunci
serverul de aplicație va controla rata de transmisie a dispozitivelor și puterea de transmisie folosită
utilizând comenzile MAC corespunzătoare. Dacă bitul ADR nu este setat, atunci serverul de aplicație
nu va încerca să controleze rata de transmisie sau puterea de transmisie, indiferent de calitatea
semnalului recepționat. Cu toate acestea se pot transmite, indiferent de valoarea bitului ADR, mesaje
pentru a dicta frecvența centrală folosită de dispozitivul care transmite. Dacă pentru mesajele
descendente bitul ADR este setat, atunci dispozitivele periferice sunt informate că serverul de
aplicație este în măsură pentru a controla parametrii rețelei. În acest caz serverul de control al rețelei
poate modifica pe dispozitivele periferice valoarea bitului ADR. În cazul în care pentru mesajele
descendente bitul nu este setat, dispozitivele periferice sunt anunțate că datorită schimbărilor rapide
în atenuarea canalului, rețeaua nu poate determina valorile necesare pentru o transmisie optimă. În
acest caz dispozitivele periferice pot folosi una din următoarele două strategii:
• Modifică valoarea bitului ADR și folosește propria strategie pentru a configura
parametrii transmisiei;
• Ignoră mesajul și păstrează configurația cea mai recentă.
Bitul ADR din configurația dispozitivului poate fi setat și dezactivat de către serverul de
control al rețelei sau de dispozitiv însuși. În orice caz, de câte ori este posibil, bitul trebuie setat pentru
a mări durata de viață a bateriei și a optimiza capacitatea rețelei.
Valoare implicită a puterii de transmisie este valoarea maximă permisă de reglementările
regionale și de capacitățile dispozitivului. Dispozitivul ar trebui să utilizeze acest nivel de putere până
în momentul când rețeaua cere micșorarea acestuia prin intermediul comenzii MAC “LinkADRReq”.
Dacă rata de transmisie a unui dispozitiv este setată prin intermediul serverului de control al rețelei
și este diferită de cea implicită (poate fi mai mare sau mai mică), dispozitivul trebuie să valideze că
rețeaua încă primește mesajele. Pentru a valida folosește un mecanism bazat pe un contor

69
ADR_ACK_CNT. Dispozitivul mărește acest contor după fiecare transmisie și resetează contorul cu
valoarea 0 la fiecare mesaj descendent.
Dispozitivul are și un registru ADR_ACK_LIMIT care specifică numărul de mesaje care pot
fi trimise cu rata de transmisie diferită de cea implicită fără a fi nevoie de o nouă validare din partea
rețelei. În momentul când ADR_ACK_CNT ≥ ADR_ACK_LIMIT, dispozitivul nu a primit validare
din partea rețelei pentru rata de transmisie folosită, iar următoarele pachete vor avea setat bitul
ADRACKRe.

3.4.3.3. Configurația regiștrilor pentru modificarea parametrilor LoRa

Antet explicit. În cazul antetului explicit prezența codului de detecție a erorilor la sfârșitul
sarcinii utile este selectat doar pe partea transmițătorului prin intermediul bitului “RxPayloadCrcOn”
pe care îl găsim în registrul “RegModemConfig1”.
Pe partea receptorului, bitul “RxPayloadCrcOn” din registrul “RegModemConfig1” nu este
utilizat. Odată ce pachetul a fost recepționat, utilizatorul trebuie să verifice bitul “CrcOnPayload”
aflat în registrul “RegHopChannel”:
• Dacă bitul are valoarea 1 atunci utilizatorul trebuie să verifice fanionul de întrerupere
“PayloadCrcError” pentru a fi sigur că pachetul a fost primit fără erori.
• Dacă bitul “CrcOnPayload” este setat cu valoarea 0 înseamnă că nu există cod de
detecție al erorilor și astfel întreruperea dată de “PayloadCrcError” nu se declanșează
chiar dacă pachetul conține erori.

Antet Explicit Transmițător Receptor Stare CRC


0 0 CRC nu este verificat
Valoarea bitului 0 1 CRC nu este verificat
“RxPayloadCrcOn” 1 0 CRC este verificat
1 1 CRC este verificat
Tabel 3.16 CRC pentru diferite stări ale bitului RxPayloadCrcOn – cazul antetului explicit
Antet implicit. În modul antet implicit este necesar să setați bitul “RxPayloadCrcOn” în
registrul “RegModemConfig1” și pe transmițător și pe receptor.

Antet Implicit Transmițător Receptor Stare CRC


0 0 CRC nu este verificat
Valoarea bitului 0 1 CRC este întotdeauna greșit
“RxPayloadCrcOn” 1 0 CRC nu este verificat
1 1 CRC este verificat
Tabel 3.17 CRC pentru diferite stări ale bitului RxPayloadCrcOn – cazul antetului implicit
Optimizarea ratei scăzute a datelor. Având în vedere că folosind factori de împrăștiere cu
valori ridicate (SF = 10, SF = 11, SF = 12), pachetul va petrece mai mult timp în aer, avem opțiunea
de a îmbunătăți rezistența semnalului la variațiile de frecvența din momentul transmisiei și recepției
semnalului. Bitul “LowDataRateOptimize” optimizează pachetele LoRa pentru transmisiile lente de
date. Utilizarea sa este obligatorie atunci când durata simbolului depășește 16 milisecunde. Atât
receptorul cât și emițătorul trebuie să aibă aceeași setare pentru acest bit.
Sarcina utilă. Este un câmp cu lungime variabilă care conține datele utile codificate la rata de
eroare, așa cum este precizat în antetul explicit sau în setările registrului pentru modul implicit. Un
cod de detecție al erorilor mai poate fi atașat doar sarcinii utile. Această sarcina utilă se va afla după
recepția pachetului într-o zona tampon de tip primul–intrat primul–ieșit (first-in first-out).
70
Raspberry Pi 3 Model B+
4.1. Descrierea hardware

Raspberry Pi este o serie de computere cu dimensiuni mici, dezvoltate în Regatul Unit de către
Fundația Raspberry Pi pentru a promova predarea informaticii în școli și în țările în curs de dezvoltare.
Mai multe generații de Raspberry PI au fost comercializate până în prezent. Viteza procesorului
variază de la 700 MHz la 1,4 GHz pentru Pi 3 Model B+; memoria variază de la 256 MB la 1 GB de
RAM. Plăcutele pot avea de la o ieșire la patru ieșiri USB. Pentru ieșire video, avem un port HDMI,
de asemenea putem avea și ieșire de sunet cu ajutorului portului standard de 3,5 mm jack pentru ieșire
audio. De asemenea acest microcalculator dispune și de ieșiri programabile care sunt asigurate de un
număr de pini GPIO care acceptă protocoalele obișnuite precum I2C și SPI. [8]

Schemele pinilor de uz general:

Funcție Funcție
GPIO Pin Pin GPIO
secundară secundară
+3.3 V 1 2 +5 V
2 SDA1 (I2C) 3 4 +5 V
3 SCL1 (I2C) 5 6 GND
4 GCLK 7 8 TXD (UART) 14
GND 9 10 RXD (UART) 15
17 GEN0 11 12 GEN1 18
27 GEN2 13 14 GND
22 GEN3 15 16 GEN4 23
+3.3 V 17 18 GEN5 24
10 MOSI (SPI) 19 20 GND
9 MISO (SPI) 21 22 GEN6 25
11 SCLK (SPI) 23 24 CE0_N (SPI) 8
GND 25 26 CE1_N (SPI) 7
(PI 1 Modelele A și B se opresc aici)
EEPROM ID_SD (I2C) 27 28 ID_SC (I2C) EEPROM
5 N/A 29 30 GND
6 N/A 31 32 12
13 N/A 33 34 GND
19 N/A 35 36 N/A 16
26 N/A 37 38 Intrare 20
GND 39 40 Ieșire 21

Tabel 4.1 Schema pinilor de uz general pentru Raspberry Pi A și B


Modelul B rev.2 are de asemenea un pad (numit P5 pe bord si P6 pe schema) de 8 pini ce
oferă acces la o suplimentare de 4 conexiuni GPIO.

71
Funcție Funcție
Funcție PIN PIN Funcție
secundară secundară
N/A 1 2 N/A
GPIO28 GPIO_GEN7 3 4 GPIO_GEN8 GPIO29
GPIO30 GPIO_GEN9 5 6 GPIO_GEN10 GPIO31
N/A GND 7 8 GND N/A

Tabel 4.2 Pini suplimentari pentru versiunea B rev.2


Modelul utilizat în aceasta lucrare este un Raspberry Pi 3 model B+ care reprezintă un
computer de mici dimensiuni și care are toate componentele de bază ale unui computer obișnuit.
Dispune de un procesor quad-core, Wi-Fi [9] și Bluetooth [10].

Figura 4.1 Raspberry Pi 3 Model B+


Pentru a putea interacționa cu alte dispozitive Raspberry Pi dispune de porturi I/O și de 40 de
pini denumiți GPIO (General-Purpose Input/Output). Interacțiunea cu chip-ul Lora se realizează cu
ajutorul SPI (Serial Peripheral Interface bus) o interfață de comunicații alcătuită din 4 cai de
comunicație (4 pini GPIO). Interfața comunică bidirecțional folosind o arhitectură de tip master-slave
cu un singur master. Sunt disponibile mai multe device-uri slave legate la același master cu ajutorul
chip select.

Figura 4.2 Structura SPI [11]

72
SCLK: Serial Clock (ieșire de la master)
MOSI: Master Output Slave Input sau Master Out Slave In (date de la master) MISO: Master
Input Slave Output sau Master In Slave Out (date de la slave)
SS: Slave Select (output de la master în stare de înaltă impedanță în caz de folosire a unui
singur device slave)
SSx: Slave Select (output de la master în stare de înaltă impedanță în caz de folosire a mai
multor device-uri slave)

4.2. Sistemul de operare [14]

Raspbian este un sistem de operare bazat pe versiuni Debian pentru arhitectura ARM (armhf),
adaptat pentru utilizare pe dispozitivele Raspberry Pi. Numele Raspbian reprezintă o combinație
dintre Raspberry și Debian.
Deși este dezvoltat independent de diverși dezvoltatori, Fundația Raspberry Pi își menține
propria versiune recomandată de Raspbian care se poate instala utilizând programul de instalare
NOOBS.
Cea mai recentă versiune se bazează pe Debian Stretch, care îmbunătățește performanțele și
oferă aplicații mai noi comparativ cu versiunea anterioară Jessie. Este, de asemenea, disponibil o
versiune minimă a Raspbian fără desktop - Raspbian Stretch Lite.
Raspbian folosește mediul desktop PIXEL, (Pi Improved Xwindows Environment
Lightweight), care este un mediu desktop LXDE modificat și managerul de ferestre Openbox cu o
temă nouă și câteva alte modificări. Raspbian oferă peste 35000 de pachete software precompilate și
ușor de instalat.

4.3. Date către pagina web

Datele primite de la Senzorul mobil sunt transferate prin Internet către interfața destinată
utilizatorului final, unde sunt procesate de ThingSpeak™ [15] într-o formă grafică pentru a arăta o
evoluție în timp a parametrilor.
ThingSpeak este un serviciu de platformă de analiză IoT care permite agregarea, vizualizarea
și analiza fluxurilor de date live în cloud. ThingSpeak oferă vizualizări instantanee ale datelor postate
de dispozitive în cloud. Există posibilitatea de a executa codul MATLAB în ThingSpeak și se pot
efectua analize online și prelucra datelor pe măsură ce acestea sunt primite de la senzori. Acest
serviciu este adesea folosit pentru a crea prototipuri și a realiza conceptele sistemelor IoT care
necesită analize.
Internetul obiectelor (IoT) descrie o tendință emergentă în care un număr mare de dispozitive
încorporate (lucruri) sunt conectate la Internet. Aceste dispozitive conectate comunică cu oamenii și
alte lucruri și oferă adesea date senzorilor către stocarea în cloud și resursele de cloud computing în
care datele sunt procesate și analizate pentru a obține informații importante. Puterea de calcul cloud
ieftină și conectivitatea sporită a dispozitivelor permit această tendință.
Soluțiile IoT sunt construite pentru multe aplicații verticale, cum ar fi monitorizarea și
controlul mediului, monitorizarea sănătății, monitorizarea flotei de vehicule, monitorizarea și
controlul industrial și automatizarea casei.

73
Figura 4.3 Diagrama de funcționare a unui sistem IoT

În stânga, avem dispozitivele inteligente (“lucrurile” din IoT) care trăiesc la marginea rețelei.
Aceste dispozitive colectează date și includ lucruri precum dispozitive portabile, senzori de
temperatură fără fir, monitoare de ritm cardiac și senzori hidraulici de presiune și mașini de la fabrica.

În mijloc, avem cloud în care datele din multe surse sunt agregate și analizate în timp real,
adesea de către o platformă de analiză IoT concepută în acest scop.

Partea dreaptă a diagramei descrie dezvoltarea algoritmului asociată cu aplicația IoT. Aici un
inginer sau un om de știință al datelor încearcă să obțină o perspectivă asupra datelor colectate
efectuând analize istorice asupra datelor. În acest caz, datele sunt extrase de pe platforma IoT într-un
mediu software desktop pentru a permite inginerului sau omului de știință să creeze algoritmi care,
eventual, pot fi executați în cloud sau pe dispozitivul inteligent în sine.
Un sistem IoT include toate aceste elemente. ThingSpeak se potrivește în partea cloud a
diagramei și oferă o platformă pentru colectarea și analiza rapidă a datelor de la senzorii conectați la
Internet.

Caracteristici cheie ThingSpeak

Unele dintre capabilitățile cheie ale ThingSpeak includ abilitatea de a:


• Configura cu ușurință dispozitivele pentru a trimite date către ThingSpeak utilizând
protocoale IoT populare.
• Vizualiza datele senzorilor în timp real.
• Aduna date la cerere din surse terțe.
• Folosi puterea MATLAB pentru a da sens datelor IoT colectate.
• Rula analiza IoT în mod automat pe baza programărilor sau evenimentelor.
• Proteja și construi sisteme IoT fără a configura servere sau a dezvolta software web.
• Acționați automat asupra datelor și comunica folosind servicii terțe

74
Implementarea hardware și software a sistemului
propus
5.1. Schema electronică a sistemului de achiziție

Sistemul de achiziție este construit în jurul unui microcontroler de tip Atmega164A ce


achiziționează datele de la cei 4 senzori analogici de gaze (MQ-135, MQ-9, MQ-7, MQ-4), un senzor
de temperatură analogic (termistor NTC) și un senzor digital de temperatură și umiditate (DHT11).
Aceste date sunt transmise cu un modul LoRa SX1278 către un nod LoRa cu conexiune la Internet.
Senzorii de gaze sunt conectați la sursa de alimentare de 5V prin intermediul pinilor de VCC
și GND. Pentru conectarea lor la microcontroler se pot utiliza trei metode:
• Se poate folosi doar ieșirea digitală ce ne avertizează dacă concentrația de gaz depășește
un anumit nivel stabilit cu ajutorul unui potențiometru aflat pe modulul de gaz.
• Se poate folosi doar ieșirea analogică pentru a obține o informație cantitativa a
concentrației de gaz. Această metoda necesitând un convertor analog-numeric (ADC) și
o putere de calcul semnificativă pentru un microcontroler clasic.
• Presupune conectarea ambelor ieșiri, atât cea analogica cat si cea digitala, cea analogica
oferind informație cantitativa iar cea digitala oferind un răspuns rapid la creșteri bruște a
concentrației de gaz, putând acționa o alarmă sau o electrovalvă.
Senzorul DHT11 a fost conectat la microcontroler pe portul C pe pinul 1. Pentru a putea
comunica cu acest senzor putea fi folosit orice pin digital al microcontrolerului deoarece acesta
folosește protocolul de comunicare 1-Wire, protocol de comunicare pentru care microcontrolerul nu
are prevăzut niciun periferic dedicat.
Senzorul de temperatură a fost realizat cu ajutorul unui termistor cu coeficient negativ de
variație cu temperatura. Pentru a putea măsura rezistenta acestuia folosind ADC-ul
microcontrolerului a fost necesară conectarea lui într-un divizor de tensiune rezistiv, transformând
astfel variația rezistenței într-o variație a tensiunii. Pentru acest lucru am folosit pinul PA4.
Pentru a putea folosi cât mai mult din gama dinamica a ADC-ului, domeniul de variație al
tensiunii de la ieșirea divizorului rezistiv cât și al senzorilor de gaze, trebuie sa fie cat mai apropiat
de domeniul de intrare al ADC-ului (0-REF). În cazul circuitului prezentat a fost aleasă ca referință
pentru ADC tensiunea de alimentare a uC (mai exact 5V).
Deoarece modulul LoRa comunică folosind o interfață UART, interfața acestuia trebuie
conectată la interfața UART a microcontrolerului folosind pinii PD1 și PD0. Utilizând acești pini,
putem folosi pentru transmisia datelor perifericul dedicat pentru comunicația UART fiind necesară
doar setarea parametrilor de comunicație. Pentru a seta o comunicație de tip UART transparent pinii
M0 și M1 trebuie conectați la GND.

75
Figura 5.1 Schema electronică a Senzorului mobil

76
5.2. Schema electronică a Nodului central

Nodul central este reprezentat de gateway-ul LoRa alcătuit dintr-un microcalculator


Raspberry Pi 3B+ cu conexiune la Internet și un modul LoRa, legătura dintre aceste blocuri fiind
făcută pe interfața UART.
Deoarece modulul LoRa comunică folosind un nivel logic de 5V, a fost necesară divizarea
tensiunii până la o valoare de 3,3V suportată de Raspberry Pi.

Figura 5.2 Schema electronică a Nodului central

77
5.3. Pași intermediari în dezvoltarea proiectului

Primul pas în realizarea proiectului a fost lipirea tuturor componentelor pe PCB-ul destinat
Senzorului mobil. În figura de mai jos, se poate observa montat microcontrolerul Atmega164, un
modul cu senzorul de gaze analogic MQ-9 și un buton de RESET.

Figura 5.3 PCB-ul destinat Senzorului mobil


După câteva încercări de a potrivi cât mai bine componentele pe PCB și a eficientiza cât mai
mult spațiul disponibil, am hotărât să montez toți senzorii în poziție verticală. Montajul în poziție
verticală a adus și alte două avantaje extrem de importante:
1. Nu s-au folosit foarte multe cabluri în plus pentru a realiza conectarea pe PCB, astfel
realizându-se un bloc compact, de dimensiuni reduse, fără părți mobile și multe fire întinse.
2. Senzorii se află la o distanță dublă față de PCB și astfel colectarea datelor se face
de la 4cm și nu de la 2cm, cum s-ar fi făcut în cazul în care montajul se realiza clasic, în poziție
orizontală. Acest aspect este foarte important deoarece citirea parametrilor se face la o
anumită înălțime în aer. Spre exemplu, concentrația unui gaz poate să difere la anumite
înălțimi în aer, pentru că densitatea gazului poate fi mult mai mare la un nivel mai mic față de
sol.

Figura 5.4 Montajul modulelor senzorilor de gaze


În urma montării tuturor senzorilor și a realizării cablajului, plăcuța arăta în varianta sa finală
în felul următor:
78
Figura 5.5 Versiunea finală a Senzorului mobil

Al doilea pas în realizarea montajului a fost reprezentat de configurarea perifericul UART al


microcontrolerului prin conectarea la pinii de RX-TX a unui convertor UART-USB. Am vrut să fac
acest test pentru a mă asigura că perifericul UART a fost configurat cum trebuie, înainte de a transmite
mesaje cu LoRa.

Configurarea UART s-a realizat în felul următor:

Figura 5.6 Funcția de inițializare UART

79
Figura 5.7 Funcția de scriere prin UART
Tot ce se trimite prin UART va fi pus în registrul UDR0.

Al treilea pas a fost reprezentat de testarea celor două module LoRa. Am conectat două
convertoare de la USB la Serial, fiecare într-un laptop diferit pentru a verifica conexiunea. Am deschis
câte un terminal PuTTY pe fiecare laptop unde am selectat conexiune de tip Serial. Atunci când am
optat pentru conexiune de tip Serial, a trebuit să verific din Device Manager pe fiecare laptop pe ce
port se face conexiunea. În funcție de setările hardware ale laptopurilor conexiunea se face pe un
anumit port COMx. În cazul meu, am folosit portul COM1 pe ambele laptopuri. Un alt factor
important este setarea parametrului viteză, care trebuie să fie la fel pe ambele porturi: 9600 biţi pe
secundă.

Figura 5.8 Configurarea în PuTTY a conexiunii


După deschiderea conexiunii am efectuat teste bidirecționale, trimițând mesaje de pe Serialul
laptopului 1 pe Serialul laptopului 2 și invers.
Mai departe am verificat funcționarea în modul UART transparent conectând pinii M0 și M1
conectați la GND.

80
Figura 5.9 Testarea modulelor LoRa

În pasul patru am realizat configurarea și testarea ADC-ului. Pentru testare am avut nevoie
și de UART pentru a vedea datele citite. De aceea am configurat mai întâi UART (la pasul doi) și nu
ADC-ul. Dacă aș fi configurat mai întâi ADC-ul, nu aveam cum să testez funcționarea pentru că nu
aveam unde să văd datele.

Figura 5.10 Configurarea ADC


Funcția adc_init() inițializează ADC-ul și se apelează o singură dată.

Funcția adc_read() citește datele.


ch este pe 8 biţi (nu poate fi mai mic de atât) și reprezintă canalul pe care vreau să citesc.
În cazul acestui proiect, ADC-ul are 6 canale.
Exemplu: Pentru a evita problema în care ADC-ul este pus să citească de pe canalul 200 sau
o valoare mai mare decât ar trebui și pentru a nu schimba prin ADMUX alți parametrii setați anterior
81
(conform variabilei ch aș putea să fac asta pentru că 200 încape pe 8 biţi), atunci am făcut un ȘI logic
pentru ch între 00000 și 111. Indiferent de ce valoare am în ch, vor rămâne primii 5 biți setați pe 0 și
ultimii 3 vor rămâne neschimbați (linia 9).
ADMUX & 0xF8 face un ȘI logic între ce era înainte în ADMUX și 0xF8 (11111000) pentru
a seta ultimii 3 biţi din ADMUX în 0, apoi se face un SAU logic cu ch (care are primi 5 biți 0 și pe
ultimii 3 cu valoarea potrivită). În felul acesta se face update doar pentru ultimii 3 biți.

După ce am configurat ADC-ul, am citit cu el pe un canal liber neconectat, de unde se pot


observa valorile diferite obținute. Am realizat testul pentru a mă asigura că am o variație.

Figura 5.11 Faza de testare a ADC


În pasul cinci am citit cu ADC senzorii de gaze și am trimis valorile pe UART

Figura 5.12 Primele date ale senzorilor de gaze citite de ADC și trimise pe UART
În pasul șase am configurat și testat senzorul DHT11.

82
Figura 5.13 Configurarea senzorului DHT11
În pasul șapte am configurat și testat senzorul de temperatură.

Figura 5.14 Configurarea senzorului de temperatură


În pasul opt am deconectat convertorul de la USB la UART și am conectat modulul LoRa,
am validat că funcționează, i-am scris codul.

În pasul nouă am conectat modulul LoRa la Senzorul mobil și am considerat plăcuța


finalizată.

În pasul zece am scris codul în Python pentru a citi și afișa datele de pe UART.

83
Figura 5.15 Prima versiune a codului Python

Figura 5.16 Afișarea în linia de comandă Raspberry a datelor primite pe UART


În pasul unsprezece am adăugat în cod request-ul care permite trimiterea datelor prin Internet
și afișarea lor pe site-ul https://api.thingspeak.com/update?api_key=6IX2AJB8C0KJE9PG&field1=.

În pasul doisprezece am realizat procesarea datelor pentru senzori.

Figura 5.17 Procesarea datelor pentru senzorul de gaze MQ-135

În pasul treisprezece am realizat prelucrări pentru a afișa datele primite sub următoarea
formă:

84
Figura 5.18 Ultima versiune a interfeței de debugging

5.4. Medii de dezvoltare și programe folosite


5.4.1. Limbajul C

Limbajul C este un limbaj de programare standardizat. Este implementat pe majoritatea


platformelor de calcul existente azi, și este cel mai popular limbaj de programare pentru scrierea de
software de sistem. Este apreciat pentru eficiența codului obiect generat de compilatoarele C, și pentru
portabilitatea sa.
A fost proiectat și implementat de Dennis Ritchie între anii 1969 și 1973 la AT&T Bells
Laboratories, pentru programe de sistem (care până atunci erau dezvoltate doar în limbaje de
asamblare). A fost numit “C” deoarece este un succesor al limbajului B, limbaj creat de Ken
Thompson.
Originile limbajului C sunt strâns legate de cele ale UNIX-ului, care inițial fusese implementat
în limbajul de asamblare PDP-7 tot de Ritchie și Thompson. Deoarece limbajul B nu putea folosi
eficient unele din facilitățile PDP-11, pe care voiau să porteze UNIX-ul, au avut nevoie de un limbaj
simplu și portabil pentru scrierea nucleului sistemului de operare UNIX.

Caracteristicile limbajului C, care i-au determinat popularitatea:


• limbaj de nivel mediu, portabil, structurat, flexibil
• produce programe eficiente ( lungimea codului scăzută, viteză de execuție mare )
• set bogat de operatori
• multiple facilități de reprezentare și prelucrare a datelor
• utilizare extensivă a apelurilor de funcții și a pointerilor
• verificare mai scăzută a tipurilor loose typing - spre deosebire de PASCAL
• permite programarea la nivel scăzut low-level, apropiat de hardware
Acest limbaj de programare este utilizat în multiple aplicații, în care nu predomină caracterul
numeric: programe de sistem, proiectare asistată pe calculator, grafică, prelucrare de imagini, aplicații
de inteligență artificială etc.

85
5.4.2. Limbajul Python

Python este un limbaj de programare dinamic, de tip multi-paradigmă, flexibil și puternic, ce


poate fi folosit în domenii precum: Web și API (Application Programming Interface), automatizarea
sistemelor, robotică cât și inteligența artificială. Fiind folosit și în ceea ce privește securitatea Cyber,
acesta a fost supranumit “limbaj de programare hacking”.
În prezent, este unul din cele mai utilizate limbaje, având utilizatori precum: NASA, Google,
Yahoo sau Facebook. Python și-a făcut debutul pentru public la începutul anilor ‘90, fiind realizat
sub amprenta lui Guido van Rossum, un programator de naționalitate olandeză, ce urma ca în 2001
să câștige premiul “Award for the Advancement of Free Software” pentru creația care l-a făcut să
atingă un apogeu în cariera sa.
Punând accentul pe simplitatea codului, acesta oferă un mod mai ușor prin care dezvoltatorii
își pot exprima ideile într-o manieră mai clară și mai concisă decât alte limbaje de programare precum
C. Punând în problemă paradigma de programare, el poate servi ca limbaj pentru software de tipul
orientare pe obiecte, permițând în același timp și programarea imperativă, procedurală și funcțională.
Unul din punctele forte ale limbajului este atât funcția de garbage collector (care
administrează în mod automat memoria) cât și prezența amplei biblioteci de metode. În ceea ce
privește codul, de această dată produs mai clar și mai intuitiv, putem vorbi de tipizare dinamică, tipul
variabilelor nefiind fixat în momentul declarării acestora (spre deosebire de C, aici nu este nevoie de
declararea lor), ele fiind determinate de către interpretator în urma operațiilor efectuate sau după
conținutul lor.
Printre multe altele, Python permite o flexibilitate mărită în scrierea aplicațiilor. La nivel de
sintaxă, acesta are un număr de construcții cheie, prezentând un concept unic, anume: nivelul de
indentare ce are semnificație sintactică.

5.4.3. Altium design


Acest soft este un pachet de programe de automatizare pentru proiectare electronică plăci de
circuite imprimate și este dezvoltat de compania austriacă de software Altium Limited. În general,
Altium Designer este mai costisitor decât alte programe de proiectare PCB, dar se remarcă pentru
capacitatea sa de a obține rezultate rapide pentru circuite complexe.

5.4.4. PuTTY
PuTTY este un program gratuit și open-source ce emulează un terminal fiind un client pentru
SSH, Telnet, rlogin și raw TCP protocol precum și client pentru consola Serial. Numele "PuTTY" nu
are o semnificație anume acesta reflectând procedura "prin TTY" unde "TTY" se referă la "terminal"
în terminologia UNIX (TTY este prescurtare pentru Teletype).
PuTTY a fost scris original pentru Microsoft Windows dar ulterior a fost portat și pe alte
sisteme de operare. Există versiuni oficiale disponibile pentru unele platforme care se bazează pe
funcționarea Unix, și se lucrează constant și pentru versiuni ale Mac OS și Mac OS X. Versiuni
neoficiale pot fi găsite pentru sisteme ca Symbian și Windows Mobile.

86
5.5. Organigramele codului

Figura 5.19 Organigrama codului C pentru Senzorul mobil

87
Figura 5.20 Organigrama codului Python pentru Nodul central

88
Concluzii
6.1. Concluzii personale

În această lucrare a fost prezentat un dispozitiv mobil pentru monitorizare a parametrilor


mediului ambiant format din două module, unul de înregistrare a variabilelor și un alt modul folosit
ca gateway pentru a transfera prin Internet datele în cloud.
Aplicabilitatea acestui tip de sistem este una foarte diversă. Se poate folosi atât ca un sistem
meteorologic, dar în același timp se poate folosi și în mediul chimic, petrolier, alimentar etc.
Cum sistemul rezultat este unul portabil, care poate fi cu ușurință utilizat de marea majoritate
a persoanelor care doresc să fie informate cu privire la calitatea aerului pe care îl respiră. Astfel, acest
senzor poate fi implementat în: grădinițe, școlile și licee, pentru a informa părinții în ce condiții stau
și își desfășoară activitatea copii lor.
În plus, sistemul își poate găsi la fel de bine locul în zonele urbane aglomerate precum:
parcuri, locuri de joaca și grădini publice.

Deși proiectul în sine a fost destul de complex și a necesitat o lungă perioadă de cercetare,
documentare și studiu, una din cele mai mari mulțumiri este că am reușit să finalizez calculul elaborat
pentru anumite concentrații de gaze și să realizez un ansamblu perfect funcțional. Realizând această
lucrare, am dobândit noțiuni de electronică, gândire logică, programare, matematică și cunoștințe
despre semnale și modulații pe care nu le-am studiat neapărat în programa de la facultate.

6.2. Perspective de îmbunătățire


E de la sine înțeles că acest sistem nu este perfect și poate fi îmbunătățit prin adăugarea unor
caracteristici suplimentare precum și prin modificarea unora deja existente.
Printre cele mai importante îmbunătățiri care se pot aduce, regăsim:
• implementarea unui protocol de securizare a comunicației
• implementarea modurilor de eficientizare a consumului de energie, ducând astfel la o
utilizare îndelungată cu un consum mai mic. Prin aceasta, putem implementa astfel de
senzori alimentându-i cu ajutorul panourilor solare
• adăugarea unui modul GPS pentru monitorizare ulterioară și construirea unei rețele
complexe de senzori
• aplicație GPS care alege ca traseu zonele mai puțin poluate
• măsurarea particulelor de praf/impurități
• crearea unei capsule dedicate pentru Senzorul mobil
• implementarea unor tranzistori care comandă pe fiecare senzor în parte
• adăugare unor senzori de radiație

89
6.3. Bibliografie

[1] "Aerul pe care îl respirăm," [Online]. Available:


https://www.eea.europa.eu/ro/semnale/semnale-de-mediu-2013/articole/aerul-pe-care-il-
respiram. [Accessed 26 07 2020].
[2] "Temperature," [Online]. Available: https://en.wikipedia.org/wiki/Temperature.
[Accessed 02 05 2020].
[3] "Masurarea temperaturii," [Online]. Available:
https://www.scribd.com/document/332173831/Masurarea-temperaturii-pdf. [Accessed 02 05
2020].
[4] "Aparate de măsură și reglare a temperaturii," [Online]. Available:
https://www.scritub.com/diverse/meteorologie/APARATE-DE-MASURA-SI-REGLARE-
A13624424.php. [Accessed 03 08 2020].
[5] "Humidity," [Online]. Available: https://en.wikipedia.org/wiki/Humidity. [Accessed 04
05 2020].
[6] "Foaie de catalog Senzor de gaz MQ-135," [Online]. Available:
https://upverter.com/datasheet/05a4d494d8c28d681c71285ffeaa8c509a605037.pdf.
[Accessed 26 04 2020].
[7] „Foaie de catalog Senzor de gaz MQ-4,” [Interactiv]. Available:
https://www.sparkfun.com/datasheets/Sensors/Biometric/MQ-4.pdf. [Accesat 11 04 2020].
[8] "Guide to 1-Wire Communication," [Online]. Available:
https://www.maximintegrated.com/en/design/technical-documents/tutorials/1/1796.html.
[Accessed 23 06 2020].
[9] "SPI Bus interface," [Online]. Available: http://www.eeherald.com/section/design-
guide/esmod12.html. [Accessed 24 06 2020].
[10] "Modeling and Simulation of LoRaWAN for Smart Metering Network," [Online].
Available:
https://www.researchgate.net/publication/343393732_Modeling_and_Simulation_of_LoRaW
AN_for_Smart_Metering_Network. [Accessed 27 06 2020].
[11] "Shannon–Hartley theorem," [Online]. Available:
https://en.wikipedia.org/wiki/Shannon%E2%80%93Hartley_theorem. [Accessed 06 05
2020].
[12] "What is LoRa®?," [Online]. Available: https://www.semtech.com/lora/what-is-lora.
[Accessed 17 05 2020].
[13] "Raspberry Pi," [Online]. Available: https://www.raspberrypi.org/about/. [Accessed 25
04 2020].
[14] "IEEE 802.11-1999 - IEEE Standard for Information technology". Institute of Electrical
and Electronics Engineers Standards Association (IEEE-SA).
[15] "IEEE 802.15.1-2005 - IEEE Standard for Information technology".Institute of Electrical
and Electronics Engineers Standards Association (IEEE-SA).
[16] "Introduction to SPI Interface," [Online]. Available: https://www.analog.com/en/analog-
dialogue/articles/introduction-to-spi-interface.html#. [Accessed 23 04 2020].
[17] "Raspberry Pi OS," [Online]. Available: https://ro.wikipedia.org/wiki/Raspberry_Pi_OS.
[Accessed 10 07 2020].
[18] "Learn More About ThingSpeak," [Online]. Available:
https://thingspeak.com/pages/learn_more. [Accessed 16 07 2020].
90
ANEXĂ
Codul sursă C

#define F_CPU 20000000UL // 20 MHz clock speed


#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stdio.h>

#define DHT11_PIN 1
uint8_t c=0,I_RH,D_RH,I_Temp,D_Temp,CheckSum;

#define BAUD 9600


#define BAUD_RATE_CALC ((F_CPU/16/BAUD) - 1)

void Serial_println(char data[], int a);


void Serial_print(char data[] , int a);
void Serial_printHEX(uint8_t data);
void Serial_begin(void);
void Serial_begin(void);

void Request(void);
void Response(void);
uint8_t Receive_data(void);

void adc_init();
uint16_t adc_read(uint8_t ch);

char data[10];

int main(void){
_delay_ms(1000);
Serial_begin();
adc_init();
int i =0;
while (1){
char d[] ="Value";
Serial_print(d,sizeof(d));
Serial_print(":",1);

Request(); //send start pulse


Response(); //receive response
I_RH=Receive_data(); //store first eight bit in I_RH
D_RH=Receive_data(); //store next eight bit in D_RH
I_Temp=Receive_data(); //store next eight bit in I_Temp
D_Temp=Receive_data(); //store next eight bit in D_Temp
CheckSum=Receive_data(); //store next eight bit in CheckSum

if ((I_RH + D_RH + I_Temp + D_Temp) != CheckSum){


Serial_println('r' ,2);
}
else
{
//itoa(I_Temp,data,10);
//Serial_println(data , 5);
//Serial_printHEX(0x3B);
//itoa(D_RH,data,10);

91
//Serial_println(' ' , 2);

itoa(I_RH,data,10);
Serial_print(data , sizeof(data));
Serial_print(".",1);
itoa(D_RH,data,10);
Serial_print(data , sizeof(data));
Serial_print(":",1);

}
i = adc_read(0);
char dd[10] = "";
itoa(i,dd,10);
Serial_print(dd, sizeof(dd));
Serial_print(":",1);

i = adc_read(1);
dd[10] = "";
itoa(i,dd,10);
Serial_print(dd,sizeof(dd));
Serial_print(":",1);

i = adc_read(2);
dd[10] = "";
itoa(i,dd,10);
Serial_print(dd,sizeof(dd));
Serial_print(":",1);

i = adc_read(3);
dd[10] = "";
itoa(i,dd,10);
Serial_print(dd,sizeof(dd));
Serial_print(":",1);

i = adc_read(4);
dd[10] = "";
itoa(i,dd,10);
Serial_println(dd,sizeof(dd));

_delay_ms(10000);

}
}

void Serial_begin(void){

//High and low bits


UBRR0H = (BAUD_RATE_CALC >> 8);
UBRR0L = BAUD_RATE_CALC;
////////////////
//transimit and recieve enable
UCSR0B = (1 << TXEN0)| (1 << TXCIE0) | (1 << RXEN0) | (1 << RXCIE0);
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); //8 bit data format

void Serial_println(char data[],int a){

92
for (int i = 0; i < a; i++){
UDR0 = data[i];
_delay_ms(1);

}
UDR0 =0x0A;
_delay_ms(1);
}

void Serial_print(char data[],int a){


for (int i = 0; i < a; i++){
UDR0 = data[i];
_delay_ms(1);
}
_delay_ms(1);
}

void Serial_printHEX(uint8_t data){


while (( UCSR0A & (1<<UDRE0)) == 0){};
UDR0 = data;
}

void Request() /* Microcontroller send start pulse or


request */
{
DDRC |= (1<<DHT11_PIN);
PORTC &= ~(1<<DHT11_PIN); /* set to low pin */
_delay_ms(20); /* wait for 20ms */
PORTC |= (1<<DHT11_PIN); /* set to high pin */
}

void Response() /* receive response from DHT11 */


{
DDRC &= ~(1<<DHT11_PIN);
while(PINC & (1<<DHT11_PIN));
while((PINC & (1<<DHT11_PIN))==0);
while(PINC & (1<<DHT11_PIN));
}

uint8_t Receive_data() /* receive data */


{
int q;
for ( q=0; q<8; q++)
{
while((PINC & (1<<DHT11_PIN)) == 0) /* check received bit 0 or 1 */
_delay_us(30);
if(PINC & (1<<DHT11_PIN)) /* if high pulse is greater than 30ms */
c = (c<<1)|(0x01); /* then its logic HIGH */
else /* otherwise its logic LOW */
c = (c<<1);
while(PINC & (1<<DHT11_PIN));
}
return c;
}

void adc_init()
{
// AREF = AVcc
ADMUX = (1<<REFS0);

93
// ADC Enable and prescaler of 128
// 20000000/128 = 156250
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
}

uint16_t adc_read(uint8_t ch)


{
// select the corresponding channel 0~7
// ANDing with ’7? will always keep the value
// of ‘ch’ between 0 and 7
ch &= 0b00000111; // AND operation with 7
ADMUX = (ADMUX & 0xF8)|ch; // clears the bottom 3 bits before ORing

// start single convertion


// write ’1? to ADSC
ADCSRA |= (1<<ADSC);

// wait for conversion to complete


// ADSC becomes ’0? again
// till then, run loop continuously
while(ADCSRA & (1<<ADSC));

return (ADC);
}

94
Codul sursă Python
import serial, requests
import numpy as np
B = 3560

RL_MQ135 = 1000
RO_MQ135 = 10000

RL_MQ4 = 1000
RO_MQ4 = 5000

RO_MQ9 = 2200
RL_MQ9 = 1000

data ="https://api.thingspeak.com/update?api_key=6IX2AJB8C0KJE9PG&field1="
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=10)
while True:
reading = ser.readline()
reading = reading.decode("utf-8")
reading = reading.replace("\x00","")
reading = reading[:len(reading)-1]
reading = reading.split(":")
print(reading)
if reading[0] == "Value" and len(reading)== 7:
#print(reading[6])
voltage = float(reading[6])/205
R = (voltage*3.3)*1000/(5-voltage)
#t = B/(np.log(R/2000)+ B/25)
t = 273.15+1/(np.log(R/2000)/B + 1/-248.15)
print("Temperatura: ",t)
DHT = reading[1]

MQ9 = reading[2]
MQ7 = reading[3]
MQ4 = reading[4]
MQ135 = reading[5]
voltage_MQ135 =float(MQ135)/205
RS_MQ135 = ((5*RL_MQ135)/voltage_MQ135) - RL_MQ135
ratio_MQ135 = RS_MQ135/RO_MQ135
NH3_ppm = pow(10, (np.log10(ratio_MQ135)-0.42)/-0.263)
print("NH3: ",NH3_ppm)

voltage_MQ4 = float(MQ4)/205
RS_MQ4 = ((5*RL_MQ4)/voltage_MQ4) - RL_MQ4
ratio_MQ4 = RS_MQ4/RO_MQ4
CH4_ppm = pow(10, ((np.log10(ratio_MQ4) - 0.9511)/-0.302))
print("CH4: ", CH4_ppm)

voltage_MQ9 = float(MQ9)/205
RS_MQ9 = ((5 * RL_MQ9)/voltage_MQ9) - RL_MQ9
ratio_MQ9 = RS_MQ9/RO_MQ9
CO_ppm = pow(10,((np.log10(ratio_MQ4)-1.414)/-0.503))
print("CO_ppm: ", CO_ppm)
print("-------------------------------------------------------------
--")
req = data + str(t)+ "&field2=" + DHT + "&field3=" + str(CO_ppm) +
"&field4=" + MQ7 + "&field5=" + str(CH4_ppm) + "&field6=" + str(NH3_ppm)
r = requests.get(req)

95
Figura A.1 Versiunea finală a site-ului WEB

96
Figura A.2 Pinul de semnal al modului DHT11

Figura A.3 Semnalul digital al DHT11 observat pe osciloscop

97
Figura A.4 Senzorul mobil văzut de aproape

Figura A.5 Diverse teste realizate în laboratorul B210 din Facultate

98
Figura A.6 Prezentarea unei idei a proiectului în cadrul materiei
“Management și reglementări în comunicații și electronică”

Figura A.7 Crearea unui plan de afaceri și proiecții financiare

99
Figura A.8 Primele discuții și negocieri cu potențiali cumpărători

Suntem ceea ce respirăm! Decizia ne aparține!

100

S-ar putea să vă placă și