Sunteți pe pagina 1din 40

Sistem de măsură a parametrilor dintr-o staţie meteo

folosind platforma Arduino Uno

„Învățătura este o comoară care își urmează stăpânul pretutindeni.”


Proverb popular
Obiective:  prezentarea unor informații provenite de la senzori și afișate pe un display LCD
16x4. Aceste informații sunt : temperatură, umiditate, presiune atmosferică,
şansă de precipitații și luminozitate. Informaţiile acestea depind în mod direct
de condiţiile atmosferice.
 Utilizarea mediului Arduino și a plăcii de achiziție Arduino Uno.

Concepte și  Termenii cheie: Arduino, BMP180, DHT11, temperatură, presiune, umiditate,


tehnologii: display 16x4.
Cyprins
1 INTRODUCERE
2 DESCRIEREA PROIECTULUI
2.1 NIVELUL HARDWARE
2.2 NIVELUL SOFTWARE
3 CONCLUZII
4 BIBLIOGRAFIE & REFERINȚE WEB
A. CODUL SURSĂ

I. Introducere

O staţie meteo reprezintă un ansamblu de instalaţii sau senzori care fac anumite măsurători
a mai multor parametrii în scopul oferirii de informaţii legate de condiţiile meteorologice
dintr-o anumită zi sau pentru un interval mai mare de timp. Putem planifica evenimente viitoare
în funcţie de măsurătorile obţinute. Cunoaşterea parametrilor vremii uşurează vieţile oamenilor
deoarece pot afla anumite informaţii legate de condiţiile atmosferice fără a fi nevoie să
părăsească locuinţa.
Staţiile meteo profesionale ne oferă informaţii despre:
 Temperatură
 Umiditate
 Presiune atmosferică
 Direcţia şi intensitatea vântului
 Viteza vântului
 Intensitatea strălucirii soarelui
 Precipitaţii
Exemplu de instrumente meteorologice folosite: termometru, barometru, higrometru,
giruetă, heliograf, pluviometru, pluviograf, disdrometru, transmisometru, ceilometru.
Există şi staţii meteo profesionale sofisticate care pot măsura indicele de raze ultraviolete,
radiaţia solară, umiditatea vegetaţiei, umiditatea solului, temperatura solului, temperatura apei
din iazuri, lacuri, râuri.
Schema bloc a proiectului

1
Figura 1. Schema bloc a proiectului

Schema modulului interior al proiectului

Figura 2. Schema modulului interior al proiectului


Cablaj modul interior – vedere prin transparenţă

Figura 3. Cablaj modul interior – vedere prin transparenţă(trasee)

2
Aceste scheme au fost realizate în Eagle.

DESCRIEREA PROIECTULUI
2.1 Nivelul hardware

Arduino Uno – R3
Arduino este o placă de dezvoltare care prezintă un singur microcontroler, şi anume
ATmega328. Prezintă 14 pini digitali de intrare/ieşire (6 dintre aceştia pot fi folosiţi ca ieşiri
PWM), 6 pini analogici de intrare, rezonator ceramic de 16 MHz, o conexiune USB, jack de
alimentare şi un buton de reset.

Figura 4. Arduino Uno


Specificaţii tehnice
 Microcontroler: ATmega328
 Tensiune de alimentare: 5V
 Tensiune de intrare recomandată: 7-12V
 Tensiune de intrare ( limite): 6-20V
 Pini digitali: 14 (6 dintre aceştia pot fi folosiţi ca ieşiri PWM)
 Pini analogici: 6
 Curent continuu pentru pinii de intrare/ieşire: 40 mA
 Curent continuu pentru pinul de 3.3V: 50 mA
 Memorie flash: 32 KB (ATmega328) din care 0.5 KB folosiţi de bootloader
 SRAM: 2 KB (ATmega328)
 EEPROM: 1 KB (ATmega328)
 Frecvenţa de ceas: 16 MHz
 Lungime: 68.6 mm
 Lăţime: 53.4 mm
 Greutate: 25 g

3
Figura 5. Arduino Uno Rev3

Comunicarea
Arduino Uno are o serie de facilități pentru comunicarea cu un calculator, o altă plăcuţă
Arduino, sau alte microcontrolere. ATmega328 oferă UART TTL (5V) serial de comunicare,
care este disponibil pe pinii digitali 0 (RX) și 1 (TX) .
Software-ul Arduino conţine funcţia Serial Monitor care permite date textuale simple pentru a
fi trimise la și de la plăcuţa Arduino.
Ledurile RX și TX de pe plăcuţa Arduino vor clipi atunci când datele sunt transmise prin
intermediul chip-ului.
ATmega328 foloseşte ca modele de comunicare: I2C (DST) și SPI.

Fiecare dintre cele 14 linii digitale de pe placa Arduino Uno poate fi utilizată ca intrare
sau ieșire, folosind funcţiile pinMode, digitalWrite și digitalRead. Fiecare dintre liniile digitale
poate oferi sau primi un maxim de 40 mA și are o rezistență pull-up internă de 20-50 kΩ.
În plus, unele linii au functii specializate:
 Serial: 0 (RX) și 1 (TX) folosit pentru a primi (RX) și transmite date seriale (TX)
 Întreruperi externe: 2 şi 3 pot fi configurate pentru a declanșa o întrerupere pe o
valoare scăzută, o margine în creștere sau în scădere, sau o modificare a valorii
 Pinii de PWM: 3, 5, 6, 9, 10, 11.

