Specializarea: Electronică Aplicată Sibiu 2016 1 Rezumat În această lucrare voi prezenta etapele realizării unei stații meteo ce permite… [628712]

UNIVERSITATEA “LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE INGINERIE
DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE ELECTRICĂ

STAȚIE METEO CU ARDUINO SI
LABVIEW

Coordonator științific :
Conf.dr.ing. MIHAI BOGDAN
Absolvent: [anonimizat]: Electronică Aplicată

Sibiu
2016

1
Rezumat

În această lucrare voi prezenta etapele realizării unei stații meteo ce permite
achiziționarea de valori a le temperaturii, umidității și presiunii.
Achiziția de date se va face prin intermediul platformei de dezvoltare Arduino.
Programarea se va realiza cu ajutorul mediului de programare Arduino IDE și prin programul
de programare grafică LabVIEW.
Resursele har dware ce vor fi folosite în lucrare sunt: placa de dezvoltare Arduino Uno,
care v -a comunica prin protocolul I2C, cu senzorul de presiune BMP180 și cu senzorul de
temperatura și umiditate HTU21D. Rezultatele vor fi afișate prin intermediul interfeței seria le
pe calculator în mediul Arduino IDE și LabVIEW.

Summary

In this paper I present the steps to achieve a weather station that allows the acquisition
the values of temperature, humidity and pressure.
Data aquisition will be made through the Arduino development platform. Programming
will be done using the Arduino IDE programming environment and using LabVIEW software
for graphical programming.
Hardware resources that will be used in the paper are: Arduino Uno development board,
that will communicate through I2C protocol with BMP180 pressure sensor and HTU21D
temperature and humidity sensor. Results will be displayed through the serial interface on the
computer in the Arduino IDE and LabVIEW.

2
CUPRINS
Rezumat ………………………….. ………………………….. ………………………….. ………………………….. …… 1
Summary ………………………….. ………………………….. ………………………….. ………………………….. …. 1
CAPITOLUL I – Prezentarea lucrării ………………………….. ………………………….. …………………… 4
1.1. Motivația și scopul lucrării ………………………….. ………………………….. …………………….. 4
1.2. Conținutul lucrării ………………………….. ………………………….. ………………………….. …….. 4
1.3. Aplicabilitatea lucrării ………………………….. ………………………….. ………………………….. . 4
CAPITOLUL II – Considerații teoretice ………………………….. ………………………….. ……………….. 5
2.1. Introducere în LabVIEW ………………………….. ………………………….. ……………………….. 5
2.1.1. Panoul frontal ………………………….. ………………………….. ………………………….. ……….. 5
2.1.2. Diagrama bloc ………………………….. ………………………….. ………………………….. ………. 6
2.1.3. Icoana și conectorul ………………………….. ………………………….. ………………………….. .. 7
2.1.4. Paleta de instrumente, comandă și funcții ………………………….. ………………………….. 8
2.2. Introducere în Arduino ………………………….. ………………………….. ………………………….. …. 9
2.3. Instalare Drivere Arduino ………………………….. ………………………….. ………………………… 10
2.4. Comunicare între Arduino si ecosistem ………………………….. ………………………….. ……… 10
2.5. Microcontrollere ………………………….. ………………………….. ………………………….. ………… 12
2.5.1. Tipuri de arhitecturi ………………………….. ………………………….. ………………………….. 13
2.5.2. Microcontroller CISC vs RISC ………………………….. ………………………….. ………….. 13
2.5.3. Memoria ………………………….. ………………………….. ………………………….. …………….. 14
2.5.4. Întreruperile ………………………….. ………………………….. ………………………….. ………… 14
2.5.5. Porturi de intrare / ieșire ………………………….. ………………………….. ……………………. 14
2.5.6. Timer -ul ………………………….. ………………………….. ………………………….. ……………… 15
2.5.7. Convertor Analog Digital (ADC) ………………………….. ………………………….. ……….. 15
2.5.8. Watchdog -ul ………………………….. ………………………….. ………………………….. ……….. 15
2.6. Generalitati despre senzori ………………………….. ………………………….. ………………………. 15
2.6.1. Clasificarea senzorilor [2] ………………………….. ………………………….. …………………. 16

3
2.6.2. Caracteristicile senzorilor [3] ………………………….. ………………………….. …………….. 18
2.6.3. Senzori de temperatură ………………………….. ………………………….. ……………………… 19
2.6.4. Senzori de umiditate ………………………….. ………………………….. …………………………. 21
2.6.5. Senzori de presiune ………………………….. ………………………….. ………………………….. 22
CAPITOLUL III – Proiect tehnic ………………………….. ………………………….. ……………………….. 24
3.1. Descrierea proiectului ………………………….. ………………………….. ………………………….. … 24
3.2. Descrierea plăcii de dezvoltarea Arduino Uno ………………………….. ……………………….. 26
3.2.1. Descrierea schemei electrice – Arduino Uno ………………………….. ……………………. 28
3.3. Senzorul BMP180 ………………………….. ………………………….. ………………………….. ……… 36
3.4. Senzorul HTU21D ………………………….. ………………………….. ………………………….. ……… 40
3.5. Programare Arduino IDE ………………………….. ………………………….. ………………………… 43
3.6. Programare LabVIEW ………………………….. ………………………….. ………………………….. … 46
CAPITOLUL IV – Concluzii ………………………….. ………………………….. ………………………….. … 55
BIBL IOGRAFIE ………………………….. ………………………….. ………………………….. …………………. 57
ANEXA 1 – Schema bloc a sistemului ………………………….. ………………………….. ……………….. 58
ANEXA 2 – Diagrama bloc LabVIEW – Senzorul BMP180 ………………………….. ……………… 59
ANEXA 3 – Diagrama bloc LabVIEW – Senzorul HTU21D ………………………….. …………….. 60
ANEXA 4 – Legenda figurilor ………………………….. ………………………….. ………………………….. . 61
ANEXA 5 – Structura programului ………………………….. ………………………….. ……………………. 63

4
CAPITOLUL I – Prezentarea lucrării
1.1. Motivația și scopul lucrării
Am ales această temă deoarece îmi place să lucrez cu o placă de dezvoltare. Am ales
Arduino deoarece este open -source, are un preț destul de mic și este usor de înțeles să
programezi în Arduino IDE. Lucrarea va fi folosită atât în scopuri personale, dar și în scopuri
didactice.
Obiectivul lucrării constă în realizarea unui sistem de achiziție de date de la senzori, atât
prin intermediul mediul ui de dezvoltare Arduino cât și prin intermediul programul ui de
programare grafică LabVIEW.
Lucrarea va atinge următ oarele puncte:
 realizarea unui material de prezentare a platformei Arduino;
 realizarea unui material de prezentare a diferiților tipuri de senzori ce pot fi conectați
la o placă Arduino;
 realizarea panoului frontal al instrumentelor virtuale;
 realizarea d iagramei bloc a instrumentelor virtuale realizate.
1.2. Conținutul lucrării
Lucrarea conțin e:
 Capitolul I conține o introducere a lucrării.
 Capitolul II conține noțiuni teoretice fundamentale necesare pentru realizarea
lucrării.
 Capitolul III conține etapele n ecesare pentru realizarea sistemului.
 Capitolul IV conține concluziile și dezvoltările ulterioare posibile acestei lucrări.
 La finalul lucrării se găsesc anexele ce conțin schema bloc, diagrame bloc din
LabVIEW, legenda figurilor și codul programului.
1.3. Aplicabilitatea lucrării
Această lucrare poate fi utilizată la achiziționarea și monitorizarea datelor (temperaturii,
umidității și presiunii), dar în același rând va fi disponibilă studenților la desfășurarea
activităților de laborator , atât la disciplina Ins trumentație Virtuală , cât și la disciplina Măsurări
electrice și electronice.

5
CAPITOLUL II – Considerații teoretice
2.1. Introducere în LabVIEW
Programele din LabVIEW se numesc instrumente virtuale, sau VI -uri (virtual
instruments), deoarece aspectul și modul lor de funcționare imită instrumentele fizice, precum
osciloscopul și multimetrul.
Mediul de dezvoltare LabVIEW conține un set complet de instrumente folosite pentru
a analiza, pentru a afișa sau pentru a stoca datele achiziționate.
LabVIEW se poate folosi cu experiență puțină de programare. Programul utilizează o
terminologie, icoane și idei familiarizate tehnicienilor, oamenilor de știință și ingineri, bazându –
se pe simboluri grafice, mai degrabă decât pe limbajul textual pentru a descrie acți unile de
programare.
În LabVIEW, construiești o interfață pentru utilizator care este alcătuita din controale
(butoane, disc cu numere și alte mecanisme de intrare) și indicatoare (LED -uri, grafice și alte
afișaje de ieșire). După construirea panoului fro ntal, se construiește codul programului care se
mai numește codul G sau diagrama bloc.
Un VI conține următoarele trei componente:
 Panoul frontal – interfața cu utilizatorul;
 Diagrama bloc – conține codul sursă grafic care definește funcționalitatea VI -ului;
 Icoana și conectorul – identifica interfața VI -ului pentru a putea fi folosit într -un alt VI
ca subVI
LabVIEW conține biblioteci complete pentru colectarea de date, analiză, prezentare și
depozitare. LabVIEW include de asemenea, instrumente de dezvolta re a programului, se pot
seta puncte de întrerupere, se poate anima rularea programului pentru a vedea modul în care se
execută programul și de asemenea se poate rula pas cu pas pentru a face debug1 mai usor.

2.1.1. Panoul frontal
Panoul frontal reprezint ă interfața utilizatorului cu instrumentul virtual. Pe panoul
frontal al unui instrument virtual se găsesc butoane, comutatoare, ecrane, afișaje digitale și
indicatoare grafice. La crearea unui noi VI, panoul frontal este gol.

1 Debug – a identifica si a înlătura erorile

6
Pe panoul frontal se pot adă uga obiecte grafice de control care se numesc controale și
obiecte grafice indicatoare care se numesc indicatoare. Controalele si indicatoarele sunt
terminale interactive de intrare -ieșire a datelor. Orice control poate fi transformat în indicator
și inver s. Prin intermediul controalelor utilizatorul furnizează date instrumentului, în timp ce
indicatoarele afișeaza informațiile procesate de instrumentul virtual.
Un exemplu de panou frontal este prezentat în figura de mai jos (Fig. 2.1.1.). Acesta
include in dicatoare și controale de mai multe tipuri:
– Contro ale de tip : Knob, Numeric, String , Slide, Boolean;
– Indicatoare de tip: Gauge, Array;

Fig. 2.1.1. Exemplu de p anou frontal

2.1.2. Diagrama bloc
Diagrama bloc reprezintă programul (codul) propriu -zis dezvoltat în mediul LabVIEW
și conține codul sursă al instrumentului virtual. Fiecare obiect care se regaseste pe panoul
frontal (control sau indicator) are un corespondent pe diagrama bloc, care poart ă denumirea de
terminal.
După crearea panoului frontal, se scrie codul sursă folosind reprezentări grafice ale
funcților pentru a controla obiectele din panoul frontal. Diagrama bloc contine codul sursa
grafic.
Terminalele reprezintă tipul de date al co ntroalelor și indicatoarelor. Terminalele din
diagrama bloc pot fi configurate să apară ca o icoana sau ca tipul de date. În mod implicit,
terminalele din panoul frontal apar sub forma de icoana in diagrama bloc.

7
Daca utilizam un alt VI in prog ramul nostr u acesta va avea forma icoanei sale și totodată
acesta la rândul său poate conține un VI sau mai multe, permițând accesul la vizualizarea
diagramei bloc a fiecărui subVI.
Un exemplu simplu de diagramă bloc este reprezentat în figura de mai jos (Fig. 2.1.2 .).
În aceasta este reprezentat codul grafic care include patru terminale ale controalelor numerice
(Numeric, Numeric 2, Numeric 3 și Numeric 4) , un terminal al indicatorului numeric în care se
va stoca rezultatul funcțiilor (Result) și trei funcții simbol izate sub forma unor triunghiuri (
adunare (+), scadere ( -) și înmultire (x) ).

Fig. 2.1.2. Exemplu de diagram ă bloc

