PROGRAMUL DE STUDII UNIVERSITARE DE LICEN ȚĂ [623701]

UNIVERSITATEA DIN PITE ȘTI
FACULTATEA DE ELECTRONICĂ, COMUNICA ȚII ȘI CALCULATOARE
DEPARTAMENTUL ELECTRONICĂ, CALCULATOARE ȘI INGINERIE ELECTRICĂ
PROGRAMUL DE STUDII UNIVERSITARE DE LICEN ȚĂ
________________________________________________________________________

PROIECT DE DIPLOMĂ

STA ȚIE METEO CU ARDUINO

Absolvent: [anonimizat], Bostan Ionel

Pitești
Sesiunea iulie 2018

CUPRINS
LISTĂ FIGURI ………………………….. ………………………….. …………. 3
LISTĂ TABELE ………………………….. ………………………….. ……….. 6
ACRONIME ………………………….. ………………………….. …………….. 7
CAPITOLUL 1. INTRODUCERE ………………………….. ……………….. 8
1.1. ASPECTE GENERALE PRIVIND STA ȚIILE METEO ………………………….. ……………………… 8
CAPITOLUL 2. ACHIZI ȚII DE DATE ………………………….. ……….. 10
2.1. GENERALITĂ ȚI PRIVIND ACHIZI ȚIA DATELOR ………………………….. ………………………….. .. 10
2.2. STRUCTURA UNUI SISTEM DE ACHIZI ȚIE DE DATE ………………………….. …………………. 10
CAPITOLUL 3. SENZORI TIPICI UTILIZA ȚI ÎN STA ȚIILE METEO . 14
3.1. NOȚIUNI ELEMENTARE PRIVIND SENZORII ȘI TRADUCTOARELE ………………………. 14
3.2. SENZORI UTILIZA ȚI PENTRU REALIZAR EA STAȚIEI METEO ………………………….. ……. 28
CAPITOLUL 4. PROIECTAREA HARDWARE …………………………. 36
4.1. PROIECTAREA SCHEMEI BLOC ………………………….. ………………………….. ………………………… 36
4.2. PĂR ȚI COMPONENTE ………………………….. ………………………….. ………………………….. ………………. 37
4.3. INTERFA ȚAREA SENZORILOR ………………………….. ………………………….. ………………………….. .. 51
4.4. PROIECTAREA SCHEMEI ELECTRICE ………………………….. ………………………….. ……………… 60
4.5. PROIECTAREA CABLAJULUI ………………………….. ………………………….. ………………………….. …. 63
4.6. REALIZAREA PRACTICĂ ………………………….. ………………………….. ………………………….. ………….. 64
CAPITOLUL 5. PROIECTAREA SOFTWARE ………………………….. 69
5.1. MEDIUL DE PROGRAMARE ARDUINO ………………………….. ………………………….. ……………… 69
5.2. ORGANIGRAMA GENERALĂ A PROGRAMULUI PRINCIPAL ………………………….. ……….. 70
CAPITOLUL 6. TESTARE ………………………….. ……………………… 83
CAPITOLUL 7. CONCLUZII ………………………….. …………………… 95
BIBLIOGRAFIE ………………………….. ………………………….. ……… 98
ANEXE ………………………….. ………………………….. ………………. 100
CODUL SURS Ă ………………………….. ………………………….. ………………………….. ………………………….. …… 100
SCHEMĂ ELECTRICĂ ………………………….. ………………………….. ………………………….. ……………………. 110
PLANIFICAREA ACTIVITĂ ȚII ………………………….. ………………. 111

LISTĂ FIGURI

Figura 1.1. Schemă generală a unei sta ții meteo clasice ………………………….. ….. 9
Figura 2.1. Structura unui sistem de achizi ție de date ………………………….. ……. 11
Figura 2.2. Procesul de cuantificare ………………………….. ………………………….. … 12
Figura 2.3. Reprezentarea erorii de cuantificare pentru domeniul de intrare
dat ………………………….. ………………………….. ………………………….. ……………….. 13
Figura 2. 4. Structura unui sistem de achizi ție de date cu multiplexarea semnalelor
analogice de intrare ………………………….. ………………………….. ……………………… 13
Figura 3.1. Clasificarea senzorilor generatori ………………………….. ………………… 17
Figura 3.2. Principiile fizice folosite în proiectarea senzorilor generatori …………. 18
Figura 3.3. Domeniile de aplicabilitate ale se nzorilor chimici ……………………….. 19
Figura 3.4. Variația rezisten ței cu temperatura pentru metale și material e
semiconductoar e ………………………….. ………………………….. ………………………… 20
Figura 3.5. Senzor piezorezistiv ………………………….. ………………………….. ……… 22
Figura 3.6. Clasificarea traductoarelor ………………………….. …………………………. 24
Figura 3.7. Schema bloc a unui traductor ………………………….. …………………….. 25
Figura 3.8. Schemă bloc a unui traductor cu elemente auxiliare …………………… 25
Figura 3.9. Caracteristică statică liniară unidirec țional ă (a) și propor țională
bidirecțională (b) a traductoarelor ………………………….. ………………………….. ….. 26
Figura 3.10. Schema unui traductor în regim dinamic ………………………….. ……. 27
Figura 3.11. Senzorul DHT11 și pini i săi ………………………….. ………………………. 29
Figura 3.12. Proces general de comunicare ………………………….. …………………… 31
Figura 3.13. Senzorul BMP180 ………………………….. ………………………….. ………. 31
Figura 3.14. Schemă generală BMP180 ………………………….. ……………………….. 32
Figura 3.15. Organigrama de lucru senzorului BMP180 ………………………….. ….. 33
Figura 3.16. Pornirea măsurării presiunii ………………………….. …………………….. 35
Figura 3.17. Diagrama de timp a rezultatelor conversiei A/D pe 16 bi ți ………….. 35
Figura 4.1. Schema bloc a sta ției meteo ………………………….. ……………………….. 36
Figura 4.2. Afi șaj LCD 2.4 ” ………………………….. ………………………….. ……………. 37

Figura 4.3. Conectarea afi șajului la placa de dezvoltare Arduino MEGA …………. 38
Figura 4.4. Ceas în timp real RTC DS1307 ………………………….. …………………… 40
Figura 4.5. Circuit tipic de conectare a modului DS1307 la microcontrolere …… 40
Figura 4.6. Transferul datelor pe magistrala I2C ………………………….. ……………. 42
Figura 4.7. Schema electrică de conectare a modulului RTC la Arduino MEGA .. 44
Figura 4.8. Modul cu buzzer activ ………………………….. ………………………….. …… 46
Figura 4.9. Schemă electrică buz zer ………………………….. ………………………….. .. 46
Figura 4.10. Conectarea buzzerului la Arduino MEGA ………………………….. ……. 48
Figura 4.11. Prezentare Arduino MEGA ………………………….. ……………………….. 49
Figura 4.12. Definirea condi țiilor de Start și Stop ………………………….. …………… 52
Figura 4.13. Interfa ța electric ă de baz ă la magistrala I2C ………………………….. … 53
Figura 4.14. N ivelul fizic I2C ………………………….. ………………………….. ………….. 53
Figura 4.15. Conectarea senzorului DHT11 la Arduino MEGA ………………………. 55
Figura 4.16. Conectarea rezitorului pull -up la DHT11 ………………………….. …….. 56
Figura 4.17. Dimensiunile senzorului DHT11 ………………………….. ……………….. 57
Figura 4.18. Conectarea senzorului BMP180 la Arduino MEGA ……………………. 59
Figura 4.19. Dimensiunile senzoru lui BMP180 ………………………….. ……………… 60
Figura 4. 20. Schema electrică în programul EasyEDA ………………………….. ……. 61
Figura 4.2 1. Interfața programului Mach3 ………………………….. ……………………. 65
Figura 4.2 2. Procesul de găurire al cablajului ………………………….. ……………….. 65
Figura 4.2 3. Realizarea traseelor ………………………….. ………………………….. ……. 66
Figura 4.2 4. Amprentă cablaj ………………………….. ………………………….. ………… 66
Figura 4.2 5. Cablaj final cu senzorii specifici sta ției meteo
(vedere spate și față) ………………………….. ………………………….. ……………………. 67
Figura 4.2 6. Conectarea cablajului final senzorii sta ției meteo la Arduino ………. 67
Figura 4.2 7. Stație meteo cu Arduino ………………………….. ………………………….. 68
Figura 5. 1. Interfața med iului de dezvoltare Arduino IDE ………………………….. … 69
Figura 5. 2. Organigrama de lucru a programului principal ………………………….. 81
Figura 6.1. Conectarea DHT11 la Arduino Mega ………………………….. ……………. 83
Figura 6.2. Testarea senzorului DHT11 ………………………….. ……………………….. 84
Figura 6.3. Senzorul DHT11 încălzit ………………………….. ………………………….. .. 85

Figura 6.4. Conectar e BMP180 la placa de dezvoltare ………………………….. …….. 86
Figura 6.5. Testare BMP18 0 ………………………….. ………………………….. ………….. 88
Figura 6.6. Conectare DS1307 ………………………….. ………………………….. ……….. 88
Figura 6.7. Afi șarea timpului și a dăți în timp real ………………………….. …………. 89
Figura 6. 8. Conectarea buzzerului ………………………….. ………………………….. ….. 90
Figura 6. 9. Stație meteo cu Arduino ………………………….. ………………………….. .. 91
Figura 6. 10. Afișarea parametrilor sta ției meteo în consol ă ………………………….. 91
Figura 6.1 1. Realizare practică (placă de test) ………………………….. ……………….. 92
Figura 6.1 2. Stație digital ă de afișare a temperaturii vs. sta ție meteo Arduino … 92
Figura 6.1 3. Afișarea parametrilor din mediul extern ………………………….. ……… 93
Figura 6.1 4. Date privind starea vremii furnizate furnizate de AccuWeather ……. 93
Figura 6.1 5. Date privind starea vremii furnizate de ANM ………………………….. .. 94
Figura 7.1. Kit senzori sta ție meteo ………………………….. ………………………….. …. 97

LISTĂ TABELE

Tabel 3.1. Coeficien ții de presiune pentru diferite metale ………………………….. … 23
Tabel 4.1. Conectarea pinilor afi șajului LCD la Arduino Mega ………………………. 39
Tabel 4.2. Conectarea ceasului în timp real la Arduino Mega ……………………….. 44
Tabel 4.3. Conectarea pinilor buzzerului la Arduino MEGA ………………………….. 47
Tabel 4.4. Descriere pini Arduino Mega ………………………….. ………………………… 51
Tabel 4.5. Descriere termeni utiliza ți de magistrale ………………………….. ………… 52
Tabel 4.6. Pinii interfe ței SPI pentru Ar duino UNO și MEGA …………………………. 54
Tabel 4.7. Conectare pinilor senzorului DHT11 la pinii Arduino MEGA ………….. 55
Tabel 4.8. Modul de conectare al senzorului DHT11 ………………………….. ……….. 58
Tabel 4.9. Alocarea pinilor plăcu ței din punct de vedere hardware ………………… 62
Tabel 5.1. Alocarea pinilor plăcu ței din p unct de vedere software ………………….. 82

ACRONIME

ADC: Analog Digital Convertor – convertor analog digital
CEM: Circuit E șantionare – Memorare
CNC: Computering Numeric Controll – control numeric computerizat
EEPROM : Electrically Erasable Programmable Read -Only Memory – memorie
programabilă cu ștergere electrică
GPS: Global Positioning System – sistem de pozi ționare global ă
I2C : Inter -Integrated Circuit – intefață serială integrată
LCD: Liquid Crystal Display – afișaj cu cristale lichide
OTPM : One -Time Programmable – memorie programabilă o singură dată
PDA: Personal Digital Assistant – asistent digital personal
RTC: Real Time Clock – ceas în timp real
SAD: Sistem de Achizi ții de Date
SCL: Serial Clock Line – linie de ceas serială
SDA: Serial Data Line – line de date serială
SPI: Serial Peripherical Interface – intefață serială periferică
UR: Umiditate Relativă
UP: Unitate Presiune
USB: Universal Serial Bus – magistrală serială universală
UT: Unitate Temperatură
ANM: Administra ția Național ă de Meteorolo gie

8

CAPITOLUL 1. INTRODUCERE

Prezenta lucrare vizează prelucrarea informa țiilor din mediul înconjur ător,
aspect destul de important în tehnologie și industria din present, și asta pentru c ă
orice proces necesit ă achiziția datelor.

Evoluția continu ă a materialelor, senzorilor, a sistemelor de m ăsurat, a
tehnologiilor hardware și software transform ă idea unei sta ții meteo perfomant ă și
precis ă într-una usor de realizat.

Această lucrare se a xează pe studiul circuitelor cu microcontrolere și
dezvoltarea montajului practice care s ă corespund ă cerințelor.

Mi-am propus să realizez un dispozitiv care să fie capabil să citească, la
intervale egale de timp, temperatura, umiditatea, presiunea atm osferică dintr -o
încăpere/mediu (exterior sau interior ), ceasul și data în timp real, după care să
transmită datele pe un afi șaj LCD.

1.1. ASPECTE GENERALE PRIVIND STA ȚIILE METEO

Prognoza meteo reprezintă punerea în practică a tehnologiilor avansate cu
scopu l emiterii unor ipoteze în legătură cu starea vremii. Datele sunt ob ținute în
urma studierii parametrilor specifici domeniului numi ți și condiții atmosferice.

Stațiile meteo sunt dispozitive capabile să ofere date cât mai precise despre
fenomenele meteorologice și climatice pe o perioadă de timp îndelungată. Sta țiile
meteo pot fi prevăzute cu o mul țime de senzori, ca de exemplu: senzor pentru
măsurarea temperaturii aerului atmosferic (termometru), senzor pentru măsurarea
presiunii atmosferice (barometru), senzor pentru măsurarea umidită ții
(higrometru), girueta, instrument ce precizează intensitatea și direcția vântului,
anemome tru ce măsoară viteza vântului.

9

Exist ă stații mult mai complexe folosite în agricultură ce măsoară anumi ți
parametrii cum ar fi: umiditatea solului și a vegeta ției, temperatura solului, a apei
in lacuri, baraje, mări, oceane, etc., radia ția solară, radia ția razelor ultraviolete, dar
și stații meteo folosite în aeroporturi (aici putem întâlni senzori capabili să identifice
precipita țiile, dar și senzori care măsoară vizibilitatea).

O schemă bloc generală a unei sta ții meteo clasice poate arată ca în figura de
mai jos sau poate fi mai complexă, depinzând de domeniul unde este utilizată.

Figura 1.1 . Schemă generală a unei sta ții meteo clasice

Schema bloc cuprinde: senzori pentru măsurarea temperaturii, presiunii
atmosferice și a umidită ții relative a aerului, capabili să transmită date către
microcontroler, acesta transmi țând mai departe valorile rezultate din măsuratori ce
vor fi afișate pe un ecran .

10

CAPITOLUL 2. ACHIZIȚII DE DATE

2.1. GENERALITĂ ȚI PRIVIND ACHIZI ȚIA DATELOR