4
Alimentarea
Arduino Uno poate fi alimentat printr-o conexiune USB sau printr-o sursă de alimentare
externă.
Pinii de alimentare:
 VIN – voltajul de intrare către placa Arduino când foloseşte o sursă externă de
alimentare
 5V - acest pin emite o tensiune de 5 V reglementată de regulatorul plăcii
 3.3V – alimentare de 3.3 V generată de regulatorul plăcii
 GND – pinii de masă
 IOREF – acest pin furnizează voltajul de referinţă cu care funcţionează
microcontrolerul.
Microcontrolerul Atmega328
ATmega328 este un microcontroler RISC pe 8 biţi produs de către compania Atmel.
Este un microcontroler din familia CMOS de mică putere bazat pe arhitectura RISC AVR
îmbunătăţită. Executând instrucţiuni de mare viteză într-un singur ciclu de ceas ATmega328
atinge debite care se apropie de 1 MIPS / MHz permiţând proiectantului sistemului de a
optimiza consumul de energie comparativ cu viteza de procesare.

Figura 6. Schema bloc Atmga328


Microcontrolerele AVR pe 8 biţi conţin un nucleu RISC cu arhitectură Harvard, fiind
destinate aplicaţiilor simple: controlul accesului la distanţă, controlul fluxului de informaţie pe
portul USB, aplicaţii din domeniul automobilelor, controlul motoarelor, etc.
Microcontrolerele AVR conţin un set de 131 de instrucţiuni şi 32 de regiştri de uz
general, fiind direct adresabili de către Unitatea Logică Aritmetică (ALU), deci permite
accesarea a doi regiştrii independenţi într-o singură instrucţiune. Creşte deci eficienţa în
execuţie de aproximativ 10 ori faţă de CISC.

Configuraţia pinilor
Majoritatea pinilor au funcții alternative legate de funcționarea dispozitivelor periferice.

5
Figura 7. Configuraţia pinilor Atmega328

Comparaţie între ATmega16 şi ATmega328


Dimensiune
Dispozitiv Flash EEPROM RAM vector de
întrerupere
2 cuvinte de
ATmega168PA 16K Bytes 512 Bytes 1K Bytes
instrucţiuni/vector
2 cuvinte de
ATmega328P 32K Bytes 1K Bytes 2K Bytes
instrucţiuni/vector

Tabelul 1. Comparaţie între ATmega16 şi ATmega328


Acestea diferă prin dimensiunea memoriei. Dimensiunea vectorului de întrerupere fiind la
ambele de 2 cuvinte de instrucţiuni/vector.
ATmega328 prezintă un mecanism propriu de programare Read-While-Write (citire în timpul
scrierii).

Figura 8. ATmega328

Principalele caracteristici ale microcontrolerului ATmega328 sunt:


 32 KB de memorie Flash reinscriptibilă pentru stocarea programelor
 2 KB de memorie RAM
 1 KB de memorie EEPROM
 32 de regiştri generali de funcţionare
 un port serial SPI
 un convertor analogic/digital pe 10 biţi în 6 canale
6
 un timer programabil cu oscilator intern.
 frecvenţa maximă de operare este de 20 MHz
 două numărătoare pe 8 biţi
 un numărător pe 16 biţi
 un comparator analogic
 23 linii I/O

O caracteristică foarte importantă este sistemul de întreruperi. O întrerupere reprezintă un


semnal generat de un modul extern unităţii centrale de procesare (CPU) pentru a anunţa apariţia
unui eveniment care trebuie tratat.
ATmega328 dispune de 26 surse de întrerupere. Atunci când una dintre ele devine
activă se suspendă cursul normal de execuţie şi se face salt automat la o adresă prestabilită din
memoria program.
 RESET - Generată la alimentare sau la un semnal pe pinul RESET
 EXT_INT0 - Întrerupere externă 0
 EXT_INT1 - Întrerupere externă 1
 PCINT0 - Cerere schimbare pin întrerupere 0
 PCINT1 - Cerere schimbare pin întrerupere 1
 PCINT2 - Cerere schimbare pin întrerupere 2
 WDT - Generată de modulul WATCHDOG
 TIM2_COMPA - Generată când timerul pe 16 biți atinge valoarea de prag A
 TIM2_COMPB - Generată când timerul pe 16 biți atinge valoarea de prag B
 TIM2_OVF - Generată când Timer/Counter2 atinge valoarea maximă
 TIM1_CAPT - Generată de unitatea de captură a timerului pe 16 biți
 TIM1_COMPA - Generată când timerul pe 16 biți atinge valoarea de prag A
 TIM1_COMPB - Generată când timerul pe 16 biți atinge valoarea de prag B
 TIM1_OVF - Generată când timerul pe 16 biți atinge valoarea maximă
 TIM0_COMPA - Generată când timerul pe 16 biți atinge valoarea de prag A
 TIM0_COMPB - Generată când timerul pe 16 biți atinge valoarea de prag B
 TIM0_OVF - Generată când Timer/Counter0 atinge valoarea maximă
 SPI_STC - Generată de unitatea SPI
 USART_RXC - Generată la recepția completă a unor date de catre modulul USART
 USART_UDRE - Generată când registrul de date al modulului USART este gol
 USART_TXC - Generată la transmisia completă a unor date de către modulul USART
 ADC - Generată de modulul ADC
 EE_RDY - Generată de modulul EEPROM
 ANA_COMP - Generată de comparatorul analogic
 TWI - Generată de modulul TWI
 SPM_RDY - Generată de modulul de auto-scriere a memoriei Flash

