FUNDAȚIA PENTRU CULTURĂ ȘI ÎNVĂȚĂMÂNT IOAN SLAVICI TIMIȘOARA [303067]

FUNDAȚIA PENTRU CULTURĂ ȘI ÎNVĂȚĂMÂNT “IOAN SLAVICI” TIMIȘOARA

UNIVERSITATEA “IOAN SLAVICI” [anonimizat].dr.ing. [anonimizat]: [anonimizat]

2019

FUNDAȚIA PENTRU CULTURĂ ȘI ÎNVĂȚĂMÂNT “IOAN SLAVICI” TIMIȘOARA

UNIVERSITATEA “IOAN SLAVICI” [anonimizat].dr.ing. [anonimizat]: [anonimizat]

2019

UNIVERSITATEA DIN ORADEA

FACULTATEA de Inginerie Electrică și Tehnologia Informației

DEPARTAMENTUL Calculatoare și tehnologia informației

TEMA _________________

Proiectul de Finalizare a studiilor a student: [anonimizat]________________________

1). Tema proiectului de finalizare a studiilor:_____________________________________

______________________________________________________________________________________________________________________________________________________

2). Termenul pentru predarea proiectului de diplomă______________________________

3). Elemente inițiale pentru elaborarea proiectului de finalizare a studiilor___________

______________________________________________________________________________________________________________________________________________________

4). Conținutul proiectului de finalizare a studiilor:_________________________________

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

5). Material grafic:___________________________________________________________ ______________________________________________________________________________________________________________________________________________________

6). Locul de documentare pentru elaborarea proiectului de diplomă:

___________________________________________________________________________

___________________________________________________________________________

7). Data emiterii temei________________________________________________________

Coordonatori științifici

(titlul științific și numele),

DECLARAȚIE DE AUTENTICITATE

A

PROIECTULUI DE FINALIZARE A STUDIILOR

Titlul proiectului _____________________________________________________________

___________________________________________________________________________

___________________________________________________________________________

Autorul proiectului ___________________________________________________________

Proiectul de finalizare a studiilor este elaborat în vederea susținerii examenului de finalizare a studiilor organizat de către Facultatea _______________I.E.T.I._________________________ [anonimizat]________iulie_________ a anului universitar __2019_________________________,

[anonimizat] (nume, prenume, CNP)____________________________

___________________________________________________________________________

___________________________________________________________________________

declar pe proprie răspundere că aceast proiect a fost scris de către mine, fără nici un ajutor neautorizat și că nici o parte a proiectului nu conține aplicații sau studii de caz publicate de alți autori.

Declar, de asemenea, că în proiect nu există idei, tabele, grafice, hărți sau alte surse folosite fără respectarea legii române și a convențiilor internaționale privind drepturile de autor.

Oradea,

Data Semnătura

REFERAT

PRIVIND PROIECTUL DE DIPLOMĂ

A

ABSOLVENTULUI / ABSOLVENTEI : ……………………………………….

DOMENIUL Calculatoare și tehnologia informației

SPECIALIZAREA Tehnologia informației

PROMOȚIA 2019

Titlul proiectului …………………………………………………………………..

…..…………………………………………………………………………………………………

Structura proiectului ………………………………………………………………..

…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………

…………………………………………………………………………………………………………………………………………………………………………………………………………………

Aprecieri asupra conținutului proiectului de DIPLOMĂ (finalizare a studiilor), mod de abordare, complexitate, actualitate, deficiențe

………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………

Aprecieri asupra proiectului (se va menționa: numărul titlurilor bibliografice consultate, frecvența notelor de subsol, calitatea și diversitatea surselor consultate; modul în care absolventul a prelucrat informațiile din surse teoretice)

…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………

(se va menționa: opțional locul de documentare și modul în care absolventul a realizat cercetarea menționându-se contribuția autorului)

……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………

Concluzii (coordonatorul proiectului trebuie să aprecieze valoarea proiectului întocmit, relevanța studiului întreprins, competențele absolventului, rigurozitatea pe parcursul elaborării proiectului, consecvența și seriozitatea de care a dat dovadă absolventul pe parcurs)

……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………

Redactarea proiectului respectă ………………………………………………….cerințele academice de redactare (părți, capitole, subcapitole, note de subsol și bibliografie).

Consider că proiectul îndeplinește/ nu îndeplinește condițiile pentru susținere în sesiunea de Examen de LICENȚĂ (finalizare a studiilor) din IULIE 2019 și propun acordarea notei ………………

Oradea,

Data Coordonator științific

CUPRINS

Capitolul I. Introducere……………………………………………………………………………………………

I.1. Generalități……………………………………………………………………………………………….

I.2. Scopul proiectului……………………………………………………………………………………..

I.3. Structura proiectului de diplomă…………………………………………………

Capitolul II. Considerații teorretice, stații meteo………………………………………………………

II.1. Introducere……………………………………………………………………………………………..

II.2. Clasificarea stațiilor meteo……………………………………………………………………….

II.3. Exemple de stații meteo automate……………………………………………………………..

Capitolul III. Platforma hardware, (componente, circuite, scheme)………………………….

Capitolul IV. Sistemul software………………………………………………………………………………..

IV.1. Platforma software………………………………………………………………………………….

IV.2. Proiectarea software-ului…………………………………………………………………………

IV.3. Implementarea software………………………………………………………………………….

IV.3.1. Inițializarea…………………………………………………………………………………

IV.3.2. Etapa Setup()…………………………………………………………..

IV.3.3 Etapa Loop()…………………………………………………………….

IV.3.3.1. Subprogramul de monitorizare a temperaturii sistemului……………

IV.3.3.2. Subprogramul de monitorizare a tensiunii de alimentare…………….

IV.3.3.3. Subprogramul de comandă pentru afișarea datelor pe LCD………….

IV.4.Diagrama de secvență a aplicației………………………………………………………………

Capitolul V. Implementarea și testarea componentelor din cadrul sistemului……………..

V.1. Implementarea și testarea modulului (blocului) de alimentare………………….

V.2. Implementarea și testarea modulului pentru achiziția datelor……………………

V.3. Implementarea și testarea modulului de procesare a datelor…………………………..

V.4. Implementarea și testarea modulului de comandă (transmisie și recepție IR)…..

V.5. Implementarea și testarea modulului pentru afișarea datelor solicitate……………

Capitolul VI. Concluzii…………………………………………………………………………………………….

Bibliografie………………………………………………………………………………………………………………

ANEXA 1 Codul sursă pentru Arduino………………………………………………………………………..

ANEXA 2 Fotografii realizate pe parcursul ansamblării componentelor…………………………..

LISTA FIGURILOR

Figura Numele Figurii Pag.

I.1. Modelul “V-Cycle” utilizat pentru proiectarea și implementarea sistemului…02

II.1. “Ecranul Stevenson”pentru protecția echipamentelor………………………………….05

II.2. Stație meteo analogică…………………………………………………………………05

II.3. Stație meteo digitală …………………………………………………………………..06

II.4. Stație meteo digitală sau analogică pentru exterior………………………………06

II.5. Stație meteo wireless…………………………………………………………………..07

II.6. Stație meteo alimentată cu energie solară………………………………………….07

II.7. Stație meteo portabilă…………………………………………………………………08

II.8. Stația meteo “Campbell”………………………………………………………………………..08

II.9. Stația meteo “AANDERAA AWS 2700”…………………………………………………….09

II.10. Stația meteo “Davis Vantage PRO2”……………………………………………….09

IV.1. Schema logică a sistemului software…………………………………………………………

IV.2. Schema logică subprogram monitorizare temperatură………………………………..

IV.3. Schema logică subprogram monitorizare tensiune alimentare……………………..

IV.4. Schema logică subprogram comandă afișare date………………………………………

IV.5. Diagrama de secvență a aplicației……………………………………………………………

V.1. Circuitul de alimentare solar……………………………………………………………………

V.2. Afișarea tensiunii de alimentare……………………………………………………………….

V.3. Simulare achiziție date senzori…………………………………………………………………

V.4. Testarea senzorilor după implementare…………………………………………………….

V.5. Finalizarea conexiunilor în vederea testării în timp real……………………………..

V.6. Decodarea telecomenzi utilizate în cadrul proiectului…………………………………

V.7. Testarea telecomenzii ……………………………………………………………………………..

V.8. Implementarea modulului pentru afișarea datelor………………………………………