Pentru controlul unui proces fizic este necesară extragerea informa țiilor
privind desfă șurarea procesului, prin folosirea traductoarelor. Semnalele de la
ieșirea acestora sunt transformate în semnale analogice (tensiuni electrice) cu
ajutorul circuite lor de condi ționare. Pentru controlul numeric al pro cesului fizic se
realizează conversia semnalelor analogice în semnale digitale acceptate de sistemul
de prelucrare numerică (calculator / microcalculator, sistem cu microcontroler/
microprocessor ) .
Semnalelele digitale se ob țin prin extragerea la momente de timp stabilite, a
valorilor semnalelor analogice și conversia acestor valori în semnale digitale cu
ajutorul sistemelor de achi ție de date (SAD). Semnalele digitale ob ținute din
prelucrare se folosesc pentru comanda element elor de execu ție de control (
dispozitive de afi șare numerică și alfanumerică, relee, etc.).

2.2. STRUCTURA UNUI SISTEM DE ACHIZI ȚIE DE DATE

Un sistem de achizi ție de date este alcătuit din circuite analogice cu func ții
de prelucrare necesare realizării conversiei datelor, circuite pentru conversia
analog -numerică și circuite de interfa ță pentru transferul semnalului numeric
obținut din achizi ție la sistemul de prelucrare numerică; prin circuitele de
prelucrare numerică se poate realiza controlul func ționării sistemului de achizi ție
de date de către sistemul de prelucrare numerică.
În general, un sistem de achizi ție de d ate trebuie să poată îndeplini
următoarele funcții de bază, și anume:
 Conversia fenomenului fizic într -un semnal ce poate fi măsurat;
 Măsurarea semnalelor generate de senzori/traductori cu scopul extragerii
informațiilor utile;
 Analizarea și prezentarea datelor într -o formă utilizabilă.
Structura unui sistem de achizi ție de date este prezentată în figura 2.1.

11

Figura 2.1. Structura unui sistem de achizi ție de date

După cum se observă, în figura de mai sus este prezentată structura
sistem ului de achizi ție de date cu un semnal analogic de intrare. Această structură
cuprinde:
 filtru de intrare trece jos = realizează func ția de eliminar e a erorilor care pot
rezulta în urma reprezentării numerice a semnalelor analogice;
 ampl ificator cu câ știg programabil = permite mărirea gamei dinamice
corespunzătoare semnalului analogic de intrare, pentre care se poate utiliza
un SAD (sistem de achizi ție de date). Gama dinamică a semnalului de intrare
a semnalui de intrare u i se exprimă în func ție de valoarea maximă a
semnalului de intrare și de valoarea minimica impusă a se detecta. Se poate
exprima analitic sub forma:

𝐺𝐷=20∙𝑙𝑜𝑔𝑢𝑖𝑚𝑎𝑥
𝑢𝑖𝑚𝑖𝑛 .𝑑𝑒𝑡 (2.1)

 circuit de e șationare memorare (CEM) = menține semnalul constant la
intrarea convertorului analog – digital pe durata realizării conversiei.
 convertor analog -digital ADC (sau analog -numeric -CAN) = circuit care
primește la intrare o mărime analogică și furnizează la ie șire un număr
(combina ție de biți) care constituie o aproximare a mărimii de intrare.

12

Cuantificarea se realizează prin împă rțirea domeniului de intrare, care
conține o infinitate de valori, într -un număr finit de intervale egale (cuante), cărora
li se atribuie un număr, conform figurii 2.2.

Figura 2.2 . Procesul de cuantificare

Mărimea cuantei este stabilită de mărimea domeniului analogic de intrare și
de numărul de intervale în care se împarte acest domeniu, de unde rezultă că
informația sub formă numerică se face cu introducere erorii de cuatificare. Pentru
un domeniu de intrare stabilit, eroarea de cuantificare devine din ce în e mai mică,
pe măsură ce c rește numărul de bi ți pe care se face codificarea semnalului. În figura
2.3 avem reprezentarea erorii de cuantificare pentru o tensiune analogică de intrare
de până la 7,5V.

13

Figura 2.3 . Reprezentarea erorii de cuantificare pentru domeniul de intrare da t.

Pentru achizi ția cu un sistem prevăzut cu mai multe semnale analogice de
intrare se folose ște un multiplexor. Structura unui sistem de achizi ție de date cu
multiplexor este prezentată în figura 2.4 și cuprinde un ansamblu format din
circuitul de e șantionare -memorare și convertorul ADC, la intrările căruia se
conectează succesiv semnalele analogice de intrare u1, u2,…, u m, prin
multiplexarea în timp.
Achiziția datelor corespunzătoare celor m semnale analogice de intrare se
realizează prin controlu l sistemului de achizi ție de date comandat de sistemul de
prelucrare numerică. Perioada de achizi ție minimă a sistemului de achizi ție cu
multiplexarea a m semnale analogice de intrare se ob ține prin multiplicarea cu m
a perioadei de achizi ție minime caract eristice ansamblului CEM -ADC.

Figura 2.4. Structura unui sistem de achizi ție de date cu multiplexarea
semnalelor analogice de intrare

14

CAPITOLUL 3. SENZORI TIP ICI UTILIZA ȚI ÎN STA ȚIILE
METEO

3.1. NOȚIUNI ELEMENTARE PRIVIND SENZORII ȘI TRADUCTOARELE

SENZORI

Ca o scurtă istorie, cuvântul senzor provine din latinescul sensus care
înseamnă sim ț, cu sensul de a sim ți, a percepe și a distinge cu ajutorul sim țurilor
umane.
Dezvoltarea automatizării sistemelor de produc ție implică folosirea unor
dispozitive care să primească și să transmită informații cu privire la procesele de
producție. Îndeplinind aceste func ții, importan ța senzorilor în procese de măsurare
și control a crescut în ultima perioadă . Datorită evolu ției electronicii, informaticii,
senzorii sunt din ce în ce mai varia ți și complecși, prezentând performan țe foarte
bune dar și forme fizice cât mai mici.
Senzorul reprezintă componenta care converte ște o mărime fizică (exemplu:
temperatură, presiune, distan ță) într -o mărime u șor de analizat. Senzorii pot opera
cu ajutorul unui contact ( de exemplu un comutator) sau fără contact (de exemplu
un senzor magnetic).

O clasificarea generală a senzorilor ar fi următoarea:

 senzori parametrici rezistivi : reprezintă senzorii la care mărimea de măsurat
produce o varia ție a rezisten ței electrice R a senzorului iar rezisten ța electrică a
acestui tip de senzori este dată de rela ția (3.1). Variația rezisten ței electrice
rezultă prin varia ția unuia din parametrii prezen ți în relația următoare.
𝑅=𝜌∙𝑙
𝑆 (3.1)
unde:
R – rezinsten ța conductorului;
l – lungimea conductorului;
S – secțiunea;
ρ – rezistivitatea materi alului.

15

Senzorii rezistivi se clasifică în funcție de varia ția unuia din parametrii din
relația 3.1 după cum urmează:
– senzori rezistivi la care varia ția rezisten ței rezultă prin varia ția lungimii
conductorului:
– senzori tensometrici;
– senzori poten țiometrici;
– senzori rezistivi cu contacte.
– senzori rezistivi la care varia ția rezisten ței rezultă prin varia ția rezistivită ții
materialului:
– senzori fotorezistivi;
– senzori de umiditate;
– senzori termorezistivi, etc.
– senzori rezistivi la care varia ția rezisten ței rezultă prin varia ția secțiunii
transversale a unui conductor sau semiconductor:
– senzori cu electrolit (element rezistent).

 senzori parametrici inductivi : converte ște mărimea de măsurat(neelectrică)
într-o mărime electrică, și anume inductivitatea. Inductivatea unei bobine
este dată de rela ția (3.2).
𝐿=𝑁2
ℜ𝑚=𝑁2
∑𝑙𝑘
𝜇𝑘𝑆𝑘𝑛
𝑘=1 (3.2)
unde:
L reprezintă inductivitatea bobinei ;
N este numărul de spire;
ℜm reprezintă reluctan ța magnetică și are formula ℜ𝑚=𝑙
µ∙𝐴, unde A este aria
secțiunii transversale și l este lungimea medie a liniilor de câmp prin circuitul
magnetic;
lk reprezintă lungimea unei sec țiuni k a circuitului magnetic;
μk reprezintă permeabilitatea magnetică a sec țiunii k;
Sk reprezintă aria sec țiunii k.

16

Mărimea neeelectrică poate fi: lungimea întrefierului sau aria sec țiunii
întrefierului, în ambele cazuri producându -se o varia ție a reluctan ței magnetice,
adică mărimea neeelectrică care determină pozi ția armăturii este transformată în
variație de inductivitate.

Acest tip de senzori se clasifi că în senzori inductivi la care:
– este influen țată o singură inductivitate. Aici avem senzorii:
 senzori inductivi cu armătură mobilă;
 senzori inductivi cu miez mobil.
– este influen țată per meabilitatea magnetică:
 senzori inductivi de tip presductor.
– sunt influen țate două inductivităti:
 senzori inductivi cu bobine diferen țiale.
– sunt in fluențate inductivită ți mutuale. Aici î ntalnim următoarele tipuri de
traductoare inductive:
 traductor inductiv de tip transformator diferen țial;
 traductor inductiv de tip resolver;
 traductor inductiv de tip inductosin.

 senzori parametrici capacitivi : converte ște mărimea de măsurat(neelectrică)
într-o variație de capacitate electrică. Ace știa pot fi:
– cilindrici;
– plani.
Senzorii capacitivi cilindrici sunt caracteriza ți de rela ția (3.3) iar cei plani de
relația (3.4).
𝐶=𝜀∙2𝜋∙ℎ
𝑙𝑛𝐷
𝑑 (3.3)
𝐶=𝜀∙𝑆
𝑑 (3.4)
unde:
ε=ε0∙εr reprezintă permitivitatea electrică iar ε0 și εr este permitivitatea
vidului, respectiv a mediului;

17

h reprezintă înăl țimea de suprapunere a armăturilor;
D reprezintă diametrul armăturii exterioare;
d reprezintă diametrul armăturii interioare;
S reprezintă ari a suprafe ței de suprapunere a celor două armături.
Aici întâlnim senzorii:
– senzori capacitivi cu varia ția distan ței dintre armături;
– senzori capacitivi cu varia ția suprafe ței de suprapunere a celor două
armături;
– senzori capacitivi cu varia ția permeativită ții mediului.
 senzori cu fibre optice;
 senzori biologici: acet tip de senzori este utilizat în domeniul medical și al
biotehnologiei.
 senzori pentru robo ți;
 senzori generatori : reprezintă acei senzori la care mărimea de măsurat este
transformată direct în tensiune electrică . Clasificarea acestor senzori este
prezentată în figura 3.1.

Figura 3.1. Clasificarea senzorilor generatori

18

În figura 3.2 avem prezentate principiile fizice ale senzorilor gen eratori,
precum și mărimile ce se doresc a fi măsurate.

Figura 3.2. Principii le fizice folosite în pr oiectarea senzorilor generatori

 senzori chimici : sunt utiliza ți în detec ția gazelor, ionilor, dar și în măsurarea
umidității; acestea fiind și cele trei tipuri principale de mărimi detectate de
acest tip de senzori . Mărimile chimice măsurate cu ajutorul senzorilor chimici
sunt transformate de obicei în mărimi electrice.

În figura 3.3. avem sectoare și domeniile de aplicabilitate specifice senzorilor
chimici , precum și câteva exemple .

19

Figura 3.3 . Domeniile de aplicabilitate ale senzorilor chimici

Aceștia la rândul lor clasificându -se într -o varietate de senzori utiliza ți în
diverse domen ii industriale sau de cercetare a șa cum se poate observa în schema
de mai jos.

Semnale de ie șire caracteristice ale senzorilor
Cunoașterea semnalelor de ie șire ale senzorilor este esen țială în utilizarea
corectă a acestor componente. Se întâlnes c următoarele tipuri de semnale:
 semnal de ieșie binar – semnal de tip A. Aici întâlnim senzorii de temperat ură,
de proximitate, de presiune, de nivel și pot fi conecta ți direct la un controler
logic programabil (PLC -programmable logical controller).
 semnal pulsatoriu – semnal de tip B. Exemplu: senzori de cre ștere a lungimii
și a unghiului de rota ție.
 semnal an alogic – semnal de tip C : semnal care nu trebuie evaluate imediat.
Aici întâlnim senzorii piezoelectrici(piez orezistivi) și senzorii magnetici.
 semnal de tip D – semnal analogic care trebuie evaluat imediat. Valorile tipice
ale acestui semnal sunt cuprinse între 0 si 10V.

20

 semnal de tip E. Acest tip de semnal este dat de senzori și de sistemele de
senzori care furnizează semnale de ie șire standardizate (exemplu: RS -232-C).
Exemple de senzori care dă la ie șire semnale electrice binare: senzori de
temperatură, senzori de proximitate, senzori de nivel , senzori de presiune.
Exemple de senzori analogici care dă la ie șire semnale electrice analogice
(tensiuni sau curen ți): senzori pentru mișcare lineară sau de rota ție, senzori pentru
lungime sau distan ță, senzori de deplasare , senzor i de for ță, senzori de
temperatură, senzori de presiune, senzori de nivel, senzori optici, etc.

SENZORI TERMOREZISTIVI

Acești senzori se bazează pe propietatea materialelor semiconductoare și a
materialelor conductoare de a -și modifica rezistivitatea electrică la varia ția
temperaturii. Rezistivitatea materialelor semiconductoare scade odată cu cre șterea
temperaturii iar rezistivitatea materialelor conductoare cre ște odată cu cre șterea
temperaturii. Reprezenta rea grafică este prezentată în figura 3.4.

Figura 3.4 . Variația rezisten ței cu temperatura pentru meta le și materiale
semiconductoare

Întâlnim două tipuri de senzori termorezistivi și anume: termorezistoarele și
termistoarele. Termorezistoarele sunt rezistoare realizate din metale pure cum ar:
Platina, Cupru, Nichel și au caracteristici de conversie liniare pe intervale mari de
temperatură.

21

Rezisten ța senzorului este func ție de temperatură (R=R(θ)) iar dezvoltată în
serie Taylo r devine:

𝑅=𝑅0(1+𝛼∙∆𝜃+𝛽∙∆𝜃2+⋯) (3.5)

unde:
R – rezistența electrică la temperatura θ
R0 – rezistența electrică la temperatura θ0 (temperatură de referin ță)
α, β – coeficien ții de varia ție ai rezisten ței cu temperatura și au valori
constante pentru anumite intervale de temperatura.
Astfel, pentru un interval mai mare de temperatură se folose ște utilizarea
relației dezvoltată în serie Taylor până la termenii de ordin doi iar pentru un interval
de temperatură restrâns, coeficientul α se c onside ră constant iar rela ția (3.5)
devine:

𝑅=𝑅0(1+𝛼∙∆𝜃) (3.6)

dar în practică coresponden ța rezinsten ță-temperatură se face pe baza unor tabele
standardizate care arată această coresponden ță din zece în zece grade ci nu nu pe
baza rela ției matematice.
Termistoarele sunt realizate din materiale semiconductoare care prezintă
modificării ale rezisten ței cu temperatura.
Dependen ța rezisten ței de tem peratură este dată de rela ția (3.7).

𝑅=𝑅0𝑒(𝑏
𝑇−𝑏
𝑇0) (3.7)

R0 – rezistența electrică la T0 (temperatura absolută)
b – constanta de material și are o valoare cuprinsă între (3000÷5000)K
Relația sensibilită ții unui termistor este următoarea și se observă că scade cu
pătratul temperaturii iar intervalul de utilizare (sensibilitate ridicată) este intervalul
temperaturilor relativ mici.