Dacă o singură întrerupere nu este utilizată se recomandă ca pe poziţia acesteia să se


introducă o instrucţiune de salt către eticheta RESET. Primele patru instrucţiuni care apar după
eticheta RESET sunt utilizate pentru a iniţializa pointer-ul de stivă definit de registrele SPH şi
SPL.
ATmega328 este susținut de o serie completă de instrumente de program și de
dezvoltare a sistemului, care include: compilatoare, macroasambloare, programe de
debug/simulare.
7
Arhitectura CPU-AVR

Figura 9. Schema bloc a Arhitecturii AVR


Principala funcţie a nucleului CPU-AVR este să asigure execuţia corectă a programelor.
Unitatea Centrală de Prelucrare trebuie să aibă posibilitatea să acceseze memoria, să efectueze
calcule, să controleze perifericele, să prelucreze întreruperile. Sistemul de întreruperi este o
caracteristică importantă pentru orice procesor şi microcontroler.
Senzorii folosiţi
Un senzor este un dispozitiv optic, mecanic, electronic, acustic sau chimic bazat pe un
traductor, capabil să convertească o mărime neelectrică într-o mărime electrică şi să o
proceseze în concordanţă cu un algoritm dat, cu scopul de a furniza o ieşire uşor interfaţabilă cu
un sistem de calcul.
Senzorii sunt ansambluri de dispozitive sensibile care permit determinarea unui interval
de valori pentru o mărime fizică asemănător cu organele de simţ umane.
Senzorul realizează aceeaşi funcţie ca şi un traductor, percepe starea mărimii fizice pe
care o converteşte în semnal electric. Structura funcţională a senzorului coincide cu cea a
traductorului.

8
Figura 10. Schema bloc a unui senzor
Elementul care converteşte o mărime fizică într-o mărime electrică, dependentă de
prima, în scopul introducerii ei într-un circuit de automatizare se numeşte traductor. Structura
traductoarelor diferă de la un traductor la altul, cuprinde unul sau mai multe convertoare
conectate în serie.

Figura 11. Structura generală a unui traductor


Ieşirea traductorului este proporţională cu intrarea. Acesta trebuie să furnizeze semnale
interpretabile, deci ieşirea este un semnal electric.

Caracteristicile senzorilor:
 caracteristici de intrare – interacţiunea dintre mărimile de intrare şi obiectul măsurat
 caracteristici de transfer – relaţia dintre o mărime de intrare şi o mărime de ieşire
 caracteristici de ieşire – interacţiunea mărimilor de ieşire cu elementul cuplat la ieşire

9
Figura 12. Caracteristici ale senzorilor

Există şi caracteristici speciale care nu intervin direct în relaţia de dependenţă, dar


condiţionează calitatea senzorilor.

10
Senzorul de temperatură şi umiditate DHT11
Acest senzor include un tip de component de măsurare rezistiv al umidităţii şi un component
NTC de măsurare a temperaturii. Prin conectarea la un microcontroler pe 8 biţi oferă o calitate
deosebită, timpi de răspuns mici, nu intervin interferenţe.

Figura 13. Senzorul DHT11


Fiecare element al senzorului DHT11 este calibrat cu stricteţe în laboratoare pentru a fi
cât mai precis în calibrarea umidităţii. Coeficienţii de calibrare sunt stocaţi în programe din
memoria OTP. Aceste programe sunt folosite de către procesul intern de detectare al
semnalului senzorului. Interfaţa serială cu un singur fir face ca sistemul de integrare să fie rapid
şi uşor.
Dimensiunea redusă, consumul mic de energie şi transmisia semnalului până la o
distanţă de 20 de metri fac din acest senzor o bună alegere pentru numeroase aplicaţii.
Specificaţii tehnice:
Zona de Acurateţea Acurateţea Număr de
Senzor Rezoluţie
măsurare umidităţii temperaturii pini
20 - 90% RH
3 pini pe un
DHT11 0 - 50 ºC ± 5% RH ± 2 ºC 1
singur rând

Tabelul 2. Specificaţii tehnice DHT11


Montarea senzorului la placa Arduino Uno

11
Figura 14. Senzorul DHT11 conectat la Arduino Uno

Modul de conectare al pinilor pe placa Arduino Uno :


 pinul VCC al senzorului DHT11 este conectat la pinul de 5 V al plăcii
 pinul DATA al senzorului DHT11 este conectat la pinul digital 9 al plăcii
 pinul GND al senzorului DHT11 este conectat la pinul GND al plăcii

Procesul de comunicaţie globală

Figura 15. Procesul de comunicaţie globală al senzorului DHT11


Caracteristici electrice:
VDD = 5 V , T = 25 ºC
Condiţii Minim Normal Maxim
Sursă de
DC 3V 5V 5.5 V
alimentare
Alimentare cu
Măsurat 0.5 mA - 2.5 mA
curent
Mediu 0.2 mA - 1 mA
Aşteptare 100 uA - 150 uA
Perioada de
Secundare 1 - -
eşantionare

Tabelul 3. Caracteristici electrice ale senzorului DHT11

12
Folosirea senzorului DHT11 dincolo de gama sa de lucru poate duce la o discrepanţă de semnal
de 3% RH. Senzorul DHT11 poate reveni la starea de senzor calibrat în mod treptat, dupa ce
revine la condiţiile normale de funcţionare şi operează în gama normală de acţiune.

Senzorul de presiune BMP180