V.9. Interfațarea modulului cu display-ul…………………………………………………………

VI.1 Tabel monitorizare valori meteo………………………………………………………………..

VI.2 Grafic comparativ temperaturi monitorizare………………………………………………

VI.3 Grafic comparativ presiune atmosferică monitorizată…………………………………

VI.4 Grafic comparativ umiditate atmosferică monitorizată………………………………..
A2.1. Structura stației meteo……………………………………………………………………………..

A2.2. Circuitul de alimentare solar…………………………………………………………………….

A2.3. Circuitul de comandă și control al ventilatorului…………………………………………

A2.4. Montaj circuit senzor lumină…………………………………………………………………….

A2.5. Montaj circuit senzor temperatură și umiditate……………………………………………

A2.6. Testare modul comandă cu infraroșu…………………………………………………………

A2.7. Testarea finală înainte de montaj………………………………………………………………

A2.8. Proiect finalizat……………………………………………………………………………………….

Capitolul I

INTRODUCERE

I.1. GENERALITĂȚI

O stație meteo automată (SMA) poate fi definită ca o stație meteorologică la care observațiile despre starea vremii se fac deobicei în mod automat utilizând pentru acest scop o varietate de instrumente de măsură ( în general senzori digitali performanți) pentru achiziția de date iar pentru prelucrarea lor utilizându-se unități de procesare a datelor cum ar fi microcontrolere dedicate sau calculatoarele. Astfel de sisteme integrate ce au în componența lor o varietate de instrumente de măsură, interfețe și unități de prelucrare și transmisie a datelor sunt denumite deobicei sisteme automate de observare a condițiilor meteo (SAOCM). Stațiile meteo automate sunt în general folosite pentru a mări suprafața de observație și de a crește precizia măsurătorilor din zonele monitorizate, acest lucru se realizează prin:

creșterea densității rețelei de monitorizare adăugând noi echipamente în zone noi sau zone greu accesibile;

furnizarea datelor sau stocarea lor după caz în afara orelor de program;

creșterea fiabilității măsurătorilor prin utilizarea tehnologiilor moderne și a echipamentelor de masură digitale;

asigurarea omogenității rețelelor de observație prin standardizarea tehnicilor de măsurare;

satisfacerea unor cerințe noi de monitorizare prin implementarea adaptabilă și flexibilă a echipamentelor din cadrul sistemului;

reducerea erorilor umane prin implementarea de tehnici moderne de măsurare;

reducerea costurilor operaționale prin reducerea numărului de observatori;

măsurarea și raportarea datelor cu o frecvență mare sau chiar continuă.

I.2. SCOPUL PROIECTULUI

Proiectul de față a fost conceput și creat din ideea de a fi un lucru util și de a veni în ajutorul celor care nu au posibilitatea de a se informa prin mijloace convenționale despre starea vremii fie fiind în drumeții sau în zone izolate unde accesul la informații este anevoios.

Pentru atingerea scopului propus s-au conceput din start câteva cerințe de bază pentru a putea urmări modul de execuție și implementare a proiectului, aceste cerințe sunt:

determinarea valorilor meteorologice prin implementarea unui sistem automatizat de achiziție a datelor utilizând diverși senzori.

procesarea datelor utilizând microcontrolerul Atmega 328p (Arduino UNO).

afișarea datelor obținute pe un display LCD monocrom 16X2 utilizând telecomanda cu (IR).

asigurarea autonomiei și portabilității stației meteo din punct de vedere al alimentării cu energie electrică, utilizând energia solară.

compararea valorilor obținute cu valorile postate pe internet de către site-urile web dedicate pentru testarea și validarea sistemului implementat.

Iar pentru elaborare, implementarea și testarea proiectului a fost utilizat modelul din figura nr.I.1. care definește clar etapele ce trebuiesc parcurse în procesul de execuție al unui proiect. Modelul “V-Model” sau “V-Cycle”) stabilește firul de execuție al unui proces de la emiterea cerințelor pâna la obținerea și validarea produsului finit, în cazul de față realizarea unei stații meteo automate conform cerințelor enumerate anterior.

Modelul V-Cycle

Figura I.1. Modelul “V-Cycle” utilizat pentru proiectarea și implementarea sistemului

Considerentele care au stat la baza alegerii unui astfel de model au fost:

stabilirea cu exactitate a etapelor ce vor fi parcurse pentru atingerea obiectivului propus.

planificarea riguroasă a resurselor hardware și software utilizate.

îmbunătățirea timpului de execuție pentru elaborarea și finalizarea proiectului

I.3. STRUCTURA LUCRĂRII DE DIPLOMĂ

Având în vedere scopul și obiectivele proiectului, prin prezenta lucrare s-a proiectat, dezvoltat, implementat, testat și realizat un sistem hardware și software pentru echiparea unei stații meteo automate acre să utilizeze energii alternative pentru alimentarea și funcționalitatea ei, în cazul de față utilizarea energiei solare ca sursă de alimentare. Pentru materializarea proiectului au fost necesare multe ore de lucru și efort suținut pe perioada cât s-a proiectat, dezvoltat și implementat platforma hardware și software al stației meteo. Pentru a putea lucra sistematic și etapizat s-a utilizat modelul “V-Cycle” prezentat in figura 1.3. pentru stabilirea priorităților în derularea procesului de execuție a acestui proiect.

Această lucrare este împărțită pe 6 capitole care acoperă atât părțile teoretice caracteristice temei alese cât și descrierea în detaliu a soluțiilor hardware și software implementate. Structurarea capitolelor a fost realizată plecând de la scopul și obiectivul propus, incepând cu partea teoretică necesară înțelegerii proiectului, detalirea platformelor de dezvoltare software și hardware și terminându-se cu emiterea concluziilor în urma testelor efectuate.

Capitolul I conține noțiunile generale privind stațiile meteo automate și utiliatea lor, prezentarea generală a proiectului referitor la scopul pentru care a fost creat și structura lucrării de diplomă.

Capitolul II prezintă considerațiile teoretice ce au dus la proiectarea și implementarea unui astfel de sistem automat de monitorizare a condițiilor meteo.

Capitolul III are ca scop prezentarea sumară a arhitecturii sistemului începând cu platforma hardware unde sunt evidențiate structurile de bază ale sistemului implementat prin scheme bloc și dezvoltă amănunțit platforma hardware și implementarea pas cu pas a componentelor și circuitelor folosite în cadrul acestui proiect.

Capitolul IV are ca scop prezentarea sistemului software, a schemei logice și detalierea codului sursă utilizat pentru programarea microcontrolerului “Arduino UNO” utilizat în acest proiect.

Capitolul V prezintă modul în care au fost testatate și implementate componentele și apliocațiile din cadrul sistemului.

Capitolul VI exprimă concluziile obținute în urma testelor și a masurătorilor efectuate.

Capitolul II

CONSIDERAȚII TEORETICE, STAȚII METEO

II.1. Introducere

Stațiile meteo sunt instalații echipate cu instrumente pentru măsurarea condițiilor atmosferice ele furnizând informații despre evoluția vremii și a condițiilor climatice. Stațiile meteo în general măsoară și furnizează date despre temperatură, umiditatea aerului, presiunea atmosferică, viteza și direcția vântului precum și cantitatea de precipitații căzută, informațiile fiind utilizate pentru prognozarea și monitorizarea schimbărilor climatice pe arii geografice vaste sau restrânse în funcție de amplasamentul lor, ele ajută astfel la crearea unui tablou cât mai exact privind modificările sau evoluțiile condițiilor climatice.

Instrumentele folosite pentru măsurarea condițiilor meteo pot fi digitale sau analogice, dar indiferent de natura lor constructivă ele furnizează date similare, diferența fiind doar precizia cu care fac acest lucru.

Aparatele de măsură ce intră în componența unei stații meteo tipice sunt:

Termometrul pentru măsurarea temperaturii aerului la sol sau la suprafața mării

Barometrul pentru măsurarea presiunii atmosferice

Higrometrul pentru masurarea umidității

Anemometrul pentru măsurarea vitezei vântului

Piranometrul utilizat pentru măsurarea radiației solare

Indicatorul de ploaie ce măsoară cantitatea de precipitații pe o anumită perioadă de timp