𝑆=−𝑅𝑏
𝑇2 (3.8)

22

Termistoarele sunt destul de utilizate în instala ții de măsurare dar și în
insta lațiile de reglaj automat. Ele permit măsurarea temperaturii în intervalul ( –
70÷250) ℃ cu condi ția liniarizării ca racteristicii de conversie.

Avantajele termistoarelor :
– pot fi realizate cu o rezisten ță foarte mare(până la 200kΩ ) la o temperatură
de 20℃;
– sunt realizate din sfere cu diametrul sub 1mm de unde rezultă un timp de
măsurare foarte mic și nu produce perturba ții câmpului de temperaturi.

SENZORI PIEZOREZISTIVI

Senzorii piezorestivi fac parte din senzorii parametrici rezistivi și au la bază
efectul piezoelectric ce constă în varia ția rezistivită ții unui material dacă este supus
unei presiuni exterioare. Variația rezistivită ții cu presiunea este datorată
deformărilor retelelor cristaline ale materialului produse de presiunea aplicată
(figura 3.5), schimbările de rezisten ță producându -se pentru varia ții statice și
dinamice.

Figura 3.5 . Senzor piezorezistiv

Pentru majoritatea metalelor și a intervalelor limitate de varia ție ale presiunii,
rezistența electrică, R variază liniar cu presiunea. Acest lucr u se poate observa în
relația (3.9).

23

𝑅=𝑅0(1+𝑏∆𝑝) (3.9)

unde:
R0 – rezistența la presiunea de 1atm ( atmosferă)
b – coeficient de presiune.

În tabelul următor avem prezenta ți coeficien ți de presiune pentru diferite
materiale.

MATERIALE COEFICIENT DE PRESIUNE [atm]
ALUMINIU −𝟒∙𝟏𝟎−𝟔
ARGINT −𝟑,𝟑∙𝟏𝟎−𝟔
CUPRU −𝟏,𝟖∙𝟏𝟎−𝟔
FIER −𝟐,𝟑∙𝟏𝟎−𝟔
PLATINĂ −𝟏,𝟗∙𝟏𝟎−𝟔
MANGANINĂ +𝟐,𝟑∙𝟏𝟎−𝟔
ANTIMONIU +𝟏𝟏,𝟏∙𝟏𝟎−𝟔

Tabel 3.1. Coeficien ții de presiune pentru diferite metale

Utilizarea acestui tip de senzori în traductoarele pentru măsurarea presiunii
se face diferen țiat, constructiv sau tehnologic, în func ție de tipul de presiune
masura tă, absolută sau diferen țială.
Pe plan mondial se utilizează două tipuri de elemente piezorezistive:
– elemente ob ținute prin siliciu difuzat;
– elemente ob ținute prin depuneri în vid de pastile de siliciu pe un suport.

Avantaje ale senzorilor piezorezistivi :
 senzorii piezorezistivi sunt simpli și robuști;
 au timp de răspuns mic;
 histerezis neglijabil;

24

Dezavantaj în utilizarea senzorilor piezorezistivi :
 prezintă dificultă ți la realizarea legăturilor electrice prin pere ții camerei de
presiune.
Senzorii piezorestivi sunt utiliza ți pentru măsurarea presiunilor mari și foarte
mari (1000÷100000 atm).

TRADUCTOARE

Traductorul reprezintă elementul care transformă mărimea de măsurat de la
intrare într -o mărime electrică. Acesta poate avea în componen ța sa unul sau mai
mulți senzori. Clasificarea traductoarelor este prezentată în figura 3.6.
Transformarea mărimii de la intrare se face prin două metod e și anume:
– prin transformare directă într -un singur element;
– prin transformare indirectă (în caz că sunt necesare mai multe transformări
succesive ale mărimii de la intrare).

Figura 3.6. Clasificarea traductoarelor

25

Schema bloc specifică traductoarelor este prezentată în figura 3.7, unde: X
reprezintă o mărime de intrare, adică mărimea de măsurat( exemplu: temperatură,
umiditate, presiune, distan ță, nivel, etc) siY reprezintă mărimea de ie șire, și anume
un semnal elec tric.

Figura 3.7. Schema bloc a unui traductor
Senzorul reprezintă elementul sensibil specific fiecărui traductor pentru
detectarea mărimii fizice de măsurat. El detecteaza doar mărimea X, reducând sau
chiar eliminând la minim influen țele celorlalte mărimi fizice prezente în mediul
respectiv. Sub acțiunea mărimii X se produce o modificare a senzorului, la ie șirea
lui obtinându -se informa ția utilă sub formă de semnal electric pentru determinarea
valorii acestor mărimi.
Adaptorul electronic are rolul de a prelua informa ția obținută la ie șirea
senzorului și de a o adapta conform cerin țelor impuse de aparatura care o
utiliz ează.
Pentru măsurarea temperaturilor foarte mari este necesar să avem elemente
auxiliare deoarece senzorul nu poate fi lângă adaptor. Sunt utile elementele de
legătură și transmisie în astfel de situa ții; aceste elemente transmit semnalul de la
senzor la adapto r. Un alt element auxiliar este și sursa de energie. O schemă bloc
în care sunt incluse elementele de legatură și transmie este prezentată în figura
3.8.

Figura 3.8. Schemă bloc a unui traductor cu elemente auxi liare

26

Traductorul poate fi definit cu ajutorul a două tipuri de caraceristici de transfer .
Acestea sunt:
– Caracteristica statică dată de rela ția y=f(x), unde x și y sunt mărimile de
intrare, respectiv
ieșire și care îndeplinesc cerin țele măsurării statice.
– Caracteristic a static ă liniară unidi recțională și caracteristica statică
proporțională bidirec țională sunt reprezentat e în figura următoare și au
expres iile (3.9) și, respectiv ( 3.10).

𝑦=𝑘(𝑥−𝑥0)+𝑦0 cu 𝑥≥𝑥0, 𝑘=𝑡𝑔𝛼 (3.9)

𝑦=𝑘𝑥 ,𝑘=𝑡𝑔𝛼 (3.10)

Figura 3.9. Caracteristică statică liniară unidirec țională (a) și proporțională
bidirecțională (b) a traductoarelor

27

În afară de cele prezentate, există mai multe tipuri de caracteristici statice pe
care doar le vom enumera:
– Caracteristică statică liniară pe por țiuni cu zona de insensibilitate și
saturație;
– Caracteristică statică liniară pe por țiuni cu zona de insensibilitate, histerezis
și saturație;
Caracteristica dinamică: mărimea de intrare și măr imea de ie șire variază în
timp. Considerând traductorul un element liniar ( ca în figura 3.10 ), cu o intrare
și o ieșire, func ționarea sa în regim dinamic este descrisă de expresia ( ecuație
diferențială) următo are:

∑ 𝑎𝑘𝑦(𝑘)(𝑡)=∑ 𝑏𝑦𝑥(𝑞)(𝑡)𝑚
𝑞=0𝑛
𝑘=0 (3.11 )

unde,

𝑥(𝑞)(𝑡), 𝑦(𝑘)(𝑡) reprezintă derivatele în raport cu timpul de ordinul q și k ale
x(t) și y(t);
ak și bq – coeficien ți, fiind invariant, dacă nu apar modificări în timp ale
comportării dinamice.

Figura 3.10. Schema unui traductor în regim dinamic

Traductorul ideal are fi acela la care nu avem componente tranzitorii,
rezultând la ie șire variații corespunzătoare caracteristicii statice. În regim dinamic,
traductorul con ține o componentă permanentă și una tranzitorie.

28

Mai există o clasificarea a traductoarelor, și anume clasifica rea în func ție de
ordinul ecua ției diferen țiale. Aici întâlnim:
– Senzori și traductoare de ordin 0;
– Senzori și traductoare de ordin I;
– Senzori și traductoare de ordin II.

3.2. SENZORI UTILIZA ȚI PENTRU REALIZAREA STA ȚIEI METEO

Pentru realizarea practică a stației meteo cu Arduino am folosit următoarele
tipuri de senzori: senzor de temperatură și umiditate DHT11 și senzor de presiune
atmosferică BMP180 .

SENZORUL DE TEMPERATURĂ ȘI UMIDITATE DHT11

Aspecte generale
Senzorul de temperatură și umiditate DHT11 prezintă un senzor de
temperatură și umiditate complex cu o ie șire calibrată a semnalului. Folosind
tehnica exclusivă de achizi ție a semnalului digital și tehnologia de detec ție a
temperaturii și a umidită ții, senzorul asigură o fiabilit ate ridicată și o stabilitatea
excelentă pe termen lung. Acest tip de senzor include o componentă de măsurare a
umidității și o componentă de măsurare a temperaturii (termistor) și se conectează
la un microcontroler pe 8 bi ți de înaltă performan ță, oferind o calitate excelentă, un
răspuns rapid, capacitatea de combatere a interferen țelor și costuri reduse.

Senzorul DHT11 și pinii săi sunt prezenta ți în figura 3.11.

29

Figura 3.11. Senzorul DHT11 și pinii săi

Fiecare senzor de temperatură și umiditate este strict calibrat în laborator,
ceea ce rezultă că este destul de precis la calibrarea umidită ții. Coeficien ții calibrării
sunt stoca ți ca programe în memoria OTP, care sunt folosite de procesul de
detectare a semnalui intern al senzorului.
Interfața seria lă cu un singur fir face integrarea sistemului mai u șoară și
rapidă. Dimensiunile mici, consumul de energie mic și transmisia semnalului pînă
la 20 de metri fac din acest senzor cea mai bună alegere privind utiliarea lui în
diverse aplica ții, inclusiv cele mai solicitante.
Componenta prezintă patru pini dispu și pe un singur rând. Este convenabil
să se conecteze și pot fi furnizate pachete speciale în func ție de cerin țele clienților.
Acest tip de senzori măsoară umiditatea relativă analizând vaporii de apă din
aer prin măsurarea rezisten ței electrice dintre doi electrozi. Schimbarea rezisten ței
electrice dintre cei doi electrozi este propor țională cu umiditatea relativă. Când
umiditatea relativă este mai mică cre ște rezisten ța electrică dintre cei doi electr ozi,
când umiditatea relativă este mai mare scade rezisten ța electrică dintre cei doi
electrozi.
Umiditatea relativă reprezintă cantitatea vaporilor de apă fa ță de punctul de
saturație al vaporilor de apă. La satura ție, vaporii de apă încep să se condensez e.
Înainte ca aerul rece să devină saturat, el poate să men țină mai pu țini vapori de
apă și mai multi cînd acesta începe să se satureze.
Umiditatea relativă se exprimă în procente și se calculează după formula :

UR= (𝜌𝑤
𝜌𝑠)∙100% ( 3.12)

30

unde:
ρw – densitatea vaporilor de apă
ρs – densitatea vaporilor de apă la satura ție
UR – umiditatea relativă
Dacă umiditatea relativă este maximă (100%) atunci are loc condensarea iar
dacă umiditatea relativă este minimă (0%) atunci aerul este complet uscat.

Interfața serială
Formatul de date single bus (o singură magistrală) este utilizat pentru
sincronizarea și comunicarea dintre microcontroler și senzorul de temperatură și
umiditatea DHT11. Un proces de comunicare este în jur de 4 milisecunde.
Datele sunt alcătuit e din păr ți integrale și părși zecimale. O transmisie
completă a datelor este de 40 bi ți iar senzorul DHT11 trimite primul bit de date mai
mare.
Formatul datelor este:
date integrale UR pe 8b+date zecimale UR pe 8b+date integrale T pe 8b+date
zecimale T pe 8b+suma de verificare pe 8b ,
iar dacă transmiterea datelor se face corect, atunci suma de verificare ar trebui să
fie ultimul 8 bit din:
date integrale UR pe 8b+date zecimale UR pe 8b+date integrale T pe 8b+date
zecimale T pe 8b .

Proces general de comunicare
Procesul este reprezentat în figura ( ) iar explica ția este următoarea: când
microcontrolerul trimite un semnal de start (pornire), senzorul DHT11 trece din
modul de consum redus de energie la modul de func ționare, a șteptînd c a
microcontrolerul să completeze semnal de start. Odată ce s -a terminat, senzorul
trimite un semnal de răspuns de date pe 40 de bi ți care include informa țiile
microcontrolerului privind umiditatea relativă și temperatura. Utilizatorii pot alege
să citeasca anumite date. Fără semnalul de start de la microcontroler, senzorul nu
va da răspuns către microcontroler. Odată ce datele sunt colectate, senzorul DHT11
se va schimba din modul de consum redus de energie până când prime ște din nou
semnal de start de la m icrocontroler.

31

Figura 3.12 . Proces general de comunicare

SENZORUL PRESIUNE ATMOS FERICĂ BMP180

Aspecte generale
Robert Bosch este lider pe pia ța mondială a senzorile de presiune în aplica țiile
auto. Bazându -se pe experien ța a patru sute de milioane de senzori de presiune în
domeniu, senzorul BMP180 continuă o nouă genera ție a senzorilor de presiune
microprelucra ți
Senzorul BMP180 reprezintă o nouă genera ție de senzori de presiune digitali
de înaltă precizie și se ba zează pe efectul piezorezistiv.

Figura 3.13. Senzorul BMP180

32

Electronica de joasă tensiune a senzorului BMP180 este optimizată pentru
utilizarea în telefoane mobile, dispozitive de naviga ție GPS (Global Positioning
System – Sistem de Pozi ționare Globală), PDA -uri ( Personal Digital As sistant) și
echipam ente exterioare. Cu un zgomot redus de altitudine de doar 0,25m la un
timp de conversie rapid, senzorul BMP180 oferă o performantă superioară. Interfa ța
I2C (sau IIC – INTER INTEGRATED CIRCUIT) permite o integrare usoară a
sistemului cu microcontrolerul.

Descrierea generală a modului de func ționare
Senzorul BMP180 este proiectat pentru a putea fi conectat direct la un
microcontroler a unui dispozitiv m obil prin intermediul magistralei I2C. Datele
privind presiunea și temperatura trebuie să fie compensate de datele de calibrare
ale memoriei EEPROM ( E2PROM) din senzorul BMP180.

Funcțiile generale ale senzorului
BMP180 este compus dintr -un senzor piezorezistiv, un convertor analog –
digital și o unitate de control cu memorie EEPROM și interfața seriala I2C (figura ).
Senzorul BMP180 oferă valoarea necompensată a temperaturii și a presiuni.
Memoria EEPROM a re stocați 176 de biti de date individuale de calibrare. Aceasta
este folosită pentru a compensa offsetul, dependen ța de temperatură și alți
parametrii ai senzorului. Date de presiune: 16 -19biți și de temperatură: 16 bi ți

Figura 3.14. Schemă generală BMP180

33

Măsurarea presiunii și a temperaturii
Microcontrolerul trimite secven ță de start pentru a începe măsurarea
presiunii și a temperaturii. După timpul de conversie, valorile rezultate (presiunea
sau temperatura) pot fi citite prin intermediul interfe ței I2C. Pentru calcularea
temperaturii în grade Celsius și a presiunii în hectoPascali (hPa), trebuie utilizate
datele de calibrare. Aceste constante pot fi citite din memoria EEPROM a senzorului
BMP180 prin intermediul interfe ței I2C la inițializarea software -ului.
Rata de e șantionare poate f i crescută până la 128 e șantioan e pe secundă
(modul standard) pentru măsurare dinamică. În acest caz, este suficientă
măsurarea temperaturii o singură dată pe secundă și să folosirea acestei valori
pentru toate măsurătoril e de presiune în aceea și perioadă.