Senzorul BMP180 este un senzor digital care măsoară presiunea. Acest senzor este
succesorul lui BMP085.
BMP180 este un senzor digital de ultimă generaţie şi de mare pecizie. Este optimizat
pentru a fi folosit la telefoanele mobile, PDA-uri, sisteme de negavigaţie şi alte echipamente.
Faptul că prezintă un zgomot redus de numai 0.25 m la timpul rapid de conversie îl face un
senzor de o performanţă ridicată. Interfaţa I²C permite integrarea uşoară a sistemului cu un
microcontroler.

Senzorul BMP180 este bazat pe o tehnologie piezo-rezistivă foarte precisă şi stabilă.

Figura 16. Senzorul BMP180

Specificaţii tehnice
Număr Nume Funcţie
1 CSB* Chip select
2 VDD Alimentare
3 VDDIO Sursă de alimentare digitală
4 SDO* Ieşire SPI
Intrarea serială a magistralei
5 SCL
de ceas I²C
6 SDA Magistrala serială de date I²C
7 GND Pinul de masă(ground)

Tabelul 4. Configuraţia pinilor pentru senzorul BMP180

13
Figura 17. Distribuţia pinilor pentru senzorul BMP180

Maximele de funcţionare ale senzorului BMP180


Unităţi de
Parametru Condiţie Minim Maxim
măsură
Temperatura de
- -40 +85 ºC
depozitare
Sursa de
Toţi pinii -0.3 +4.25 V
alimentare
HBM, R = 1.5
Evaluare ESD - ±2 kV
kΩ, C = 100 pF
Suprapresiune - - 10,000 hPa

Tabelul 5. Maximele de funcţionare ale senzorului BMP180


Măsurarea presiunii şi a temperaturii
Pentru calculul temperaturii în ºC şi presiunii în hPa trebuie folosită calibrarea. Aceste
constante pot fi citite de la BMP180 E²PROM prin interfaţa I²C la iniţializarea softului.
Rata de eşantionare poate fi mărită până la 128 eşantioane/secundă pentru o măsurare
dinamică. În acest caz este suficient să măsurăm temperatura o singură dată pe secundă şi să
folosim această valoare pentru toate măsurările presiunii din timpul aceleeaşi perioade.

Figura 18. Fluxul de măsurare al senzorului BMP180

14
Montarea senzorului la placa Arduino Uno

Figura 19. Circuit standard cu senzorul BMP180

Figura 20. Senzorul BMP180 conectat la placa Arduino Uno

Modul de conectare al pinilor pe placa Arduino Uno:


 pinul 3.3 al senzorului BMP180 este conectat la pinul 3.3V al plăcii
 pinul GND al senzorului BMP180 este conectat la pinul GND al plăcii
 pinul SCL al senzorului BMP180 este conectat la pinul analogic A5 al plăcii
 pinul SDA al senzorului BMP180 este conectat la pinul analogic A4 al plăcii
Zona de memorie globală
Această zonă de memorie cuprinde toţi regiştrii de date necesari să acţioneze senzorul
BMP180.
15
Figura 21. Zona de memorie
Caracteristicile electrice ale senzorului BMP180

Figura 22. Caracteristicile electrice ale senzorului BMP180

16
Senzorul de ploaie
Senzorul de ploaie este folosit pentru detectarea ploii. Poate fi folosit ca un switch
atunci când cad picăturile de ploaie pe plăcuţa senzorului şi de asemenea pentru măsurarea
intensităţii ploii.
Acest senzor este alcătuit din două module :
 Un modul care trebuie să stea în contact cu apa de ploaie
 Un modul care interpretează datele şi le converteşte pentru interfaţarea cu un
microcontroler
Aceste două module sunt separate pentru o mai bună convenienţă.
Acest senzor poate să furnizeze atât un răspuns digital (LOW sau HIGH), cât şi un răspuns
analogic (0-1024).

Figura 23. Senzor de ploaie

Ieşirea analogică este folosită la detectarea picăturilor dintr-un cumul de precipitaţii.


Atunci când acest senzor este alimentat la 5 V, LED-ul se aprinde când plăcuţa de inducţie nu
are nicio picătură şi ieşirea DO este în starea HIGH. Atunci când cade o cantitate mică de apă,
ieşirea DO este în starea LOW, switch-ul indicator se va aprinde.

Specificaţii tehnice
 Adoptă o calitate ridicată a materialului cu două feţe RF-04
 Arie: 5 cm x 4 cm placat cu nichel pe o parte
 Anti-oxidare, anti-conductivitate cu un timp de utilizare ridicat
 Potenţiometru pentru ajustarea senzitivităţii
 Voltaj de lucru: 5 V
 Formatul de ieşire: digital când comută între 1 şi 0 sau analogic
 Prezintă găuri pentru o uşoară instalare
 Dimensiuni: 3.2 cm x 1-4 cm
 Foloseşte un comparator LM393

Configuraţia pinilor
Denumire Pin Descriere

17
VCC 5 V DC
DO HIGH/LOW
AO analogic
GND Pin de masă (groud)

Tabelul 6. Configuraţia pinilor la un senzor de ploaie

Figura 24. Diagramă schematică pentru un senzor de ploaie

Montarea senzorului la placa Arduino Uno

18
Figura 25. Senzorul de ploaie conectat la placa Arduino Uno
Modul de conectare al pinilor pe placa Arduino Uno:
 Pinul AO al senzorului de ploaie este conectat la pinul A0 al plăcii
 Pinul GND al senzorului de ploaie este conectat la pinul GND al plăcii
 Pinul VCC al senzorului de ploaie este conectat la pinul 5V al plăcii