Stațiile meteo dedicate mai ales cele automate cum ar fi cele din aeroporturi pot avea în dotare instrumente suplimentare cum ar fi; disdrometrul ce masoara intensitatea precipitațiilor și densitatea picăturilor de apă, transmisometru pentru măsurarea vizibilității și ceilometrul pentru determinarea plafonului norilor, unele stații mai sofisticate pot măsura indicele de radiații ultraviolete, umiditatea solului și a frunzelor, temperatura solului, temperatura apei din diverse locații etc.

Stațiile meteo de obicei sunt amplasate în locuri ferite de acțiunea directă a razelor solare, excepție facând dor instrumentele din componența ei care necesită expunerea directă, în general instrumentele sunt protejate fiind montate într-o cutie ventilată numită “ecran Stevenson” figura nr.II.1. care asigură protecția echipamentelor împotriva razelor solare directe asigurând totodată o ventilație corespunzătoare. Instrumentele unei stații meteo pot fi programate mai ales în cazul celor digitale să stocheze și să transmită istoricul datelor pe o perioadă mai mare de timp, unele comunicând datele la intervale orare sau chiar mai puțin.

Figura II.1. “ecranul Stevenson”pentru protecția echipamentelor

II.2. Clasificarea stațiilor meteo

În funcție de cerințe, domeniu utilizat și dotări stațiile meteo pot fi clasificate după cum urmează:

Stații meteo analogice, figura nr.II.2. caracteristica lor este aceea că sunt construite din elemente mecanice, sunt fiabile pot funcționa fără probleme o perioadă îndelungată și nu necesită nicio sursă de alimentare, dezavantajul lor este acela că observațiile sau citirea echipamentelor se face prin observare directă la intervale de timp regulate.

Figura II.2. stație meteo analogică

Stații meteo digitale, figura nr.II.3. aceste stații după cum le spune și numele sunt stații a căror caracteristică primară este aceea de a face achiziții de date în urma citirii senzorilor digitali de obicei. Ele sunt dependente de o sursă de alimentare externă, datele fiind transmise către o unitate centrală prin diverse tehnologii wireless, avantajul acestor stații este acela că pot avea o multitudine de senzori ce pot fi amplasați atât în interior cât și în exterior comunicând datele prin wireless și în plus datele pot fi afișate în timp real pe diverse diplay-uri.

Figura II.3. stație meteo digitală

Stații meteo pentru exterior, figura nr.II.4. au în componența lor și aparaturi analogice de măsurare cât și digitale, față de celelalte stații prezentate se deosebesc prin robustețea construcției fiind fabricate din materiale rezistente la condițiile climatice extreme.

Figura II.4. stație meteo digitală sau analogică pentru exterior

Stații meteo wireless, figura nr.II.5. sunt la fel ca celelalte stații prezentatate diferența fiind interconectarea senzorilor și portabilitatea lor, comunicarea datelor realizându-se exclusiv prin tehnologii wireless senzorii putând comunica cu baza de la 30 m până la 300 m în funcție de implementarea hardware și software.

Figura II.5. stație meteo wireless

Stații meteo solare, figura nr.II.6. caracteristica lor de bază este autonomia din punct de vedere al alimentării cu energie, ele convertind cu ajutorul panourilor fotovoltaice energia solară în cea electrică. Aceste stații pot fi folosite în zone greu accesibile unde nu există retele de energie electrică, având o autonomie de funcționare ridicată. Dezavantajul lor constă în faptul că energia stocată depinde implementarea componentelor hardware pentru etajul de alimentare, de acumulatorul utilizat cât și de zona geografică în care este aplasată stația (intensitatea solară).

Figura II.6. stație meteo alimentată cu energie solară

Stații meteo portabile, figura nr.II.7. aceste stații sunt construite special să fie rezitente la apă, praf și murdărie ele sunt utilizate în general de cei care iubesc natura și drumețiile, de către serviciile de căutare și salvare, pompieri sau armată. Sunt foarte precise și oferă o gamă largă de informații cu privire la mediul înconjurător sau condițiile meteo.

Figura II.7. stație meteo portabilă

II.3. Exemple de stații meteo automate

stația meteo “Campbell” figura nr.II.8. este una dintre cele mai utilizate stații automate din lume datorită caracteristicelor ei tehnice cum ar fi; precizia de masurare ridicată, fiabilitatea, construcția robustă, funcționarea într-o gamă largă de temperaturi cât și consumul de energie redus. Punctul forte al acestei stații este autonomia ei, adică funcționarea ei pe baza energiei solare provenite de la panourile fotovoltaice din dotare. Stația meteo poate fi utilizată pentru diverse aplicații cum ar fi: monitorizarea valorilor meteo, cercetare în domeniul climatologic, determinări ale umidității solului, ale înghețului, măsurarea intensității vântului, etc.

Figura II.8. Stația meteo “Campbell”

stația meteo “AANDERAA AWS 2700” figura nr.II.9. utilizată deobicei de stațiunile de cercetare unde sunt condiții extreme, stația asigură măsurări de calitate ridicată folosind o gamă largă de senzori pentru determinarea următorilor parametri: viteza și direcția vântului, umiditatea relativă, presiunea atmosferică, durata și intensitatea solară, vizibilitatea, cantitatea de precipitații, etc. La baza suportului pe care sunt montați senzorii se găsesc echipamentele de prelucrare și transmisie a datelor achiziționate, senzorii sunt citiți la un interval de 10 minute, iar transmisia datelor se face prin diverse moduri care sunt configurabile în funcție de cerințe cu ar fi; transmie radio a datelor în timp real, comunicații TCP/IP, GSM, GPRS și comunicații prin satelit.

Figura II.9. Stația meteo “AANDERAA AWS 2700”

stația meteo “Davis Vantage PRO2” figura nr.II.10 este o stație meteo care poate fi personalizată în funcție de necesități având o gamă largă de senzori ce pot fi utilizați. După cum îi spune și numele este dedicată în special profesioniștilor care vor să monitorizeze și să gestioneze date meteo la o precizie ridicată, stația meteo este proiectată să reziste la temperaturi și condiții meteo extreme și viteze ale vântului de până la 325 km/h. Pe lângă toate echipamentele clasice utilizate de orice stație meteo automată este echipată cu un transmițător wireless alimentat cu energie solară foarte performant ce poate transmite și primi date pe o ditanță de 1000 m fiind dotată și cu un acumulator de rezervă pentru menținerea fluxului de date activ.

Figura II.10. Stația meteo “Davis Vantage PRO2”

Capitolul IV

SISTEMUL SOFTWARE

Arduino este un mediu de dezvoltare open source utilizat pentru proiectarea și construirea aplicațiilor electronice, în componența lui intrând de obicei o componentă fizică placa cu circuite programabile denumită dealtfel și microcontroler, cât și componenta software numită IDE(Integrated Development Environment) aceasta din urmă deobicei rulează pe un computer și este utilizată pentru a scrie și încărca programul sau codul în microcontroler.

IV.1. Platforma software

Mediul de dezvoltare integrat Arduino – sau Arduino (IDE) este un soft cu care se lucră ușor având o interfață intuitivă, el conține un editor de text pentru scrierea codurilor, o zonă unde apar mesajele, o consolă de text, o bară de instrumente cu butoane pentru diverse funcții ale aplicației și o multitudine de meniuri. Se conectează facil prin interfața USB la placa de dezvoltare Arduino pentru a comunica și încărca programe.

Programele create folosind Arduino (IDE) se numesc schițe, aceste schițe sunt redactate în editorul de text și se salvează cu extensia.ino. Editorul de text conține funcții consacrate cu ar fi; tăiere, lipire, căutare și înlocuire text.

Zona de mesaje oferă utilizatorului informații despre derularea procesului în timp ce se salvează și se exportă fișiere sau programe afișând deasemenea eventuale erori.

În partea de jos a interfeței se află consola care afișează textul generat de către Arduino (IDE) totodată aici apar și mesajele de eroare la compilarea programului și diverse alte informații. În colțul din dreapta jos se afișează placa de dezvoltare utilizată și portul serial pe care se conectează, iar în partea de sus se află bara de meniuri și instrumente care permit utilizatorului să verifice și să încărce programe, să creeze, să deschidă și să salveze programele sau schițele generate și nu în ultimil rând să utilizeze monitorul serial implementat pentru a monitoriza în timp real rularea unui program.