Figura 3.15. Organigrama de lucru senzorului BMP180

34

Există patru moduri: ultra low power, standard, high resolution și ultra high
resolution. Fiecărui mod îi corespunde un anumit timp de conversie ( se poate
observa în foaia de date a senzorului).
Toate modurile pot fi efectuate la viteză maximă, până la 128 ori pe secundă
pentru modul standard, cu consumul de curent crescând propor țional cu rata de
eșantionare.
Calculul presiunii la nivelul mării și al altitudinii se face cu următoarele
formule interna ționale:

Calculul altitudinii

𝑎𝑙𝑡𝑖𝑡𝑢𝑑𝑖𝑛𝑒𝑎 =44330 ∙(1∙(𝑝
𝑝0)1
5,255) (3.13)

Calculul presiunii la nivelul mării

𝑝𝑟𝑒𝑠𝑖𝑢𝑛𝑒 =𝑝
(1∙𝑎𝑙𝑡𝑖𝑡𝑢𝑑𝑖𝑛𝑒
44330)5,255 (3.14)

Interfața I2C este utilizată pentru controlul senzorului, pentru citirea datelor
de calibrare din memoria EEPROM și pentru citirea datelor de măsurare atunci
când conversia A/D este terminată.
Diagramele de timp specifice măsurării valorii de temperatură UT și a
măsurării valorii de presiune UP sunt prezentate în figura ( ). După condi ția de
start, masterul trimite adresa de scriere a dispozitivului adresa registrului și datele
din registru de control. Senzorul BMP180 trimite o confirmare (ACKS -acknowledge
by slav e) după fiecare 8 bi ți de date când sunt primite datele. Master trimite o
condiție de stop (P) dupa fiecare ultim ACKS.

35

Figura 3.16. Pornirea măsurării presiunii

Pentru citirea cuvântului de date de temperatura UT (16 bi ți), cuvântul de
date de pres iune UP și citirea datelor EEPROM se face după cum urmează: după
condiția de start(S)master trimite comanda de scriere a adresei modulului și adresa
registrului. Adresa registrului selectează registrul de citire. Apoi master trimite o
condiție de reporrnire, urmată de citirea adresei modului care va fi confirmată de
BMP180 (ACKS). BMP180 trimite prima dată cei mai semnificativi 8 bi ți (8MSB),
confirma ți de master (ACKM -acknowledge by master) , apoi trimite cei 8 LSB ( 8 bi ți
mai puțin semnificativi ). Master trimite un mesaj ”not acknowledge” (NACKM -not
acknowledge by master) și în cele din urmă o condi ție de stop.

Figura 3.17. Diagrama de timp a rezultatelor conversiei A/D pe 16 bi ți

Toate informa țiile se transmit cu ajutorul magistralei I2C, mai exact cu
ajutorul conexiunilor SDA (seria l data line) și SCL (serial clock line) dar și
conexiunea de masă.

36

CAPITOLUL 4. PROIECTAREA HARDWARE

4.1. PROIECTAREA SCHEMEI BLOC
Schema bloc corespunzătoare sta ției meteo cu Arduino este prezentată în
figura 4.1 și cuprinde următoarele componente:
 Senzorul DHT11 pentru măsurarea temperaturii și a umidită ții relative;
 Senzorul BMP180 pentru măsurarea presiunii atmosferice, a temperaturii și
a altitudinii;
 RTC – ceas în timp real pentru memorarea și incrementarea automata a
timpului și a dății;
 Buzzer pentru generarea de sunete în momentu depă șirii valorile critice
stabilite;
 Afișaj LCD pentru afi șarea valorilor măsurate, dar și a timpului și a dății;
 Blocul de alimentare.

Figura 4.1. Schema bloc a sta ției meteo

37

4.2. PĂRȚI COMPONENTE

Pe lângă senzorul de temperatură și umiditate DHT11 și senzorul pentru
măsurarea presiunii atmosferice BMP180 prezenta ți în capitolul anterior, în
realizarea acestui proiect am mai adaugat și următoarele componente:
afișaj LCD;
– modul RTC DS1307 – ceas în timp real;
– buzzer;

AFIȘAJUL LCD

Afișajul LCD (figura 4.2) este util pentru a afi șa datele primite de la senzorii
care măsoară temperatura, umiditatea și presiunea atmosferică , pentru afi șarea
textului dorit , dar și pentru a afi șa timpul și data .

Figura 4.2. Afișaj LCD 2.4”

Conectarea acestuia este u șoară, modulul înfingându -se pur și simplu în
placa de dezvoltare, acest lucru putând fi observat în figura 4 .3.

38

Figura 4.3. Conectarea afișajului la placa de dezvoltare Arduino MEGA

Caracteristici tehnice:
o Diagonală display 2,4” (aproximativ 6,1 cm);
o Rezoluție 240×320 (Qvga);
o Număr de culori 65.000;
o Interfață de 8bit cu 4bit de control;
o Driver: ILI9325D.
Conectarea pinilor afi șajului LCD 2.4” la placa de dezvoltare Arduino Mega se
face ca în tabelul 4.1.

PINI AFI ȘAJ LCD PINI ARDUINO MEGA
GND → GND
5V → 5V
3,3V → 3,3V
LCD_RD → A0
LCD_WR → A1
LCD_RS → A2
LCD_CS → A3
LCD_RST → A4

39

PINI AFI ȘAJ LCD PINI ARDUINO MEGA
LCD_RD → A5
LCD_D0 → 8
LCD_D1 → 9
SD_SS → 10
SD_DI → 11
SD_DO → 12
SD_SCK → 13
LCD_D2 → 2
LCD_D3 → 3
LCD_D4 → 4
LCD_D5 → 5
LCD_D6 → 6
LCD_D7 → 7

Tabel 4.1. Conectarea pinilor afi șajului LCD la Arduino Mega

MODUL CEAS ÎN TIMP REAL

Ceasul serial în timp real DS1307 (RTC) – figura 4.4 este un ceas /calendar
zecima l cu codificare binară completă . Adresa și datele sunt transferate în serie prin
magistrala bidirecțională I2C.

Ceasul /calendarul oferă informa ții despre secunde, minute, ore, zi, dată,
lună și an. Data de sfâr șit a lunii este ajustată automat pentru luni cu mai pu țin
de 31 de zile, inclusiv corec țiile pentru anul bisect. Ceasul func ționează în formatul
de 24 de ore sau 12 ore cu indicatorul AM / PM.

40

Dispozitivul DS1307, prezentat în figura 4 .4 are un circuit integrat, care
detectează defec țiunile de alimentare și trece automat la sursa de rezervă. Opera ția
de menținere a timpului continuă în timp ce piesa func ționează din sursa de
rezervă.

Figura 4.4. Ceas în timp real RTC DS1307

În figura 4.5 este prezentat un circuit tipic de conectare a modulelor RTC
DS1307 la microcontrolere.

Figura 4.5. Circuit tipic de conectare a modului DS1307 la microcontrolere

41

DESCRIERE DETALIATĂ A MODULUI RTC DS1307

CIRCUITUL OSCILATOR
– DS1307 utilizează un cristal extern de 32.768kHz.
– Precizia ceasului depinde de precizia cristalului.
– Zgomotul circuitului extern cuplat în circuitul oscilatorului poate duce la o
funcționare rapidă a ceasului.

CEAS ȘI CALENDAR
– Informațiile despre timp și calendar sunt ob ținute prin citirea bi ților de
registru corespunzători.
– Timpul și calendarul sunt setate sau in ițializate prin scrierea bi ților de
înregistrare corespunzători.
– Conținutul înregistrărilor de timp și calendar este în format BCD.
– Creșterea înregistrărilor zilei de săptămână la miezul nop ții.
– Valorile care corespund zilei din săptămână sunt definite de utilizator, dar
trebuie să fie secvențiale (adică, dacă 1 este egal cu duminica, atunci 2 este
egal cu luni și așa mai departe).

MAGISTRALA DE DATE I2C
DS1307 acceptă protocolul I2C. Un dispozitiv care trimite date pe magistrală
este definit ca un transmi țător și un dispozitiv care pri mește date ca receptor.
Dispozitivul care controlează mesajul se nume ște master. Dispozitivele controlate
de comandant sunt numite slave. Magistrala trebuie să fie controlată de un
dispozitiv principal care generează ceasul serial (SCL), controlează accesu l la
magistrală și generează condi ții de START și STOP. DS1307 func ționează ca un
slave pe magistrala I2C. Figura 4.6 detaliază modul în care sunt transferate datele
pe magistrala I2C.
Transferul de date poate fi ini țiat numai atunci când magistrala nu est e
ocupată. În timpul transferului de date, linia de date trebuie să rămână stabilă ori
de câte ori linia ceasului este HIGH. Modificările din linia de date în timp ce linia
de ceas este mare vor fi interpretate ca semnale de control. În consecin ță, au fost
definite următoarele condi ții de transport:
 Magistrala nu este ocupată: ambele linii de date și de ceas rămân HIGH.

42

 Transferul de date START: O schimbare a stării liniei de date, de la HIGH la
LOW, în timp ce ceasul este HIGH, define ște o condi ție START.
 Transferul de date STOP: o modificare a stării liniei de date, de la LOW la
HIGH, în timp ce linia ceasului este HIGH, define ște starea STOP.
 Starea liniei de date reprezintă date valide atunci când, după o condi ție
START, linia de date este stabilă pe du rata perioadei HIGH a semnalului de
ceas. Datele de pe linie trebuie schimbate în perioada LOW a semnalului de
ceas. Există un impuls de ceas pe un octet de date.
Fiecare transfer de date este ini țiat cu o condi ție START și terminat cu o
condiție STOP. Num ărul de bi ți de date transfera ți între condi țiile START și STOP
nu este limitat și este determinat de dispozitivul principal. Fiecare dispozitiv de
recepție, atunci când este adresat, este obligat să genereze o confirmare după
recepția fiecărui octet. Disp ozitivul master trebuie să genereze un impuls ceas
suplimentar care este asociat cu acest octet de confirmare. Un master trebuie să
semnaleze un sfâr șit de date către slave. În acest caz, slave -ul trebuie să părăsească
linia de date HIGH pentru a permite m asterului să genereze starea STOP.

Figura 4.6. Transferul datelor pe magistrala I2C

În funcție de st area octetului R / W (read/write), sunt posibile două tipuri de
transfer de date:
 Transferul datelor de la master la slave. Primul octet transmis de master este
adresa slave. Apoi urmează un număr de octe ți de date. Slave -ul returnează

43

un bit de confirmare după fiecare octet primit. Datele sunt transferate mai
întâi cu cel mai semnificativ bit (MSB).
 Transferul de date de la un transmi țător slave la un receptor principal. Primul
octet (adresa slave) este transmis de master. Slave returnează apoi un bit de
confirmare. Aceasta este urmată de slave care transmite un număr de octe ți
de date. Master returnează un octet de confirmare după toate octe ții
recepționați, alții decât ultimul octet. La sfâr șitul ultimului octet recep ționat,
este returnat un "non acknowledgment".
Dispozitivul master generează toate impulsurile de ceas serial și condițiile
START și STOP; un transfer este încheiat cu o condi ție STOP sau cu o condi ție
START repetată.
DS1307 poate func ționa în următoarele două moduri:
 Modul Receptor Slave (Mod scriere): datele serial și ceasul sunt recep ționate
prin SDA și SCL. După fiecare octet este recep ționat un bit de confirmare.
START și STOP sunt recunoscute ca începutul și sfârșitul unui transfer serial.
Master va genera o condi ție STOP pentru a termina scrierea datelor.
 Modul Transmi țător Slave (modul de citire): Primul octet este recep ționat și
manipulat ca în modul receptor slave. C u toate acestea, în acest mod, bitul
de direcție va indica faptul că direc ția de transfer este inversată. DS1307
transmite date seriale pe SDA în timp ce ceasul serial este introdus pe SCL.
START și STOP sunt recunoscute ca începutul și sfârșitul unui tran sfer serial.
Octetul de adresă slave este primul octet primit după ce starea START este
generată de master. DS1307 trebuie să primească o notă de acknowledgment
pentru a încheia o citire.

UTILIZARE ÎMPREUNĂ CU ARDUINO MEGA
Pe scurt, modulul RTC este dispozitiv ce re ține ora. Circuitul integrat DS1307
este un modul ideal pentru memorarea și incrementarea automata a dă ții, anului,
zilei săptămânii și orei, atât în format AM, cât și PM. Chiar dacă i se întrerupe
alimentarea, acesta trece pe modul de back -up, consumând maxim 500 µA din
bateria ata șată. Acesta poate func ționa pe baterie până la 1 an. Circuitul comunică
pe interfa ță I2C cu plăcii de dezvoltar e Arduino sau microcontrollere.

44

Conectarea modului RTC DS1307 la placa de dezoltare Arduino MEGA se face
conform tabelului 4.2 , iar schema electrică de conectare se poate observa în figura
4.7.

PINI MODUL RTC PINI ARDUINO MEGA
GND → GND
VCC → 5V
SDA → SDA
SCL → SCL

Tabel 4.2. Conectarea ceasului în timp real la Arduino Mega

Figura 4.7 . Schema electrică de conectare a modulului RTC la Arduino MEGA

45

Caracteristici tehnice:
o Interfață serială I2C;
o Tensiune alimentare DS1307: 4.5V – 5.5V;
o Tensiune alimentare AT24C32: 2.7V – 5.5V;
o Consum curent DS1307: 1.5mA;
o Consum curent AT24C32: 3mA;
o Baterie CR2032 de backup.

Caracteristici și avantaje:
– Gestionează complet toate func țiile de men ținere a timpului;
– RTC contorizează secunde, minute, ore, data lunii, zilei săptămânii și anului
cu compensare de la jumătate de an (valabil până la 2100);
– Memorie RAM cu 56 de octe ți, bazată pe baterii cu scriere nelimitate;
– Funcționarea cu consum redus de energie extinde timpul de func ționare a
bateriei de rezervă;
– Consumă mai pu țin de 500nA în modul de rezervă a bateriei cu func ționarea
oscilatorului;
– Circuit automat de detec ție și întrerupere a alimentării cu energie electrică;
– Interval op țional de temperatură industrială: -40 ° C până la + 85 ° C;
– Suportă func ționarea într -o gamă largă de aplica ții.

MODUL BUZZER

Modulul cu buzzer activ (figura 4.8 ) este ideal pentru a testa aplica țiile și
poate fi conectat pe breadboard /cablaj . El conține un tranzistor pnp ce controlează
buzzerul, deci nu trebuie să ne mai facem griji privind microcontrolerul.
Buzzerul este elementul care supus unei tensiuni genere ază un semnal sonor
de o anumită frecven ță. Comanda buzzerului se face prin generarea unui semnal
dreptunghiular de comandă. Se utilizează un pin oarecare de ie șire digitală care va
genera un semna de 1 logic pentru o anumită durată de timp, influen țând as tfel

46

frecvența semnalului sonor emis de buzzer. Schema electrică este prez entată în
figura 4.9 .

Figura 4.8. Modul cu buzzer activ

Figura 4.9 . Schemă electrică buzzer

Caracteristici tehnici :
o Tensiunea de alimentare: 3,3V÷5V;
o Curent maxim:30mA;
o Tranzistor pnp: 9012.