2.1.3. Icoana și conectorul
Cea mai importantă trăsătură a mediului de programare LabVIEW este modularitatea,
adică un anumit VI (instrument virtual) creat cu un anumit scop, poate fi folosit într -un alt VI
ca subVI, care la rândul său poate fi inclus și el într -un alt VI, creeându -se astfel o structură
ierarhica a VI -ului mult mai ușor de descifrat, urmarit și organizat.
Icoana este reprezentarea grafica a VI -ului, ea poate conține text, imagini sau o
combinație de text și imagine . La folosirea unui VI ca subVI, acesta este identif icat prin
intermediul icoanei.
Conectorul este un set de terminale care corespund controalelor și indicatoarelor acelui
VI, asemenea listei de parametrii a unui apel în funcție ale limbajelor de programare bazate pe

8
text. Panoul din conector definește int rarile și iesirile la care poti lega VI -ul pentru a -l putea
folosi într -un alt VI ca și subVI.
Un subVI poate fi folosit în mai multe VI -uri separate, acestea putând rula independent
în același timp, fără a se influența unul pe celălalt. Icoana și conect orul fiecărui VI arată în mod
implicit ca î n figura de mai jos (Fig. 2.1.3.).

Fig. 2.1.3. Icoana și conectorul
2.1.4. Paleta de instrumente, comandă și funcții
Paleta de instrumente se utilizează atât la panoul forntal cât și la diagrama bloc. Paleta
de instrumente conține instrumentele pe care le utilizați pentru a edita și pentru a depana (debug)
panoul frontal și diagrama bloc de obiecte.
Paleta de comandă se utilizează în panoul frontal. Controalele paletei conțin comenzile
de pe panoul frontal și i ndicatorii utilizați pentru a crea interfața cu utilizatorul.
Paleta de funcții se utilizează in diagrama bloc. Ea conține obiectele pe care sunt
utilizate pentru a programa un VI, cum ar fi aritmetică, operațiuni de intrare / ieșire, achiziție
de date et c.

Fig. 2.1.4. Paleta de funcții, comandă și instrumente

9
2.2. Introducere în Arduino
Arduino este o companie de software, de hardware dar totodata și o comunitate de
utilizatori, care proiectează și dezvolta calculatoare (hardware) open -source, software open –
source și kit -uri destinate construirii unor dispozitive interactive și dezvoltării acestora pentru
a face viața omului mai ușoar ă.
Arduino a fost proiectat cu scopul de a crea o platformă de învatare rapidă si eficienta
acesibilă tuturor având un co st redus. Este destinat atât pentru începători dar și pentru
profesioniști pentru a crea dispozitive care interacționează cu mediul folosind senzori și
elemente de acționare.
Placa de dezvoltare Arduino e ste un instrument prin intermediul căruia se pot realiza o
varietate de sisteme informatice cu capabilitate mare de percepere și de control a diferitelor
sisteme din lumea înconjuratoare.
Platforma Arduino este alcătuită din două părți:
 partea software – care se scrie în mediul Arduino Programing Language;
 partea hardware – care are ca procesor principal MCU -ul ATmega 328 sau 168 dezvoltat
de ATMEL
Platforma se găsește sub diferite variante și denumiri în functie de dimensiuni,
capabilități si performanțe. Cele mai utilizate plăci Arduino sunt Ard uino Uno și Arduino Mega
la care se pot adăuga diferite module pentru a îmbunătății performanțele aplicației dorite.
Partea software a platformei Arduino este integrată într -o interfață grafică de tip Mediu
Integrat de Dezvoltare (IDE). Mediul de dezvoltar e Arduino este bazat pe limbajul de
programare processing, prgramarea platformei făcându -se folosind limbajul de programare
Arduino.
Programul Arduino are două parti, partea de setup() si partea de loop(). În partea de
setup() codul este rulat o singură da tă, atunci când este alimentată placa, pentru a se inițializa.
În partea de loop() codul rulează ciclic și repetitiv (de la prima linie de cod pana la ultima) atâta
timp cât placa este alimentată.
Un proiect bazat pe platforma Arduino este format din mai m ulte module conectate între
ele. Modulele sunt de mai multe tipuri:
 module de intrare – senzori, butoane, potențiometre etc.
 module de ieșire – buzzere, relee, LCD -uri etc.
 module de date – module USB, Ethernet, B luetooth etc.

10
2.3. Instalare Drivere Ar duino
Instalarea pla tformei de dezvoltare se face uș or, simplu și rapid conectându -se placa de
dezvoltare la calculator prin cablul USB. După instalare, aceasta poate fi accesată la portul
calculatorului, de obicei din Device Manager la sectiunea Ports, C ommunication Port.
Pentru a instala Arduino Software (IDE) este nevoie de a descărca programul de pe site –
ul Arduino de la secțiunea Download, Download the arduino Software
(https://www.arduino.cc/en/ Main/Software ) pentru a avea cea mai recentă versiune a
programului. Este disponibil pentru orice sistem de operare (Windows, Mac OS, Linux).

2.4. Comunicare între Arduino si ecosistem
Pentru ca Arduino și ecosistemul să comunice, există mai multe modalități de
comunicare. Comunicarea între Arduino si ecosistem se poate f ace prin :
 prin interfața I2C;
 prin SPI ;
 interfața serială;
Interfața I2C (Inter Integrated Circuits)
Interfața I2C este o interfața serie apărută din necesitatea de a realiza sisteme ieftine cu
microcontrollere, destinate conducerii proceselor industriale. Pot fi conectate mai multe
dispozitive, fiecare dispozitiv având câte o adresă. Sunt dispozitive care au adresă fixă, care nu
poate fi modificată, și dispozitive a cărei adre sa I2C poate fi aleasa dintr -o listă de adrese
prestabilite.
Pentru ca un sistem sa comunice prin I2C se conectează circuite integrate care au trei
linii, două linii de semnal denumite SDA – serial data și SCL – serial clock și una de masă.
Această stru ctură este o structură multi -master, adică se pot conecta mai multe circuite
care pot avea rolul de master. Un circuit master este un circuit care inițiază un transfer de date
și care generează semnale de tact pentru a permite realizarea unui transfer de d ate. Circuitul
adresat de master se numește slave.
Protocolul de transfer al datelor pe magistrala I2C presupune inițierea transferului prin
aducerea magistralei într -o condiție de „start”, transferul propriu -zis și încheierea transferului
prin aducerea m agistralei intr -o condiție de „stop”.
Conditia de „start” este definită prin trecerea liniei SDA din 1 logic în 0 logic, în timp
ce linia SCL este menținută la nivel ridicat, 1 logic.

11
Conditia de „stop” este definită prin trecerea liniei SDA din 0 logic î n 1 logic, în timp
ce linia SCL este menținută la nivel ridicat, 1 logic.
Datele transmise trebuie să fie stabile pe durata impulsurilor de tact. Datele sunt
transferate pe magistrală sub forma unor grupuri de octeți (grupuri de 8 biți). După ce fiecare
octet este transmis, transmițătorul trebuie să verifice dacă datele recepționate de către receptor
sunt bune. Verificarea datelor transmise se face cu ajutorul biților de paritate.
SPI ( Serial Periperial Interface)
SPI este o interfață standard de mare vite ză, sincronă folosită de microcontrollere pentru
comunicarea cu unul sau mai multe dispozitive periferice pe distanțe mici. Un dispozitiv este
master si celelalte dispozitive sunt slave -uri.
Comunicarea prin SPI se face utilizând patru fire de conexiune:
 MISO (Master In Slave Out) – datele se transmit de la dispozitivele slave către
dispozitivul master;
 MOSI (Master Out Slave In) – dispozitivul master transmite date către dispozitivele
slave (periferice);
 SCK (Serial Clock) – firul prin care este transmis semnalul de tact (clock -ul);
 SS (Slave Select/ Chip Select) – firul de pe care fiecare dispozitiv este controlat de
master (activează sau dezactivează anumite dispozitive).
SPI este un protocol de comunicație de tip bus, putând fi conectate mai multe dispo zitive
pe acelasi bus de date, identificându -se fiecare prin canalul SS (Slave Select). Când valoarea
din acest canal este ‚low’, dispozitivul slave comunic a cu master -ul, iar când valoarea din acest
canal este „high”, dispozitivul ignora comunicarea.
În acest fel, se pot conecta mai multe dispozitive pe același canal SPI, dar având condiția
ca fiecărui sdispozitiv să i se atașeze un canal pentru Slave Select.
Interfata serială
Comunicarea serială este o comunicare de tip digital, deoarece pe fir se transmit biți.
Această comunicare are loc tot timpul între Arduino si calculator, atunci când programăm placa
Arduino. Viteza la care sunt transmiși biții pe fir este diferita la fiecare placa, dar poate fi setată
de utilizator, în functie de necesitatea r atei de transfer a datelor. Cele mai comune rate de
transfer sunt: 9600, 19200, 57600, 115200 biți/sec.

12
2.5. Microcontrollere
Un microcontroller (MCU2) este un mic computer pe un singur circuit integrat care
conține un nucleu de procesare, memorie și per iferice de intrare / ieșire. Memoria programului
sub forma de RAM Feroelectric, NOR flash sau OTP ROM, este de asemenea de multe ori
inclusă in cip, precum si o cantitate mica de memorie de access de tip RAM.
Microcontrollerele sunt proiectate pentru apli cații de tip embedded, în contrast cu
microprocesoarele folosite în calculatoarele personale sau alte aplicații de uz general compuse
din diferite cipuri discrete.
Microcontrollerele sunt utilizate în produse și dispozitive controlate automat, cum ar fi
jucăriile, sistemele integrate, scule și unelte electrice, mașini de birou, sisteme de control de
motoare auto, dispozitive medicale etc. Datorita reducerii dimensiunii și a costurilor în
comparație cu un dispozitiv care utilizeaza un microprocesor cu memor ie și dispozitive de
intrare / ieșire, microcontrollerele sunt dispozitivele cele mai bune din punct de vedere și
economic și digital.
Un microcontroller conține:
 o unitate centrala de procesare (CPU);
 memorie de tip ROM/PROM/EEPROM/FLASH și memorie RAM;
 porturi de intrare / ieșire;
 timere (numărătoare);
 sisteme de întreruperi;
 porturi seriale;
 ADC3 etc.

Majoritate microcontrollerelor sunt realizate cu tehnologie CMOS4. Prin această
tehnologie pot fi realizate structuri cu densitate mare de integrare, avâ nd un consum redus de
material prim. Au o logică înterna statică ce permite micșorarea frecvenței de ceas. Aceasta
tehnologie CMOS are imunitate la perturbații și se realizează pentru un domeniu mare de
temperatură (Microcontrollerele militare rezistă la sute de grade Celsius).

2 MCU – Microcontroller C ontrol Unit (unitatea centrală de control)
3 ADC – Analog to Digital Convertor (convertor analog digital)
4 CMOS – Complementary Metal Oxide S emicondu ctor

13
2.5.1. Tipuri de arhitecturi
Arhitectură de tip von-Neumann :
 are o singură magistrală internă pentru prelucrarea instrucțiunilor și a datelor
 CPU -ul are destinat un singur spațiu de memorie în care se memoreaza codul
instrucțiunilor și datele;
 este folosită în majoritatea microcontrollerelor;
Arhitectură de tip Harvard :
 are două magistrale, una pentru adrese și una de date;
 conține spațiu de memorie separat pentru program și pentru date;
 operațiile se pot executa cvasiparalel5.

Fig. 2.5.1. Arhitectura Harvard vs von -Neumann

2.5.2. Microcontroller CISC6 vs RISC7
CISC:
 este avantajul programării în limbajul de asamblare prin folosirea unei instrucțiuni
complexe în locul unei instrucțiuni simple;
 este întâlnit în majoritatea microcontrollerelor;
 conține multe instrucțiuni (peste 80 de instrucțiuni);
 instrucțiunile sunt diferite între ele.
RISC:
 se execută rapid și eficient;

5 Cvasiparalel – în timp ce se execută operațiile cu datele, codul următoarei instrucțiuni poate fi preluat din
memorie
6 CISC – Complex Instruction Set Computer (Microcontroller cu set complex de instructiuni)
7 RISC – Reduced Instruction Set Compute r (Microcontroller cu set redus de instructiuni)

14
 setul de instrucțiuni sunt simetrice;
 microcircuitul este de o complexitate mică;
 are o arh itectura de tip Harvard modificată sau von -Neumann modificată.

2.5.3. Memoria
Memoria are rolul de a memora și stoca informație. Ea este împarțit ă in locații care sunt
definite de o adresă și conținut, iar operațiile ce se realizează într -o locație de m emorie ce pot
fi atât de citire cât și de scriere. Operațiile de scriere si de citire se realizează cu o linie de control
numită R/W (read after write). Daca R/W = 1, atunci se citește din memorie iar daca W/R = 1,
atunci se citește din locația selectată.

2.5.4. Întreruperile
Întreruperea este un mecanism hardware oferit de platforma pe care se rulează aplicația.
Acest mecanism permite întreruperea șirului curent de execuție și se rulează o altă bucată de
cod, în funcție de anumiți stimuli veniți din exte rior.
Întreruperile pot fi generate de: pinul de întrerupere INT, de timere, de porturile seriale,
porturile paralele etc.

2.5.5. Porturi de intrare / ieșire
Portul de intrare / ieșire (I/O) are rolul de a realiza legătura cu lumea exterioară
microcontr oller-ului, putând să trimită și șa primească date și sunt accesate ca o locație de
memorie. Când starea unui pin se schimbă, o întrerupere poate fi generată.
Porturile I/O conțin un circuit open -drain destinat pinilor setați ca ieșire care poate sa se
activeze sau dezactiveze din soft și un circuit de pull -up destinat pinilor setați ca intrare, care
de asemenea poate fi activat sau dezactivat din soft.
Un port are trei regiștrii:
 registrul TRISx – permite setarea direcției pinilor unui port;
 registrul PO RTx – permite citirea sau scrierea datelor pe port;
 registrul LATx – permite stocarea datelor citite de pe port.

15
2.5.6. Timer -ul
Timer -ul este un numărător ce numără de la 0 la o valoare absolută sau de la o valoare
setată din soft până la valoarea maxim ă a timer -ului respectiv. Atunci când se ajunge la valoarea
maximă, timer -ul se resetează. În momentul resetării, timer -ul trimite un semnal spre sistemul
de întreruperi.
Timerul are rolul și este folosit pentru a măsura intervale exacte de timp , pentru a genera
întreruperi cu ajutorul cărora aplicația poate fi optimizată.

2.5.7. Convertor Analog Digital (ADC)
Convertorul analog digital generează o valoare pe 10 biți (respectiv pe cați biți este
realizat ADC -ul) folosind metoda aproximării succesive. Con vertorul conține regiștrii în care
este salvat rezultatul.
La intrarea convertorului analog digital este aplicat un semnal analogic din care rezultă
la ieșirea acestuia un semnal digital (șir de numere).

2.5.8. Watchdog -ul
Watchdog -ul este un cronometru electronic, care este utilizat pentru a detecta și de a
reveni din blocaje ale programului (erori, bucle infinite, etc.). În timpul funcționării normale,
microprocesorul repornește în mod regulat timer -ul watchdog pentru a preveni desincronizarea.

2.6. Generalitati despre senzori
Denumirea de senzor provine de la cuvântul din limba latină „sensus” care înseamnă
simț. Acest cuvânt a fost adoptat deoarece el a fost și este înca utilizat pentru a descrie organele
de simț ale oamenilor, ele fiind capabile să culeagă informații din mediul exterior și să le
transmită creierului. În acest caz mărimile fizice neelectrice din mediu sunt transformate
(convertite) în semnale electrice pe care creierul le primește și le analizează (interpretează),
rezultând astfel ac țiunile mușchilor corpului.
Noțiunea de senzor a apărut odată cu dezvoltarea microelectronicii. Majoritatea
elementelor tehnice senzitive sunt încadrate în categoria traductoarelor. D e cele mai multe ori
se folosește noțiunea de senzor cu același înțeles c u al traductorului și invers, ambele
semnificând un dispozitiv de măsurare a unei mărimi fizice.

16
„Un traductor este un dispozitiv care poate să convertească efectele fizice în semnale
electrice care pot fi prelucrate de instrumente de măsurat sau de calcu latoare”. [1] Traductorul
convertește o mărime de o anumită natură fizică într -o altă mărime de o altă natură fizică.
Un traductor mai poartă denumirea de actuator atunci când transformă o energie
electrică în energie neelectr ică, exemplul cel mai simplu pentru un actuator este difuzorul.
Difuzorul transformă semnalele electrice în semnale acustice (neelectrice).
„Senzorul ( elementul sensibil ) este elementul component al unui sistem automat sau al
unui aparat de măsurat care a re rolul de a transforma mărimea de măsurat, având o anumită
natură, într -un semnal purtător de informație – pentru sistemul automat – sau într -o mărime aptă
de a fi percepută de operatorul uman – pentru aparatul de măsurat ”. [2]
Senzorul este diferențiat de traductor prin:
 dimensiune – senzorul are dimensiune mult mai mică decât un traductor;
 măsurare – senzorul permite realizarea măsurarii asemănător cu organele umane de
simț;
 senzorii permit determinarea unei hărti a unei scen e care se poate investiga mai ușor.

2.6.1. Clasificarea senzorilor [2]
Senzorii au devenit componente electronice omniprezente. Răspândirea lor a devenit
atât de largă încât practic nu există domeniu în care să nu se folosească senzorii.
Clasificarea senzorilor se poate face după mai multe criterii:
a) după tehnologiile utilizate pentru realizarea lor:
– tehnologii ale matrialelor feromagnetice;
– tehnologii ale materialelor piezo -ceramice;
– tehnologii ale straturilor su bțiri;
– tehnologii ale straturilor groase;
– tehnologii ale microelectronicii și microsistemelor;
– tehnologii pentru materiale sinterizate;
– tehnologii ale foliilor ;
– etc.
b) după tipul mărimii fizice de intrare există:
– senzori absoluți – atunci când semnalul electric de ieșire poate să reprezinte toate
valorile posibile ale mărimii fizice de intrare, raportate la o referință aleasă;