Programul generat de Arduino conține în general două parți importante, prima parte este secțiunea de “setup” în care se definesc setările primare cum ar fi; configuirarea intrărilor și a ieșirilor, inițializarea modulelor, definirea variabilelor și a constantelor pentru funcții diverse precum și afișarea unor mesaje generice legate de componente. Această secțiune este rulată o singură dată la pornirea sau la resetarea microcontrolerului. Iar în a doua parte se află secțiunea de “loop” unde se execută instrucțiunile în buclă continuă aici după terminarea ultimei instrucțiuni se reaia prima instrucțiune și se continuă acest ciclu până când se întrerupe alimentarea microcontrolerului.

IV.2. Proiectarea software-ului

Ideea realizării unei stații meteo portabile și autonome a plecat de la posibilitatea de a afla date despre condițiile meteorologice în locații greu accesibile sau in zonele unde prin mijloacele clasice (internet, televiziune, mass media) aceste date nu pot fi accesate. Pentru a face posibil acest lucru s-a început prin proiectarea sistemelor de achiziție a datelor, a elementelor de control și a funcțiilor ce trebuie să le îndeplinească sistemul în raport cu integrarea componentelor și a modulelor utilizate.

În vederea implementării cât mai corecte a prezentului proiect a fost creată o schemă logică software a sistemului pentru a avea un tablou complet asupra funcțiilor ce trebuiesc implementate, în proiectarea schemei logice s-a ținut cont de studiul efectuat asupra stațiilor meteo și a condițiilor ce trebuiesc să le îndeplinească acestea și anume; să furnizeze date despre temperatură, umiditate, intensitatea luminii, viteza vântului, indicele UV, nivel precipitații, etc, pe lângă aceste funcții au fost adăugate și elemente de informare cum ar fi afișarea datelor pe un display prin simpla apăsare a uni buton de telecomandă.

Etapele software ale aplicației implementate în acest proiect sunt:

Etapa start, aceasta începe din momentul alimentării sistemului

Etapa de inițializare, cuprinde declararea librăriilor folosite, declararea modulelor, declararea variabilelor în cazul nostru temperatura minimă, temperatura maximă, intensitatea luminii, turație ventilator, declararea pinilor, inițializarea modulului de recepție infraroșu și funcția de reset.

Etapa de Setup cuprinde declararea tipurilor de pini Input, Output, inițializarea modulelor: LCD, RTC și a senzorilor utilizați în componența sistemului precum și afișarea mesajului de întâmpinare pe LCD.

Etapa Loop cuprinde funcțiile implementate ce rulează conform parametrilor stabiliți în etapa de inițializare. Aici sunt implementate două funcții care monitorizează continu doi parametri importanți; tensiunea de alimentare, deoarece stația meteo este alimentată solar această funcție monitorizează permanent tensiunea de alimentare a sistemului iar dacă tensiunea scade sub nivelul setat la inițializare aprinde LED-ul de avertizare, a doua funcție implementată este aceea de monitorizare a temperaturii sistemului, când temperatura sistemului depășește pragul stabilit la inițializare pornește ventilatorul sitemului și se aprinde LED-ul de control ce indică funcționarea ventilatorului.

În figura nr.IV.1 este prezentată schema logică a software-ului implementat în acest proiect, unde putem vedea etapele enumerate anterior; START pentru alimentarea sistemului, void setup() pentru inițializare și void loop() rularea funcțiilor implementate în buclă.

Figura IV.1. Schema logică a sistemului software

IV.3. Implementarea software

Pentru partea de programare a fost utilizat sotware-ul Arduino IDE, programul fiind structurat în concordanță cu mediul de programare utilizat și începe cu includerea librăriilor, definirea pinilor utilizați, variabile și constante pentru apelarea diverselor funcții implementate.

IV.3.1. Inițializarea

Pentru ca aplicația să funcționeze este necesară includerea în program a librăriilor pentru modulele utilizate cum ar fi: librăria pentru LCD, librăria pentru modulul RTC, librăria pentru modulul infraroșu, libraria pentru senzorul DHT11, librăria pentru senzorul TMP102, librăria pentru senzorul BMP280 librăria pentru interfata serială. Definirea pinilor pentru senzorul de temperatură și umiditate, senzorul de lumină, senzor nivel apă, modul recepție infraroșu, LED-uri avertizare, senzor nivel tensiune, pentru ventilator, declararea variabilelor și a constantelor folosite, setarea adreselor pentru LCD și senzori.

IV.3.2. Etapa Setup()

Această etapă rulează o singură dată la initializare și în cadrul ei se declară tipul pinilor Output sau Input, se inițializează modulele, RTC unde poate fi reglată data și ora, LCD, BMP280, comunicarea serială și modul de recepție infraroșu.

IV.3.3 Etapa Loop()

În etapa Loop toate subprogramele create rulează în bucla infinită și apelează pe rând subrutinele de citire a senzorilor folosiți în aplicație, afișând mai apoi valorile pe display în momentul solicitării acestora prin subprogramul de comandă ce utilizează modulul de recepție infraroșu. După ce toate valorile sunt recepționate, programul trece la implementarea structurii logice, asftel în funcție de valorile apărute se iau deciziile necesare, în cazul subprogramului de monitorizare a temperaturii sistemului dacă temperatura depășește limita setată pornește ventilatorul și aprinde LED-ul, la fel și în cazul subprogramului de monitorizare a tensiunii de alimentare, dacă tensiunea este mai mică decât cea setată aprinde LED-ul de avertizare.

Subprogramele controlează funcționarea corectă a sistemelor implementate în cadrul acestui proiect.

IV.3.3.1. Subprogramul de monitorizare a temperaturii sistemului

În subprogramul double sensorRead(void) se citește senzorul de temperatură mai apoi se compară variabila temperatureMax cu temperatura citită, dacă temperatura este mai mare se acționează instalația de ventilație a sistemului în același timp se compară valoarea citită și cu variabila temperatureMin, dacă temperatura este mai mică decât temperatureMin oprește instalația de ventilație, în plus se pot afișa valorile pe LCD la cerere. În figura figura nr.IV.2 este prezentată schema logică a subprogramului de monitorizare a temperaturii sistemului.

Figura IV.2. Schema logică subprogram monitorizare temperatură

IV.3.3.2. Subprogramul de monitorizare a tensiunii de alimentare

Subprogramul începe cu citirea senzorului de tensiune mai apoi implementează algoritmul logic al programului, deoarece citirea se face pe intrarea analogică prima dată se realizează conversia valorilor din analogic la digital după care se compară cu valoarea prestabilită, dacă valoarea citită este mai mică decât cea stabilită se active LED-ul de avertizare, iar dacă valoarea citită este mai mare se oprește LED-ul, în plus se pot afișa valorile pe LCD la cerere. În figura figura nr.IV.3 este prezentată schema logică a subprogramului de monitorizare a tensiunii de alimentare.

Figura IV.3. Schema logică subprogram monitorizare tensiune alimentare

IV.3.3.3. Subprogramul de comandă pentru afișarea datelor pe LCD

Cu ajutorul acestui subprogram se pot afișa datele pe LCD utilizând telecomanda cu infraroșu, după inițializarea modului infraroșu se așteaptă comenzile utilizatorului, dacă modulul infraroșu primește comenzi se vor afișa datele solicitate pe display în caz contrar se revine în bucla principală așteptând o nouă comandă. În figura figura nr.IV.4 este prezentată schema logică a subprogramului de comandă pentru afișarea datelor.

Figura IV.4. Schema logică subprogram comandă afișare date

IV.4.Diagrama de secvență a aplicației

După alimentarea cu tensiune a microcontrolerului se execută în primul rând funcția de inițializare setup (), după executarea acestei funcții se intră în bucla principală unde se execută fără oprire următoarele funcții; apelarea de citire a senzorilor și apelarea subprogramele enumerate anterior în acest capitol, ultima funcție apelată este funcția de comandă a afișării datelor, dacă modulul infraroșu primește date atunci în funcție de informația solicitată activează afișarea datelor pe LCD, dacă modulul nu recepționează date atunci bucla se reaia de la început. Figura nr.IV.5.

Figura IV.5. Diagrama de secvență a aplicației

Capitolul V

IMPLEMENTAREA ȘI TESTAREA COMPONENTELOR DIN CADRUL SISTEMULUI