47

Modulul cu buzzer activ are următoarele dimensiuni: 1,3cm x 3,3cm. Plăcu ța
este prevazută cu trei pini de conexiune și anume, VCC, GND și I/O. Pinul I/O se
conectează la microcontroler sau la o sursă de semnal dreptunghiular pentru a
genera alarma. Plăcu ța conține în baza tranzistorului o rezisten ță, astfel putând fi
conectat la microcontroler.

În tabelul următor este prezentată conexiunea pinilor modului cu buzzer la
placa Arduino Mega.

PINI MODUL CU BUZZER PINI ARDUINO MEGA
GND → GND
VCC → 5V
I/O → LA UN PIN DIGITAL

Tabel 4.3. Conectarea pinilor buzzerului la Arduino MEGA

Conectarea modului cu buzzer activ pe plăcu ța Arduino se face ca în figura
următoare.

48

Figura 4.10. Conectare a buzzerului la Arduino MEGA
ARDUINO

După cum bine știm, Arduino s -a lansat în Italia ( în anul 2005) și este o
companie care produce plăci de dezvoltare cum ar fi :
– Arduino UNO;
– Arduino MEGA;
– Arduino Leonardo:
– Arduino Nano, etc:

Placa de dezvoltare Arduino este compusă dintr -un microcontroler Atmel AVR
de 8/16/32 -biți și reprezintă o solu ție simplă pentru dezvoltarea diverselor aplica ții
electronice, fiind u șor de utilizat ( este u șor de programat și de integrat în aplica ții.

49

Programarea plăcu țelor se face cu ajutorul unui mediu de programare numit
Arduino IDE.

Cu ajutorul plăcu țelor Arduino se pot realiza numeroase aplica ții cum ar fi:
robot autonom, bra țuri robotic e, alarmă inteligentă, sta ție meteo, termometru,
sisteme de monitorizare pentru diverse obiecte sau chiar de monitorizarea
cutremurelor, producerea unor sunete cu ajutorul unui buzzer și multe altele.
Acestea la rândul lor putând fi dezvoltate în aplica ții mult mai complexe.

ARDUI NO MEGA

În lucrare am folosit placa de dezvoltare Arduino MEGA (figura 4.11 ) și este
prevăzută cu un microcontroler ATmega2560. Dispune de 54 de intrări/ie șiri
digitale (din care 14 pot fi utilizate ca ie șiri PWM), 16 intrări analogice, 4 UART
(porturi seriale hardware), un oscilator de cristal de 16 MHz, o conexiune USB, o
mufă de alimentare, și un buton de resetare.

Figura 4.11. Prezentare Arduino MEGA

Arduino Mega2560 poate fi alimentat prin conexi unea USB sau cu o sursă
externă de alimentare; sursa de alimentare este selectată automat. Alimentarea

50

externă (non -USB) poate proveni de la un adaptor ca-cc sau de la un acumulator
(baterie).

Placa poate func ționa pe o sursă externă de 6 până la 20 de volți. Dacă este
alimentată cu mai pu țin de 7V, totu și, pinul 5V poate furniza mai pu țin de cinci
volți, iar placa poate fi instabilă. Dacă se utilizează mai mult de 12V, regulatorul de
tensiune se poate supraîncălzi și poate deteriora placa. Intervalul re comandat este
de la 7 la 12 vol ți.

ATmega2560 sprijină, de asemenea, comunicarea I2C și SPI. Software -ul
Arduino include o bibliotecă Wire pentru simplificarea utilizării magistralei I2 C.

Caracteristici tehnice
o Microcontroler Atmega 2560;
o Tensiune de operare: 5V;
o Tensiune de alimentare recomandată: 7 -12V;
o 54 pini digitali, dintre care 14 pini asigură ie șirea PWM;
o 16 pini de intrare analogici;
o Viteză ceas: 16 MHz;
o SRAM 8kb;
o EEPROM 4kb.

În tabelul următor este prezentată descrie rea pinilor plăcii Arduino Mega.

DESCRIERE PINI ARDUINO MEGA
VIN tensiunea de intrare la placa Arduino când
utilizează o sursă externă de alimentare (spre
deosebire de 5 vol ți de la conexiunea USB)
AREF tensiunea de referin ță pentru intrările analogice
5V sursa de alimentare folosită pentru alimentarea
microcontrolerului și a altor componente de pe
placă.; poate fi furnizat de USB sau de o altă sursă
de alimentare cu 5 V

51

DESCRIERE PINI ARDUINO MEGA
3.3V pin de alimentare
GND pini de masă
A0÷A15 pini analogici de intrare
TX/RX pini folosiți pentru a recep ționa (RX) și a transmite
(TX) date seriale (Serial 0: 0 (RX) și 1 (TX); Serial 1:
19 (RX) și 18 (TX); Serial 2: 17 (RX) și 16 (TX); Serial
3: 15 (RX) și 14 (TX).)
0÷13 pini ce asigură ie șirea PWM pe 8 biți cu func ția
analogWrite()
SDA (20) și
SCL(21) asigură comunicarea cu I2C utilizând biblioteca
Wire
22÷53 pini digitali de intrare/ie șire

Tabel 4.4. Descriere pini Arduino Mega

4.3. INTERFA ȚAREA SENZORILOR

În acest capitol se va prezenta interfa țarea senzorilor cu placa de dezvoltare
precum și noțiuni despre interfe țele seriale I2C și SPI.

INTERAFA ȚA I2C

Interfața I2C (sau IIC -Inter Integrated Circuits sau cum este numită deseori,
TWI – two wire interface ) este o interfa ță serială apărută din necesitatea de a realiza
sisteme la pre ț redus cu microcontrolere , destinate în primul rând conducerii
proceselor industriale. Un asemenea sistem este compus dintr -un microcontroler
sau mai multe microcontrolere și o multitudine de echimanente periferice.
Conectarea acestora printr -o interfa ță serială satisface următoarele cerin țe: cost
redus, u șor de implementat și de viteză moderată.
Interfața I2C folosește doar două linii, de aceea mai este numită și interfața
pe două fire, și anume:

52

 SDA (Serial Data Line) – linie de date serială ;
 SCL (Serial Clock Line) – linie de ceas serială.
Protocolul de transfer al datelor pe magistrala I2C presupune ini țierea
transferului prin aducerea magistralei în condi ția de START, transferul propriu -zis
și încheierea transferului prin aducerea magistralei în condi ția de STOP. Cele două
condiții sunt ilustrate în figura 4.12; ele sunt întotdeauna generate de către master.
Condiția de START (S) este definită prin trecerea liniei SDA din 1 în 0, în timp
ce linia SCL este menținută la nivel ridicat.
Condiția de STOP (P) este definită prin trecerea liniei SDA din 0 în 1, în timp
ce linia SCL este men ținută la nivel ridicat.

Figura 4.12 . Definirea condi țiilor de Start și Stop.

Fiecare dispozitiv este caracterizat de o adr esă unică și poate opera fie ca
emițător, fie ca receptor (exemplu: memoria poate fi receptor sau emi țător, iar un
LCD este doar receptor). Ambele sunt însă noduri sclav/slave.

TERMEN DESCRIERE
Transmi țător Dispozitiv care transmite date pe magistrală
Receptor Dispozitiv care cite ște date de pe magistrală
Master Dispozitiv care ini țiază transferul, generează
semnal de CLOCK și apoi încheie transferul
Slave Dispozitiv adresat de un master
Tabel 4.5. Descriere termeni utiliza ți de magistrale

53

Figura 4.13. Interfața electrică de bază la magistrala I2C

Figura 4.14 . Nivelul fizic I2C

Avantaje:
– reduce dimensiunile circuitelor, pentru că interfa ța la magistrală are nevoie
doar de două fire;
– număr mic de pini la capsulă ;
– complexitate redusă a conexiunii ;
– transfer bidirec țional ;
– magistrală multimaster ;
– lungimea datelor nu este pre -fixată.

54

INTERFA ȚA SPI

Interfața SPI ( Serial Peripherical Interface – Interfață serială periferică) este
un alt protocol de comunica ție serială. Acest protocol de comunica ție serială poate
conecta mai multe dispoitive pe distan ță scurtă, dar la viteze mai mari decat
protocol I2C. aceasta interfa ță se folose ște pentru a comunica cu diverse dispozitive
precum: senzori, circuite de comandă a displayurilor, drivere, etc.

În mod obi șnuit, există trei linii comune tuturor dispozitivelor și o linie
comună pentru orice device :
– MISO (Master In Slave Out) – Linia Slave pentru trimiterea datelor către
Master;
– MOSI (Master Out Slave In) – Linia Master pentru trimiterea de d ate către
periferice;
– SCK (ceas serial) – impulsuri de ceas care sincronizează transmisia de date
generate de master;
– SS (Slave Select) – pinul de pe fiecare dispozitiv pe care masterul îl poate
utiliza pentru a activa și dezactiva anumite dispozitive (o l inie specifică pentru
fiecare dispozitiv).
În următorul tabel ul 4.6 avem prezenta ți pinii care corespund celor 4 linii pe
care se efectuează comunica ția SPI.

ARDUINO MOSI MISO SCK SS NIVEL
TENSIUNE
UNO 11 sau
ICSP 4 12 sau
ICSP 1 13 sau
ICSP 3 10 5V
MEGA 51 sau
ICSP 4 50 sau
ICSP 1 52 sau
ICSP 3 53 5V

Tabel 4.6. Pinii interfe ței SPI pentru Arduino UNO și MEGA

55

SENZORUL DHT11

Senzorul de temperatură DHT11 folose ște un singur fir pentru transmisia
datelor; se poate folosi orice pin digital – în cazul de fa ță s-a folosit pinul digital 34.
Conectarea senzorului DHT11 la plăcu ța de dezvoltare Arduino UNO se
realizează după cum se observă în tabel ul 4.7, respectiv figura 4.15 .

PINI DHT11 PINI ARDUINO MEGA
VCC → 5V
DATA → PIN DIGITAL
NC → NU SE CONECTEAZĂ
GND → GND

Tabel 4.7. Conectare pinilor senzoru lui DHT11 la pinii Arduino MEGA

Figura 4.15. Conectarea senzorului DHT11 la Arduino MEGA

56

Acest tip de senzor nu are inclus și un rezistor pull -up. Senzorul DHT11
trimite informa ții digitale; informația digitală este 0 sau 1 (high sau low). În cazul
în care nimic nu este conectat la pin, pentru a defini aceste stări, 0 sau 1 avem
nevoie de un rezisto r pull -up. Rezistorul pull -up se leagă între pinul de Vcc și pinul
de date. Aceast ă conexiune se poate observa în figura 4.16 .

Figura 4.16. Conectar ea rezitorului pull -up la DHT11

Avantaje și dezavantaje privind senzorul DHT11

Avantaje:
– Senzorul este compatibil cu mai multe plăci de dezvoltare, de exemplu
Arduino;
– Oferă simplitate în utilizare;
– Oferă acurate țe bună;
– Are dimensiuni reduse (așa cum se poate observa în figura 4.17 );
– Este convenabil, are un pre ț mic.

57

Figura 4.17. Dimensiunile senzorului DHT11

Dezavantaje:
– Vaporii din materiale chimice pot interfera cu elemntele sensibile ale
senzorului DHT11 și pot deteriora sensibilitatea lui. Un grad înalt de
contaminare poate degrada permanent senzor ul;
– Expunerea îndelungată la razele solare puternice și la ultraviolete afectează
performan ța senzorului DHT11;
– Umiditatea relativă depinde într -o mare măsura de temperatură. De și se
folosește tehnologia de compensare a temperaturii pentru a măsura cu
precizie umiditatea relativă, se recomandă ca senzorii de temperatură și
umiditate să se pastreze la aceea și temperatură. Senzorul trebuie montat cât
mai departe posibil de păr țile care degajă caldură;
– Se recomandă o calitate înaltă a conexiunilor firelor pentru a nu afecta
calitatea și distanța comunicării;
– A se evita folosirea senzorului pe condi ții de rouă;
Observație:
Senzorul se păstrează la o temperatură optimă între 10 -40℃ și umiditate
relativă mai mică de 60%.

Caracteristici tehnice DHT11
o tensiunea de alimentare: minim 3V, maxim 5 V;
o curent de alimentare: minim 0,5mA, maxim 2,5mA;

58

o gama de măsurare a umidită ții 20% – 95% UR;
o precizia măsurării umidită ții: 5%
o gama de măsurare a temperaturii: 0 ℃-60℃
o precizia măsurării temperaturii: ±2 ℃
o perioada de e șantionare minim:1 secundă

SENZORUL BMP180

Senzorul de temperatură și presiune atmosferică se conectează la Arduino cu
ajutorul a patru pini și transmite datele folosind comunica ția serială I2C. Toate
informațiile se transmit cu ajutorul magistralei I2C, mai exact cu ajutorul
conexiunilor SDA (seria data line) și SCL (seri al clock line) dar și conexiunea de
masă. Conectarea senzorului la placa de dezvoltare Arduino se face dup ă cum
urmează în tabelul de ma i jos ( a se vedea și figura 4.18 ).

PINI BMP180 PINI ARDUINO MEGA
VIN → 3,3V
GND → GND
SDA → SDA
SCL → SCL

Tabel 4.8. Modul de conectare al senzorului DHT11

59

Figura 4.18. Conectarea senzorului BMP180 la Arduino MEGA

Avantaje ale senzorului BMP180 :
– Precizie ridicată;
– Liniaritate și stabilitate pe termen lung;
– Calibrare completă;
– Include măsurare a temperaturii și a altitudinii;
– Dimensiuni mici .

Caracteristici tehnice :
o Tesiune de alimentare: 1.8 -3,6V;
o Interfață I2C;

60

o Curent: 5µA;
o Măsoară presiuni între 300 -1100hPa;
o Precizie relativă ±0,12hPa(±1m)
o Rezoluție de 0,03hPa/0,25m;

Figura 4.19. Dimensiunile senzorului BMP180

4.4. PROIECTAREA SCHEMEI ELECTRICE
Proiectarea schemei electrice a sta ției meteo utiliz ând Arduino Mega2560 este
prevăzută cu senzorul de temperatură și umiditate, senzorul de presiune
atmosferică, modulul RTC, buzzerul este următoarea:

61

Figura 4.20. Schema electrică în programul EasyEDA

ALOCAREA PINILOR PLĂCU ȚEI DE DEZVOLTARE ARDUINO MEGA

Pinii plăcii de dezvoltare utiliza ți în realizarea sta ției meteo sunt prezenta ți în
tabelul următor.

PINI ARDUINO MEGA PINI COMPONENTE STA ȚIE METEO
RESET LCD
3.3V LCD, BMP180
5V LCD, DHT11, DS1307, BUZZER
GND GND
Vin LCD

62

PINI ARDUINO MEGA PINI COMPONENTE STA ȚIE METEO
A0 LCD_RD
A1 LCD_WR
A2 LCD_RS
A3 LCD_CS
A4 LCD_RST
A5 LCD
AREF LCD
GND LCD, DHT11, BMP180, DS1307, BUZZER
13 LCD SD_SCK
12 LCD SD_D0
11 LCD SD_DI
10 LCD SD_SS
9 LCD_D9
8 LCD_D8
7 LCD_D7
6 LCD_D6
5 LCD_D5
4 LCD_D4
3 LCD_D3
2 LCD_D2
TX0->0 LCD
RX0< -1 LCD
SDA BMP180, DS1307
SCL BMP180, DS1307
37 DHT11
29 BUZZER
51 BUTON

Tabel 4.9. Alocarea pinilor plăcu ței din punct de vedere hardware

63

4.5. PROIECTAREA CABLAJULUI

Pentru realizar ea cablajului s -a avut în vedere etapel e specific e proiectării
cablajului electronic prezentate mai jos .

ETAPELE PROIECTĂRII UNUI CABLAJ ELECTRONIC

1. Cunoașterea cerin țelor de func ționare a sistemului electronic;
2. Stabilirea blocurilor func ționale ale schemei electronice;
3. Proiectarea și dezvoltarea blocurilor func ționale și realizarea machetelor de
test pentru fiecare bloc în parte;
4. Punerea în func țiune a întregului sistem;
5. Cunoașterea restric țiilor de proiectare a cablajului;
6. Crearea documenta ției de proiectare;
7. Realizare footprinturilor și a simbolurilor;
8. Editare schem ă electronic ă;
9. Proiectare cablaj electronic;
10. Întocmirea documenta ției de fabrica ție (datasheet).

Pentru proiectarea unui cablaj electronic se va porni de la condi ția existen ței
tuturor specifica țiilor necesare proiectării. Dacă aceasta condi ție nu este
îndeplinită, se strâng datele necesare proiectării și a componentelor utilizate, iar
dacă se îndepline sc aceste cerin țe se va începe proiectarea blocurilor func ționale
ale schemei electronice, pe baza acestora construindu -se un prototip functional cu
ajutorul unui mediu destinat proiectării cablajelor electronice. Se realizează
directoare unde poate fi sal vat fișierul după care se poate începe realizarea
footprinturilor (amprente de cablaj).

64

Realizarea footprinturilor se face parcurg ând o serie de etape:

– Se identifică în documenta ția fiecărei componente în parte elementele
necesare realizări unui footprint;
– precizarea numărul ui total de pin ice vor fi utliza ți în proiect;
– preciza rea numărul ui pinilor electrici și a celor neelectrici;
– identificarea tipului de pini utiliza ți în realizarea amprentei de cablaj;
– Pentru fiecare pin creat se adaugă un num e padului;
– Fiecare pad va fi mo delat conform foilor de catalog;
– Sincronizarea pinilor cu simbolul componentei;
– Realizarea footprintului este considerată finalizată în momentul în care
coordonata de referin ță (x,y) este in conformitate cu foaia de catalog.

După realizarea footprinturilor se vor construi simbolurile specifice fiecărei
componente în parte din cadrul proiectului, se va realiza schema electronica, iar
după ce s -au realizat toate aceste etape men ționate mai sus se va începe realizarea
cablajului electronic.

4.6. REALIZAREA PRACTICĂ

Realizarea practică a cablajului a fost proiectată cu ajutorul unei mașini CNC
(computering numeric control – echipament complex dotat cu sisteme de comandă
și control numeric al deplasărilor ) și a programului software Mach3, un program
destul de complex utilizat la nivel mondial. În figurile de mai jos avem:
– interfața programului software cu care s -a proiectat realizarea cablajului;
– procesul de găurire al cablajului;
– realizarea traseelor;
– amprenta de cablaj;
– cablaj final cu senzorii specifici sta ției meteo (vedere spate și față);
– conectarea cablajului final senzorii stației meteo la Arduino;
– Stația meteo cu Arduino .

65

Figura 4.2 1 . Interfața programului Mach3

Figura 4.2 2. Procesul de găurire al cablajului

66

Figura 4.2 3. Realizarea traseelor

Figura 4. 24. Amprentă cablaj

67

Figura 4.2 5. Cablaj final cu senzorii specifici sta ției meteo (vedere spate și față)

Figura 4.2 6. Conectarea cablajului final senzorii stației meteo la Arduino

68

Figura 4.27. Stație meteo cu Arduino

69

CAPITOLUL 5 . PROIECTAREA SOFTWARE

5.1. MEDIUL DE PROGRAMARE ARDUINO

Arduino IDE este program software în care se scrie codul ce urmează a fi
încărcat pe placa de dezvoltare.

Figura 5. 1 . Interfața mediului de dezvoltare Arduino IDE

Orice program scris în Arduino cuprinde două mari sec țiuni, și anume:
– Secțiunea de setup ( void setup () ) în care programul rulează o singura dată
atunci cand placa este alimentată sau când este apăsat butonul de ”RESET ”.
Funcția se utilizează pentru a ini țializa variabilele, pinii, etc.
– Secțiunea de loop ( void loop() ), aici programul rulează la infinit.

70

5.2. ORGANIGRAMA GENERALĂ A PROGRAMULUI PRINCIPAL

Organigrama programului principal respecta structura clasică a unui
program realizat cu Arduino, adică programul prezintă sec țiunea de setup unde se
inițializeaz ă codul și care se execută o singură data și secțiunea loop unde
programul principal este executat într -o buclă infinită .

void setup(void) {

// Inițializ ez senzorii și ecranul

pinMode(buzzer, OUTPUT);
digitalWrite(buzzer, HIGH);
dht.begin();
presiune.begin();
Serial.begin(115200);

tft.reset();

tft.begin(0x9325);
tft.setRotation(1);

tft.fillScreen(BLACK); //fundalul ecranului este negru
tft.setCursor(25, 15); //coordonatele textului "NASTASE MARIA
MIRABELA"
tft.drawRoundRect(15, 10, 290, 40, 5, RED); //desenez chenar
tft.setTextColor(BLUE); //de culoare albastră
tft.setTextSize(2); //mărimea te xtului
tft.println("NASTASE MARIA MIRABELA");
tft.setCursor(50, 35); //coordonatele textului "UPIT_EA 2014 –
2018"
tft.println("UPIT_EA 2014 -2018");

//meniul static
tft.setTextColor(YELLOW); tft.setTextSize(2);
tft.setCursor(15,60); tft.print("Data: ");
tft.setCursor(180,60); tft.print("Timp: ");

tft.setTextColor(BLUE);
tft.setCursor(15,100); tft.print("T1: ");

71

tft.setCursor(180,100); tft.print("UR: ");

tft.setTextColor(WHITE);
tft.setCursor(15,140); tft.print("T2: ");
tft.setCursor(15,165); tft.print("PRESIUNE ABS: ");
tft.setCursor(15,190); tft.print("PRESIUNE REL: ");
tft.setCursor(15,215); tft.print( "ALTITUDINE: ");

//creeaz două chenare albastre pe tot ecranul
tft.drawRoundRect(2, 2, 318, 237, 5, BLUE);
tft.drawRoundRect(5, 5, 312, 231, 5, BLUE);

}//void setup

void loop()
{

data_timp();
umid_temp();
pres_temp_alt();
delay(3000);

} //void loop

În cadrul acestui proiect, sta ția meteo este implementat ă cu ajutorul unui
microcontroller Arduino Mega. Acesta are rolul de a implementa software
componentele caracteristice sta ției meteo prezentate în capitolele anterioare și
anume: modulul RTC, senzorul DHT11, senzorul BMP180, buzzerul, LCD-ul pentru
care am creat func țiile corespunz ătoare fiec ărui parametru ce se dore ște a fi
măsurat și afișat pe ecranul LCD. Aceste func ții sunt:

 Funcția data_timp() pentru afi șarea d ății și a timpului. Secve nța de cod
este:

void data_timp(){
tmElements_t tm; //creez elementele timpului

if (RTC.read(tm)) {

72

//data
tft.setCursor(75,60); //setez coordonatele unde va fi afișată
data
tft.fillRoundRect(72, 55, 101, 25, 5, BLUE); //chenar albastru
tft.print(tm.Day); //afișez pe ecran ziua
tft.print('/'); //afișez pe ecran caracterul /
tft.print(tm.Month); //afișez pe ecran luna
tft.print('/');
tft.print(tmYearToCalendar(tm.Year)); //afișez pe ecran anul

//timpul
tft.setCursor(240,60); // setez coordonatele unde va fi afișat
ceasul
tft.fillRoundRect(235, 56, 66, 25, 5, BLUE); //chenar albastru
tft.print(tm.Hour); //afișez pe ecran ora
tft.print(":"); tft.print(tm.Minute); //afișez pe ecran minutele

//afișez datele în consolă
//data
Serial.println();
Serial.print("Dată: ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));

//timp
Serial.print(" Timp: ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.println();
} //if

else {

73

if (RTC.chipPresent()) {
Serial.println("DS1307 s -a oprit. Se va rula Set Time");
Serial.println();
} //if
else {
Serial.println("DS1307 citește eroare! Se va verifica
circuitul.");
Serial.println();
} //else
} //else
} //void data_timp

 Funcția temp_umid() pentru măsurarea temperaturii și a umidită ții. Secvența
de cod este:

void umid_temp(){

//se citește umiditatea în %
float h = dht.readHumidity();
// se citește temperatura în grade Celsius
float t = dht.readTemperature();

// se citește temperatura în Fahrenheit(isFahrenheit = true)
float f = dht.readTemperature(true);

//se verif ică dacă au fost citite greșeli și dacă nu s -a putut citi
date de la senzor, se încearcă din nou
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Nu s -a putut citi date de la DHT11");
return;
} //if

//temperatura
tft.setTextColor(BLUE); //setez culoarea valorii afișate
tft.fillRoundRect(55, 93, 98, 25, 5, YELLOW); //chenar galben
tft.setCursor(64, 100); // setez coordonatele unde va fi afișată
temperatura
//afișez valoarea pe ecran în grade Celsius
tft.print(t);

74

tft.print(" C ");

//umiditatea
tft.fillRoundRect(215, 93, 80, 25, 5, YELLOW); //al doilea chenar
galben
tft.setCursor(220,100); // setez coordonatele unde va fi afișată
umiditatea
tft.setTextColor(BLUE); //setez culoarea textului
// afișez umiditatea în procente
tft.print(h);
tft.print("%");

//afișare în consolă
//temperatura
Serial.println();
Serial.println("DHT11");
Serial.print("TEMPERATURA: ");
Serial.print(t);
Serial.print(" ℃ ");

//umiditatea
Serial.print(f);
Serial.print(" F \t");
Serial.print(" UMIDITATE: ");
Serial.print(h);
Serial.print(" % \t");
Serial.println();

} //void afisareumidtemp

 Funcția pres_ temp_ alt() pentru măsurarea presiunii aerului, temperaturii și
a altitudinii . Secvența de cod este:

void pres_temp_alt(){

char status;
double T,P,p0,a;

75

// se activează citirea presiunii la fiecare 10 secunde

//=================================================

// mai întâi se efectuează o măsurare a tem peraturii pentru a putea
efectua citirea presiunii

// se începe măsurarea temperatur ii
status = presiune.startTemperature();
if (status != 0)
{
// se așteaptă finalizarea măsurării
delay(status);
// se preia măsurarea temperaturii finalizate
// măsurarea este stocată în variabila T.
// funcția returnează 1 dacă e ste cu succes și 0 dacă eșuează

status = presiune.getTemperature(T);
if (status != 0)
{

tft.setCursor(64,140); //setez coordonatele unde va fi afișată
valoare temp eraturii
tft.fillRoundRect(55, 133, 98, 25, 5, RED); //primul chenar
roșu
tft.setTextColor(WHITE); //setez culoarea textului
//afișez temperatur a în grade Celsius
tft.print(T,2);
tft.print(" C ");

//afișare în consolă
Serial.prin tln();
Serial.println("BMP180");

// afișare măsurare temperatur ă în grade Celsius și conversia in
Farenheit
Serial.print("Temperatură: ");

76

Serial.print(T,2);
Serial.print(" ℃ , ");
Serial.print((9.0/5.0)*T+32.0,2);
Serial.println(" F");

//=================================================

// se începe măsurarea presiunii
//presiunea absolută
status = presiune.startPressure(3);
if (status != 0)
{
// se așteaptă ca măsurătoare să se finalizeze:
delay(status);
// măsurătorile sunt stocate în variabila P
// se reține ca funcția necesită temperatura măsurată anterior(T).
// funcția returnează 1 daca este cu succes și 0 în caz contrar..
status = presiune.getPressure(P,T);
if (status != 0)
{

tft.setCursor(182,165);
tft.fillRoundRect(175, 159, 130, 25, 5, RED);
tft.setTextColor(WHITE);
//afișare pe ecran a presiunii absolute în mmHg
tft.print(P*0.750062,2);
tft.print("mmHg") ;

//afișare în consol ă a măsurării presiunii absolute în mb și
conversia acesteia în mmHG
Serial.print("Presiunea absolută: ");
Serial.print(P,2);
Serial.print(" mb, ");
Serial.print(P*0.750062,2);
Serial.print(" mmHg");
Serial.println();

77

//presiune a relativă
p0 = presiune.sealevel(P,ALTITUDINE); //ne situăm la 289
metri altitudine

tft.setCursor(180,190);
tft.fillRoundRect(175, 184, 130 , 25, 5, RED);
tft.setTextColor(WHITE);
//afișare pe ecran a presiunii relative
tft.print(p0*0.750062,2);
tft.print("mmHg");

//afișare în consolă a presiunii relative în mb, respective mmHG
Serial.print("Presiune R elativă: ");
Serial.print(p0,2);
Serial.print(" mb, ");
Serial.print(p0*0.750062,2);
Serial.print(" mmHg");
Serial.println();

//=================================================

//altitudinea
// dacă se dorește să se determine altit udinea din măsurarea
presiunii, se utilizează funcția de altitudine împreună cu o presiune
de bază/
// Parametri: P = presiunea absolută în mb, p0 = presiunea de bază
(realtivă) în mb.
// Rezultat: a = altitudine în m.

a = presiune.altitude(P,p0);

tft.setCursor(180,215);
tft.fillRoundRect(175, 209, 130, 25, 5, RED);
tft.setTextColor(WHITE);
tft.print(a,0);
tft.print(" metri");

//afișare în consolă a altitudinii în metri
Serial.print("Altitudine: ");

78

Serial.print(a,0);
Serial.println(" metri ");

} //if
} //if
} //if
} //if
} //void pres_temp_alt

Pentru generarea sunetului de alarmă în momentul depă șirii valorilor impuse
am utilizat secven ța de cod :

//pentru senzorul DHT
if(t>35)
digitalWrite(buzzer,LOW);
else digitalWrite(buzzer, HIGH);

//pentru senzorul BMP
if(T>35)
digitalWrite(buzzer,LOW);
else digitalWrite(buzzer, HIGH);

La senzorul BMp 180, î nainte de a citi presiunea, se cite ște o temperatură.
Acest lucru se face cu startTemperature() și getTemperature(). Rezultatul este în
grade C. Odată ce s -a citit o temperatură, se poate citi o presiune. Acest lucru se
face cu startPressure() și getPressure(). Rezultatul este în millibari (mb).
Pentru citirea altitudini, mai întâi trebuie să oferim altitudinea cunoscută la
care s -a măsurat presiunea.Pentru aceasta se utilizează func ția sealevel(). Dacă se
dorește măsurarea altitudinii, va trebui să se cunoască presiunea la o altitudine de
referință. Acest lucru se face cu func ția de altitudine ().

Acest program nu putea rula fără bibliotecile necesare componentelor din
cadrul proiectului. Aceste librării sunt declarate la începutul programului a șa cum
se observ ă mai jos. Tot la început, imediat după includerea librăriilor se specifica și
variabilele globale ce vor fi recunoscute de întreg programul.

//librăria specific ecranului LCD

79

#include <SPFD5408_Adafruit_TFTLCD.h>
//librăria senzorului de temperatură și umiditate
#include <DHT.h>
//librăriile ceasului RTC DS1307
#include <TimeLib.h>
#include <DS1307RTC.h>
//librăria senzorului de presiune, temperatură și altitudine
#include <SFE_BMP180.h>
//librăria specifică comunicației seriale I2C
#include <Wire.h>

#define DHTPIN 37 //deffinirea pinului utilizat de DHT
//definirea tipului de senzor utilizat, în cazul de față DHT11
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHT11);

#define buzzer 29 //definirea pinului utilizat de buzzer

// creez un obiect SFE_BMP180 numit presiune
SFE_BMP180 presiune;
#define ALTITUDINE 289.0 // Altitudinea în metrii la nivelul orașului
Pitești

#define LCD_CS A3
#define LCD_RS A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

//definim culorile ce l e vom folosi în program
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define NAVY 0x000F
#define DARKGREEN 0x03E0
#define DARKCYAN 0x03EF

80

#define MAROON 0x7800
#define PURPLE 0x780F
#define OLIVE 0x7BE0
#define LIGHTGREY 0xC618
#define DARKGREY 0x7BEF
#define ORANGE 0xFD20
#define GREENYELLOW 0xAFE5
#define PINK 0xF 81F

Adafruit_TFTLCD tft(LCD_CS, LCD_RS, LCD_WR, LCD_RD, LCD_RESET);

Orgranigrama programului principal de lucru este prezentată în figura 5.2.

81

START
INIȚIALIZARE HARDWARE
INIȚIALIZARE SOFTWARE
CITIRE DHT 11 (TEMPERATURĂ
& UMIDITATE )CITIRE RTC (TIMP & DATĂ )
CITIRE BMP 180
(TEMPERATURĂ , PRESIUNE
&ALTITUDINE )
DACĂ t & T>=35
ALARM ĂNU DA
TRANSMITERE SERIALĂ A
PARAMETRILOR
AFIȘARE LOCALĂ PE TFT
SALVARE ISTORIC
DACĂ ISTORIC
>1ORĂ
SUPRASCRIERE
TEMPORIZAREBUTON ISTORIC
APĂSAT ?
AFIȘARE ISTORICNUDA
DANU
Figura 5. 2. Organigrama de lucru a programului principal

82

Alocarea pinilor plăcuței de dezvoltare Arduino MEGA.
PINI ARDUINO MEGA PINI COMPONENTE STA ȚIE METEO
RESET LCD
3.3V LCD, BMP180
5V LCD, DHT11 , DS1307 , BUZZER
GND GND
GND GND
Vin LCD
A0 LCD_RD
A1 LCD_WR
A2 LCD_RS
A3 LCD_CS
A4 LCD_RST
A5 LCD
AREF LCD
GND LCD, DHT11 , BMP180 , DS1307 ,
BUZZER
13 LCD SD_SCK
12 LCD SD_D0
11 LCD SD_DI
10 LCD SD_SS
9 LCD_D9
8 LCD_D8
7 LCD_D7
6 LCD_D6
5 LCD_D5
4 LCD_D4
3 LCD_D3
2 LCD_D2
TX0->0 LCD
RX0< -1 LCD
SDA BMP180 , DS1307
SCL BMP180 , DS1307
37 DHT11
28 BUZZER

Tabel 5.1. Alocarea pinilor plăcu ței din punct de vedere software

83

CAPITOLUL 6. TESTARE

În acest capitol voi prezenta programarea și testarea fiecărei componente în
parte în anumite situa ții.

Testarea senzorului DHT11
Atunci când microcontrolerul trimite un semnal de start, senzorul trece în
modul de func ționare. După ce a a șteptat ca microcontrolerul să completeze semnal
de pornire, senzorul trimite date acestuia, date ce includ informa ții despre
umiditate și temperatura.

În figura 6.1 avem conec tarea senzorului la placă iar în figura 6.2 se observă
că inițializarea senzorului DHT11 a fost cu succes (s -au transmis date către
microcontroler, acesta prelucrându -le în valorile finale dorite) iar alăturat
remarcăm faptul ca senzorul nu s -a putut citi date de la senzor. Pentru acest lucru
se verifică dacă conect area senzorului a fost făcută corespunzător sau dacă în codul
sursă pentru testarea senzorului există erori de sintaxă.

Figura 6.1. Conectarea DHT11 la Arduino Mega

84

Secvența programului corespunzătoare testării senzorului DHT11
void loop()
{
afisareumidtemp();
delay(2000);
}
//funcția de citire și afișare umiditate și temperatură
void afisareumidtemp(){
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println( "Nu s -a putut citi date de la DHT11" );
return;
}
Serial.print( "TEMPERATURĂ: " );
Serial.print(t);
Serial.print( " *C ");
Serial.print(f);
Serial.print( " *F\t");
Serial.print( " UMIDITATE: " );
Serial.print(h);
Serial.print( " %\t");
Serial.println();
} //void afisareumidtemp

Figura 6.2. Testarea senzorului DHT11

85

Figura 6.3 . Senzorul DHT11 supus unei surse de căldură

În figura 6.3 se observă că, atunci când senzorul este supus unei surse de
caldură, temperatura și umiditatea cre ște treptat (u miditatea cre ște în func ție de
sursa de caldură generată), după care ace ști parametrii scad până se revine la
temperatura și umiditatea mediului ambiant.

Testarea senzorului BMP180
BMP180 măsoară presiunea absolută și relativă, temperatura, dar și
altitudinea la nivelul mării. Presiunea absolută este presiunea atmosferică reală
văzută de dispozitiv, care variază atât în func ție de altitudine, cât și de vreme.
Înainte de a citi presiunea, se cite ște o temperatură. Acest lucru se face cu
startTemperature () și getTemperature (). Odată ce s -a citit o temperatură, se poate
citi o presiune (se face cu startPressure () și getPressure () ).
Pentru citirea altitudini, mai întâi trebuie să oferim altitudinea cunoscută la
care s -a măsurat presiunea. Pentru aceasta se utilizează func ția sealevel (). Dacă
se dorește măsurarea altitudinii, va trebui să se cunoască presiunea la o altitudine
de referin ță. Acest lucru se face cu func ția de altitudine(). Biblioteca (librăria)
SFE_BMP180 utilizează ecua țiile cu puncte variabile dezvoltate de proiectul

86

Weather Station Data Logger. Conectarea senzorului BMP180 la Arduino Mega se
face ca în figura 6.4.

Figura 6.4. Conectare BMP180 la placa de dezvoltare.

Secvența programului de testare pentru afi șarea presiunii , temperaturii și a
altitudinii.
void PTA()
{
char status;
double T,P,p0,a;
Serial.println();
Serial.print( "ALTITUDINE CUNOSCUTĂ " );
Serial.print(ALTITUDINE,0);
Serial.print( " metri ");
status = presiune.startTemperature();
if (status != 0) {
delay(status);
status = presiune.getTemperature(T);
if (status != 0){
Serial.print( "TEMPERATURĂ:" );
Serial.print(T,2);
Serial.print( " ℃ , ");
Serial.print((9.0/5.0)*T+32.0,2);
Serial.println( " F");
status = presiune.startPressure(3);

87

if (status != 0){
delay(status);
status = presiune.getPressure(P,T);
if (status != 0){
//afișare presi une absolută
Serial.print("PRESIUNEA ABSOLUTĂ: ");
Serial.print(P,2);
Serial.print(" mb, ");
Serial.print(P*0.750062,2);
Serial.println(" mmHg");
p0 = presiune.sealevel(P,ALTITUDINE);
//afișare presiune absolută
Serial.print( "PRESIUNEA RELATIVĂ ( la nivelul mării): " );
Serial.print(p0,2);
Serial.print (" mb, " );
Serial.print(p0*0.750062,2);
Serial.println( " mmHg" );
a = presiune.altitude(P,p0);
// afișare altitudine
Serial.print( "ALTITUDINE CALCULATĂ: " );
Serial.print(a,0);
Serial.println( " metri " );}//if
else Serial.println( "eroare restabilire măsurare presiune \n");
}//if
else Serial.println( "eroare începere măsurare presiune \n");
}//if
else Serial.println( "eroare restabilire măsurare temperatură \n");
}//if
else Serial.println( "eroare începere măsurare temperatură \n");
delay(5000);
}//void P TA

Dacă senzorul este conectat corespunzător figurii 6.4, consola ne va afi șa
parametrii din figura 6.5. (cu excep ția timpului și a dății, unde s -a folosit o altă
funcție pentru afi șarea acestora și anume, func ția void afisaredatatimp() ) iar dacă
avem probleme de conexiune sau erori de sintaxă, nu se vor putea citi datele de la
senzor și trebuie să se verifice circuitul sau să se remedieze erorile apărute în
program .

88

Figura 6.5. Testare BMP180

Testarea modului RTC DS1307

Figura 6.6. Conectare DS1307

89

Pentru testarea modului RTC s -a folosit secven ța de cod de mai jos, func ția
implementată pentru citirea și afisarea datelor fiind void afisaredatatimp().
void afisaredatatimp(void)
{
tmElements_t tm;
if (RTC.read(tm)) {
Serial.print( "Dată: " );
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));

Serial.print( " Timp: " );
print2digits(tm.Hour) ;
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.println();} //if
else {
Serial.println( "DS1307 cite ște eroare! Se va verifica circuitul." );
Serial.println();} //else
} //void afisaredatatimp