Senzorul de luminozitate
Acest senzor conţine o fotodiodă pentru lumină vizibilă. Această fotodiodă prezintă
următoarele specificaţii:
 Variaţia lungimii de undă : albastru spre verde.
 Ideală pentru aplicaţii cu senzori, sisteme de alarmă, senzori speciali din industria
automotive
 Dimensiunea chip-ului: 0.86 x 0.86 mm
 Valoarea pentru dark current este 0.03 nA
 Masa brută este de 0.17 g

19
Figura 26. Fotodiodă pentru lumină vizibilă

Evaluări maxime ale temperaturii la 25 ºC


Temperatura de depozitare Tst -25 ºC – 120 ºC
Temperatura de funcţionare Top -25 ºC – 80 ºC
Temperatura de sudură Tsold (5 s) 240 ºC

Tabelul 7. Evaluări maxime de temperatură ale fotodiodei

Specificaţii la 25 ºC
Simbol Valoare Unitate de măsură
Zona activă A 0.7 mm²
Senbilitatea vârfului λp 470 nm
lungimii de undă
Gama spectrală la λmin – λ max 425-525 nm
maxim 0.5
Gama spectrală la λmin – λ max 380-556 nm
maxim 0.1
Răspunsul Sλ 0.18 A/W
caracteristic la λp
Lăţimea de bandă Δλ0.5 100 nm
spectrală la 50%
Dark current maxim ID 30 pA
la VR= 5V
Tensiune maximă la VR 10 V
polarizare inversă la
IR=100 µA
Temperatura TC ID 5 De câte ori / K
coeficientului lui ID
Gama temperaturii de T amb/ T stg De la-25 la +100 ºC
depozitare şi
funcţionare

20
Tabelul 8. Specificaţii la 25 ºC ale fotodiodei

Figura 27. Orientarea componentelor fotodiodei

Luminozitatea va fi afişată pe un display LCD 16x4 sub formă de procente.

Figura 28. Senzor de luminozitate

Montarea senzorului de luminozitate la placa Arduino Uno

21
Figura 29. Senzorul de luminozitate conectat la placa Arduino Uno
Modul de conectare al pinilor pe placa Arduino Uno :
 pinul GND al senzorului de luminozitate este conectat la pinul GND al plăcii
 pinul VCC al senzorului de luminozitate este conectat la pinul 5 V al plăcii
 pinul OUT al senzorului de luminozitate este conectat la pinul analogic A1 al plăcii
Display-ul LCD 16x4
Este un display care poate afişa maxim 16 caractere pe rând. Dispune de 4 rânduri(linii) pe care
pot fi afişate caracterele. Pe acest display vor fi afişate valorile citite de la senzori, şi anume
temperatura, umiditatea, presiunea, şansa de precipitaţii şi luminozitatea.
Specificaţii generale
Element Dimensiuni Unitate de măsură
Număr de caractere 16 caractere x 4 rânduri -
Dimensiuni modul
87 x 60 x 13.6 (max) mm
(LxWxH)
Zona de vedere 62 x 26 mm
Zona activă 56.2 x 20.8 mm
Mărimea punctului 0.55 x 0.55 mm
Înălţimea punctului 0.6 x 0.6 mm
Mărimea caracterelor
2.95 x 4.75 mm
( LxW)
Înălţimea caracterului
3.55 x 5.35 mm
(LxW)

Tabelul 9. Specificaţii generale ale display-ului 16x4


Temperatura de funcţionare
Normal Extins
Temperatura de operare 0 ~+50 ºC -20 ~+70 ºC
Temperatura de depozitare -10 ~+60 ºC -30 ~+ 80ºC

Tabelul 10. Temperatura de funcţionare


Caracteristici electrice
Unitate
Element Simbol Contiţii Minim Obişnuit Maxim de
măsura
22
Sursă de
tensiune pentru Vdd-Vss - 3.0 - 5.5 V
nivelul logic
*Ta= -20
- 5.0 - V
ºC
Sursă de Ta= 0 ºC - - - V
tensiune pentru Vdd-Vo Ta= 25 ºC - 4.5 - V
LCD Ta= 50 ºC - - - V
*Ta=+70
- 4.0 - V
ºC
Tensiunea de
intrare
V IH - 2.2 - Vdd V
corespunzătoare
nivelului 1 logic
Tensiunea de
intrare
V IL - - - 0.6 V
corespunzătoare
nivelului 0 logic
Tensiunea de
ieşire
V OH - 2.4 - - V
corespunzătoare
nivelului 1 logic
Tensiunea de
ieşire
V OL - - - 0.4 V
corespunzătoare
nivelului 0 logic
Alimentarea Idd Vdd=5V - 1.2 - mA

Tabelul 11. Caracteristicile electrice ale display-ului 16x4

Unghiul optim de vizualizare al display-ului

23
Figura 30. Unghiul optim de vizualizare al display-ului 16x4

Se doreşte poziţionarea display-ului într-un unghi optim pentru o vizualizare cât mai bună a
caracterelor.

Contrastul

Figura 31. Contrastul pentru display-ul 16x4


Contrastul reprezintă raportul dintre luminozitatea zonei selectate şi luminozitatea zonei
neselectate.
În lumea reală reprezintă diferenţa între culoarea şi luminozitatea unui obiect.

Timpul de răspuns