Implementarea și testarea componentelor hardware cât și a aplicațiilor utilizate în cadrul sistemului a fost realizată în două etape; în prima etapă s-a simulat în mediul virtual funcționarea fiecărui modul și aplicații ce urmau a fi implementate pentru a putea detecta și remedia mai ușor eventualele erori apărute. Simularea și testarea fiind realizate cu ajutorul software-ului “Proteus 8” prin intermediul căruia am realizat și proiectarea hardware.

În cea de-a doua etapă după finalizarea testărilor virtuale s-a început implementarea fizică a componentelor și interconectarea lor în cadrul sistemului, aceasta s-a realizat tot etapizat urmărind și testând în timp real fiecare modul și circuit implementat.

Construcția proiectului s-a realizat modular urmărind în general schema bloc a sistemului care conține următoarele blocuri(module):

Modulul sau blocul de alimentare

Modulul sau blocul de achiziție al datelor (în principiu senzori)

Modulul sau blocul de procesare a datelor (interfațarea cu µC Arduino UNO)

Modulul de comandă și control (transmisie și recepție IR)

Modulul de afișarea a datelor solicitate (display LCD)

V.1. Implementarea și testarea modulului (blocului) de alimentare

Utilizând schema prezentată în figura nr.V.1. a fost implementată și testată partea de alimentare a sistemului ce utilizează energia solară, testele au avut ca scop verificarea autonomiei acumulatorului și de a testa panourile fotovoltaice în privința furnizării energiei necesare funcționării stației și încărcării acumulatorului.

Pentru a monitoriza încontinuu tensiunea de alimentare s-a utilizat și o aplicație în cadrul proiectului ce monitorizează și afișează la cerere pe LCD tensiunea de alimentare, figura nr.V.2, totodată având și un LED de avertizare în cazul în care tensiunea din circuit este critică.

Acest modul este autonom el furnizând cu ajutorul componentelor și a panourilor solare o tensiune de 9V DC utilizată la alimentarea microcontrolerului, tensiunea măsurată pe circuit este constantă și are valoarea de 5V DC fiind controlată de microcontroler.

Figura V.1. Circuitul de alimentare solar Figura V.2. Afișarea tensiunii de alimentare

V.2. Implementarea și testarea modulului pentru achiziția datelor (senzori)

În această etapă au fost implementați și testați toți senzorii utilizați în acest proiect, testarea primară s-a făcut în mediul virtual per ansamblu simulând diverse condiții meteo prin ajustarea parametrilor monitorizați, figura nr.V.3, iar după efectuarea testelor virtuale s-a trecut la următoarea etapă cea de testare în mod real a componentelor utilizate după montarea lor pe stația meteo, au fost urmărite eventualele neconcordanțe între mediul virtual și cel real cât și apariția eventualelor erori pe perioada funcționării, figura nr.V.4.

Figura V.3. Simulare achiziție date senzori

Figura V.4. Testarea senzorilor după implementare

V.3. Implementarea și testarea modulului de procesare a datelor (µC Arduino UNO)

În această etapă după montarea echipamentelor și realizarea conexiunilor prezentate în figura nr.V.5, s-a testat efectiv funcționarea microcontrolerului și a programului implementat pentru a vedea dacă simulările efectuate în mediul virtual coincid cu cele reale.

Rezultatul testelor poate fi observat în figura nr.V.4 prezentată anterior și confirmă faptul că atât implementarea hardware cât și cea software a fost realizată cu succes conform cerințelor stabilite în primul capitol.

Figura V.5. Finalizarea conexiunilor în vederea testării în timp real

V.4. Implementarea și testarea modulului de comandă (transmisie și recepție IR)

Am ales această variantă de comandă și control a sistemului pentru a facilita accesul la informație cât mai ușor alocând butonelor unei telecomenzi obișnuite diverse funcții, în general aceasta fiind utilizată pentru afișarea datelor pe display.

Testarea s-a realizat prin îcercări repetate utilizând un program de decodare a telecomenzi oferit de platforma software “Arduino IDE” pentru a obține codurilor necesare implementării în programul stației meteo a funcțiilor dorite.

În figura nr.V.6 este prezentată modalitatea prin care a fost decodată telecomanda utilizată și se pot vedea codurile generate pe monitorul serial al interfeței arduino IDE, iar în figura nr.V.7 se testează efectiv funcționarea telecomenzii în cadrul sistemului.

Figura V.6. Decodarea telecomenzi utilizate în cadrul proiectului

Figura V.7. Testarea telecomenzii

V.5. Implementarea și testarea modulului pentru afișarea datelor solicitate

Pentru implementarea modulului de afișare a datelor a fost aleasă varianta optimă ținându-se cont și de numărul de conexiuni limitate oferite de microcontrolerul utilizat în acest proiect, deoarece în cadrul acestui proiect au fost utilizați majoritatea pinilor pentru diverse funcții, am ales să implementez pentru afișarea datelor pe LCD o variantă simplă și economică utilizând un controler pentru display prezentat în figura nr.V.8 care comunică cu microcontrolerul prin protocolul serial I2C, astfel în loc să se conecteze displayul direct utilizând cel puțin 7 pini ai lui “Arduino” sunt utilizați doar 2 pini (SDA și SCL) pentru transmiterea datelor către display. Interfațarea între modul și display (figura nr.V.9) este facilitată de faptul că modulul I2C are 16 pini ce se conectează direct la cele 16 terminale ale LCD-ului conversia fiind realizată automat de către modul.

Testarea s-a realizat utilizând funcțiile programului stației meteo pentru afișarea datelor achiziționate de la senzori, după cum se observă și în figura nr.V.4. datele obținute sunt afișate corect de aici rezultând faptul că, implementarea aleasă în cadrul acestui proiect a fost varianta optimă și corectă.

Figura V.8. Implementarea modulului pentru afișarea datelor

Figura V.9. Interfațarea modulului cu display-ul

Capitolul VI

CONCLUZII

În urma monitorizării constante a valorilor meteo pe un interval de șapte zile (figura nr.VI.1) și după cum rezultă din graficele comparative generate și prezentate în figurile nr. VI.2, VI.3 și VI.4, proiectul își confirmă utilitatea și scopul pentru care a fost creat și anume acela de a oferi date despre starea vremii cât mai precise în zonele rurale sau îndepărtate acolo unde aceste informații nu pot fi accesate în mod convențional (internet, televiziune, telefonie, etc) sau luând în considerare faptul că datele furnizate de stațiile meteo naționale nu coincid întodeauna cu realitatea din zona în care te afli.

Figura VI.1 Tabel monitorizare valori meteo

Figura VI.2 Grafic comparativ temperaturi monitorizare

Figura VI.3 Grafic comparativ presiune atmosferică monitorizată

Figura VI.4 Grafic comparativ umiditate atmosferică monitorizată

După cum se observă în graficele alăturate valorile meteo fluctuează în raport cu locația în care te găsești, măsurătorile au fost efectuate la o distanță de aproximativ 5 Km față de stația meteo locală iar valorile înregistrate nu au coincis cu cele prezentate de site-urile web sau chiar de stația locală, totuși valorile au fost apropiate în acest caz deoarece distanța dintre cele două puncte de observație a fost mică în comparație cu zona monitorizată de către stația meteo locală care oferă predicții despre starea vremii pentru un întreg județ sau chiar pentru o întreagă regiune.

Stația meteo concepută și prezentată în acest proiect se vrea a fi un instrument util, portabil și autonom care să poată veni în ajutorul celor care au nevoie să știe date despre starea vremii pentru locația în care se află în acel moment.

Modul de operare al stației meteo este facil, intuitiv și interactiv iar datorită implementării telecomenzi clasice cu transmisie în spectrul infraroșu utilizată pentru a afișa datele solicitate pe display, fac din aceasta o platformă “user friendly” dedicată tuturor fără a necesita conoștiințe tehnice de specialitate.

Utilizarea energiei solare pentru alimentarea stației meteo îi conferă acesteia portabilitatea și autonomia necesară funcționării pe perioade îndelungate fară a avea nevoie de o sursă de enegie externă contribuind astfel și la protejarea mediului încojurător.

Platforma hardware și software fiabilă, versatilă și recofigurabilă, datorită mediului de dezvoltare și programare facil oferit de “Arduino IDE” și a microcontrolerului “Arduino UNO (Atmega 328p)” utilizat în cadrul acestui proiect, fac din acesta un sistem adaptabil și flexibil facilitând astfel extinderea sau upgradarea lui în funcție de cerințe în orice moment.