Figura 6. 7. Afișarea timpului și a dăți în timp real

90

Testare m odulul buzzer

Figura 6.8. Conectarea buzzerului

Buzzerul a fost utilizat pentru a genera sunet de alarmă în momentul
depășirii valorii impuse de mine și anume: la tempertura măsurată de senzorul DHT
și cea măsurată de BMP am stabilit o valoare limită de 35 ℃. Dacă se depă șește
această valoare, buzzerul va genera semnal de alarmă (conectarea buzzerului este
prezentată în figura 6.7).

Testarea întregului sistem
Rezultatele ob ținute în urma măsurării temperaturii ambientale de către cei
doi senzori, DHT11 și BMP180, indică faptul că temperatura afi șată pe display este
mult mai precisă în cazul senzorului BMP180 fa ță de senzorul DHT11. Precizia
măsurării temperaturii afiată de senzorul a fost comparată cu o altă sursă digitală
de afișare a temperaturii ambientale și poată fi observată în figuraz() de mai jos de
unde putem observa similitudinea valorilor ob ținute în cele două cazuri.
Pentru ca datele să fie transmise cât mai rapid pe linia serială, am mărit
viteza de transfer de la 9600 la 115200 bi ți pe secundă.

91

Figura 6.9 . Stație meteo cu Arduino