17
– senzori incrementali – atunci când nu se poate stabilii o referința pentru toate punctele
din cadrul domeniulu i de măsurare, ci fiecare valoare măsurată reprezintă referința
pentru următoarea valoare.
c) după tipul mărimii de ieșire există:
– senzori analogici – care semnalul de ieșire este în permanență proporțional cu mărimea
fizică de intrare;
– senzori digital i – care semnalul de ieșire poate lua numai un număr limitat de valori
discrete, care permit cuantificarea semnalului fizic de intrare.
d) după numărul de valori posibile există:
– senzori binari – care au la ieșire două valori distincte;
– senzori cu un nu măr mai mare de valori – pentru a măsura o mărime într -o anumită
plajă ; pot fi analogici sau numerici.
e) senzorii se pot clasifica și în funcție de domeniul în care sunt utilizați:
– în industrie;
– în transporturi;
– în industria militară;
– în medicină;
– în automatizarea clădirilor și locuințelor.
f) după numărul elementelor traductoare și după numărul dimensiunilor atribuite valorilor
măsurate senzorii pot fi:
– scalari – un traductor, o dimensiune;
– vectoriali – măsurători după trei direcții ortogonale;
– matriciali – un anumit număr de traductoare dispuse după o matrice
monodimensională, bidimensională sau tridimensională.
g) după tipul mărimii măsurate din natură există:
– senzori de temperatură;
– senzori de umiditate;
– senzori de presiune;
– senzori de accelerație;
– senzori de deplasare;
– senzori de debit;
– senzori de viscozitate;
– etc.

18
2.6.2. Caracteristicile senzorilor [3]
Pentru a alege un senzor trebuie șa ținem cont de o serie de parametrii cum sunt:
dimensiunea, g reutatea, domeniul de măsurare, natura semnalului de ieșire și complexitatea
lanțului de prelucrare a acestuia, costul, gradul de protecție electrică, rezoluția, repetabilitatea,
precizia, sensibilitatea. Definirea anumitor caracteristici (rezoluție, sensi bilitate și precizie)
poate devenii o problemă dificilă, deoarece senzorul poate cuprinde unul sau mai multe
traductoare, la care se pot adăuga circuite electronice de achiziție, prelucrare și evaluare a
semnalelor.
Există și senzori care funcționează pe baza unor principii diferite având caracteristici
specifice grupei din care fac parte.
Caracteristicile senzorilor sunt:
 caracteristici ale mărimilor măsurate:
o domeniul de măsurare;
o intervalul de măsurare;
o capacitate de supraîncarcare;
o timp de recuparare.
 caracteristici electrice:
o natura semnalului (analogic sau digital);
o tensiuni de alimentare.
 caracteristici mecanice și constructive
 caracteristici ale influenței factorilor de mediu:
o influența temperaturii;
o influența umidității;
o influența vibrațiilor și ș ocurilor;
o influența accelerațiilor.
 caracteristici în regim static:
o caracteristica statică histerezis;
o rezoluție;
o sensibilitate;
o repetabilitate;
o prag de sensibilitate.
 caracteristici în regim dinamic:
o timp de răspuns;

19
o frecvența de rezonanță;
o caracteristica de frecvență.
 caracteristici funcționale (dimensiune, greutate și cost)
 caracteristici de flexibilitate și siguranță în funcționare:
o grad de protecție electrică;
o timp de funcționare;
o protecție la condiții de climă.

2.6.3. Senzori de temperatură
Tempera tura este mărimea fizică scalară care caracterizează starea termică a unu obiect.
Pentru măsurarea temperaturii trebuie stabilită o scară de măsura. Cea mai utilizată scară de
măsură este scara Celsius, care se definește prin punctul în care ghiața se tope ște, adică 0 °C și
prin punctul de fierbere al apei, adică 100 °C. Unitatea de măsura este gradul Celsius –[°C] și
de obicei se notează cu t.
În Sistemul Internațional (SI) unitatea de măsură este kelvinul (K). În această scară
temperatura de topire a gheții este 273,15°K. Temperatura de 0°K este numită zero absolut și
reprezintă punctul în care moleculele și atomii au cea mai mică energie termică.
Traductoarele de temperatură care se folosesc în măsurări electrice sunt numeroase
datorită unei game larg i de temperatură care se măsoară, cat și datorită preciziei de măsurare
intr-un anumit domeniu. Apare o eroare de măsură datorită schimbului de căldură dintre
traductor și mediu. Această eroare se evaluează prin calculul răspunsului dat de traductor.
Eroar ea este cu atât mai mică cu cât conductanța temică traductor – corp este mai mare. Eroarea
poate să apară și din cauza încălzirii curentului propriu care trece prin traductor.
Traductoarele sunt numeroase și din cauza construcțiilor diferite în funcție de mediul în
care activează.
De asemenea, fenomenele care stau la baza funcționării traductoarelor sunt diversificate.
Conversia temperatură – mărime electrică pe care senzorul o face are la bază efectele produse
de câmpul termic asupra diferitelor material e.
Traductoarele de temperatură se folosesc și pentru măsurarea indirectă a altor mărimi :
debit, viteză, valoarea efectivă a tensiunii sau a curentului, presiuni joase.
Măsurarea temperaturii se poate face într -o zonă a unui corp solid, lichid sau gazos.
Există două metode de măsurare a temperaturii :

20
 măsurare fară contact – se face cu un instrument optic prin care se vizează zona de
măsurat. Energia pe care obiectul vizat o radiază este captată de aparat.
 măsurare cu contact – se face cu ajutorul unui captator detector sau sondă. Acesta se
plasează în locul unde urmează să se măsoare temperatura.
Măsurarea temperaturii aerului se face cu ajutorul termometrului meteorologic sau cu
ajutorul unor senzori. Termometrul funcționeaz ă pe baza unor proprietăți ale corpurilor lichide
sau solide de a -și mări sau micșora volumul în raport cu variațiile temice.
Există o largă varietate de senzori de temperatură pe piață în zilele actuale, inclusiv
termocuple, detector rezistiv de temperatu ră (RTD – Resistance Temperature Detector),
termistori, infraroșu și senzori semiconductori.
Detectorul rezistiv de temperatură sau RTD este un dispozitiv de detectare a temperaturii
a cărei rezistență se schimbă cu temperatura. În mod obișnuit este const ruit din platină, deși
dispozitivele fabricate din nichel sau cupru sunt mai puțin frecvente, el poate avea mai multe
forme diferit e. Pentru a măsura un RTD, se plică un curent constant, se măsoară tensiunea
rezultată și se determină rezistența.

Fig. 2. 6.3. Resitance Temperature Detector (RTD)