Anexa 1

În rândurile de mai jos este prezentat codul utilizat pentru programarea microcontrolerului Arduino UNO, programul a fost realizat cu ajutorul software-ului de programare Arduino IDE.

Codul sursă conține și comentarii făcute în momentul scrierii acestuia pentru a putea fi mai ușor de înțeles în ceea ce privește funcționalitatea și derularea lui.

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

//Statie meteo automată alimentată cu energie solară

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

//Cod programare Arduino Uno R3 (atmega328p)

//Achiziție de date folosind diverși senzori

//Afișarea datelor pe un display monocrom 16×2

//Schimbarea cadrelor afișate cu telecomanda IR folosind modulul IR

//============================================================== //Includerea librăriilor specifice programării Arduino //==============================================================

#include <stdio.h> //librărie standard programare C

#include <Wire.h> //librărie comunicare serială I2C(SDA, SCL)

#include <LiquidCrystal_PCF8574.h> //librărie lcd

#include <DS3231.h> //librărie modul RTC(real time clock)

#include <dht.h> //librărie senzor DHT11(temperatura și umiditate)

#include <Adafruit_Sensor.h> //librărie Adafruit

#include <Adafruit_BMP280.h>//librărie senzor presiune atmosferică BMP280(barometru)

#include <IRremote.h> //librărie modul IR pentru telecomandă

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

//Alocare adrese în memorie pentru senzorii digitali, lcd și modul RTC

//Definire conexiuni pentru module și senzori(pini analogici și digitali)

//Definire variabile și constante pentru inițializarea modulelor și a senzorilor

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

LiquidCrystal_PCF8574 lcd(0x3F);

Adafruit_BMP280 bmp280;

#define BMP280_I2C_ADDRESS 0x76

#define TMP102_I2C_ADDRESS 0x48

DS3231 rtc(SDA, SCL);

dht DHT;

int led_pin4 = 2; //alocare pin digital led avertizare baterie descărcată

int dht_dpin = 4; //alocare pin digital pentru senzor DHT11

int led_pin1 = 8; //alocare pin digital led avertizare temperatură ridicată

int led_pin3 = 9; //alocare pin digital pentru led pornire ventilator

int fan_pin = 10; //alocare pin digital pwm pentru ventilator

int led_pin2 = 13; //alocare pin digital pentru led alimentare

int LdrPin = A1; //alocare pin analogic pentru senzor lumină

int voltageSensorPin = A2; //alocare pin analogic pentru voltmetru monitorizare tensiune alimentare

int waterSensorPin = A0; //alocare pin analogic pentru senzor nivel apă

const int waterSensor = 0; //setare variabilă senzor apă

int waterValue = 0; //variabilă valoare măsurată senzor apă

int mmwaterValue = 0; //valoare nivel apă exprimată în mm

int temperatureMin = 27; //setare temperatură pornire ventilator

int temperatureMax = 47; //setare temperatură maximă unde turația ventilatorului este la 100%

int fanSpeed; //viteză ventilator

int fanLCD; //afișare valoare ventilator pe lcd

const int RECV_PIN = 3; //alocare pin digital pentru modul comandă IR

IRrecv irrecv(RECV_PIN); //variabilă pentru IR

decode_results results; //decodare recepție date telecomandă

void(* resetFunc)(void) = 0; //se declara funcția de reset a programului la adresa"0"

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

//Inițializare și citire date senzor temperatură TMP102

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

double sensorRead(void)

{

//temp reține 2 octeți de date returnați de senzorul TMP102

uint8_t temp[2];

//tempc reține combinația modificată a biților

int16_t tempc;

//începerea transmisiei către adresa 0x48 alocată pentru senzor

Wire.beginTransmission(0x48);

//selectare adresă registru temperatură 0x00

Wire.write(0x00);

//eliberare magistrală I2C

Wire.endTransmission();

//întârziere pentru conversia datelor

delay(50);

//solicitare date temperatură

Wire.requestFrom(0x48, 2);

//dacă cei 2 octeți sunt returnați cu succes

if (2 <= Wire.available())

{

//se citesc datele

temp[0] = Wire.read();

temp[1] = Wire.read();

//se ignora 4 biți mai puțini senificativi al celui de al doilea octet

temp[1] = temp[1] >> 4;

//se combina biți rămași pentru a crea un număr binar format din 12 biți

tempc = ((temp[0] << 4) | temp[1]);

//returnează conversia în grade celsius (rezoluție 0.0625C conform data sheet producător)

return tempc * 0.0625;

}

}

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

//Setarea componentelor din cadrul sistemului, intrări, ieșiri și inițializări

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

void setup()

{

Serial.begin(9600);

Wire.begin();

rtc.begin();

//următoarele linii de cod pot fi activate pentru reglarea RTC(oră, dată, zi)

//rtc.setDOW(FRIDAY); //setare zi

//rtc.setTime(19, 46, 0); //setare oră (format 24hr)

//rtc.setDate(05, 04, 2019); //setare dată

irrecv.enableIRIn(); //inițializare modul IR

lcd.begin(16, 2); //inițializare lcd

lcd.setBacklight(255); //setare luminozitate lcd(maxim)

Wire.beginTransmission(0x48); //specifică adresa din memorie la care începe transmisia I2C

bmp280.begin(BMP280_I2C_ADDRESS); //inițializare senzor presiune BMP280

pinMode(RECV_PIN, INPUT); //setare pin modul IR ca intrare

pinMode(fan_pin, OUTPUT); //setare pin ventilator ca ieșire pwm

pinMode(dht_dpin, INPUT); //setare pin senzor temperatură și umiditate DHT11 ca intrare

pinMode(led_pin1, OUTPUT); //setare pin led avertizare TEMP max ca ieșire

pinMode(led_pin2, OUTPUT); //setare pin led alimentare ca ieșire

digitalWrite(led_pin2, HIGH); //setare mod activat led alimentare la pornire

pinMode(led_pin3, OUTPUT); //setare pin led indicator ventilator pornit ca ieșire

pinMode(led_pin4, OUTPUT); //setare pin led avertizare tensiune scăzută ca ieșire

digitalWrite(led_pin4, LOW); //setare mod dezactivat led avertizare tensiune bat.

}

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

//Rulare program principal în buclă//

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

void loop()