24
Figura 32. Timpul de răspuns pentru display-ul 16x4
Descrierea pinilor
Număr Pin Simbol Nivel Descriere
1 Vss 0V Masă (ground)
2 Vdd 5.0 V Tensiune nivel logic
Tensiunea de
3 Vo variabil funcţionare a
LCD-ului
H: date,
4 RS H/L L:instrucţiuni de
cod
5 R/W H/L H: Citire, L: Scriere
Semnal de activare
6 E H, H -> L
al chip-ului
7 DB0 H/L Bitul de date 0
8 DB1 H/L Bitul de date 1
9 DB2 H/L Bitul de date 2
10 DB3 H/L Bitul de date 3
11 DB4 H/L Bitul de date 4
12 DB5 H/L Bitul de date 5
13 DB6 H/L Bitul de date 6
14 DB7 H/L Bitul de date 7
Alimentare pentru
15 A / Vee - lumina de fundal a
LED-ului ( + )
Alimentare fundal
16 K -
(-)
Tabelul 12. Descrierea pinilor pentru display-ul 16x4
Display-ul are trei pini de alimentare: Vdd, Vss, V0, trei pini de control: RS, E, R/W şi opt
pini de date: D0, D1, D2, D3, D4, D5, D6, D7. Pentru a afişa date are nevoie de cel puţin 6
pini intrare-ieşire de la microcontroler. Prezintă o interfaţă paralelă, ceea ce înseamnă
că microcontrolerul ce îl controlează trebuie să manipuleze mai mulţi pini în acelaşi
timp, aceştia sunt :

25
 un pin pentru selecţia registrului (RS) care controlează unde în memoria
LCD-ului se scriu datele. Se pot selecta fie registrul de date fie registrul de
instrucţiuni unde LCD-ul caută următoarea instrucţiune
 un pin pentru scriere/citire (R/W) care selectează modul de citire sau scriere al
LCD-ului
 un pin de enable care permite scrierea în registre
 opt pini de date (D0-D7), starea acestor pini poate fi (HIGH/LOW) reprezintă
modalitatea de scriere în regiştrii LCD-ului
 un pin pentru contrast care în general se leagă la un potenţiometru
 doi pini pentru alimentare
 doi pini pentru alimentarea ledurilor de fundal ale LCD-ului

Figura 33. Display LCD 16x4


Montarea display-ului LCD 16x4 la placa Arduino Uno

Figura 34. Display-ul LCD 16x4 conectat la placa Arduino Uno

Pentru a face montajul am folosit şi un potenţiometru reglabil de 10 K pentru a regla


contrastul display-ului LCD 16x4.
Modul de conectare al pinilor pe placa Arduino Uno :
 pinul VSS al LCD-ului este conectat la pinul GND al plăcii

26
 pinul VDD al LCD-ului este conectat la pinul 5V al plăcii
 pinul V0 al LCD-ului este conectat la pinul din mijloc al potenţiometrului
 pinul RS al LCD-ului este conectat la pinul digital 7 al plăcii
 pinul RW al LCD-ului este conectat la pinul GND al plăcii
 pinul E al LCD-ului este conectat la pinul digital 6 al plăcii
 pinul DB4 al LCD-ului este conectat la pinul digital 5 al plăcii
 pinul DB5 al LCD-ului este conectat la pinul digital 4 al plăcii
 pinul DB6 al LCD-ului este conectat la pinul digital 3 al plăcii
 pinul DB7 al LCD-ului este conectat la pinul digital 2 al plăcii
 pinul LED A al LCD-ului este conectat la pinul 5 V al plăcii
 pinul LED K al LCD-ului este conectat la pinul GND al plăcii

Figura 35. Afişarea unui mesaj pe display-ul LCD 16x4

Nivelul software

Arduino
Arduino Uno – R3 poate fi programat folosind mediul de programare Arduino. Arduino
vine cu o mulţime de exemple pentru a uşura munca utilizatorilor. Microcontrolerul
ATmega328 situat pe plăcuţa Arduino Uno vine încărcat cu un bootloader care permite
încărcarea de cod nou fără a mai fi nevoie să programăm hardware-ul extern.
Partea de software a platformei Arduino estre integrată într-o interfaţă grafică de tip
IDE bazată pe limbajul de programare Processing, iar programarea microcontrolerului de pe
placa Arduino Uno se face folosind limbajul de programare Arduino.

27
Figura 36. Interfaţa Arduino
Pentru a nu fi nevoie să apăsăm butonul de reset înainte de încărcarea unui program,
Arduino Uno–R3 este proiectat să accepte să fie resetat direct din software-ul calculatorului la
care este conectat.
Încărcarea codului se face foarte uşor prin apăsarea butonului de încărcare din mediul
Arduino. Arduino Uno – R3 are o siguranţă resetabilă care protejează portul USB al
calculatorului în caz de supra-sarcină. Dacă mai mult de 500 mA trec prin portul USB siguranţa
întrerupe automat legătura şi o menţine aşa până când supraîncărcarea este eliminată.
Mediul Integrat de dezvoltare (IDE) Arduino
Este destinat scrierii programelor ce pot fi încărcate pe platformele fizice Arduino.
Interfaţa este realizată în Java, iar mediul de programare dispune de un limbaj de tip open
source precum avr-gcc, Processing. Dispune de o interfaţă multiplatformă care poate rula în
Windows, Mac OS X şi Linux.
Este necesar să efectuăm selecţia porturilor, a tipului plăcii şi a mediului de programare AVR
ISP înainte de a încărca codul pe placa Arduino.

Selectarea tipului plăcii

28
Figura 37. Selectarea tipului plăcii

Selectarea portului

Figura 38. Selectarea portului