Similar cu RTD, termistorul este un dispozitiv de detectare a temperaturii a cărei
rezistență se modifica odata cu temperatura. Cu toate acestea, termistoarele sunt realizate din
materiale semiconductoare. Rezist ența se determină în același mod ca și la RTD, dar termistorii
produc o caracteristică de rezistență foarte neliniară față de curba de temperatură. Astfel, după
ani de funcționare a termistorului, în domeniul său de lucru v -om avea o schimbare mare de
rezistență la o schimbare foarte mică a temperaturii. Acest lucru face să fie un dispozitiv extrem
de sensibil .

21
Utilizarea și construcția termocuplurilor se face pe baza unor legi:
 Legea circuitului omogen : într -un circuit omogen (conductoare de aceeași natur ă) nu
apare tensiune electromotoare, indiferent de diferența de temperatură dintre diferite
puncte. Aceasta permite utilizarea unor conductoare de legătură. [1]
 Legea metalelor intermediare: într-un circuit izoterm (T = ct) nu se generează tensiune
termoelectromotoare indiferent de natura elementelor care formează circuitul. Aceasta
permite ca lipirea conductoarelor să se facă cu un alt material, respectiv ca joncțiunea
rece să fie formată și din circuitul de măsurare, cu condiț ia ca elementele să fie la aceeași
temperatură. [1]
 Legea metalelor succesive: tensiunea termoelectromotoare generată de un termocuplu
format din conductoarele A și B este egală cu diferența tensiunilor termoelectromotoare
gene rate de termocuplele formate din conductoarele A și C respectiv C și B, cu condiția
ca diferența de temperatură a joncțiunilor să fie aceeași. Pe baza acestei legi se face
etalonarea termocuplurilor.
 Legea temperaturilor intermediare: tensiunea termoelectromotoare obținută pentru
diferenta de temperatură T2 – T1 este egală cu suma tensiunilor termoelectromotoare
obținute pentru diferențele de temperatură T2 – T3 și T3 – T1. Aceasta permite
realizarea corecțiilor la schimbarea temperatu rilor de referință. T2 – T1 = (T2 – T3) +
(T3 – T1). [1]

2.6.4. Senzori de umiditate
Umiditatea poate fi definită ca fiind cantitatea de vapori de apă ce este conținută într -un
eșantion de are. De asemenea, este o caracterist ică destul de importantă a aerului, atât din punct
de vedere meteorologic, cât și din punct de vedere bioclimatic.
Umiditatea este caracterizată de următoarele mărimi:
 umiditatea absolută – care reprezintă cantitatea de vapori de apă care se găsește într -un
metru cub de aer; umiditatea absolută este maximă atunci când aerul este saturat cu
vapori
 umiditatea relativă – care reprezintă mărimea ce indică cel mai bine gradul de saturație
al aerului cu vapori de apă; indică cât din cantitatea de vapori de apă n ecesară
condensării se află la un moment dat în atmosferă;
 umiditatea specifică – care reprezintă cantitatea de vapori de apă ce se găsește într -un
kg de aer; umiditatea specifică este maximă daca atmosfera este saturată cu vapori;

22
„Măsurarea umidității se face pe baza modificării unor proprietăți fizice, datorită
umezelii. Metodele de măsurare a umidității se bazează pe variația rezistivității, variația
capacității sau variația gradului de atenuare a microundelor.” [1]
I. Senzor ii de umiditate cu microunde
Senzorii de umiditate cu microunde funcționează pe baza variației gradului de atenuare
a microundelor aflate în materialele umede. Pe domeniul lungimilor de undă din intervalul 1mm
și 1m, fenomenul de absorbție a microundelor î n materialele umede este mai accentuat.
Senzorul conține un emițător de înaltă frecvență și un receptor. Între emițător si receptor
se pune materialul de măsurat iar receptorul determină gradul de atenuare a microundelor, iar
acesta depinde de gradul de u miditate al materialului studiat.
Pentru măsurarea gradului de umiditate a gazelor se folosesc higrometre, care se
realizează cu traductoare rezistive și funcționează pe baza modificării rezistivității gazului.
II. Senzori capacitivi de umiditate
Senzorii capa citivi de umiditate au aplicabilitate mare în industrie și funcționează pe
baza modificării capacității unui condensator, care are ca dielectric materialul a cărei umiditate
este măsurată.
Senzorii capacitivi de umiditate se folosesc la măsurarea umidități i relative,
caracterizându -se prin:
 stabilitate bună în timp;
 bună precizie
 rezistență foarte buna la agenți chimici si la praf
III. Senzori rezistivi de umiditate
Senzorii rezistivi de umiditate sunt utilizati pentru măsurarea umidității relative.
Măsurarea ac estor senzori se bazează pe micșorarea rezistenței materialului odata cu creșterea
de apă (umiditate) conținută.
Acești senzori sunt formați din doi electrozi între care se află rezistența de masurat.
Comportamentul senzorilor rezistivi este influențat de temperatura ambiantă și necesită un
factor de corecție. Aceștia au o stabilitate bună în timp și au un cost redus.

2.6.5. Senzori de presiune
Fluidele sunt caracterizate prin faptul că pot curge ușor. Din categoria fluidelor fac parte
lichidele și gazele. Deosebirile dintre lichide și gaze sunt:

23
 lichidele au o suprafață liberă, care la echilibru este plană și orizontală (iau forma
vasului in care sunt puse), iar gazele nu au această suprafață, ocupând tot volumul
incintei in care sunt introduse;
 lichidele sunt incompresabile, pe când gazele sunt compresabile.
Un lichid perfect este acela la care straturile se pot deplasa unele față de celelalte, fără
frecare și al cărui volum u poate fi comprimat., iar un gaz perfect este un gaz la care, pentru o
anumită cantitate, produsul dintre presiunea și volumul său este constant. Metodele de măsurare
a presiunii sunt adaptate fluidelor reale. [2]
Presiunea atmosferică este presiunea exercitată de învelișul gazos din jurul
pământului. Presiunea atmosferică variaza o data cu altitudinea. Obiectele care se află pe
pământ sunt supuse acestei presiuni atmosferice. S -a ajuns astfel la necesitatea stabilirii unei
presiuni atmosferice de referință față de care să se determine starea fizică a unui corp, aceasta
numindu -se convențional presiune normală.
La măsurarea presiunii sunt întâlnite mai multe situații:
 măsurarea presiunii în raport cu vidul absolut din care rezultă presiunea absolută
 măsurarea diferenței de presiune față de cea atmosferică din care rezulta presiunea
relativă
 măsurarea diferenței de presiune față de o valoare re referință convențională aleasa de
utilizator, din care rezulta presiunea diferențială
Traductoare de presiune integrate
Senzorul și adaptorul sunt integrate într -un singur ansamblu. Avantajele acestora sunt:
domenii de presiun e mari, precizie sub 1%, sensibilitate sub 0,5%, eroare de neliniaritate
<0,1%, alimentare cu tensiune continua, bandă largă de frecvențe, imunitate la șocuri și vibrațîî
mecanice, dimensiuni reduse, instalare și exploatare simplă, cuplare ușoară cu alte s isteme de
măsurare. [2]
Traductoare de presiune cu senzori elastici
Acestea conțin elemente elastice care convertesc presiunea în deformație elastică a unor
corpuri de formă specială. Senzorii utilizați sunt: tub simplu curbat, tubul spiral, membrana
simplă sau dublă și tip burduf.
Membranele sunt plăci elastice de grosime mică, de formă circulară, încastrate la
extremitate pe un contur. Sub acțiunea presiunii aplicate pe o față se produc deformații
măsurabile. Membranele spot mă sura presiuni de la cățiva mm de apă până la sute de atmosfere.
După forma constructivă, membranele sunt plane și sferice.

24
CAPITOLUL III – Proiect tehnic
3.1. Descrierea proiectului

În figura de mai jos (Fig 3.1.) este reprezentată schema bloc a proiectului. Aceasta am
realizat -o online pe site -ul https://www.draw.io/ și are în componență următoarele blocuri
funcționale: Arduino Uno, Calculator, Senzorul BMP180 și Senzorul HTU21D.
Blocul Arduino Uno reprezintă blocul prin cipal al sistemului, el realizând comunicarea
cu cei doi senzori prin Interfața I2C, achiziționând date de la aceștia și apoi transferând date
către calculator pe Interfaț a Serială.

Fig.3.1. 1. Schemă bloc

Pentru a realiza mult mai usor conexiunile dintre placa de dezvoltare Arduino Uno,
Senzorul BMP180, Senzorul HTU21D și Calculatorul am realizat o schemă electrică simplă
pentru a realiza apoi cablajul imprimat pe care am amplasat componentele necesare.
Schema electrica împreună cu layout8-ul au fost realizate în programul CadSoft
EAGLE9.

8 Layout – schemă cu amplasarea tuturor componentelor și a conexiunilor dintre acestea pe cablajul imprimat
9 CadSoft EAGLE – aplicație pentru realizarea schemei electrice și a cablajului imprimat

25
PCB10-ul a fost realizat în urmatoarele etape:
 de proiectare a cablajului – partea în care am realizat schema electrică (Fig. 3.1.2.) și
layout -ul
 de imprimare a cab lajului – am folosit metoda de transfer termic de toner;
 de corodare a plăcuței – am folisit clorură ferică pentru a elimina cuprul pentru a avea
traseele conexiunilor;
 de finalizare a plăcuței – partea în care am relizat toate lipiturile necesare pentru ca
plăcuța să funcționeze.

Fig.3.1.2. Schema electrică a plăcuței

10 PCB – populated circuit board (placă de circuit populată)

26

Fig.3.1.3. Layout -ul plăcuței

3.2. Descrierea plăcii de dezvoltarea Arduino Uno

Fig. 3.2. Arduino Uno

27
Placa de dezvoltare Arduino Uno conține:
 microcontroller ATmega328;
 14 intrări digitale/pini de ieșire dintre care 6 pini pot fi folosiți ca ieșiri PWM11;
 6 intrări analogice;
 oscilator;
 mufă ICSP12;
 conexiune USB;
 mufă alimentare;
 buton pentru reset.

Placa de dezvoltare conține toate componentele necesare pentru funcționarea
microcon troller -ului, conectându -se foarte ușor la calculator prin cablus USB prin care se și
alimentează. Poate fi alimentată și extern, atunci când la placă sunt conectați mai mulți
consumatori care au nevoie de curent mai mare de câteva sute de mA pentru a func ționa.
Arduino Uno are în componență microcontroller -ul ATmega16U2, care este programat
să funcționeze ca un convertor de la USB la Serial.
Specificații tehnice ATmega328 [4]:
 tensiune de lucru – 5V;
 tensiune de intrare – recomandat 7 – 12V, limită: 6 – 20V;
 pini digitali I/O și pini analogici de inrare – 14 digitali, 6 analogici;
 curent DC pentri pinii I/O – 40mA
 curent DC pentru pinul de 3,3V – 50mA;
 memorie – Flash de 32KB, SRAM 2KB, EEPROM 1KB;
 viteză clock – 16 MHz.

Placa de dezvoltare Arduino Uno are următoarele caracteristici fizice:
 lugime – 68,6mm;
 lățime – 53,4mm;
 greutate – 25g.
Intrările analogice sunt folosite pentru citirea semnalelor analogice. La acestea pot fi
conectați diferiți senzori cu ieșire analogi că.
Intrările și ieșirile digitale sunt folosite pentru semnale digitale, ce pot avea 2 valori, 0
sau 1.

11 PWM – Pulse Width Modulation (semnal cu factor de umplere variabil).
12 ICSP – In Circuit Serial Programming

28
3.2.1. Descrierea schemei electric e – Arduino Uno

Fig.3.2.1. Schemă electrică Arduino Uno [5]

29
Microcontroller -ul ATmega328 face parte din familia Atmel și stă la baza plăcii de dezvoltare
Arduino Uno.
ATmega328 este un circuit bazat pe unmicrocontroller RISC13 și are o memorie FLASH
de 32KB, o memorie EEPROM de 1KB și o memorie RAM de 2KB. Are 23 de linii de uz
general, 32 de regiștrii, 3 timere, întreruperi interne și externe, programator USART, interfață
Serială, SPI, I2C, convertor Ana log Digital, oscilator intern cu o frecvență de 8MHz.
Microcontroller -ul are 28 de pini dintre care:
 pin VCC – pin de alimentare;
 GND – pin de masă;
 AREF, AVCC, AGND – 3 pini pentru convertorul A/D;
 XTAL1, XTAL2 – 2 pini pentru oscilatorul de quartz;
 RESET – pin pentru soft reset;
 14 pini digitali – 6 pot fi folosiți ca PWM;
 6 pini analogici.

