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
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: FUNDAȚIA PENTRU CULTURĂ ȘI ÎNVĂȚĂMÂNT IOAN SLAVICI TIMIȘOARA [303067] (ID: 303067)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