Încărcarea codului pe placă

29
Figura 39. Încărcarea codului pe placă
Software-ul pentru senzorul de temperatură şi umiditate DHT11
Codul folosit la afişarea temperaturii şi umidităţii pe display-ul LCD 16x4:
#include "DHT.h"
#include <LiquidCrystal.h>
#define DHTPIN 9
#define DHTTYPE DHT11
#include <Wire.h>
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
lcd.begin(16, 4);
dht.begin();
}
void loop() {
lcd.clear();
float temperature, humidity;
humidity = dht.readHumidity();
temperature = dht.readTemperature();
delay(2000);
char tempF[6];
char humF[6];
dtostrf(temperature, 5, 1, tempF);
dtostrf(humidity, 2, 0, humF);
lcd.setCursor(0, 0);
lcd.print("Statie meteo");
lcd.setCursor(0, 2);
lcd.print("Temperatura:");
lcd.print(tempF);
lcd.print((char)223);

30
lcd.print("C");
lcd.setCursor(0, 3);
lcd.print("Umiditate: ");
lcd.print(humF);
lcd.print("%");
}

Rezultatul este următorul :

Figura 40. Afişarea temperaturii şi a umidităţii pe display-ul LCD 16x4

Figura 41. Afişarea temperaturii şi a umidităţii în Serial Monitor

Software-ul pentru senzorul de presiune BMP180


Codul folosit la afişarea presiunii pe display-ul LCD 16x4:
#include <LiquidCrystal.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;

31
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup() {
bmp.begin();
Serial.begin(9600);
lcd.begin(16, 4);
}
void loop() {
float presiune1 = bmp.readPressure()/101.325;
presiune1 = presiune1 * 0.760;
lcd.setCursor(0, 0);
lcd.print("Statie meteo");
lcd.setCursor(0, 1);
lcd.print("Presiune: ");
lcd.print(presiune1);
lcd.print(" mmHg");
}

Figura 42. Afişarea presiunii pe display-ul LCD 16x4

Figura 43. Afişarea presiunii în Serial Monitor

32
Software-ul pentru senzorul de ploaie
Codul folosit la afişarea şansei de precipitaţii pe display-ul LCD 16x4:
#include <LiquidCrystal.h>
#include <Wire.h>
const int sensorMin = 0;
const int sensorMax = 1024;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
lcd.begin(16, 4);
}
void loop() {
int sensorReading = analogRead(A0);
int range = map(sensorReading, sensorMin, sensorMax, 0, 2);
delay(2000);
lcd.clear ();
lcd.setCursor(0,0);
lcd.print("Statie meteo");
switch (range) {
case 0:
lcd.setCursor(0, 2);
lcd.print("Ploua");
break;
case 1:
lcd.setCursor(0, 2);
lcd.print("Nu ploua");
break;
}
}

Figura 44. Afişarea şansei de precipitaţii pe display-ul LCD 16x4

33
Figura 45. Afişarea şansei de precipitaţii în Serial Monitor
Există doua cazuri:
 Cazul 1, când modulul exterior al senzorului este uscat afişează mesajul “Nu plouă”
 Cazul 2, când modulul exterior al senzorului este umed sau prezintă picături de apă,
afişează mesajul “Plouă”
Este un senzor foarte sensibil, a fost nevoie doar de câteva picături pentru a ne avertiza că
începe să plouă.

Figura 46. Condiţii de ploaie afişate pe display-ul LCD 16x4

34
Figura 47. Contiţii de ploaie afişate în Serial Monitor

Software-ul pentru senzorul de luminozitate


Codul folosit la afişarea şansei de precipitaţii pe display-ul LCD 16x4:
#include <LiquidCrystal.h>
#include <Wire.h>
int photoRPin = 1;
int minLight;
int maxLight;
int lightLevel;
int adjustedLightLevel;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
lcd.begin(16, 4);
lightLevel=analogRead(photoRPin);
minLight=lightLevel-20;
maxLight=lightLevel;
}
void loop() {
delay(2000);
lightLevel=analogRead(photoRPin);
if(minLight>lightLevel){
minLight=lightLevel;
}
if(maxLight<lightLevel){
maxLight=lightLevel;
lcd.clear();
}
adjustedLightLevel = map(lightLevel, minLight, maxLight, 0, 100);
lcd.setCursor(0, 0);
lcd.print("Statie meteo");

35
lcd.setCursor(0, 2);
lcd.print("Lumina: ");
lcd.print(adjustedLightLevel);
lcd.print("%");
}

Figura 48. Afişarea luminozităţii pe display-ul LCD 16x4

Figura 49. Afişarea luminozităţii în Serial Monitor

Software-ul pentru display-ul LCD 16x4


Codul folosit la afişarea unui mesaj pe display-ul LCD 16x4:
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
36
void setup() {
lcd.begin(16, 4);
}
void loop() {
lcd.setCursor(2, 0);
lcd.print("Statie meteo ");
lcd.setCursor(2, 1);
lcd.print("folosind ");
lcd.setCursor(2, 2);
lcd.print("platforma ");
lcd.setCursor(2, 3);
lcd.print("Arduino Uno");
}

Figura 50. Afişarea mesajului “Staţie meteo folosind platforma Arduino Uno” pe LCD
Rezultatul combinării acestor senzori şi afişării informaţiilor provenite de la aceştia pe
display-ul LCD 16x4 formează staţia meteo.

Figura 51. Afişarea pe display a informaţiilor provenite de la senzori


CONCLUZII