Microcontroller -ul ATmega328 are 3 PORTURI:
 PORTB (PB0 – PB5) – port digital;
 PORTD (PD0 – PD7) – port digital;
 PORTC (PC0 – PC5) – port analogic.

Pinii analogici ai microcontroller -ului ATmega328 se folosesc pentru semnale analogice.
Fiecare pin analogic poate fi programat să genereze o rezoluție de 10 biți. Pinii analogici sunt
numerotați de la A0 la A5.
Pinii digitali funcționează la o tensiune de 5V, iar fiecar e pin poate sa trimită sau sa
primească un curent de 40mA. Fiecare pin are în componență cate un rezistor cu o valoare
cuprinsă intre 20 – 50 kΩ, implicit deconectată.
În figura de mai jos (Fig. 3.2.2.) este ilustrat microcontroller -ul ATmega328 cu conexiu nile
pinilor.

13 RISC – Reduced Instruction Set Computer

30

Fig. 3.2.2. Schemă ATmega328 [5]

Funcțiile pinilor analogici :
 pinul 23 (PC0) – A0 – implicit este pin analogic; este conectat prin pinul 1 la conector –
ul AD;
 pinul 24 (PC1) – A1 – implicit este pin analogic; este conectat prin pinul 2 la conector –
ul AD;
 pinul 25 (PC2) – A2 – implicit este pin analogic; este conectat prin pinul 3 la conector –
ul AD;
 pinul 26 (PC3) – A3 – implicit este pin analogic; este conectat prin pinul 4 la conect or-
ul AD;
 pinul 27 (PC4) – A4 (SDA) – este folosit pentru comunicarea I2C și este întrebuințat
pentru Serial Data; este conectat prin pinul 5 la conector -ul AD;

31
 pinul 28(PC5) – A5 (SCL) – este folosit pentru comunicarea I2c și este întrebuințat
pentru Seri al Clock; este conectat prin pinul 6 la conector -ul AD.

Funcțiile pinilor digitali :
 pinul 2 (PD0) – RXD – este pin serial pentru recepționarea datelor seriale asincrone;
este conectat prin pinul 1 la conector -ul IOL;
 pinul 3 (PD1) – TXD – este pin serial folosit pentru transmiterea datelor seriale
asincrone; este conectat prin pinul 2 la conector -ul IOL;
 pinul 4 (PD2) – INT – este pin de întrerupere externă; poate fi configurat să genereze
întreruperi la o valoare mica, pe front descrescător sau crescăto r; este conectat prin pinul
3 la conector -ul IOL;
 pinul 5 (PD3) – INT2 – este pin de întrerupere externă; deosebit fața de pinul 4 este
faptul ca poate fi folosit pentru PWM; este conectat prin pinul 4 la conector -ul IOL;
 pinul 6 (PD4) – T0 – implicit este pin de intrare/ieșire; este conectat prin pinul 5 la
conector -ul IOL;
 pinul 11 (PD5) – T1 – este folosit pentru PWM; este conectat prin pinul 6 la conector –
ul IOL;
 pinul 12 (PD6) – AIN0 – este folosit pentru PWM; este conectat prin pinul 7 la
conector -ul IOL;
 pinul 13 (PD7) – AIN1 – implicit este pin de intrare/ieșire; este conectat prin pinul 8 la
conector -ul IOL;
 pinul 14 (PB0) – ICP – implicit este pin de intrare/ieșire; este conectat prin pinul 1 la
conector -ul IOH;
 pinul 15 (PB1) – OC1 – este folosit pentru PWM; este conectat prin pinul 2 la conector –
ul IOH;
 pinul 16 (PB2) – SS – este folosit pentru comunicarea SPI; este semnalul Slave Se lect;
este conectat prin pinul 3 la conector -ul IOH;
 pinul 17 (PB3) – MOSI – este folosit pentru comunicarea SPI; este semnalul Master
Out Slave In; este conectat prin pinul 4 la conector -ul IOH;
 pinul 18 (PB4) – MISO – este folosit pentru comunicarea SPI; este semnalul Master In
Slave Aut; este conectat prin pinul 5 la conector -ul IOH;
 pinul 19 (PB5) – SCK – este folosit pentru comunicarea SPI; este semnalul de clock;
este conectat prin pinul 6 la conector -ul IOH;

32
 pinul 7 (GND) – este pin pentru masă; este conectat prin pinul 7 la conector -ul IOH;
 pinul 8 (AREF) – este pin de refer ință analogic; este conectat prin pinul 8 la conector –
ul IOH;

Placa de dezvoltare Arduino Uno mai conține un grup de pini folo siți la diferite funcții:
 pin IOREF – este utilizat ca referința pentru shield -ul Arduino pentru a comuta
tensiunea de funcționare a plăcii; este conectat prin pinul 2 la conectr -ul POWER;
 pin RESET – este utilizat pentru soft reset pentru shield -ul Arduino; este conectat prin
pinul 3 la co nector -ul POWER;
 pin 3,3V – este tensiunea folosită pentru senzorii care necesită această tensiune de
alimentare cu un curent maxim generat de 50mA; este conectat prin pinul 4 la conector –
ul POWER;
 pin 5V – este tensiunea folosită pentru componente ce nece sită această tensiune de
alimentare; este conectat prin pinul 5 la conector -ul POWER;
 pin GND – este folosit ca masă pentru componentele conectate la Arduino; este conectat
prin pinul 6 la conector -ul POWER;
 pin GND – este folosit ca masă pentru componente le conectate la o sursă externă de
alimentare; este conectat prin pinul 7 la conector -ul POWER;
 pin Vin – reprezintă tensiunea de intrare dintr -o sursă externă; este conectat prin pinul
8 la conector -ul POWER.

Mufa ICSP (In Circuit Serial Programming) est e formată din 6 pini care sunt utilizați
pentru reprogramarea microcontroller -ului, sau mai pot fi folosiți pentru comunicarea cu alte
microcontrollere, aceasta permițând comunicarea prin SPI.
Mufa ICSP folosește următorii pini:
 pinul 1 – MISO;
 pinul 2 – 5V (alimentare);
 pinul 3 – SCK;
 pinul 4 – MOSI;
 pinul 5 – RESET;
 pinul 6 – GND (pinul de masă).

33
Pinul 9 și 10 (XTAL1 și XTAL2) sunt folosiți pentru oscilatorul cu quartz. Oscilatorul
cu quartz are o frecvență de 16MHz. Cei doi condensatori au capacitatea de 22pF formează
împreună cu capacitatea parazită, dată de cablajul utilizat , capacitatea de sarcină pentru cristalul
de quartz și au rolul de a ajuta la intrarea în oscilație a cristalului de quartz .
Pinul 1 al microcontroller -ului ATmega328 este pinul R ESET și este conectat la 5V
printr -un reistor de pull -up. Valoarea rezistorului este de 10k Ω. Pinul are rolul de a reseta
microcontroller -ul. Funcția de RESET mai poate fi activată prin apăsarea butonului ce se găsește
pe această placă, acesta fiind conect at tot la pinul de RESET.
Pe placă se mai găsește un LED verde care semnalizează faptul ca placa este alimentată.
LED -ul este înseriat cu doi rezistori de 1kΩ în paralel și este conectat între 5V și GND.

Microcontroller -ul ATmega16U2 este cel de -al doi lea microcontroller de pe placa de
dezvoltare Arduino Uno. El face parte tot din familia Atmel și este programat ca un convertor de la
USB la Serial.

Fig. 3.2.3. Schemă ATmega16U2 [5]

ATmega16U2 are următoarele caracteristici:
 memorie FLASH 16KB;
 memorie EEPROM 512 bytes;
 memorie SRAM 512 bytes;
 22 linii de uz general intrare/ieșire;

34
 32 de regiștrii de lucru;
 2 timere;
 port serial SPI;
 USART;
 clock intern de 8MHz.
Acest microcontroller are 32 de pini:
 un pin de alimentare digitală (VCC);
 un pin de alimentare (AVCC);
 un pin de masă (GND);
 2 pini pentru quartz (XTAL1 și XTAL2);
 un pin de RESET;
 16 pini digitali;
 5 pini analogici;
 5 pini pentru USB (UCAP, UVCC, D -, D+, UGND).
ATmega16U2 are 3 port uri:
 PORTB (PB0 – PB7) – sunt folosiți pinii de la PB1 la PB7;
 PORTC (PC2 – PC7)
 PORTD (PD0 – PD7) – sunt folosiți pinii de la PD2 la PD5 și pinul PD7.

Mufa USB are 4 pini care sunt conectați astfel:
 pinul 1 – e pinul USBVCC;
 pinul 2 – e pinul D – conect at la pinul 30 al uC14-ului printr -un rezistor;
 pinul 3 – e pinul D+ conectat la pinul 29 al uC-ului printr -un rezistor;
 pinul 4 – e pinul USB pentru masă și e conectat la pinul 29 al uC -ului

ATmega16U2 are cinci pini pentru comunicarea USB:
 pinul 27 (UCAP ) – pentru tensiune de alimentare externă a regulatorului interm;
 pinul 28 (UGND) – pentru masă;
 pinul 29 (D+) – pentru viteză maximă pozitivă;
 pinul 30 (D -) – pentru viteză maximă negativă;
 pinul 31 (UVCC) – pentru tensiune de ali mentare internă a regulatorului.

14 uC – microcontroller

35
Regulatorul liniar de 3,3V este reprezentat in schema din figura de mai jos (Fig. 3.2.4.).
La placa de dezvoltare Arduino Uno se pot conecta senzori si dispozitive ce funcționeaza la
tensiunea de 3,3V. Această tensiune este obținută cu ajuto rul regulatorului liniar LP2985 –
33DBVR. Acesta are 5 pini:
 un pin de alimentare;
 un pin de masă;
 un pin de ON/OFF;
 un pin de BTPASS;
 un pin de OUT.
Tensiunea aplicată pe intrarea VIN trece prin divizorul de tensiune format din cei doi
rezistori de 10k Ω. În urma divizorului se obține o tensiune egală cu jumătate din tensiunea de la
intrare. Această tensiune rezultată intră într -un comparator, unde se compara cu tensiunea de 3,3V.
Daca tensiunea rezultată este mai mare de 3,3V rezultă pe comparator 1 logic. I eșirea
comparatorului intră în tranzistorul pMOS care va fi deschis de tensiunea rezultată din comparator
și la iesirea din regulator se obține tensiunea de 3,3V.
Fig. 3.2.4. Schemă regulator liniar de 3,3V [5]

36
3.3. Senzorul BMP180
Senzorul BMP180 este un senzor digital de presiune fabricat de firma Bosch . Senzorul
are inclus masurătoare de temperatură, masurătoare de presiune și interfață I2C.
BMP180 este senzorul succesor compatibil al senzorului BMP085, o nouă generație de
senzori de presiune digitală de înaltă precizie cu un consum foarte redus de putere. Puterea
ultra-scazută și electronicele de joasă tensiune a senzorului BMP180, îl fac optim pentru
utilizarea sa în telefoane mobile, dispozitive de navigație GPS și echip amente în aer liber. Cu
un zgomot redus și un timp de conversie rapid, senzorul BMP180 are performanțe superioare
celorlalți senzori din gama sa. Interfața I2C permite intergrarea ușoară a sistemului cu un
microcontroller.
Senzorul digital de presiune BMP1 80 are următoarele specificații:
 gama tensiunii de alimentare: 1,8 – 3,6V (Vdd) ; 1,62 – 3,6V (Vddio);
 gama de presiune: 300 – 1100hPa;
 putere scăzută: 5uA la 1 eșantion/secundă în modul standard;
 zgomot redus: – 0,06hPa15 în modul redus de energie;
– 0,02hPa în modul avansat de rezoluție.
Senzorul BMP180 poate fi folosit la prognoză meteo, la îmbunătațirea navigării prin
GPS, la navigare în interiorul și exteriorul clădirilor, la timp liber și sport, la masurarea vitezei
de creștere sau scurgere a lic hidelor etc.

Fig.3.3.1. Senzorul de presiune BMP180

15 hPa – hectopascali

37

