Documente Academic
Documente Profesional
Documente Cultură
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
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.
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.
Configuraţia pinilor
Majoritatea pinilor au funcții alternative legate de funcționarea dispozitivelor periferice.
5
Figura 7. Configuraţia pinilor Atmega328
Figura 8. ATmega328
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.
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
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.
11
Figura 14. Senzorul DHT11 conectat la Arduino Uno
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.
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)
13
Figura 17. Distribuţia pinilor pentru senzorul BMP180
14
Montarea senzorului la placa Arduino Uno
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).
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)
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ă
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
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)
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
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
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
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.
28
Figura 37. Selectarea tipului plăcii
Selectarea portului
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("%");
}
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");
}
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;
}
}
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ă.
34
Figura 47. Contiţii de ploaie afişate în Serial Monitor
35
lcd.setCursor(0, 2);
lcd.print("Lumina: ");
lcd.print(adjustedLightLevel);
lcd.print("%");
}
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.
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.
Este foarte important să cunoaştem starea vremii deoarece în funcţie de acest lucru ne
putem planifica activităţile.
BIBLIOGRAFIE
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>
lcd.begin(16, 4);
dht.begin();
lightLevel=analogRead(photoRPin);
minLight=lightLevel-20;
maxLight=lightLevel;
}
void loop() {
lightLevel=analogRead(photoRPin);
if(minLight>lightLevel){
39
minLight=lightLevel;
}
if(maxLight<lightLevel){
maxLight=lightLevel;
}
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("%");
40