Prin acest proiect cu titlul “Staţie meteo folosind platforma Arduino Uno” am încercat
să îmi îmbunătăţesc cunoştinţele acumulate pe perioada studiilor.
37
În ultimii ani ştiinţa şi tehnologia au avansat din ce în ce mai mult, dar cu toate acestea
un lucru pe care nimeni nu îl poate controla este vremea. De aceea mi s-a părut o idee bună
să aleg această temă de proiect.

Staţiile meteo prezintă o serie de avantaje:

 Permit efectuarea de măsurători ale parametrilor meteorologici, cum sunt cei ce


caracterizează temperatura, umiditatea, presiunea, şansa de precipitaţii în zone greu
accesibile
 Datorită senzorilor de ultimă generaţie precizia datelor obţinute a crescut, iar gama
parametrilor ce pot fi măsuraţi a fost mult lărgită
 Oferă posibilitatea obţinerii şi prelucrării unui volum mai mare de date prin legarea la
un calculator sau server
 Posibilitatea transmiterii în timp real a datelor la centrele de colectare a informaţiilor
 Sunt necesare pentru urmărirea unor fenomene cu dinamică rapidă, cât şi pentru
avertizarea în caz de pericol
Prognozele meteorologice permit anticiparea evoluţiei unor parametri ca : temperatură,
umiditate, presiune atmosferică, precipitaţii, viteza şi direcţia vântului.

Este foarte important să cunoaştem starea vremii deoarece în funcţie de acest lucru ne
putem planifica activităţile.

BIBLIOGRAFIE

[DOOM05] – Dicţionarul ortografic, ortoepic şi morfologic al limbii române, Editura Univers


Enciclopedic, Bucureşti, 2005
[BAN09] –Massimo Banzi, Getting Started with Arduino, Editura O’Reilly, 2009
[MON10] – Simon Monk, 30 Arduino Projects for the Evil Genius, Editura Tab Books, 2010
[BUR13] – Stephen Burt, The Weather Observer’s Handbook, Editura Cambridge, 2013
[KAR14] – Tero Karvinen, Kimmo Karvinen, Ville Valtokari, Make: Sensors. Projects and
Experiments to Measure the World with Arduino and Raspberry Pi, Editura Maker Media,
Inc, 2014

REFERINȚE WEB
[ABU15] – https://www.arduino.cc/en/Main/arduinoBoardUno
[DHT15] – http://www.micro4you.com/files/sensor/DHT11.pdf
[BMP15] – http://www.adafruit.com/datasheets/BST-BMP180-DS000-09.pdf
[AMR15] – http://www.instructables.com/id/Arduino-Modules-Rain-Sensor/
[RSM15] –
http://www.tinkbox.ph/sites/tinkbox.ph/files/downloads/RAIN_SENSOR_MODULE.pdf
[LCD15] – http://www.arduino.cc/documents/datasheets/LCD-WH1602B-TMI-ET%23.pdf
[DTS15] – http://www.farnell.com/datasheets/50577.pdf
[BCV15] – http://www.sos.sk/a_info/resource/d/bolymin/BC1604A_series_VER01.pdf
[ATM15] – http://www.atmel.com/Images/doc8161.pdf
[AUR15] – https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
[STM15] – https://ro.wikipedia.org/wiki/Sta%C8%9Bie_meteorologic%C4%83
[SSM15] – http://www.scribd.com/doc/192315738/Statia-meteorologica#scribd
[WKA15] – https://en.wikipedia.org/wiki/Arduino
38
A. CODUL SURSĂ
#include "DHT.h"
#include <LiquidCrystal.h>
#define DHTPIN 9
#define DHTTYPE DHT11
#include <Wire.h>

DHT dht(DHTPIN, DHTTYPE);


#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;

const int sensorMin = 0;


const int sensorMax = 1024;
int photoRPin = 1;
int minLight;
int maxLight;
int lightLevel;
int adjustedLightLevel;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup() {
bmp.begin();
Serial.begin(9600);

lcd.begin(16, 4);
dht.begin();
lightLevel=analogRead(photoRPin);
minLight=lightLevel-20;
maxLight=lightLevel;
}
void loop() {

int sensorReading = analogRead(A0);


int range = map(sensorReading, sensorMin, sensorMax, 0, 2);

float temperature, humidity;


humidity = dht.readHumidity();
temperature = dht.readTemperature();
delay(2000);
lcd.clear();
char tempF[6];
char humF[6];
dtostrf(temperature, 5, 1, tempF);
dtostrf(humidity, 2, 0, humF);

float presiune1 = bmp.readPressure()/101.325;


presiune1 = presiune1 * 0.760;

lightLevel=analogRead(photoRPin);
if(minLight>lightLevel){
39
minLight=lightLevel;
}
if(maxLight<lightLevel){
maxLight=lightLevel;
}

adjustedLightLevel = map(lightLevel, minLight, maxLight, 0, 100);


lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(tempF);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(10, 0);
lcd.print("H: ");
lcd.print(humF);
lcd.print("%");

lcd.setCursor(0, 1);
lcd.print("P: ");
lcd.print(presiune1);
lcd.print(" mmHg");
switch (range) {
case 0:
lcd.setCursor(0, 2);
lcd.print("Ploua");
break;
case 1:
lcd.setCursor(0, 2);
lcd.print("Nu Ploua");
break;
}
lcd.setCursor(0, 3);
lcd.print("Lumina: ");
lcd.print(adjustedLightLevel);
lcd.print("%");

III. Task-uri de lucru:

40

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