Configurația pinilor [6]:
 pinul 1 (CBS) – Chip Select (este disponibil la senzorul cu interfață SPI) ;
 pinul 2 (VDD) – pinul de alimentare;
 pinul 3 (VDDIO) – tensiunea de alimentare digitală;
 pinul 4 (SDO) – SPI Output (este disponibil la senzorul cu interfață SPI);
 pinul 5 (SCL) – semnalul Serial Clock de la interfața I2C;
 pinul 6 (SDA) – semnalul Serial Data de la interfața I2C (sau SPI Input pentru senzor ul
cu interfață SPI);
 pinul 7 (GND) – pinul de masă.

Senzorul BMP180 este proiectat pentru a fi conectat direct la un microcontroller prin
intermediul interfaței I2C. Datele de presiune și temperatură trebuie sa fie compensate de datele
de calibrare din m emoria EEPROM a senzorului BMP180.
În EEPROM e stocat 176 de biți de date de calibrare, acestea fiind utilizate pentru a
compensa dependența de temperatură și ceilalți parametrii ai senzorului.

Fig. 3.3.2. Schemă de circuit pentru aplicație obișnuită [6]

38
Pentru a achiziționa valoarea temperaturii și a presiunii ambientale microcontroller -ul
trebuie să funcționeaze astfel: microcontroller -ul trimite o secvența de start pentru a porni o
măsurătoare a presiunii sau a temperaturii, după timpul de conversie, valorea rezultatelor pot fi
citite prin interfața I2C. Pentru calcularea temperaturii în grade Celsius și presiunii în
hectopascali, datele de calibrare trebuiec utilizate. Datele de calibrare sunt niște constante ce
pot fi citit e din memoria EEPROM prin interfața I2C la inițializarea software -ului. Rata de
eșantionare poate fi crescută până la 128 eșantioane pe secundă.
Memoria EEPROM de 176 de biți este partiționată în 11 cuvinte de câte 16 biți fiecare.
Aceste 11 cuvinte conțin coeficienții de calibrare. Acești coeficienți de calibrare sunt
individuali fiecărui senzor. Înainte de primul calcul al temperaturii și presiunii, master -ul citește
datele din EEPROM. Comunicarea de date poate fi verificată prin verificarea faptului că n ici
unul din cuvinte nu are valoarea 0 sau 0xFFFF. Coeficienții de calibrare sunt reprezentați in
figura de mai jos (Fig. 3.3.3.).

Fig. 3.3.3. Coeficienți de calibrare [6]

Algoritmul folisit pentru calculul temperaturii și presiunii pentru BMP180 este
reprezentat in figura de mai jos (Fig. 3.3.4.) unde este detaliat pas cu pas fiecare etapă ce trebuie
făcută pentru o achiziționare de date corecta a temperaturii și presiunii.

39

Fig. 3.3.4. Algoritmul pentru măsurarea tempera turii și presiunii [6]

40
3.4. Senzorul HTU21D
HTU21D este noul senzor de umiditate și temperatură digitală de la MEAS16 și este pe
cale de a stabili noi standarde în ceea ce privește mărimea și inteligența. Este încapsulat într -o
capsulă de 3 x 3mm și 1mm înalțime, furnizează semnale calibrate, liniarizate în format digital
prin intermediul interfaței I2C. Senzorii HTU21D sunt dedicați măsurării temperaturii și
umidității și joacă rolul de traductoare pentru aplicații în care este nevoie de măsurători fiabile
și precise.
Senzorul HTU21D are un consum redus de energie, proiectat pentru un volum mare de
aplicații sensibile cu constrângeri de spațiu și de cost. Fiecare senzor este calibrat și testat
individual.
Senzorul HTU21D are următoarele caracteristici [7]:
 interschimbabilitate completă, fără calibrare neecsară în condiții standard;
 desaturație instantanee după perioade lungi de timp în faza de saturație;
 compatibil cu procesele de asamblare automatizate.
Senzorul digital de umiditate și temperatură se poate utiliza la plicații precum:
 aplicații automotive (ex. dezaburire);
 electrocasnice;
 aplic ații medicale;
 imprimante;
 umidificatoare etc.

Fig. 3.4.1. Senzorul de umiditate și temperatura HTU21D

16 MEAS – Modernizing Extension and Advisory Services (Modernizatoare Extindere și Servicii de Consultanță)

41
Configurația pinilor [7]:
 pinul 1 (DATA) – semnalul Serial Data de la interfața I2C;
 pinul 2 (GND) – pinul de masă;
 pinul 3 (NC) – neconectat;
 pinul 4 (NC) – neconectat;
 pinul 5 (VDD) – pinul de alimentare ;
 pinul 6 (SCK) – semnalul Serial Clock de la interfața I2C;
 padul – se conectează la masă sau rămâne neconectat.

Pinii de alimentare (VDD, GND). Tensiunea de aliment are a senzorului HTU21D
trebuie să fie în intervalul 1,5 – 3,6V, recomandată este 3V. Cu toate acestea, circuitul tipic de
aplicare include un rezistor de pull -up pe firul de date și un condensator de 100nF între VDD
și GND, plasate cât mai aproape posibil de senzor.
Pinul de SCK este utilizat pentru a sincroniza comunicarea între microcontroller și
senzorul HTU21D. Deoarece interfața constă din logică complet statică, nu există nici o
frecvență minimă de Serial Clock.
Pinul de date este utilizat pentru a transfera date în și în afara dispozitivului. Pentru a
trimite o comandă către senzorul HTU21D, DATA este valabilă pe frontul crescător al SCK și
trebuie să rămână stabil, în timp ce SCK este mare. După frontul descrescător al SCK, valoarea
datelor poate f i mo dificată. Pentru comunicații de date în condiții de siguranță , datele sunt
valabile între DATA set -up time și DATA hold -time, înainte de frontul crescător și dupa frontul
descrescător al SCK.
Protocolul de comunicație cu senzorul HTU21D [7]:
 Start -up sensor – senzorul necesită o sursă de tensiune de alimentare între 1,5V și 3,6V.
După alimentare, senzorul are nevoie de cel mult 15ms în timp ce SCK este 1 logic
pentru a ajunge în starea inactivă, adică să fie gata să accepte comenzi de la
microcontroller. Nici o comanda nu trebuie să fie trimisă înainte de acest timp. Este
recomandat un soft reset la început.
 Secventa de start (S) – pentru a iniția transmisia, un bit de start trebuie să fie emis. Se
compune dintr -o scădere a liniei de date în timp ce SCK este 1 logic
(high) , urmată de scăderea sa.

42
 Secventa de stop (P) – pentru a opri transmisia, un bit de stop trebuie să fie emis. Se
compune dintr -o trecere din 0 logic (low) în 1 logic (high) a datei în
timp ce SCK este 1 logic (high) .

După trimiterea condiției de start, mesajul I2C conține 7 biți cu adresa dispozitivului și
un bit cu direcția datei („0” pentru acces de scriere). Senzorul HTU21D indică reecpția corectă
a unuo octet prin tragerea pinului DATA la low (un bit de ACK), dupa al 8 -lea front
descrescător al ceasului SCK. După eliberarea unei comenzi de măsurare (0xE3 pentru
temperatură și 0xE5 pentru umiditate relativă), microcontroller -ul trebuie să aștepte ca
măsurătoarea să se finalizeze. Comenzile de bază s unt ilustrate în figura de mai jos (Fig. 3.4.2.).

Fig. 3.4.2. Comenzi I2C pentru senzorul HTU21D

Fig. 3.4.3. Secvență de comunicare master

43
3.5. Programare Arduino IDE
Programarea pentru placa de dezvoltare Arduino Uno se realizează în interfața grafică
de tip IDE. Mediul de dezvoltare Arduino IDE se bazează pe un limbaj de programare
processing.
După instalarea programului și rularea acestuia trebuie configurat mediul pentru placa
de dezvoltare folosită.
Configurarea se realizeaza din Meniu:
 Tools > Boar d > Arduino / Genuino Uno
 Tools > Port > COM3

Fig. 3.5.1. Meniu configurare placă de dezvoltare
Semnificația butoanelor din mediul de programare Arduino IDE este reprezentată în
figura următoare (Fig.3.5.2.).

Fig.3.5.2. Semnificație butoane Meniu

44
Acest mediu de dezvoltare conține o opțiune pentru monitorizarea serială. Folosind
această opțiune putem urmări în fereastra serială rezultatele pe care dorim să le afișăm. Această
opțiune este disponibilă din:
 Meniu > Tools > Serial Monitor ;
 Apăsând Ctrl + Shift + M.

Fig.3.5.3. Opțiunea Serial Monitor

Un program scris în mediul de dezvoltare Arduino IDE are două părți:
 partea de setup() – este rulată o singură dată după alimentarea plăcii de dezvoltare ;
 partea de loop() – este rulată în buclă infinit ă atâta timp cat placa de dezvoltare este
alimentată .

Fig. 3.5.4. Funcțiile void setup() și void loop()

45
Pentru a afla adresele I2C ale dispozitivelor am realizat următorul cod. Codul scanează
comunicația, număra dispozitivele și returnează valorile adreselor I2c ale dispozitivelor în
hexazecimal și zecimal.

Fig. 3.5.3. Codul pentru aflarea adreselor I2C

46
3.6. Programare LabVIEW
Mediul de dezvoltare LabVIEW este un limbaj bazat pe programare grafică. LabVIEW
poate să comunice cu placa de dezvoltare Arduino Uno prin intermediul mai multor programe
(module) ce trebuiesc instalate. Acestea sunt:
 VI Package Manager (VIPM) – este folosit pentru instalarea diferitelor interfețe;
 NI-VISA Driver – este folosit pentru detecția portului serial la care este co nectată placa
de dezvoltare.

Pentru ca Arduino Uno să poată comunica cu LabVIEW, din programul VI Package
Manager trebuie instalat:
 LabVIEW Interface for Arduino;
 LINX.

LINX oferă o modalitate ușoară de a utiliza instrumentele virtuale din LabVIEW pentru
a interacționa cu platforme de dezvoltare, cum ar fi Arduino și altele (chipKIT, myRIO etc).

Pentru a face conexiunea dintre LabVIEW și Arduino Uno trebuie facută următoar ele
configură ri reprezentate și în imaginile de mai jos (Fig.3.6.1. și Fig. 3.6.2. ):
 selectăm din Meniu > Tools > MakerHub > LINX > LINX Firmware Wizzard…;
 selectăm Device Family – Arduino;
 selectăm Device Type – Arduino Uno;
 selectăm Firmware Upload Method – Serial/USB;
 selectăm portul de la calculator – COM3;
 selectăm Firmware Version – LINX Serial/USB;
 selectăm Upload Type – Pre-Built Firmware.
După ce codul a fost încărcat pe placa de dezvoltare aleasă, putem verifica daca
comunicarea funcționeaza cum trebuie utilizând exemplul selectând „Launch Example” unde
se va deschide un VI (ca în imaginea FIG. 3.6.5.), unde selectăm portul serial și rulând
programul, de pe butonul verde „LED Control” aprindem și stingem ledul de pe placa de
dezvoltare. Dacă acesta se aprinde și stinge la apăsarea butonului înseamnă ca placa de
dezvoltare comuni ca cu LabVIEW, dacă nu, înseamnă că nu este corect ceva și trebuie refăcută
conexiunea.

47

Fig. 3.6.1. Configurare LINX (1)

Fig. 3.6.2. Configurare LINX (2)

48

Fig.3.6.3. Configurare LINX (3)

Fig.3.6.4. Configurare LINX (4)

49

Fig.3.6.5. Exemplu de VI utilizând LINX

În imaginea de mai jos (Fig. 3.6.6.) este reprezentă librăria LINX din paleta de funcții.
Aceasta se găsește la paleta de funcții > MakerHub > LINX. Pentru a realiza comunicarea dintre
Arduino Uno și cei doi senzori, am inițializat comunic area I2C deoarece și Arduino Uno și
senzorii au interfață I2C. Funcțiile pentru a inițializa și a utiliza interfața I2C din LabVIE se
găsește în paleta de funcții > MakerHub > LINX > Peripherials >I2C.

Fig. 3.6.6. Funcțiile librariei LINX