Figura 6.10. Afișarea parametrilor sta ției meteo în consolă

92

Figura 6.11. Realizare practică (placă de test)

Figura 6.12. Stație digitală de afi șare a temperaturii vs. sta ție meteo Arduino

93

Figura 6.13. Afișarea parametrilor stație meteo din mediul extern

În figurile 6.1 3 și 6.14 avem prezentate statisticile meteo din data de
08.07.2018 de pe doua site -uri web de specialitate, și anume:
https://www.accuweather.com/en/ro/pitesti/271848/current –
weather/271848 și http://www.meteoromania.ro/anm2/ .

Figura 6 .14. Date privind starea vremii furnizate furnizate de AccuWeather

94

Figura 6.1 5. Date privind starea vremii furnizate de ANM

Presiunea afi șată pe cele doua site -uri este presiunea relativă a aerului dar
afișată în milibari. Pentru a face conversia din milibari în mmHG am folosit
formula:

p0[mmHg]=p0*0.750062 (7.1)

95

CAPITOLUL 7. CONCLUZII

Chiar dacă o sta ție meteo poate fi mult mai complexă și este capabilă să ofere
mult mai multe date decât temperatura, umiditatea, presiunea atmosferică și
altitudinea, am considerat că și aceste date sunt utile pentru a afla într -un timp
căt mai scurt care este temperatura din mediul ambiant.

La început mi -am propus să măsor temperatură, umiditatea și presiunea
atmosferică (presiunea absolută). Acest lucru a fost posibil datorită senzoru lui de
temperatură și umiditate DHT11 și a senzorului BMP180 care măsoară presiunea
atmosferică, atât presiunea absolută cât și presiunea relativă . Pe parcurs am
adaugat un modul RTC pentru afi șarea timpului și a dății dar și un buzzer care
generază sunet de alarmă în momentul depă șirii unei valorii limite prestabilite.

Așa cum am mai precizat și în capitolele anterioare, senzorul DHT11 are un
interval de măsurare al temperaturii cuprins între 0 și 50 ℃, cu o precizie de ±2 ℃
și un interval de măsurare al umidității cuprins între 20 % și 90%UR (umiditate
relativă) cu o precizie de ±5%UR. Totuși, chiar dacă nu are o precizie uimitoare,
acest senzor este util și acceptabil în aplica țiile destinate activită ților didactice cât
și a celor casnice. Este foarte util în monitorizarea temperaturii locuin ței dar și a
temperaturii exterioare, însă trebuie respectate cerințele de func ționare , este ideal
pentru a face statistici între anotimpuri: pentru a observa cum cre ște sau scade
temperatura în func ție de sezon. . Senzorul DHT11 nu se poate folosi în cazul în
care dorim să măsurăm temperaturi negative.

Făcând compara ția între termometrul de camera și temperatura măsurata cu
ajutorul senzorului DHT11, pot spune ca senzorul are o acuratețe de -0.4℃. Totuși,
este un senzor care conectat la microcontroler oferă un răspuns rapid.

Din punct de vedere al fiabilită ții, senzorul DHT11 este compatibil cu multe
plăci de dezvoltare Arduino, oferă o simplitate în utilizare, o acurate țe bună, are
dimensiuni mici, toate aceste c aracteristici fiind înglobate într -un preț redus.
Totuși, acest senzor prezintă și unele dezavantaje, cum ar fi expunerea directă și
îndelungată la raze solare puternice sau faptul că senzorul nu trebuie montat

96

aproape de componentele care degajă caldură. Aceste dezavantaje conduc la
scăderea performan ței senzorului.

Despre senzorul BMP180 se știe că este un senzor cu o precizie ridicată , acest
lucru rezultând și din măsurăt ori. El este capabil să măsoare, pe lânga presiune,
temperatura și altitudinea. Pentru a se putea efectua citirea presiunii, mai întai se
efectuează măsurarea temperaturii, după care abia după finalizarea măsurării
temperaturii se poate începe măsurarea presiunii.

În data de 1.07.2018, din măsurători s -a obținut o presiune relativă a aerului
de aproximativ 730 mmHg (figura , din capitolul anterior) , comparativ cu
documenta ția oficială găsită pe site -uri web de specialitate unde presiunea relativă
este de 727 mmHg.

Din punct de vedere al fiabilită ții, acest senzor oferă o calibrare completă,
stabilitate pe termen lung, dimensiuni mici și un pre ț accesibil tuturor. Trebuie
avut în vedere că pentru buna func ționare a acestuia, condi țiile de func ționare și
nu trebuie niciodată conectat la mai mult de 3.6V(maxim), astfel evitându -se
distrugere a senzorului.