{

//––––––––––––––––-

//Afișare mesaj întâmpinare

//––––––––––––––––-

lcd.setCursor(0, 0);

lcd.print("- Statie Meteo -");

lcd.setCursor(1, 0);

lcd.print("Ora: ");

lcd.print(rtc.getTimeStr());

//––––––––––––––––––––––––––––––––––

//Automatizare pornire ventilator răcire sistem în funcție de temperatura setată

//––––––––––––––––––––––––––––––––––

double temperature = sensorRead(); //se citesc datele de pe senzorul de temperatură TMP102, apelare funcție

if (temperature < temperatureMin) { //dacă temperatura este mai mică decât temperatura minimă setată

fanSpeed = 0; //ventilatorul nu pornește

digitalWrite(fan_pin, LOW); //pwm dezactivat

}

if ((temperature >= temperatureMin) && (temperature <= temperatureMax)) { //dacă temperatura este mai mare sau egală cu temperatura minimă setată

fanSpeed = map(temperature, temperatureMin, temperatureMax, 100, 255); //pwm activat, ventilatorul pornește conform mapării

fanLCD = map(temperature, temperatureMin, temperatureMax, 0, 100); //afișare procent utilizare ventilator

analogWrite(fan_pin, fanSpeed); //ventilatorul se rotește la viteza comandată

}

if (temperature > temperatureMax) { //dacă temperatura este mai mare decât TEMP max

digitalWrite(led_pin1, HIGH); //activează led avertizare

}

else {

digitalWrite(led_pin1, LOW); //altfel ledul este oprit

}

if (temperature >= temperatureMin) { //dacă temp. este mai mare sau egală cu TEMP min

digitalWrite(led_pin3, HIGH); //activează led pornire ventilator

}

else {

digitalWrite(led_pin3, LOW); //altfel ledul este oprit

}

//–––––––––––-

//Monitorizare tensiune alimentare

//–––––––––––-

int voltageSensorValue = analogRead(A2); //se citesc valori de pe pinul analogic A2

float voltage = voltageSensorValue * (10.04 / 1023.00); //se convertesc valorile

if (voltage <= 4.50) //setare voltaj avertizare baterie descărcată

{

digitalWrite(led_pin4, HIGH); //activare led avertizare

}

else {

digitalWrite(led_pin4, LOW); //led avertizare dezactivat, dacă tensiunea este (5V)

}

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

//Afișare date senzori și RTC pe lcd prin intermediul modulului IR și a telecomenzii IR //================================================================

//–––––––––––––––

//Citire și afișare date RTC(real time clock)

//–––––––––––––––

if (irrecv.decode(&results)) //dacă modulul IR primește date

{

if (results.value == 0x807F807F) //dacă rezultatul este "0" se afișeaza ora și data

{

lcd.clear(); //ștergere date anterioare de pe lcd

lcd.setCursor(1, 0); //se afișează datele

lcd.print("Ora: ");

lcd.print(rtc.getTimeStr());

lcd.setCursor(0, 1);

lcd.print("Data: ");

lcd.print(rtc.getDateStr());

delay(4000); //întârziere 4000 ms pentru vizualizarea datelor afișate

lcd.clear(); //se șterg datele de pe lcd

delay (50); //întârziere 50 ms pentru revenire la programul inițial

irrecv.resume(); //reinițializare modul IR, se așteaptă următoarea comandă

}

}

//––––––––––––––––––––

//Citire și afișare date senzor de temperatură intern TMP102

//se repetă codul de automatizare

//––––––––––––––––––––

if (irrecv.decode(&results)) //dacă modulul IR primește date

{

if (results.value == 0x807F728D) //dacă rezultatul este "1" se afișează TEMP sistem și procent utilizare ventilator

{

lcd.clear(); //ștergere date anterioare de pe lcd

double temperature = sensorRead();

if (temperature < temperatureMin) {

fanSpeed = 0;

digitalWrite(fan_pin, LOW);

}

if ((temperature >= temperatureMin) && (temperature <= temperatureMax)) {

fanSpeed = map(temperature, temperatureMin, temperatureMax, 100, 255);

fanLCD = map(temperature, temperatureMin, temperatureMax, 0, 100);

analogWrite(fan_pin, fanSpeed);

}

if (temperature > temperatureMax) {

digitalWrite(led_pin1, HIGH);

}

else {

digitalWrite(led_pin1, LOW);

}

if (temperature >= temperatureMin) {

digitalWrite(led_pin3, HIGH);

}

else {

digitalWrite(led_pin3, LOW);

}

//afișare date solicitate

lcd.setCursor(0, 0);

lcd.print("Temp.sys:");

lcd.print(temperature); //afișare temperatură

lcd.print(char(0xB0)); //afișare unitate de măsură(" ")

lcd.print("C ");

lcd.setCursor(0, 1);

lcd.print("Tur.vent:"); //afișare procentaj utilizare ventilator

lcd.print(fanLCD);

lcd.print("% ");

delay(4000); //întârziere 4000 ms pentru vizualizarea datelor afișate

lcd.clear(); //se șterg datele de pe lcd

delay(50); //întârziere 50 ms pentru revenire la programul inițial

irrecv.resume(); //reinițializare modul IR, se așteaptă următoarea comandă

}

}

//––––––––––––––––––––––––

//Citire și afișare date senzor extern de temperatură și umiditate DHT11

//––––––––––––––––––––––––

if (irrecv.decode(&results)) //dacă modulul IR primește date

{

if (results.value == 0x807FB04F) //dacă rezultatul este "2" se afișează temperatura externă și umiditatea

{

lcd.clear(); //ștergere date anterioare de pe lcd

DHT.read11(dht_dpin); //citire date senzor DHT11

lcd.setCursor(0, 0);

lcd.print("Temp.ext:");

lcd.print(DHT.temperature); //afișare temperatură externă

lcd.print(char(0xB0)); //afișare unitate de măsură(" ")

lcd.print("C");

lcd.setCursor(0, 1);

lcd.print("Umid.aer:");

//Serial.print("Umid:");

lcd.print(DHT.humidity, 1); //afișare umiditate

lcd.print("%");

delay(4000); //întârziere 4000 ms pentru vizualizarea datelor afișate

lcd.clear(); //se șterg datele de pe lcd

delay(50); //întârziere 50 ms pentru revenire la programul inițial

irrecv.resume(); //reinițializare modul IR, se așteaptă următoarea comandă

}

}

//––––––––––––––––

//Citire și afișare date senzor presiune BMP280

//––––––––––––––––

if (irrecv.decode(&results)) //dacă modulul IR primește date

{

if (results.value == 0x807F30CF) //dacă rezultatul este "3" se afișează presiunea atmosferică

{

lcd.clear(); //ștergere date anterioare de pe lcd

float pressure = bmp280.readPressure(); //citire date senzor presiune

lcd.setCursor(0, 0);

lcd.print("Prs.Atmosferica:");

lcd.setCursor(4, 1);

lcd.print(pressure/99,00); //afișare presiune atmosferică

lcd.print(" hPa");

delay(4000); //întârziere 4000 ms pentru vizualizarea datelor afișate

lcd.clear(); //se șterg datele de pe lcd

delay(50); //întârziere 50 ms pentru revenire la programul inițial

irrecv.resume(); //reinițializare modul IR, se așteaptă următoarea comandă

}

}

//––––––––––––––

//Citire și afișare date senzor de lumină

//––––––––––––––

if (irrecv.decode(&results)) //dacă modulul IR primește date

{

if (results.value == 0x807F52AD) //dacă rezultatul este "4" se afișează nivelul de lumină

{

lcd.clear(); //ștergere date anterioare de pe lcd

lcd.setCursor(0, 0);

lcd.print("Luminozitate:");

int LdrValue = analogRead(A1); //se citesc valori de pe pinul analogic A1

double dV = LdrValue;

double le = (dV / 1023.00) * 100; //se convertesc valorile în procente

int level = le;

lcd.print(level);

lcd.print("%");

lcd.setCursor(4, 1);

//se afișează datele obținute conform nivelelor setate

if ((level >= 0) && (level <= 5))

{

lcd.print("Intuneric!");

}

else if ((level > 5) && (level <= 10))

{

lcd.setCursor(4, 1);

lcd.print("Intunecat!");

}

else if ((level > 10) && (level <= 30))

{

lcd.setCursor(4, 1);

lcd.print("Innorat!");

}

else if ((level > 30) && (level <= 70))

{

lcd.setCursor(4, 1);

lcd.print("Luminat!");

}

else

{

lcd.setCursor(4, 1);

lcd.print("Insorit!");

}

delay(4000); //întârziere 4000 ms pentru vizualizarea datelor afișate

lcd.clear(); //se șterg datele de pe lcd

delay(50); //întârziere 50 ms pentru revenire la programul inițial

irrecv.resume(); //reinițializare modul IR, se așteaptă următoarea comandă

}

}

//––––––––––––––

//Citire și afișare date senzor nivel apă

//––––––––––––––

if (irrecv.decode(&results)) //dacă modulul IR primește date

{

if (results.value == 0x807F906F) //dacă rezultatul este "5" se afișează nivelul de apă

{

lcd.clear(); //ștergere date anterioare de pe lcd

lcd.setCursor(0, 0);

lcd.print(" Nivel Apa (mm) :");

waterValue = analogRead(waterSensor); //se citesc valori de pe pinul analogic A0

lcd.setCursor(7, 1);

mmwaterValue = map(waterValue, 0.00, 1023.00, 0, 36); //se mapează și se convertesc valorile în mm

lcd.print(mmwaterValue); //afișare nivel apă în mm

delay(4000); //întârziere 4000 ms pentru vizualizarea datelor afișate

lcd.clear(); //se șterg datele de pe lcd

delay(50); //întârziere 50 ms pentru revenire la programul inițial

irrecv.resume(); //reinițializare modul IR, se așteaptă următoarea comandă

}

}

//––––––––––

//Afișare tensiune alimentare

//––––––––––

if (irrecv.decode(&results)) //dacă modulul IR primește date

{

if (results.value == 0x807F10EF) //dacă rezultatul este "6" se afișează tensiunea de alimentare

{

lcd.clear(); //ștergere date anterioare de pe lcd

lcd.setCursor(2, 0);

lcd.print("Stare Baterie ");

int voltageSensorValue = analogRead(A2); //se citesc valori de pe pinul analogic A2

float voltage = voltageSensorValue * (10.04 / 1023.00); //se convertesc valorile în volți reali

lcd.setCursor(0, 1);

lcd.print("Tensiune= ");

lcd.print(voltage); //afișare tensiune pe lcd

lcd.print(" V");

if (voltage <= 4.50) //setare voltaj avertizare baterie descărcată

{

digitalWrite(led_pin4, HIGH); //activare led avertizare

}

else {

digitalWrite(led_pin4, LOW); //led avertizare dezactivat, dacă tensiunea este în parametri(5V)

}

delay(4000); //întârziere 4000 ms pentru vizualizarea datelor afișate

lcd.clear(); //se șterg datele de pe lcd

delay(50); //întârziere 50 ms pentru revenire la programul inițial

irrecv.resume(); //reinițializare modul IR, se așteaptă următoarea comandă

}

}

//–––––––––––––––––––––––––––

//Afișarea datelor în mod succesiv(tip prezentare)interval schimbare cadre 5000 ms

//Nu sunt comentate liniile de cod deoarece se repetă

//–––––––––––––––––––––––––––-

if (irrecv.decode(&results)) //dacă modulul IR primește date

{

if (results.value == 0x807FC837) //dacă rezultatul este "OK" se afișează modul de prezentare

{

lcd.clear();

lcd.setCursor(1, 0);

lcd.print("Ora: ");

lcd.print(rtc.getTimeStr());

lcd.setCursor(0, 1);

lcd.print("Data: ");

lcd.print(rtc.getDateStr());

delay(5000);

lcd.clear();

delay (50);

lcd.clear();

double temperature = sensorRead();

if (temperature < temperatureMin) {

fanSpeed = 0;

digitalWrite(fan_pin, LOW);

}

if ((temperature >= temperatureMin) && (temperature <= temperatureMax)) {

fanSpeed = map(temperature, temperatureMin, temperatureMax, 100, 255);

fanLCD = map(temperature, temperatureMin, temperatureMax, 0, 100);

analogWrite(fan_pin, fanSpeed);

}

if (temperature > temperatureMax) {

digitalWrite(led_pin1, HIGH);

}

else {

digitalWrite(led_pin1, LOW);

}

if (temperature >= temperatureMin) {

digitalWrite(led_pin3, HIGH);

}

else {

digitalWrite(led_pin3, LOW);

}

lcd.setCursor(0, 0);

lcd.print("Temp.sys:");

lcd.print(temperature);

lcd.print(char(0xB0));

lcd.print("C ");

lcd.setCursor(0, 1);

lcd.print("Tur.vent:");

lcd.print(fanLCD);

lcd.print("% ");

delay(5000);

lcd.clear();

delay(50);

lcd.clear();

DHT.read11(dht_dpin);

lcd.setCursor(0, 0);

lcd.print("Temp ext:");

lcd.print(DHT.temperature);

lcd.print(char(0xB0));

lcd.print("C");

lcd.setCursor(0, 1);

lcd.print("Umid aer:");

//Serial.print("Umid:");

lcd.print(DHT.humidity, 1);

//Serial.print(DHT.humidity,1);

lcd.print("%");

delay(5000);

lcd.clear();

delay(50);

lcd.clear();

float pressure = bmp280.readPressure();

lcd.setCursor(0, 0);

lcd.print("Prs.Atmosferica:");

lcd.setCursor(4, 1);

lcd.print(pressure/99,00);

lcd.print(" hPa");

delay(5000);

lcd.clear();

delay(50);

lcd.clear();

lcd.setCursor(0, 0);

lcd.print("Luminozitate:");

int LdrValue = analogRead(A1);

double dV = LdrValue;

double le = (dV / 1023.00) * 100;

int level = le;

lcd.print(level);

lcd.print("%");

lcd.setCursor(4, 1);

if ((level >= 0) && (level <= 5))

{

lcd.print("Intuneric!");

}

else if ((level > 5) && (level <= 10))

{

lcd.setCursor(4, 1);

lcd.print("Intunecat!");

}

else if ((level > 10) && (level <= 30))

{

lcd.setCursor(4, 1);

lcd.print("Innorat!");

}

else if ((level > 30) && (level <= 70))

{

lcd.setCursor(4, 1);

lcd.print("Luminat!");

}

else

{

lcd.setCursor(4, 1);

lcd.print("Insorit!");

}

delay(5000);

lcd.clear();

delay(50);

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(" Nivel Apa (mm) :");

waterValue = analogRead(waterSensor);

lcd.setCursor(7, 1);

mmwaterValue = map(waterValue, 0.00, 1023.00, 0, 36);

lcd.print(mmwaterValue);

delay(5000);

lcd.clear();

delay(50);

lcd.clear();

lcd.setCursor(2, 0);

lcd.print("Stare Baterie ");

int voltageSensorValue = analogRead(A2);

float voltage = voltageSensorValue * (10.04 / 1023.00);

lcd.setCursor(0, 1);

lcd.print("Tensiune= ");

lcd.print(voltage);

lcd.print(" V");

if (voltage <= 4.50)

{

digitalWrite(led_pin4, HIGH);

}

else {

digitalWrite(led_pin4, LOW);

}

delay(5000);

lcd.clear();

delay(50);

//––––––––––

//Mesaj încheiere prezentare

//––––––––––

lcd.clear(); //clear the LCD

lcd.setCursor(0, 0);

lcd.setCursor(2, 0);

lcd.print("V");

delay(50);

lcd.setCursor(3, 0);

lcd.print("a");

delay(50);

lcd.setCursor(5, 0);

lcd.print("m");

delay(50);

lcd.setCursor(6, 0);

lcd.print("u");

delay(50);

lcd.setCursor(7, 0);

lcd.print("l");

delay(50);

lcd.setCursor(8, 0);

lcd.print("t");

delay(50);

lcd.setCursor(9, 0);

lcd.print("u");

delay(50);

lcd.setCursor(10, 0);

lcd.print("m");

delay(50);

lcd.setCursor(11, 0);

lcd.print("e");

delay(50);

lcd.setCursor(12, 0);

lcd.print("s");

delay(50);

lcd.setCursor(13, 0);

lcd.print("c");

delay(50);

lcd.setCursor(1, 1);

lcd.print("p");

delay(50);

lcd.setCursor(2, 1);

lcd.print("e");

delay(50);

lcd.setCursor(3, 1);

lcd.print("n");

delay(50);

lcd.setCursor(4, 1);

lcd.print("t");

delay(50);

lcd.setCursor(5, 1);

lcd.print("r");

delay(50);

lcd.setCursor(6, 1);

lcd.print("u");

delay(50);

lcd.setCursor(8, 1);

lcd.print("a");

delay(50);

lcd.setCursor(9, 1);

lcd.print("t");

delay(50);

lcd.setCursor(10, 1);

lcd.print("e");

delay(50);

lcd.setCursor(11, 1);

lcd.print("n");

delay(50);

lcd.setCursor(12, 1);

lcd.print("t");

delay(50);

lcd.setCursor(13, 1);

lcd.print("i");

delay(50);

lcd.setCursor(14, 1);

lcd.print("e");

delay(5000); //întârziere 5000 ms pentru vizualizarea datelor afișate

lcd.clear(); //se șterg datele de pe lcd

delay(50); //întârziere 50 ms pentru revenire la programul inițial

irrecv.resume(); //reinițializare modul IR, se așteaptă următoarea comandă

}

}

//–––––––––––––––

//Resetare program la adresa "0"

//–––––––––––––––

if (irrecv.decode(&results)) //dacă modulul IR primește date

{

if (results.value == 0x807F42BD) //dacă rezultatul este "back" se reseteaza

{

resetFunc();

}

{

irrecv.resume(); //reinițializare modul IR, se așteaptă următoarea comandă

}

}

}

Anexa 2

Fotografii realizate pe parcursul ansamblării componentelor

Figura A2.1. Structura stației meteo

Figura A2.2. Circuitul de alimentare solar

Figura A2.3. Circuitul de comandă și control al ventilatorului

Figura A2.4. Montaj circuit senzor lumină

Figura A2.5. Montaj circuit senzor temperatură și umiditate

Figura A2.6. Testare modul comandă cu infraroșu

Figura A2.7. Testarea finală înainte de montaj

Figura A2.8. Proiect finalizat

Similar Posts