50
Această libr ărie este foarte folositoare și pentru alte proiecte care implica utilizarea altor
module periferice care necesită citiri analogice, digitale, generare de PWM sau comunicare prin
SPI sau UART.
În figura de mai jos (Fig. 3.6.7.) sunt ilustrate funcțiile I 2C Open, I2C Read, I2C Write
și I2C Close. Fiecare funcție este necesară pentru a realiza comunicarea pe I2C dintre două
dispozitive.
 I2C Open – inițializează canalul de I2C selectat;
 I2C Read – citește numărul specific de octeți de la slave -ul conectat p e canalul de I2C;
 I2C Write – scrie octeți de date la adresa slave -ului pe canalul de I2C selectat;
 I2C Close – închide canalul de I2C selectat.

Fig. 3.6.7. Funcțiile I2C – Open , Read, Write, Close

Pentru achiziționarea datelor senzorului HTU21D am realizat următorul instrument
virtual ce conține panoul frontal (Fig. 3.6. 8.) și diagrama bloc (Fig. 3.6. 9.). În acest VI am
realizat comunicarea pe I2C a senzorului cu Arduino Uno și achiziționarea temperaturii și
umidității și afi șarea acestora în interfața din panoul fronta l.
Conexiunea serială am inițializat -o pe Portul Serial COM3 cu o rată de bit/sec de 9600.
Am pornit comunicația I2C și am folosit același algoritm de achiziție a datelor ca și în codul
scris în mediul de dezvolta re Arduino IDE.
În imaginea cu diagrama bloc a senzorului HTU21D (Fig. 3.6.9.) sunt reprezentate toate
operațiile necesare pentru achiziționarea datelor de pe senzorul de umiditate și temperatură și
ca acestea să fie apoi afișate în diagrama bloc în timp real.

51
După inițializearea conexiunii seriale cu funcția LINX – Open Serial, este pornită și
comunicația I2C cu funcția I2C Open. Acum comunicația pe I2C dintre LabVIEW și senzor
este pornită.
Pentru a achiziționa datele de la senzorul slave cu adresa 6 4 în decimal respectiv 0x40
am folosit o comandă de scriere cu 0xE3 și apoi o comandă de citire a 10 octeți din care rezultă
după realizarea calculelor matematice valoarea temperaturii.
Pentru a rezulta valoarea umidității am folosit o comandă de scriere c u 0xE5 și apoi o
comandă de citire a 10 octeți din care rezultă după realizarea calculelor matematice valoarea
umidității.
Aceste scrieri și citiri se execută ciclic pentru a achiziționa date de la senzori în timp
real pentru a vizualiza modificarea temper aturii și umidității în fiecare moment de timp.

Fig.3.6. 8. Panoul frontal al senzorului HTU21D

52

Fig. 3.6. 9. Diagrama block a senzorului HTU21D

53
Pentru a achiziționa date de pe senzorul BMP180 am realizat pe rând mai mule
instrumente virtuale și pe urmă le -am unit în unul singur, deoarece la achiziționarea datelor au
fost necesari pa rcursul mai multor pași în realizarea algoritmului de achiziție a datelor.
Din toate VI -urile realizate a rezultat un singur VI are în componența sa toate schemele
bloc are VI -urilor (tot algoritmul din fiecare VI aferent).
Instrumentul Virtual al senzo rului BMP180 conține panoul frontal (Fig. 3.6.8.) și
diagrama bloc (ANEXA 2).
Panoul frontal conține:
 indicatoare pentru a indica valoarea temperaturii ( °C și °F);
 indicatoare pentru a indica valoare presiunii (Pa, hPa , mmHg, atm );
 termometru pentru tempe ratură și un cilindru pentru presiune;
 grafic pentru temperatura achiziționată în timp;
 grafic pentru presiunea achiziționată în timp;
 ferestre de de erori de intrare și de ieșire;
 buton de stop.

Fig. 3.6. 10. Panoul frontal al senzorului BMP180

54
Pentru achiziționarea datelor senzorului BMP180 am realizat următorul instrument
virtual ce conține panoul frontal (Fig. 3.6.10.) și diagrama bloc (ANEXA 2). În acest VI am
realizat comunicarea pe I2C a senzorului cu Arduino Uno și achiziționarea temperaturii și
presiunii și afișarea acestora în interfața din panoul frontal.
Conexiunea serială am inițializat -o pe Portul Serial COM3 cu o rată de bit/sec de 9600.
Am pornit comunicația I2C și am folosit același algoritm de achiziție a datelor ca și în codul
scris în mediul de dezvoltare Arduino IDE.
În imaginea cu diagrama bloc a senzorului BMP180 sunt reprezentate toate operațiile
necesare pentru achiziționarea datelor de pe senzorul de temperatură și presiune și ca acestea
să fie apoi afișate în diagrama bloc în timp real .
Pentru a achiziționa datele de la senzorul BMP180 a f ost necesar parcurgerea mai multor
operații. Algoritmul pentru măsurarea temperaturii și presiunii a senzorului BMP180 este
ilustrat mai sus in figura 3.3.4. unde am descris senzorul.
Pașii necesari achiziției de date de la senzorul BMP180 sunt:
 citirea o cteților de calibrare a datelor stocați în EEPROM;
 citirea valorii necalculate a temperaturii (valoarea raw);
 citirea valorii necalculate a umidității (valoarea raw);
 calcularea temperaturii reale în grade Celsius;
 calcularea presiunii reale în hPa (hectop ascali);
 afișarea temperaturii și presiunii;
Citirea octeților de calibrare a datelor stocați în EEPROM trebuiesc citiți o singură dată
la inițializarea senzorului. Restul pașilor pentru achiziționarea datelor (citirea valorii
necalculate a temperaturii; c itirea valorii necalculate a umidității; calcularea temperaturii reale
în grade Celsius; calcularea presiunii reale în hectopascali și afisarea temperaturii și presiunii)
trebuiesc făcuți cicl ic pentru a avea date actualizate aproape la fiecare moment de t imp.

55
CAPITOLUL IV – Concluzii

În momentul inițial, la stabilirea și realizarea acestei lucrări de diplomă, am stabilit mai
multe obiective, pe care le -am îndeplinit pe parcurs, o parte din acestea fiind:
 o scurtă prezentare a mediului de programare Ard uino IDE;
 o scurtă prezentare a mediul ui de programare grafică LabVIEW;
 realizarea panoului frontal a instrumentelor virtuale realizate;
 realizarea diagramei bloc a instrumentelor virtuale realizate.

Această stație meteo cu Arduino și LabVIEW este un sist em funcțional din punct de
vedere hardware și software ce permite achiziționarea valorii temperaturii, umidității și
presiunii.
Pentru a realiza stația meteo cu Arduino și LabVIEW am folosit placa de achiziție
Arduino UNO la care am conectat senzorul de umiditate și temperatură HTU21D și senzorul
de presiune BMP180.
Am ales Arduino deoarece este o platformă de dezvoltare avansată, bazată pe un
hardware și software ușor de utilizat. Arduino se găsește într -o varietate de modele în funcție
de dimensiuni și performanțe.
Am ales Arduino UNO deoarece este destul de accesibil ca preț și bun ca performanțe
deoarece se bazează pe microcontroller -ul ATmega16U2 și ATmega328.
Față de alte sisteme de dezvoltare de pe piață, Arduino UNO are următoarele avantaje:
 costur ile de achiziționare a plăcilor este redus;
 este open source;
 rulează pe orice sistem de operare (Windows, Linux, Mac OS); majoritatea plăcilor de
dezvoltare putând fi folosite doar pe sistemul de operare Windows;
 mediu l de programare este ușor de înț eles și de învățat.

Am ales cei doi senzori (senzorul de umiditate și temperatură HTU21D și senzorul de
presiune BMP180) deoarece au performanțe bune și precizie destul de bună. Cei doi senzori au
interfață I2C ce permite transferul datelor de la senzori (slav e-uri) către Arduino UNO (master).
Codul de programare pentru funcționarea proiectului a fost scris în mediul de dezvoltare
Arduino IDE ; fiind de o complexitate scă zută nu a fost foarte complicat de realizat.

56
Am folosit m ediul de programare grafică LabVI EW deoarece mulți ingineri și oameni
de știință se bazează pe acest program. LabVIEW este utilizat pentru o varietate de aplicații: de
testare, de măsurare, de control și automatizare a procesului, de monitorizare și simulare.
LabVIEW este cel mai răspând it și mai evoluat mediu de programare grafică.
LabVIEW este instrumentul virtual ales, datorită conectivității sale la instrumente de
neegalat, capabilității puternice de achiziție de date și datorită interf eței bazată pe programare
grafică de flux de date .
Instrumentele virtuale (programele din LabVIEW) se bazează pe calculatoare personale,
deci beneficiază de performanțele tehnologiei noi apărute din calculatoarele personale, afestea
fiind: procesoare puternice ce permit executarea rapida a instrucțiunilor, sistemele de operare
performante si optimizate, posibilitatea conectării la Internet.
Datorită flexibilității instrumentației virtuale și datorită simplificării procesului de
programare, se reduce timpul necesar fiecărei etape a dezvoltăr ii a noi produse, prin efectuarea
simulărilor și măsurătorilor.
Caracteristica cea mai importantă a VI -urilor ce pune în evidență flexibilitatea, este
modularitatea. În realizarea aplicaților complexe este nevoie de o divizare pe module. Fiecare
modul est e implementat printr -un VI, acesta fiind mai ușor de realizat, controlat și testat. După
realizarea și testarea fiecărui modul (VI) în parte, acestea se pot conecta împreună penstru a
obține aplicația complexă dorită.
Cu ajutorul limbajului de programare grafică LabVIEW am realizat cate un VI pentru
fiecare senzor ce este conectat la placa de dezvoltare Arduino UNO.

Lucrarea poate fi folisită pentru îndrumarea viitorilor studenți din cadrul facultății, în
desfășurarea activitățiilor de laborator atât la disciplina Măsurări electrice și electronice, dar și
la Instrumentație Virtuală pentru îmbogățirea și dezvoltarea cunoștințelor practice.
Ca dezvoltări ulterioare ale acestui proiect, se pot adăuga și alți senzori care ajută la
îmbogățirea datelor meteoro logie achiziționate, toți senzorii comunicând prin interfața I2C. Pot
fi senzori de precipitații și de vânt, iar prin faptul că datele sunt stocate, acestea pot fi analizate
de specialiști pentru viitoare preziceri ale vremii.

57
BIBLIOGRAFIE

[1] Á. KATALIN, Senzori și traductoare numerice, 2001.
[2] ep.etc.tuiasi.ro, Senzori și Traductoare.
[3] A. DUMITRU, Bazele sistemelor mecatronice, Universitatea „Transilvania” din Brașov,
2006.
[4] Datasheet_ATmega328.
[5] https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3 -schematic.pdf.
[6] Datasheet_BMP180.
[7] Datasheet_HTU21D.
[8] N. Instruments, LabVIEW Fundamentals, 2005.
[9] N. Instruments, Getting Started with LabVIEW, 2013.
[10] T. Murphy, Introduction to the Arduino microcontroller, 2012.
[11] https://en.wikipedia.org/wiki/Arduino.
[12] I. BERILIU, Microcontrollere – Notițe de curs, 2015.
[13] I. BERILIU, Protocoale de comunicații – Notițe de curs, 2014.
[14] M. BOGDAN, Instrumentație Virtuală – Notițe de curs, 2015.
[15] ROBOFUN, Arduino pentru Toti, 2012.
[16] ROBOFUN, Arduino pentru începători, 2014.
[17] B. CRISTIAN, Senzori și traductoare, Editura Universității din Târgu -Mureș, 2014.
[18] N. IN STRUMENTS, LabVIEW QuickStart Guide, 1997.
[19] https://www.arduino.cc/en/main/arduinoBoardUno.
[20] Datasheet_ATmega16U2.

58
ANEX A 1 – Schema bloc a sistemului

59
ANEXA 2 – Diagrama bloc LabVIEW – Senzorul BMP180

60
ANEXA 3 – Diagrama bloc LabVIEW – Senzorul HTU21D