Acest proiect se poate dezv olta într -unul mult mai complex. Se poate realiza
o stație meteo care, pe l ângă măsurarea temperaturii, umidit ății, presiunii,
atmosferice și altitudinii s ă măsoare și direcția vântului, viteza v ântului și cantitatea
se precipita ții. Acest lucru se poate realiza cu ajutorul unui kit de senzori prezentat
în figura 7.1 și este compus din:

– Anemometru capabil să măsoare viteza văntului;
– Giruetă: determină direc ția vântului;
– Pluviometru: determină cantitatea de apă căzută într -un interval de timp.

97

Figura 7.1. Kit senzori st ație meteo

Stația meteo poate include un sen zor care să indice nivelul radia țiilor UV și
luminozitatea solar ă.

98

BIBLIOGRAFIE

1. Cărți:
[1] Monica -Anca Chi ță, Senzori și actuatoare, Matrix ROM, Bucure ști, 2017 .
[2] Alexandru Rebega, Bogdan -Florin Florea, Introducere în Arduino,
București, 2016 .
[3] Radu Pietraru, Alexandru Velicu, Elemente practice de bază în dezvoltarea
sistemelor cu microprocesoare integrate, Techno Media, Sibiu, 2014 .
[4] Mazăre Alin -Gheorghi ță, Ionescu Lauren țiu-Mihai, Îndrumar lucr ări
practice -Tehnici CAD utiliz ând CADENCE, Univ . din Pitești, Pitești, 2015 .

2. Pagini web
[5]https://wiki.eprolabs.com/index.php?title=Humidity_Sensor_DHT11
[6]http://www.meo.etc.upt.ro/mater ii/laboratoare/IV/Document1.pdf
[7]https://www.optimusdigital.ro/ro/senzori -senzori -de-temperatura/584 –
senzor -de-temperatura -dht11.html?search_query=dht11&results=7
[8]https://www.optimusdigital.ro/ro/senzori -senzori -de-presiune/149 –
modul -senzor -de-temperatura -si-
presiunbmp180.html?search_query=bmp180&results=6
[9]https://www.optimusdigital.ro/ro/audio -buzzere/10 -modul -cu-buzzer –
activ.html?search_query=buzzer&results=33
[10]https://www.optimusdigital.ro/ro/altele/148 -modul -ceas-in-timp-real-
ds1307.html?search_query=rtc&results=46
[11]https://www.optimusdigital.ro/ro/shield -uri-pentru -arduino/2025 –
shield -pentru -arduino -lcd-rosu-de-24-cu-
touchscreen.html?search_query=spfd&results=2
[12]https://cdn -shop.adafruit.com/datasheets/BST -BMP180 -DS000 -09.pdf
[13]https://www.mouser.com/ds/2/758/DHT11 -Technical-Data-Sheet –
Translated -Version -1143054.pdf

99

[14]https://datasheets.maximintegrated.com/en/ds/DS1307.pdf
[15]https: //github.com/adafruit/DHT -sensor -library
[16]http://www.instructables.com/id/How -to-use-24-inch-TFT-LCD-
SPFD5408 -with-Arduino -U/
[17]https://github.com/JoaoLopesF/SPFD5408
[18]https://www.arduino.cc/
[19]https://ro.wikipedia.org/wiki/Prognoz%C4%83_meteorologic%C4%83
[20]https://github.com/adafruit/Adafruit -BMP085 -Library
[21]https://github.com/esp8266/Arduino/blob/master/libraries/Wire/Wir
e.h
[22]https://www.arduino.cc/en/Main/arduinoBoardMega/
[23]https://www.robofun.ro/arduino_mega2560
[24]http://www.mantech.co.za/datasheets/products/A000047.pdf
[25]https://easyeda.com/editor#id=817e5fbef04e4725bb8c6f2c6f4d4b25|6
539c4ec9e14037a2ee8c095c02632a
[26]https://en.wikipedia.org/wiki/CNC_rout er
[27]http://www.rasfoiesc.com/educatie/informatica/Mach -CNC-Controller –
Softwareul89.php
[28]https://en.wikipedia.org/wiki/Numerical_control
[29]http://iota.ee.tuiasi.ro/~czet/Curs/Teledata/Cap4_In terfete_seriale.pdf
[30]http://www.meo.etc.upt.ro/materii/cursuri/ISMT/5.pdf
[31]https://ro.wikipedia.org/wiki/I%C2%B2C
[32]https://ro.wikipedia.org/wiki/Arduino

100

ANEXE
CODUL SURS Ă

În următoarele rânduri este listat întreg programul util izat în realizarea
proiectului, cod elaborat în mediul de programare Arduino IDE. Pentru o în țelegere
mai ușoară a acestuia și pentru a facilita ulterioarele modificări asupra
programului, acesta are alăturate și comentarii.
#include <SPFD5408_Adafruit_TFTLCD.h>
#include <DHT.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include <SFE_BMP180.h>
#include <Wire.h>

#define DHTPIN 37
//se folosește senzorul DHT11
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHT11);
#define buzzer 29

// creez un obiect SFE_BMP180 numit presiune

SFE_BMP180 presiune;
#define ALTITUDINE 289.0 // Altitudinea în metrii la nivelul
orașului Pitești

#define LCD_CS A3
#define LCD_RS A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0

101

#define WHITE 0xFFFF
#define NAVY 0x000F
#define DARKGREEN 0x03E0
#define DARKCYAN 0x03EF
#define MAROON 0x7800
#define PURPLE 0 x780F
#define OLIVE 0x7BE0
#define LIGHTGREY 0xC618
#define DARKGREY 0x7BEF
#define ORANGE 0xFD20
#define GREENYELLOW 0xAFE5
#define PINK 0xF81F

Adafruit_TFTLCD tft(LCD_CS, LCD_RS, LCD_WR, LCD_RD, LCD_RESET);

//–-Setup
void setup(void) {

// Inițializez senzorii
pinMode(buzzer, OUTPUT);
digitalWrite(buzzer, HIGH);
dht.begin();
presiune.begin();
Serial.begin(115200);

tft.reset();

tft.begin(0x9325);
tft.setRotation(1);

tft.fillScreen(BLACK);
tft.setCursor(25, 15);
tft.drawRoundRect(15, 10, 290, 40, 5, RED);
tft.setTextColor(BLUE);
tft.setTextSize(2);
tft.println("NASTASE MARIA MIRABELA");
tft.setCursor(50, 35);
tft.println("UPIT_EA 2014 -2018");

102

tft.setTextColor(YELLOW); tft.setTextSize(2);
tft.setCursor(15,60); tft.print("Data: ");
tft.setCursor(180,60); tft.print("Timp: ");

tft.setTextColor(BLUE);
tft.setCursor(15,100); tft.print("T1: ");
tft.setCursor(180,100); tft.print("UR: ");

tft.setTextColor(WHITE);
tft.setCursor(15,140); tft.print("T2: ");
tft.setCursor(15,165); tft.print("PRESIUNE ABS: ");
tft.setCursor(15,190); tft.print("PRESIUNE REL: ");
tft.setCursor(15,215); tft.print("ALTITUDINE: ");

//creeaz dou ă chenare albastre
tft.drawRoundRect(2, 2, 318, 237, 5, BLUE);
tft.drawRoundRect(5, 5, 312, 231, 5, BLUE);

}//void setup

//–-loop
void loop()
{

data_timp();
umid_temp();
pres_temp_alt ();
delay(3000);

} //void loop
//=================

void data_timp() {
tmElements_t tm; //creez elementele timpului

if (RTC.read(tm)) {

//data
tft.setCursor(75,60); //setez coordonatele unde va fi afișată
data

103

tft.fillRoundRect(72, 55, 101, 25, 5, BLUE); //chenar albastru
tft.print(tm.Day); //afișez pe ecran ziua
tft.print('/'); //afișez pe ecran caracterul /
tft.print(tm.Month); //afișez pe ecran luna
tft.print('/');
tft.print(tmYearToCalendar(tm.Year)); //afișez pe ecran anul

//timpul
tft.setCursor(240,60); // setez coordonatele unde va fi afișat
ceasul
tft.fillRoundRect(235, 56, 66, 25, 5, BLUE); //chenar albastru
tft.print(tm.Hour); //afișez pe ecran ora
tft.print(":"); tft.print(tm.Minute); //afișez pe ecran minutele

//afișez datele în consolă
//data
Serial.println();
Serial.print("Dată: ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));

//timp
Serial.print(" Timp: ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.println();
} //if

else {
if (RTC.chipPresent()) {
Serial.println("DS1307 s -a oprit. Se va rul a Set Time");
Serial.println();
} //if

104

else {
Serial.println("DS1307 citește eroare! Se va verifica
circuitul.");
Serial.println();
} //else
} //else
} //void data_timp

void print2digits(int number) {
if (number >=0 && number < 10) {
Serial.write('0');
} //if
Serial.print(number);
} //void print2digits

void umid_temp() {

//se citește umiditatea în %
float h = dht.readHumidity();
// se citește temperatura în grade Celsius
float t = dht.rea dTemperature();

// se citește temperatura în Fahrenheit(isFahrenheit = true)
float f = dht.readTemperature(true);

//se verif ică dacă au fost citite greșeli și dacă nu s -a putut citi
date de la senzor, se încearcă din nou
if (isnan(h) || isnan(t) || i snan(f)) {
Serial.println("Nu s -a putut citi date de la DHT11");
return;
} //if

//temperatura
tft.setTextColor(BLUE); //setez culoarea valorii afișate
tft.fillRoundRect(55, 93, 98, 25, 5, YELLOW); //chenar galben
tft.setCursor(64, 100); // setez coordonatele unde va fi afișată
temperatura
//afișez valoarea pe ecran în grade Celsius
tft.print(t);
tft.print(" C ");

105

//umiditatea
tft.fillRoundRect(215, 93, 80, 25, 5, YELLOW); //al doilea chenar
galben
tft.setCursor(220,100); // setez coordonatele unde va fi afișată
umiditatea
tft.setTextColor(BLUE); //setez culoarea textului
// afișez umiditatea în procente
tft.print(h);
tft.print("%");

//afișare în consolă
//temperatura
Serial.println();
Serial.println("DHT11");
Serial.print("TEMPERATURA: ");
Serial.print(t);
Serial.print(" ℃ ");

//umiditatea
Serial.print(f);
Serial.print(" F \t");
Serial.print(" UMIDITATE: ");
Serial.print(h);
Serial.print(" % \t");
Serial.println();

if(t>35)
digitalWr ite(buzzer,LOW);
else digitalWrite(buzzer, HIGH);
} //void afisareumidtemp

//=======================

void pres_temp_alt() {

106

char status;
double T,P,p0,a;
// se activează citirea presiunii la fiecare 10 secunde

//=================================================
// mai întâi se efectuează o măsurare a tem peraturii pentru a putea
efectua citirea presiunii

// se începe măsurarea temperatur ii
status = presiune.startTemperature();
if (status != 0)
{
// se așteaptă finalizarea măsurării
delay(status);
// se preia măsurarea temperaturii finalizate
// măsurarea este stocată în variabila T.
// funcția returnează 1 dacă e ste cu succes și 0 dacă eșuează

status = presiune.getTemperature(T);
if (status != 0)
{

tft.setCursor(64,140); //setez coordonatele unde va fi afișată
valoare temperaturii
tft.fillRoundRect(55, 133, 98, 25, 5, RED); //primul chenar
roșu
tft.setTextColor(WHITE); //setez culoarea textului
//afișez temperatura în grade Celsius
tft.print(T,2);
tft.print(" C ");

//afișare în consolă
Serial.println();
Serial.println("BMP180");

// afișare măsurare temperatură în grade Celsius și conversia in
Farenheit
Serial.print("Temperatură: ");
Serial.print(T,2);

107

Serial.print(" ℃ , ");
Serial.print((9.0/5.0)*T+32.0,2);
Serial.println(" F");

if(T>35)
digitalWrite(buzzer,LOW);
else digitalWrite(buzzer, HIGH);

//=================================================
// se începe măsurarea presiunii
//presiunea absolută
status = presiune.startPressure(3);
if (status != 0)
{
// se așteaptă ca măsurătoare să se finalizeze:
delay(status);
// măsurătorile sunt stocate în variabila P
// se reține ca funcția necesită temperatura măsurată anterior(T).
// funcția returnează 1 daca este cu succes și 0 în caz contrar..
status = presiune.getPressure(P,T);
if (status != 0)
{

tft.setCursor(182,165);
tft.fillRoundRect(175, 159, 130, 25, 5, RED);
tft.setTextColor(WHITE);
//afișare pe ecran a presiunii absolute în mmHg
tft.print(P*0.750062,2);
tft.print("mmHg");

//afișare în consolă a măsurării presiunii absolute în mb și
conversia acesteia în mmHG
Serial.print("Presiunea absolută: ");
Serial.print(P,2);
Serial.print(" mb, ");
Serial.print(P*0.750062,2);
Serial.print(" mmHg");
Serial.println();

108

//presiunea relativă
p0 = presiune.sealevel(P,ALTITUDINE); //ne situăm la 289
metri altitudine

tft.setCursor(180,190);
tft.fillRoundRect(175, 184, 130, 25, 5, RED);
tft.setTextColor(WHITE);
//afișare pe ecran a presiunii relative
tft.print(p0*0.750062,2);
tft.print("mmHg");

//afișare în consolă a presiunii relative în mb, respective mmHG
Serial.print("Presiune Relativă: ");
Serial.print(p0,2);
Serial.print(" mb, ");
Serial.print(p0*0.750062,2);
Serial.print(" mmHg");
Serial.println();

//=================================================
//altitudinea
// dacă se dorește să se determine altit udinea din măsurarea
presiunii, se utilizează funcția de altitudine împreună cu o presiune
de bază/
// Parametri: P = presiunea absolută în mb, p0 = presiunea de bază
(realtivă) în mb.
// Rezultat: a = altitudine în m.

a = presiune.altitude(P,p0);

tft.setCu rsor(180,215);
tft.fillRoundRect(175, 209, 130, 25, 5, RED);
tft.setTextColor(WHITE);
tft.print(a,0);
tft.print(" metri");

109

//afișare în consolă a altitudinii în metri
Serial.print("Altitudine: ");
Serial.print(a,0);
Serial.println(" metri ");

} //if
} //if
} //if
} //if
} //void pres_temp_alt

110

SCHEMĂ ELECTRICĂ

111

PLANIFICAREA ACTIVITĂ ȚII

Pentru a detalia mai bine activitatea derulării proiectului am elaborat un
grafic Gantt unde se pot observa etapele principale ale proiectului.
DIAGRAMA GANTT

Proiectul de licen ță este structurat pe 7 capitole, acestea incluz ând aspect
generale specifice lucrării, proiectare hardware și proiectare software.
Primul capitol include motiva ția alegerii temei de licen ță, precum și noțiuni
generale prinvind sta țiile meteo.
Capitolele 2 și 3 cuprind no țiuni teoretice privind achizi țiile de date, aspect
generale despre senzori și traductoare, c ât si considera ții teoretice despre senzorii
folosiți în proiect.
Capitolele 4 și 5 includ atât proiectarea hardware, cât și proiectarea software
și organigrama de lucru a programului principa l.
Capitolul 6 prezintă rezultatele ob ținute în urma unor teste în mediul
ambiental și în mediul extern, rezultate prezentate comparativ.
Capitolul 7 include concluzii, opinia personală cu privire la rezultatele
obținute dar și îmbunătă țiri ce pot fi aduse pe viitor acestui proiect.

Similar Posts