Documente Academic
Documente Profesional
Documente Cultură
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
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]
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?
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 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 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.
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.
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
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.
22
Descrierea hardware a sistemului propus
3.1. Blocul de alimentare
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 [℉].
24
3.2.1.3. Senzorul de temperatură B57861S0202H040
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]
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℃.
26
mv = masa vaporilor de apă dintr-un eșantion;
ma = masa de aer uscat din același eșantion; [4]
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.
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.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.
30
3.2.3.3. Modul Senzor de gaz MQ-135 [5]
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.
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:
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.
33
3.2.3.4. Modul Senzor de gaz 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).
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.
35
3.2.3.5. Modul Senzor de gaz MQ-4 [1]
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.
37
3.2.3.6. Modul Senzor de gaz MQ-7
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.
38
Din figura de mai sus se diferențiază următoarele elemente:
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
41
Figura 3.23 Schema pinilor de uz general
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.
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
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.
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.
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.
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.
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]
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.
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.
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.
• 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.
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.
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
Formatul Asincron
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:
S 1 S 1 S S
log 2 (1 + ) = × ln (1 + ) ≈ × ≈ 1,44 ×
N ln 2 N ln 2 N N
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
BW
=> R C = × 2SF = BW
2SF
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.
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
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
4π
= 20 log10 (𝑑) + 20 log10 (𝑓) + 20 log10 ( )
𝑐
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ă:
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
PRX (dBm) = PTX (dBm) + GSISTEM (dB) − LSISTEM (dB) − lCANAL (dB) − M(dB)
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.
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.
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:
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.
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:
Î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.
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.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.
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.
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;
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
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.
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
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.
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.
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]
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
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
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)
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.
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.
74
Implementarea hardware și software a sistemului
propus
5.1. Schema electronică a sistemului de achiziție
75
Figura 5.1 Schema electronică a Senzorului mobil
76
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.
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ă.
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.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ă.
Î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
Î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
85
5.4.2. Limbajul Python
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
87
Figura 5.20 Organigrama codului Python pentru Nodul central
88
Concluzii
6.1. Concluzii personale
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.
89
6.3. Bibliografie
#define DHT11_PIN 1
uint8_t c=0,I_RH,D_RH,I_Temp,D_Temp,CheckSum;
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);
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){
92
for (int i = 0; i < a; i++){
UDR0 = data[i];
_delay_ms(1);
}
UDR0 =0x0A;
_delay_ms(1);
}
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);
}
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
97
Figura A.4 Senzorul mobil văzut de aproape
98
Figura A.6 Prezentarea unei idei a proiectului în cadrul materiei
“Management și reglementări în comunicații și electronică”
99
Figura A.8 Primele discuții și negocieri cu potențiali cumpărători
100