61
ANEXA 4 – Legenda figurilor
Fig. 2.1.1. Exemplu de panou frontal
Fig. 2.1.2. Exemplu de diagram ă bloc
Fig. 2.1.3. Icoana și conectorul
Fig. 2.1.4. Paleta de funcții, comandă și instrumente
Fig. 2.5.1. Arhitectura Harvard vs von -Neumann
Fig. 2. 6.3. Resitance Temp erature Detector (RTD)
Fig.3.1. 1. Schemă bloc
Fig.3.1.2. Schema electrică a plăcuței
Fig.3.1.3. Layout -ul plăcuței
Fig. 3.2. Arduino Uno
Fig.3.2.1. Schemă electrică Arduino Uno
Fig. 3.2.2. Schemă ATmega328
Fig. 3.2.3. Schemă ATmega16U2
Fig. 3.2.4. Schemă regulator liniar de 3,3V
Fig.3.3.1. Senzorul de presiune BMP180
Fig. 3.3.2. Schemă de circuit pentru aplicație obișnuită
Fig. 3.3.3. Coeficienți de calibrare
Fig. 3.4.1. Senzorul de umiditate și temperatura HTU21D
Fig. 3.4.2. Comenzi I2C pentru senzorul HTU21D
Fig. 3.4.3. Secvență de comunicare master
Fig. 3.5.1. Meniu configurare placă de dezvoltare
Fig.3.5.2. Semnificație butoane Meniu
Fig.3.5.3. Opțiunea Serial Monitor
Fig. 3.5.4. Funcțiile void setup() și void loop()
Fig. 3.6.1. Configurare LINX (1)
Fig. 3.6.2. Configurare LINX (2)
Fig. 3.6.3. Configurare LINX (3)
Fig. 3.6.4. Configurare LINX (4)
Fig.3.6.5. Exemplu de VI utilizând LINX
Fig. 3.6.6. Funcțiile librariei LINX
Fig. 3.6.7. Funcțiile I2C – Open , Read, Write, Close

62

Fig.3.6. 8. Panoul frontal al senzorului HTU21D
Fig. 3.6. 9. Diagrama block a senzorului HTU21D
Fig. 3.6. 10. Panoul frontal al senzorului BMP180

63
ANEXA 5 – Structura programului
Programul a fost realizat în mediul de dezvoltare Arduino IDE și are următoarea structură:

#include <Wi re.h>

/*********************** BMP180 ***********************/
#define BMP180_ADDRESS_SENSOR 0x77 // BMP180 Sensor address

int16_t ac1, ac2, ac3, b1, b2, mb, mc, md; // Store sensor EEPROM values from
BMP180
uint16_t ac4, ac5, ac6; // Store sensor EEPROM values from
BMP180
// Ultra Low Power OSS = 0, OSD = 5ms
// Standard OSS = 1, OSD = 8ms
// High OSS = 2, OSD = 14ms
// Ultra High Resolution OSS = 3, OSD = 26ms
const uint8_ t oss = 3; // Set oversampling setting
const uint8_t osd = 26; // with corresponding oversampling delay

float T, P; // global variables for temperature and
pressure

/*********************** HTDU2 1D ***********************/
#define HTDU21D_ADDRESS 0x40 //Unshifted 7 -bit I2C address for the sensor

#define TRIGGER_TEMP_MEASURE_HOLD 0xE3
#define TRIGGER_HUMD_MEASURE_HOLD 0xE5
#define TRIGGER_TEMP_MEASURE_NOHOLD 0xF3
#define TRIGGER_HUMD_M EASURE_NOHOLD 0xF5
#define WRITE_USER_REG 0xE6
#define READ_USER_REG 0xE7
#define SOFT_RESET 0xFE

void setup()
{
Serial.begin(9600); // Set up serial port
while(!Serial){;} // wait until serial port is ready
delay(5000);

Serial.println("Statie meteo cu Arduino si LabVIEW!");
Serial.println("BMP180 and HTU21D data acquisition!");
Wire.begin(); // Activate I2C

init_BMP180(); // Initialize baro sensor variables
delay(100);
}

void loop()
{
/*********************** BMP180 ***********************/
int32_t b5;
// Read and calculate temperature (T)
b5 = tempe rature();

64
Serial.println(" **BMP180**");
Serial.print("Temperature: ");
Serial.print(T, 2);
Serial.print(" C, ");
Serial.print(1.8 * T + 32.0, 2);
Serial.println(" F");

// Read and calculate pressure (P)
P = pressure( b5);
Serial.print("Pressure: ");
Serial.print(P, 2);
Serial.print(" mbar, ");
Serial.print(P*1 0, 2);
Serial.print(" hPa, ");
Serial.println("");

/*********************** HTDU21D ***********************/
unsigned int rawHumidity = htdu21d_readHumidity();
unsigned int rawTemperature = htdu21d_readTemp();

float temperature = c alc_temp(rawTemperature); //Read and calculate temperature
float relativeHumidity = calc_humidity(rawHumidity); //Read and calculate humidity

Serial.println(" **HTU21D**");
Serial.print("Temperature: ");
Serial.print(temperature, 1);
Serial.print(" C");
Serial.print(" Relative Humidity: ");
Serial.print(relativeHumidity, 1);
Serial.print(" %");
Serial.println("");
Serial.println("");

delay(1000);

}

/****************** BMP180 ********************/
/**********************************************/
/* Initialize sensor variables */
/**********************************************/
void init_BMP180()
{
ac1 = read_2_bytes(0xAA);
ac2 = read_2_bytes(0xAC);
ac3 = read_2_bytes(0xAE);
ac4 = read_2_bytes(0xB0);
ac5 = read_2_bytes(0xB2);
ac6 = read_2_bytes(0xB4);
b1 = read_2_byt es(0xB6);
b2 = read_2_bytes(0xB8);
mb = read_2_bytes(0xBA);
mc = read_2_bytes(0xBC);
md = read_2_bytes(0xBE);

Serial.println("");
Serial.println("Sensor calibration data:");
Serial.print(F("AC1 = ")); Serial.println(ac1);
Serial.print( F("AC2 = ")); Serial.println(ac2);

65
Serial.print(F("AC3 = ")); Serial.println(ac3);
Serial.print(F("AC4 = ")); Serial.println(ac4);
Serial.print(F("AC5 = ")); Serial.println(ac5);
Serial.print(F("AC6 = ")); Serial.println(ac6);
Serial.print(F("B1 = ")); Serial.println(b1);
Serial.print(F("B2 = ")); Serial.println(b2);
Serial.print(F("MB = ")); Serial.println(mb);
Serial.print(F("MC = ")); Serial.println(mc);
Serial.print(F("MD = ")); Serial.println(md);
Serial.println("");
}

/**********************************************/
/* Calcualte pressure readings */
/**********************************************/
float pressure(int32_t b5)
{
int32_t x1, x2, x3, b3, b6, p, UP;
uint32_t b4, b7;

UP = read_pressure() ; // Read raw pressure

b6 = b5 – 4000;
x1 = (b2 * (b6 * b6 >> 12)) >> 11;
x2 = ac2 * b6 >> 11;
x3 = x1 + x2;
b3 = (((uint32_t)(ac1 * 4 + x3) << oss) + 2) >> 2;
x1 = ac3 * b6 >> 13;
x2 = (b1 * (b6 * b6 >> 12)) >> 16;
x3 = ((x1 + x2) + 2) >> 2;
b4 = (ac4 * (uint32_t)(x3 + 32768)) >> 15;
b7 = ((uint32_t)UP – b3) * (50000 >> oss);
if(b7 < 0x80000000) { p = (b7 << 1) / b4; } else { p = (b7 / b4) << 1; }
x1 = (p >> 8) * (p >> 8);
x1 = (x1 * 3038) >> 16;
x2 = (-7357 * p) >> 16;
return (p + ((x1 + x2 + 3791) >> 4)) / 100.0f; // Return pressure in mbar
}

/**********************************************/
/* Read uncompensated temperature */
/**********************************************/
int32_t temperature()
{
int32_t x1, x2, b5, UT;

Wire.beginTransmission(BMP180_ADDRESS_SENSOR); // Start transmission to device
Wire.write(0xf4); // Sends register address
Wire.write(0x2e); // Write data
Wire.endTransmission(); // End transmission
delay(5); // Datasheet suggests 4.5 ms

UT = read_2_by tes(0xf6); // Read uncompensated TEMPERATURE value

// Calcu late true temperature
x1 = (UT – (int32_t)ac6) * (int32_t)ac5 >> 15;
x2 = ((int32_t)mc << 11) / (x1 + (int32_t)md);
b5 = x1 + x2;
T = (b5 + 8) >> 4;

66
T = T / 10.0; // Temperature in celsius
return b5;
}

/**********************************************/
/* Read uncompensated pressure value */
/**********************************************/
int32_t read_pressure()
{
int32_t value;
Wire.beginTransmission(BMP180_ADDRESS_SENSOR); // Start trans mission to device
Wire.write(0xf4) ; // Sends register address to read from
Wire.write(0x34 + (oss << 6)); // Write data
Wire.endTransmission(); // End transmission
delay(osd); // Oversampling setting delay
Wire.beginTransmission(BMP180_ADDRESS_SENSOR);
Wire.write(0xf6); // Register to read
Wire.endTransmission();
Wire.requestFrom(BMP180_ADDRESS_SENSOR, 3); // Request three bytes
if(Wire.available() >= 3)
{
value = (((int32_t)Wire.read() << 16) | ((int32_t)Wire.read() << 8) |
((int32_t)Wire.read())) >> (8 – oss);
}
return value; // Return value
}
/************ **********************************/
/* Read 1 byte from the BMP sensor */
/**********************************************/
uint8_t read_1_byte(uint8_t code)
{
uint8_t value;
Wire.beginTransmission(BMP180_ADDRESS_SENSOR); // Start transmission to device
Wire.write(code); // Sends register address to read from
Wire.endTransmission(); // End transmission
Wire.requestFrom(B MP180_ADDRESS_SENSOR, 1); // Request data for 1 byte to be read
if(Wire.available() >= 1)
{
value = Wire.read(); // Get 1 byte of data
}
return value; // Return value
}

/**********************************************
Read 2 bytes from the BMP sensor
**********************************************/
uint16_t read_2_bytes(uint8_t code)
{
uint16_t value;
Wire.beginTransmission(BMP180_ADDRESS_SENSOR); // Star t transmission to device
Wire.write(code); // Sends register address to read from
Wire.endTransmission(); // End transmission
Wire.requestFrom(BMP180_ADDRESS_SENSOR, 2); // Request 2 bytes fro m device
if(Wire.available() >= 2)
{
value = (Wire.read() << 8) | Wire.read(); // Get 2 bytes of data
}
return value; // Return value
}

67

/****************** HTDU21D *******************/
/**********************************************/
/* Read the uncompensated temperature value */
/**********************************************/
unsigned int htdu21d_readTemp()
{

Wire.beginTransmission(HTDU21D_ADDRESS); //Request the temperature
Wire.write(TRIGGER_TEMP_MEASURE_NOHOLD);
Wire.endTransmission();
delay(60);
Wire.requestFrom(HTDU21D_ADDRESS, 3);

int counter = 0;
while(Wire.available() < 3)
{
counter++;
delay(1);
if(counter > 100) return 998; //Error out
}

unsigned char msb, lsb, crc;
msb = Wire.read();
lsb = Wire.read();
crc = Wire.read();

unsigned int temperature = ((unsigned int)msb << 8) | lsb;
temperature &= 0xFFFC;

return temperature;
}

/**********************************************/
/* Read the humidity */
/**********************************************/
unsigned int htdu21d_readHumidity()
{
byte msb, lsb, checksum;

Wire.beginTransmission(HTDU21D_ADDRESS); //Request a humidity reading
Wire.write(TRIGGER_HUM D_MEASURE_NOHOLD); //Measure humidity with no bus holding
Wire.endTransmission();
delay(55);
Wire.requestFrom(HTDU21D_ADDRESS, 3);

int counter = 0;
while(Wire.available() < 3) //Read result
{
counter++;
delay(1);
if(counter > 100) return 0; //Error out
}

msb = Wire.read();

68
lsb = Wire.read();
checksum = Wire.read();

unsigned int rawHumidity = ((unsigned int) msb << 8) | (unsigned int) lsb;
rawHumidity &= 0xFFFC;

return(rawHumidity);
}

/*********************************************************************/
/* Given the raw temperature data, calculate the actual temperature */
/*********************************************************************/
float calc_temp(int SigTemp)
{
float te mpSigTemp = SigTemp / (float)65536; //2^16 = 65536
float realTemperature = -46.85 + (175.72 * tempSigTemp);

return(realTemperature);
}

/*********************************************************************/
/*Given the raw humidity data, calculate t he actual relative humidity*/
/*********************************************************************/
float calc_humidity(int SigRH)
{
float tempSigRH = SigRH / (float)65536; //2^16 = 65536
float rh = 1*(-6 + (125 * tempSigRH));

return(rh);
}

Similar Posts