Sistem de Achizitie Si Vizualizare Pentru Parametrii de Mediu Implementat cu Microcontroler Atmega 2560
Listă Figuri
Figura 2.1 Sistem architectural al stației meteo [20] 5
Figura 2.2 Colectarea datelor[20] 6
Figura 3.1 Microcontroler ATMega 2560[11] 8
Figura 3.2 Arduino Mega 2560 – Diagramǎ Pini [10] 10
Figura 3.3 Schema Bloc a microcontroler-ului ATMega 2560[3] 11
Figura 3.4 Arduino Mega [11] 14
Figura 3.5 Arduino Mega2560 Rev3[11] 15
Figura 4.1 Clipirea unui led [13] 20
Figura 4.2 Arduino Mega 2560 Fata / Spate[7] 23
Figura 4.3 Pinii de tensiune și alimentarea pentru Arduino Mega2560 25
Figura 4.4 Arduino Ethernet Shield 26
Figura 4.5 Schemă bloc Ethernet Shield 27
Figura 4.6 Weather Shield [16] 28
Figura 4.7 Schema bloc-Weather Shield [16] 29
Figura 4.8 Structuri ale sistemelor senzoriale [24]
Figura 4.9 Senzorul de umiditate/temperaturǎ [15] 30
Figura 4.10 Senzor de altitudine/presiune [15] 31
Figura 5.1 Legǎtura dintre XAMPP MySQL și Arduino 36
Figura 5.2 Kit-ul XAMPP 37
Figura 5.3 Realizarea Bazei de Date 37
Figura 5.4 Port Arduino Mega 2560 38
Figura 5.5 Conexiune Arduion-Server 39
Figura 5.6 Grafic parametri mǎsurați 40
Figura 5.7 Grafic și Tabel din Sǎptǎmâna curentǎ 41
Figura 5.8 Selectarea datelor 41
Figura 5.9 Realizarea practică 42
Figura 5.10 Magistrală Serială Universală 43
Figura 5.11 Cablu Ethernet 43
Figura 5.12 Temperatura pe o săptămână 44
Figura 5.13 Valorile limită ale parametrilor 44
Figura 5.14 Evoluția temperaturii în 23.06.2015 pentru o perioadă de timp stabilită 45
Figura 5.15 Evoluția temperaturii în 24.06.2015 pentru o perioadă de timp stabilită 45
Figura 5.16 Evoluția temperaturii în 26.06.2015 pentru o perioadă de timp stabilită 46
Figura 5.17 Evaluarea aparteneței seturilor de date temperatura-umiditate la o aceeași populație statstică definită prin raporturile dintre variabile cu ajutorul variabilei Hotelling T2–Runda 1 49
Figura 5.18 Evaluarea aparteneței seturilor de date temperatura-umiditate la o aceeași populație statstică definită prin raporturile dintre variabile cu ajutorul variabilei Hotelling T2–Runda 2 50
Figura 5.19 . Evaluarea aparteneței seturilor de date temperatura-umiditate la o aceeași populație statstică definită prin raporturile dintre variabile cu ajutorul variabilei Hotelling T2– Runda 4 50
Figura 5.20 Seturile de date temperatură – umiditate rǎmase dupǎ elimiarea datelor afectate de erori excesive. 51
Figura 5.21 Dependența funcționalǎ temperature-umiditate și curbe de regresie: a-liniarǎ, b- polinomialǎ de gradul 2, 52
Listă Tabele
Tabel 3.1 Comparație între diferite procesoare[9] 13
Tabel 4.1Caracteristici 25
Abrevieri
[Ref] Citat referința cu eticheta [Ref] din lista bibliografică
A Amper
AC Alternative current (current alternative)
CAD Analog-to-digital converter (convertor analog-digital)
UAL Arithmetic Logic Unit (unitatea aritmetica logica)
B Bit
B Byte (octet)
CISC Complex instruction set computer (set complex de intrucțiuni)
CLK Clock (ceas)
CMOS Complementary metal–oxide–semiconductor (semiconductor metal oxid complementar)
CPU Central processing unit (unitatea de procesare centrală)
DC Direct current (curent continuu)
Db Decibel
DFU Device Firmware Upgrade (upgradarea firmwareului dispozitivului)
EEPROM Electrically Erasable programmable read only memory (memorie de programcare poate fi doar citită și ștearsă electric)
FTDI Future Technology Devices International(tehnologia dispozitivelor de viitor internațională)
F Farad
GND Ground(masă)
Hz Hertz
IDLE Presupune ca mașinăria să nu facă nimic, să nu lucreze
IN INPUT(intrare)
I2C Inter-Integrated Circuit ( ciruit inter-intergrat)
IDE Integrated development environment(mediu de dezvoltare integrat)
ICSP In-Circuit Serial Programming(programare serială în circuit)
LSB Least significant bit(cel mai puțin semnificativ bit)
LED Light-emitting diode(diodă emițătoare de lumină)
MSB Most significant bit(cel mai semnificativ bit)
MOSI Master Output, Slave Input (ieșire Master,intrare Slave)
MISO Master Input, Slave Output (intrare Master,iesșire Slave)
MIPS Million instructions per second(milioane de instrucțiuni pe secundă)
OUT Output(ieșire)
PWM Pulse-width modulation
RST Reset(restartare)
SS Slave-select(selectarea Slaveului)
S Secunde
SRAM Static random-access memory(memorie statică cu acces aleatoriu)
TTL Time to live(timpul cât trăiește)
USART Universal asynchronous receiver/transmitter(primire/transmitere universal asincronă)
SPI Serial Peripheral Interface Bus(magistrală serială periferică)
USB Universal Serial Bus (magistrală serială universală)
V Volts
VCC Power supply pins(pini de alimentare)
Introducere
În lucrarea de față s-a abordat tema „Sistem de achiziție și vizualizare pentru parametrii de mediu implementat cu microcontroler ATMEGA 2560” datoritǎ faptului cǎmeteorologia este o științǎ foarte importantǎ și își gǎsește aplicații în extrem de multe domeniile de activitate.
În general, stațiile meteo sunt gândite și realizate în așa fel încât dupăextragerea datelor, meteorologii trebuie să colecteze datele și să le analizeze separat, fiind necesare prelucrări ân formă grafică, calcule etc.
Utilitatea temei este dată de faptul că face atât monitorizarea cât și analizarea parametrilor de mediu mai ușoare, folosind o bază de date cu ajutorul căreia se pot efectua analize numerice ale datelorcare să specifice starea vremiiatât în ziua cât și în săptamâna curentă. Aceste aspecte se dovedesc foarte utilela momentul actual deoarece cunoașterea condițiilor meteo dar și a prognozelor în timp real reprezintă un element deosebit de important în domeniul transporturilor: aeriene, navale, terestre.Este de asemenea foarte importantǎ în agricultură pentru a interveni la timp în evoluția culturilor agricole.Recent s-au înregistrat demersuri susținute pentru identificarea tehnologiilor capabile sǎ influențeze clima.
Conform afirmațiilor unui reputat climatolog american, Alan Robock, în timpul conferinței anuale a Asociației Americane Pentru Progresul Științei (AAAS) din 2013 existǎ informații conform cǎrora un important raport climatic a fost solicitat de cǎtre National Oceanic and Atmospheric Administration (NASA), CIA și alte servicii de informații în vederea descoperirii în premieră de noi tehnologii climatice capabile sǎ influențeze vremea. Alan Robock și-a exprimat temerile în ceea ce privește utilizarea climatului cǎ armă împotriva altor națiuni și a cerut autoritǎților competente sǎ își stabileascǎ cu claritate intențiile cu privire la aceste cercetǎri și impactul lor global[17].În sistemul implementat se dorește atât măsurareaparametrilor de mediu: temperatura, umiditatea, lumina,presiunea, câtși înregistrarea și vizualizarea într-o bază de date MySQL care permite prelucrarea acestora.
Această lucrare aduce totodată o îmbunătățire modului actual de utilizare a stațiilor meteo. Astfel, dacă în prezent datele achiziționate prin stațiile meteo se introduc într-un fișier, iar mai apoi sunt prelucrate separat pentru a fi analizate, sistemul propus în lucrareinclude crearea unei baze de date capabilă să stocheze și să prelucreze în timp realparametrii, generând astfel elemente sintetice ca tabele și grafice, pentru a fi interpretate și utilizate direct în analiză
Stațiile meteo
Istoria Stațiilor Meteo
Prognozele meteo au devenit o componentǎ esențialǎ a vieții noastre. La prevederea vremii contribuie o fascinantǎ combinație, deloc simplistǎ, de arta și de științǎ. În ce anume constǎ prognoza meteo și cât de demne de încredere sunt acestea? Pentru a răspunde la aceste întrebǎri, sǎ vedem mai întai, care au fost primii pași în prevederea vremii.
Scurt istoric
Inițial, revederea vremii se baza în principal pe observațiile fǎcute cu ochiul liber. În prezent, meteorologii au la dispoziție o gamǎ largǎ de instrumente complexe, dintre care cele de bazǎ mǎsoarǎ presiunea atmosfericǎ, temperatura, umiditatea și intensitatea vântului.
Barometrul, instrumentul pentru mǎsurarea presiunii atmosferice , a fost inventat în anul 1643, de fizicianul italian Evangelista Torricelli. Ca urmare a mǎsurǎtorilor și analizei lor, s-a observat cǎ presiunea atmosferica crește și scade în funcție de schimbǎrile vremii, în multe cazuri scǎderea ei prevestind apropierea unei furtuni. În anul 1664 a fost inventat higrometrul, cu ajutorul cǎruia se mǎsoarǎ umiditatea aerului, și mai târziu , în 1714, fizicianul german Daniel Fahrenheit a inventat termometrul cu mercur. În jurul anului 1765, omul de științǎ francez Anoine-Laurent Lavoisier a propus mǎsurarea zilnicǎ a presiunii atmosferice, a umiditǎții aerului și a vitezei și direcției vântului. "Dacǎ deținem toate aceste informații, a declarat el, se poate prevedea aproape întodeauna, cu o exactitate rezonabilǎ, starea vremii din ziua urmǎtoare sau din urmǎtoarele douǎ zile." Din nefericire, acest lucru nu s-a dovedit a fi chiar atât de simplu.
Meteorologia modernǎ este legatǎ de câteva întâmplǎri care au generat catastrofe datoritǎ lipsei prognozei meteo. În 1864, un vas francez de rǎzboi și 38 de vase comerciale s-au scufundat din cauza unei furtuni violente izbucnite în apropierea portului Balaklava, din Crimeea. Autoritǎțile franceze i-au cerut lui Urbain-Jean-Joseph Leverrier, directorul Observatorului din Paris, sǎ facǎ investigații. Verificând înregistrǎrile meteorologice, el a descoperit cǎ furtuna se formase cu douǎ zile înaintea dezastrului și mǎturase Europa dinspre nord-vest spre sud-est. Așa a apǎrut idea de a urmǎri mișcǎrile furtunilor. Prin urmare, în Franța s-a instituit un serviciu național de avertizare împotriva furtunilor. Așa a luat ființa meteorologia modernǎ.
Un alt element esențial pentru realizarea prognozelor meteo era comunicarea, respectiv obținerea de date meteo din diferte zone, analizarea lor și evidențierea posibilei evoluții a vremii. Telegraful electromagnetic, inventat de Samuel Morse, a permis transmiterea datelor între diverse locații, ceea ce a fǎcut posibil ca în 1863 Observatorul din Paris sǎ înceapǎ sǎ publice primele hǎrți sinoptice, format modern. În jurul anului 1872, și Biroul Meteorologic Britanic fǎcea același lucru.În România apariția meteorolgiei și a determinǎrilor meteo este legatǎ de Stefan Hepites care, împreunǎ cu soția sa au înființat în 1878 la Brăila prima stație meteorologică pentru că mai apoi sǎ instaleze 11 astfel de obiective de-a lungul Dunării, menite să avertizeze din timp asupra riscului de inundații[18].
Principiile de bază ale stațiilor meteo
Stația meteorologică este alcătuită din trei elemente: biroul stației, platforma meteorologică și platforma nivometricǎ pe care se fac determinǎri asupra grosimii, densitǎții și structurii de zǎpadǎ[19]. Platforma metorologicǎ are forma unui pǎtrat și este orientatǎ pe direcția nord-sud și est-vest. Aparatele sunt instalate conform unui regulament internațional pe mai multe linii paralele de la nord la sud. Fiecare aparat are un loc fix, fiind astfel distribuite încât sǎ se evite umbrirea lor, sǎ nu influențeze unul indicațiile celuilalt[19].
Pe platforma meteorologicǎ se realizeazǎ observații vizuale și observații instrumentale care trebuie sǎ respecte anumite reguli cum ar fi: accesul la instrumente se face din spre nord la adǎposturile meteorologice și la termometrele de sol, dinspre sud la heliograf și pe cel mai scurt drum la celelalte instrumente și aparate. Tipurile de observații vizuale se fac asupra Soarelui și a diferitelor fenomene atmosferice precum:
Nebulozitate atmosfericǎ;
Disc solar care redǎ starea timpului: senin, semi-senin, acoperit;
Starea solului;
Diverse fenomene meteorologice: rouǎ, brumǎ, polei, ceațǎ etc.;
Alte fenomene: tunete, fulgere, furtuni, vijelii, uragane etc.[19]
Observațiile instrumentale se efectueazǎ cu periodicitatea, ordinea și durata stabilitǎ prin standardele de meteorologie astfel:
La și 15-17 minute temperatura la sol și în sol;
La și 18-19 minute determinǎri la termograf, barograf, pluviograf;
La și 20-23 minute, giruetele;
La și 24-25 minute, pluviometru
La și 26-29 minute, aparate precum psihrometru etc.;
La și 30 de minute, la barometrul cu mercur din interiorul stației;
La și 31-34 minute. Observații instrumentale asupra stratului de zapadǎ(grosime, densitate).
Concomitent se fac observații vizuale ale nebulozitǎții, vizibilitǎții și a altor fenomene meteorologice[19].
Pentru rigurozitatea determinǎrilor instrumentale, observatorul trebuie sǎ respecte anumite reguli de comportament care solicitǎ efectuarea corectǎ și la termen a observației, notarea imediat în registru a datelor obținute și transmiterea lor urgent la centrele regionale de colectare[19].
De asemenea pentru buna funcționare a aparatelor, observatorul este obligat ca înainte de efectuarea observației la termenul respectiv, sǎ efectueze rondul preliminar pentru a verifica starea aparatelor. În cazul defectǎrilor acestora, observatorul trebuie sǎ le înlocuiască[19].
Proiectarea arhitecturalǎ a unei stații meteo
O stație meteo reprezintǎun sistem de achiziție și mǎsurarea parametrilor de mediu. Stația meteo este un pachet software controlat de instrumente ce colecteazǎ datele, le proceseazǎ și le transmite . Instrumentele de mǎsurare sunt: termometre de aer și de pǎmant, barometru, aparat pentru mǎsurarea vitezei vântului și aparat pentru mǎsurarea cantitǎții de precipitații. Datele sunt colectate periodic în funcție de cererea utilizatorului ele pot fi colectate la interval de câteva minute sau din orǎîn orǎ. Când se face o cerere pentru transmiterea datelor meteo, stația meteo proceseazǎ datele și le colecteazǎ. Acestea sunt transmise calculatorului care a fǎcut cererea.
Arhitectura sistemului de achiziție și mǎsurare a parametrilor de mediu
Aceastǎ arhitecturǎeste construitǎ din nivele pentru acest sistem:
Primul este un nivel pentru interfața care administreazǎ comunicațiile (controlerul de comenzi);
Al doilea reprezintǎun nivel pentru colectarea datelor de la instrumente;
Al treilea reprezentǎ un nivel pentru instrumentele care colecteazǎ datele. În general, un model arhitectural nu trebuie sǎ aibǎ mai mult de 7 entitǎți.
Figura 2.1 Sistem architectural al stației meteo [20]
Interacțiunea între subsisteme
Fiecare dintre cele 3 subsisteme(interfațǎ, colectare date, instumente) este reprezentat de obiecte.
Subsistemul ”interfața” conține : ControlerComenzi și StațiaMeteo;
Subsistemul “ColectareDate” conține : DateMeteo și Status Instrumente;
Subsistemul “Instrumente” conține :TermometruAer, TermometruSol, Anemometru și Barometru.
Primul subsistem “Interfața” face posibilǎ comunicația între stația meteo și comenzile necesare pentru a începe colectarea parametrilor de mediu. Al doilea subsistem “ColectareDate” preia informația de la stația meteo și comunicǎ cu ultimul substistem “Instrumente” pentru a activa instrumentele de mǎsurare, la rândul cǎrora transmit parametrii de mediu cǎtre utilizator.
Figura 2.2Colectarea datelor[20]
Înfigura 2.2. sunt descrise etapele colectării datelor cerute de către utilizator.
Avantajele meteorologiei
Aplicabilitatea practicǎ;
Identificarea fenomenelor meteo-periculoase(furtuni, vijelii, caniculă, ninsori abundente, polei etc) și emitere de avertizări;
Determinarea elementelor care provoacǎ meteo-sensibilitate(presiunea atmosfericǎ, umiditate foarte ridicatǎ, temperaturi extreme) și emiterea de avertizǎri;
Prognozele pe termen lung ajutǎ la identificarea și aplicarea de mǎsuri in agriculturǎ în mod special pentru evitarea pagubelor generate de evoluția timpului.
Microcontrolere. Generalități
Microcontrolerul
Un microcontroler este o structură electronică ce controleazǎ un proces sau o interacțiune cu mediul exterior, unde intervenția programatorului nu mai este necesară. La început,realizarea controlerelorse fǎceau în tehnologii analogice, utilizându-se componente electronice discrete/electromecanice. Microcontrolerele realizate pe baza logicii cablate folosesc tehnica numerică modernă. Un microcontroler reprezintǎ un microcircuit alcătuit dintr-o unitate centrală (UCP),o memorie ce poate fi RAM/ROM/EEPROM/FLASH, interfețede intrare/ieșire și configurabile, timere și controler de întreruperi[1].
Domeniul de aplicație pentru microcontrolere sunt următoarele: control industrial (exemple:controlul cuptoarelor,controlul iluminatului, controlul accesului etc.), în automative (controlul motorului, controlul climatizǎrii, controlul dezaburirii etc.), în electrocasnice (frigidere,cuptoare cu microunde, aspiratoare etc.), în comunicații ( telefoane, centrale telefonice, internet etc.)[1].
Pentru a crește posibilitǎțile de utilizare ale microcontrolerelor, la nivelul acesta se integreazǎ și alte module foarte utile în aplicații, de exemplu: module de numǎrare (microcontrolerele conțin una sau mai multe numǎratoare de 8 sau 16 biți care oferǎ facilitǎți în ceea ce privește mǎsurarea frecvențelor, duratelor, perioadelor semnalelor etc.), module PWM(Pulse Width Modulation, aceeste module genereazǎ semnale sincronizate cu factori de umplere programabile, o aplicație a modulelor PWM este realizarea de convertoare numeric analogice(CNA), module de conversie analog numerice CAN(cu aceste convertoare se pot mǎsura tensiuni sau toate mǎrimile electrice și neelectrice care pot fi convertite în tensiune), module de comandǎ directǎ a dispozitivelor de afișare cu LCD, interfețe seriale[21].
Clasificări și variante constructive
Există în momentul de fațǎun număr mare de tipuri constructive de microcontrolere.Un criteriu de clasificare ce se poate aplica întotdeauna este lungimea/dimensiunea cuvântului de date. În funcție de puterea de calcul dorită și de alte caracteristici se pot alege variante având dimensiunea cuvântului de date de 4, 8, 16 sau 32 de biți, existând însǎ și dimensiunea cuvântului de date de 64 de biți. Dimensiunea cuvântului de date nu trebuie să fie obligatoriu egală cu dimensiunea unui cuvânt mașină. Există,însă, multe variante numite dedicate, cu alte cuvinte ele nu pot fi programabile de cǎtre utilizator la nivel de cod mașină. Sunt strict specializate pe o anumită aplicație, prin intermediul codului preprogramat și al resurselor hardware. Acestea sunt utilizate pentru comunicații, controlul tastaturilor, controlul aparaturii audio/video și prelucrarea numerică a semnalului[2].
Tehnologiile de fabricație utilizate
Toate microcontrolerele se realizează pe baza tehnologiei CMOS. Astfel, se pot realiza structuri cu o densitate de integrare mare și cu un consum redus ce depinde de frecvența de lucru, permițând sǎ se facǎ alimentarea de la baterie[2].
Logica internă este staticǎ și permite astfel,chiar în ideea optimizării consumului oprirea ceasului și micșorarea frecvenței de ceas. Tehnologia este caracterizată de o imunitate mai mare la perturbații, esențială într-un număr mare de aplicații specifice. Se realizează variante pentru domeniul extins al temperaturii de funcționare [2].
Există foarte multe variante de încapsulare: capsule de plastic și mai rar de ceramică.Multe dintre ele sunt destinate montării pe suprafață (SMD): PQFP, PLCC, SOIC, TQFP(x100pini), dar și variante clasice cu pini tip DIP/DIL (tipic de la 8 la 68 pini)[2].
Microcontroler ATMega 2560
ATMega 2560 este un microcontroler ce face parte din familia AVR a firmei ATMEL. Familia AVR a apărut în ultimii ani, ceea ce oferă variante de microcontrolere foarte asemănătoare ca și resurse cu familia PIC, cu performanțe similare sau mult mai bune. Sunt bazate pe o arhitectură diferită, dar unitatea centrală este de asemenea de tip RISC, având cuvântul de date de 8 biți. La fel ca și la PIC, dimensiunea cuvântului de program este mai mare, acesta fiind de 16 biți[23].
Microcontrocontroler-ul ATMega 2560 este reprezentat în figura 3.1.
Figura 3.1 Microcontroler ATMega 2560[11]
Familia de microcontrolere AVR este compusă din numeroase tipuri, împărțite în trei mari subfamilii, în ordinea complexității resurselor: ATtiny – AVR în 8 pini, AT90 Sxxxx – AVR de uz general și ATmega – AVR de înaltă performanță. Toate microcontrolerele AVR sunt dotate cu memorie program și de date reprogramabile electric.
Acestea au consum redus de putere, executând totuși 1 MIPS (MegaInstructions Per Second). Sunt acceptate frecvențe maxime de ceas de 1 ÷ 4MHz la circuitele ce sunt alimentate la 2,7V (LV) și respectiv între 8 ÷ 12 MHz la celelalte.
Caracteristici ale microcontrolerului
Microcontroler-ul ATMega 2560 este un microcontroler AVR de 8 biți de înaltă performanță cu un consum redus de energie.
Caracteristici:
135 de instrucțiuni puternice – majoritatea cu execuție într-un singur ceas;
32 x 8 registre de uz general și registre periferice de control;
operare statică;
putere de procesare de până la 16 MIPS la 16 MHz;
multiplicator încorporat: execută în 2 cicli mașină.
Memorie program nevolatilă și memorie de date:
64/128/256Kbițimemorie Flash programabilăînsistem;
Boot Code Section opțional cu biți de securizare independent. Programare în sistem prinintermediul programului de Boot);
Kbiți EEPROM;
8 Kbiți SRAM intern;
Securizare de program pentru siguranța software-ului;
Scrie / ștergere Cicluri: 10.000 Flash/100, 000 EEPROM;
ProgramareamemorieiFlash,EEPROMprininterfațastandardJTAG.
Caracteristici periferice:
2-biți Timer / Counter de 8 biți cu prescalare separată și mod de comparare;
4-biți Timer / Counterde 16 biți cu prescalare separată, mod de comparare și capturare;
Contorul de timp real cu oscilator separat;
Canale PWM de 8-bit;
6/12 canale PWM cu rezoluție programabilă de la 2 până la 16-biți(ATmega1281/2561, ATmega640/1280/2560);
8/16-canale 10 biți ADC;
2/4 UART programabil serial;
Modulator de comparare la ieșire;
Interfața serialǎ SPI Master/Slave;
Byte Oriented 2-fir cu interfață serială;
Timer „watchdog” programabil cu oscilator separate pecip;
Comparator analogic;
Întreruperea și trezirea prin modificarea pinilor[3];
Tensiune de operare: 1.8 – 5.5V;
Interval de temperatură:40 °C la 85 °C;
Gradul vitezei:0 – 4MHz la 1.8 – 5.5V, 0 – 8MHz la 2.7 – 5.5.V, 0 – 8MHz la 4.5 – 5.5V;
Consum de putere la 1MHz, 1.8V, 25 ° C;
Mod de operare: 0.2mA[3].
În figura 3.2 este reprezentată diagrama cu pinii plăcii Arduino Mega 2560.
Figura 3.2 Arduino Mega 2560 – Diagramǎ Pini [10]
Microcontrolerele din familia AVR pot fi atât microcontrolere de uz general cât și microcontrolere cu funcții specializate. Acestea se împart în următoarele categorii:
Familia TINY AVR – cuprinde microcontrolere destinate aplicațiilor simple, cu valori între 1 și8 KBmemorie de program;
Familia MEGA AVR – conține un set dezvoltat de instrucțiuni și cu valori între 4 și 256 KB memorie de program;
Familia XMEGA AVR – este destinată aplicațiilor complexe. Acestea sunt realizate din unități DMA(Direct Access Memory), module pentru criptare și folosesc un spațiu de memorie de program cuprins între 16 și 384 KB.
Microcontrolere AVR sunt destinate unor aplicații specifice, care se împart în mai multe categorii:
LIGTHING AVR: sunt microcontrolere ce conțin un procesor de semnal. Acesta este special conceput pentru controlul motoarelor de curent continuu;
LCD AVR: sunt microcontrolere ce conțin un controler pentru adresarea dispozitivelor LCD;
CAN AVR: sunt microcontrolere ce conțin o interfață CAN implementată hardware[4].
Figura 3.3 Schema Bloc a microcontroler-ului ATMega 2560[3]
Schema bloc a microcontroler-ului ATMega 2560, conform figurii 3.3 conține pinii acestuia ce vor fi descriși în subcapitolul următor.
Descrierea pinilor
Pinii microcontroler-ului ATMega 2560 conform figurii2.1 Schema Bloc a microcontrolerului ATMega2560 sunt urmǎtorii:
GND- masa;
VCC – tensiunea de alimentare.
Există 10 porturi:
Port A (PA7..PA0);
Port B (PB7..PB0);
Port C (PC7..PC0);
Port D (PD7..PD0);
Port E (PE7..PE0);
Port F (PF7..PF0);
Port G (PG5..PG0);
Port H (PH7..PH0);
Port J (PJ7..PJ0);
Port K (PK7..PK0);
Port L (PL7..PL0).
Porturile A(PA7..PA0), B(PB7..PB0), C(PC7..PC0), D(PD7..PD0),E(PE7..PE0), G(PG7..PG0), H(PH7..PH0),J(PJ7..PJ0),L(PL7..PL0) sunt porturi bi-direcționale de intrare/ieșire pe 8 biți cu rezistențe interne de ridicare(selectate pentru fiecare bit). Bufferele de ieșire ale porturilor au o funcționalitate dualǎ, care pot comuta ieșirea în starea “high” sau în starea”low”. Pinii porturilor microcontroler-ului Atmega2560 sunt setați pe “low” printr-o metodă externă. Aceștia vor furniza curent, dacă rezistențele interne de ridicare sunt active. Pinii porturilor prezintă o impedanță înaltă atunci când o condiție de resetare devine activă, chiar dacă ceasul nu funcționează.
Portul B are capabilitǎți de funcționare mai bune fațǎ de alte porturi.
Port F(PF7..PF0) și portul K(PK7..PK0)sunt folosite ca intrare analogicǎ pentru convertorul Analog-Digital(CAD).Ca și celelalte porturi, ambele porturi, atât F(PF7..PF0) cât și K(PK7..PK0)reprezintǎporturi bi-direcționale de intrare/ieșire de8 biți, dacăconvertorulAnalog-Digital(CAD)nuesteutilizat. Bufferele de ieșire ale porturilor au caracteristici simetrice de acționare putând comuta ieșirea în starea „high” sau în starea „low”.Ca intrări, pinii porturilor sunt setați pe “low” printr-o metodă externă, aceștia furnizând curent, dacă rezistențele interne de ridicare sunt active.Pinii porturilorprezintă o impedanță înaltă atunci când o condiție de resetare devine activă, chiar dacă ceasul nu funcționează.
Dacă interfațaJTAGal portului F esteactivată,rezistențele interne de ridicare ale pinilor:PF7(TDI), PF5(TMS) șiPF4(TCK) se vor activa chiar dacăpe parcurs apare o resetare.De asemenea portulF este utilfuncțiilorinterfețeiJTAG.
RESET-Pinul este folosit ca intrare de reset. La aplicarea unui nivel “low” pe acest pin va genera o resetare dacǎceasul nu funcționează.
XTAL1-Pinul este folosit ca intrare inversoare amplificatoare a oscilatorului și ca intrare a ceasului intern al circuitului.
XTAL2 -Ieșirea inversoare de la Oscilator la amplificator.
AVcc-Pinul este utilizat pentru tensiunea de alimentare a convertorul A/D, ADC7:6 și PC3..0.
AREF -este pinul de referință analogic pentru convertorul A / D.
ATMega2560 este un microcontroler care foloseste tehnologia CMOS, pe 8 biți de putere micǎși are la baza o arhitectură de tip RISC îmbunătățită. Acesta execută instrucțiuni complexe într-un singur ciclu de ceas unde se atinge performanța de 1 MIPS, permițându-i programatorului să optimizeze atât consumul de energie cât și viteza de procesare[9].
Între procesoare exista câteva diferențe din punct de vedere al caracteristicilor acestora. Aceste diferențe sunt exemplificate în tabelul 3.1 de mai jos.
Tabel 3.1 Comparație între diferite procesoare[9]
Microcontrolerul ATMega 2560 are mai multe moduri de operare cu consum redus.
Aceastea sunt:
modul IDLE;
modul POWER DOWN;
modul POWER-SAVE;
modul SLEEP;
modul STANDBY;
modul ADC-NOISE REDUCTION.
În modul IDLE, semnificând,modul inactiv, activitatea unitǎții centrală de prelucrare(UCP) la nivelul SRAM-ului se oprește.În modul POWER DOWN, semnificând modul cu tensiune scǎzutǎ, oscilatorul intern este oprit și toate funcțiile sunt oprite.Ieșirea din această stare este realizată prin activarea intrării RESET sau la sesizarea unei întreruperi interne sau externe. De asemenea în modulul cu tensiune scǎzutǎ se salveazǎ conținutul registrelor.
În cel de al treilea modul POWER-SAVE funcționează în continuare timer-ul asincron iar restul dispozitivului trece în modul SLEEP. În modul ADC-NOISE REDUCTION unitatea centralǎ și toate interfețele de intrare/iesire se opresc, exceptând convertorul analog-digital(CAD) și timer-ul asincron.Oscilatorul cu cuarț se aflǎ în modul STANDBY iar restul dispozitivului trece în modul SLEEP,ceea ce permite o pornire rapidǎ.
Modurile de lucru cu consum redus pot fi activate prin setarea unor biți de control din registrul SFR PCON:PD – bit pentru modul de lucru POWER DOWN; IDL – bit pentru modul IDLE[8].
Porturi de Intrare/Ieșire
Pinii de intrare/ieșire sunt pini digitali și sunt conectați la porturile microcontroler-ului. Logica programării este orientatǎ pe numǎrul pinului iar o mare parte din pini au anumite funcții speciale precum: comunicația serialǎ UART sauI2C, generator de undǎ PWM, sau semnale analogice.
Pinii cu funcțiile RX și TX sunt rezervați pentru comunicarea serialǎ prin USB, ce include programarea plǎcii. Tocmai de aceea acești pini trebuie evitați
De asemenea există un pincare indicǎ ledul de pe placǎ. Acest pin este pinul 13 de pe placă.
Figura 3.4 Arduino Mega [11]
În figura 3.4 sunt prezentați pinii plăcii Arduino și funcționalitatea lor. Conform figurii Arduino Mega conține pini analogici, digitali și de comunicație.
I/O folosind porturile microcontroler-ului
Porturilor microcontroler-ului, I/O oferă atât avantaje cât si dezavantaje evidențiate mai jos.
Dezavantaje:
Abordare dependentǎ de hardware, nu este portabilǎ între plǎci diferite;
Este cunoscuta relația dintre pin și portul/bitul corespunzator;
Existǎ porturi ce sunt rezervate și nu este recomandabilǎmodificarea stǎrii acestora.
Avantaje
Scrierea și citirea unui port sunt de aproximativ 10 ori mai rapide decât digitalWrite() și digitalRead();
Posibilitatea de a citi sau de a scrie mai mulți pini simultan (digitalRead și digitalWrite lucreazǎ doar la nivel de pin).
Figura 3.5 Arduino Mega2560 Rev3[11]
În figura 3.5 este prezentată placă Arduino Mega 2560 în care sunt specificați pinii corespunzători porturilor explicați anterior.
Convertorul Analog-Digital
Microcontrolerul ATMega2560 conține un convertor analog-digital(CAD) care funcționează pe principiul aproximărilor succesive.
Convertorul conține un circuit de memorare și eșantionare ce menține o tensiune de alimentare constantă aceasta fiind constantǎ pe parcursul conversiei. Convertorul mai conține și un pin de alimentare separat, acesta fiind AVcc și nu trebuie să difere mai mult de ± 0,3 V de la Vcc. CAD-ul transformă o tensiune analogică într-o valoare digitală pe 10 biți. Tensiunea minimă reprezintă masa iar valoarea maximă reprezintă tensiunea pe pinul AREF, minus 1LSB[7].
Caracteristici:
Rezoluție pe 10-biți;
1 LSB integrat non-liniaritate;
16 canale multiplexate unice finisate de intrare;
Canale suplimentare multiplexate unice finisate de intrare;
13: 260μs timp de conversie;
Canal pentru intrare a senzorului de temperaturǎ;
Opțional ajustarea la stânga pentru citirea rezultatului CAD;
0 – VCC CAD tensiune de intrare;
Selectabil 1.1V sau 2.56V CAD tensiune de referință;
Întreruperea CAD la conversie completă;
Modul de zgomot Sleep Canceler.
Interfața serială SPI
Interfața SPI reprezintă un mod de a comunica cu dispozitive de tip Master-Slave.În cazul Arduino Mega, pinii SPI corespund canalelor astfel: MISO se află pe pinul digital 50, MOSI se află pe pinul digital 51, SCLK se află pe pinul digital 52 și SS se află pe pinul digital 53.
În mod concret dacă sunt două dispozitive SPI vom începe prin identificarea pinilor MOSI, MISO, SCLK și SS pentru fiecare dispozitiv. Astfel, se va realiza conexiunea.
Caracteristici:
Full duplex,transfer de date sincronprin 3 fire;
Operează Master sau Slave;
7 rate de bit programabile;
Protecție la scriere;
Wake-up din modul IDLE;
Viteză dublă(CK/2) in modul Master SPI.
Interfața serială SPI este o interfață ce operează în mod full duplex, de mare viteză.Este folosită ca sistem de magistrală serial sincronă pentru transmiterea de date,unde circuitele digitale pot să fie interconectate pe principiul master-slave.Aici, modul master/slave înseamnă,că dispozitivul digital master inițiază cuvântul de date. Mai multe dispozitive digitale slave sunt premise cu slave select individual,adică cu selectare individuală[7].
SPI-ularepatrusemnalelogicespecifice:
SCLK – Ceas serial(output din master). Este firul prin care este transmis clock-ul(ritmul de comunicație);
MOSI/SIMO – Master Output, Slave Input(output din master). Acesta reprezintă firul prin care dispozitivul master trimite date către slave;
MISO/SOMI – Master Input, Slave Output(output din slave). Acesta reprezintă firul prin care dispozitivele slave trimit date către master;
SS – Slave Select(active low; output din master). Acest canal este specific SPI. SPI permite comunicarea pe același bus.
Sistemul este format din două registre de deplasare și un generator de ceas Master.SPI Master inițiază ciclul de comunicare atunci când este selectat pinul SS Slave Select pe nivelul LOW. Masterul și Slave-ul pregătesc datele să fie trimitse în registrele lor de deplasare iar masterul generează impulsurile de sincronizare necesare pe linia SCK pentru a interschimba datele. Datele sunt întotdeauna deplasate de la master la slave pe Master OUT-Slave In,MOSI și de la Slave la Master pe Master In-Slave Out,MISO.După fiecare pachet de date Masterul va sincroniza Slave-ul prin selectarea nivelului pe HIGH a Slave Selectului SS[7].
Timer/Counter
Timer-ul/Counter-ul are rolul de a mǎsura intervale fixe de timp și de a genera întreruperi la expirarea intervalului mǎsurat. Atunci când se inițializeazǎ timerul, acesta funcționeazǎ independent de unitatea centralǎ(UCP), ceea ce duce la eliminarea buclelor de întârziere(delay) din programul principal.
Caracteristici:
Proiectat pe 16 biți;
Douǎ unitǎți de independente de comparare output(douǎ canale);
Unitate de capturǎ input;
Un anulator de zgomot pe intrare;
Ștergerea cronometrului la potrivirea comparǎrii (auto reîncărcare);
Puls de corectare a fazelor cu modulator(PWM);
Perioada PWM variabilǎ;
Generator de frecvențǎ;
Counter extern de evenimente;
Patru surse de întrerupere independente.
Controler-ul pentru seria Mega Arduino este Atmel AVR ATmega1280 sau ATmega2560. Din nou, identice, dar diferă în mărime de memorie. Aceste controlere au 6 cronometre. Timer 0, timer1 și timer2 sunt identice cuATmega168 / 328. Timer3, timer4 și timer5 sunt toate cronometre pe 16 biți, similare cu timer1.
Din punct de vedere hardware, timerele pot fi configurate cu ajutorul unor registre speciale. În microprogramul(firmware) Arduino, toate cronometrele au fost configurate la o frecvență de 1kHz și întreruperile sunt în general activate.
Timer0 este pe 8 biți. Timer0 este utilizat pentru funcțiile de temporizare software Sketch , ca: delay( ), millis( ) și micros( );
Timer1 este pe 16 biți. În Arduino, biblioteca Servo utilizeazǎ Timer1 pe Arduino Uno iar Timerul5 pe Arduino Mega2560;
Timer2 este un timer pe 8 biți ca și Timer0.Timer2 este utilizat de funcția tone();
Timer3, Timer4, și Timer5 sunt timere pe 16 biți.Aceste timere sunt disponibile doar pe placa Arduino Mega.
Registrul timer
Comportamentul unui timer se poate schimba cu ajutorul registrului timer.Cele mai importante registre timer sunt:
TCCRx- Timer/Counter Control Register- Registrul de control pentru cronometru;
TCNTx – Timer / Counter Register-.Valoarea reală a cronometrului (timer-ului) este stocată în acest registru;
OCRx – Output Compare Register – Registru de comparare a ieșirii;
ICRx – Input Capture Register – Registru de captare a intrǎrii( numai pentru timer-ul de 16 biți);
TIMSKx – Timer/Counter Interrupt Mask Register – Registrul utilizat pentru a activa/ dezactiva întreruperile timer-ului;
TIFRx – Timer/Counter Interrupt Flag Register – Registrul ce indicǎ întreruperea unui timer în așteptare[13].
Componentele sistemului de monitorizare
Mediul de dezvoltare Arduino
“Arduino reprezintǎ un sistem „open-source” descendent platformei „open-source” Wiring, având scopul de a susține folosirea sistemelor electronice în diverse proiecte ale utilizatorilor de nivel începător”[11].
„Arduino este o platformă alcătuită dintr-un suport hardware simplu, un microprocesor Atmel AVR și porturi de Intrare/Ieșire. Arduino este programat folosind un limbaj Wiring bazat pe sintaxe și librării(un limbaj similar cu C++, dar care conține câteva modificări) și un mediu de procesare, pe bază de dezvoltare integratǎ„[11].
Proiectul Arduino a început în 2005, în Italia și s-a dorit să fie un sistem accesibil pentru persoanele cu mai puțină experiență și să aibe un preț mai accesibil decât alte platforme. Massimo Banzi si David Cuartielles sunt fondatorii acestei platforme. Aceștia au denumit proiectul după „Arduin of Ivrea” care a fost un personaj istorică[11].
Programul Arduino a fost creat de artistul și programatorul columbian Barragán Hernando ca o teză de master, la Institutul de Design din Ivrea sub supravegherea lui Massimo Banzi si David Cuartielles[11].
Hardware
Arduino este format dintr-un procesor Atmel AVR pe 8 biți cu diverse componente, care ușurează programarea și conectarea la alte circuite. Datorită modului standard în care sunt așezați conectorii, permit plăcii UCP conectarea module adiționale, aceste module poartă numele de scuturi.
Plăcile Arduino conțin un stabilizator de tensiune de 5 V și un oscilator care are o frecvență de 16 MHZ(în general un cristal și mai rar un rezonator ceramic), există și unele modele care au oscilator la o frecvență de 8 MHz sau care nu includ stabilizator de tensiune[11].
Când este folosită stiva software a kit-ului Arduino, plăcile sunt programate printr-o conexiune serială de tip RS-232. Plăcile seriale conțin un invertor simplu care face conversia între semnalul RS-232 și TTL[11].
Când este folosită stiva software a kit-ului Arduino, plăcile sunt programate printr-o conexiune serială de tip RS-232. Plăcile seriale conțin un invertor simplu care face conversia între semnalul RS-232 și TTL.Programarea programului Arduino are loc prin portului USB, folosind un cip adaptor de la USB la serial de exemplu: FTDI FT232. Platforma expune majoritatea pinilor de Intrare/Ieșire pentru utilizarea de către alte circuite. Platforma Diecimila utilizează 14 pini digitali de intrare/ieșire, dintre care 6 PWM și 6 pini de intrare analogici. Acești pini se află pe partea de sus a plăcii. Sunt și platforme care au pini pe partea de jos a plăcii[11].
Software
Mediul de dezvoltare Arduino
IDE-ul pe care îl folosește Arduino este o platformă scrisă în Java, și care derivă din IDE-ul folosit de limbajul de programare Processing și proiectul Wiring. Acesta este proiectat astfel încât să introducă conceptul de programare pentru utilizatorilor începători, care nu au cunoștințe bogate în dezvoltarea software. Platforma include un editor de cod care are mai multe facilități(exemplu: marcarea sintaxelor). Platforma este, de asemenea, capabilă să elaboreze și să încarce programe pe placă cu un singur clic[13].
IDE-ul de la Arduino conține o librărie de C/C++ „Wiring”, care face mai ușoare operațiile de intrare/ieșire. Programele Arduino sunt scrise în limbajul C/C++.Utilizatorul trebuie să definească două funcții (setup și loop) pentru a face programul să funcționeze, un exemplu este prezentat mai jos:
Figura 4.1 Clipirea unui led [13]
În programul Arduino sunt definite două funcții:setup()șiloop(). Aceste două funcții trebuie să fie prezente în orice program; In cazul in care nu se folosesc cele două funcții se pot șterge insǎ aceasta sitație este rar întâlnitǎ.
Funcțiasetup()se execută o singură dată. În momentul în care alimentǎm placa, când încǎrcǎm un program nou sau când resetǎm placa.
Funcțialoop() reprezintǎ funcția de buclǎ executată la infinit și fără pauză. În cazul în care este nevoie de pauze, acestea sunt introduse în mod explicit de cǎtre programator[13].
În acest program, funcțiasetup()are rolul a declara pinul 13 ca pin de ieșire. Pinul 13 este un pin digital conectat și la LED-ul de pe placă.
Conform figurii 4.1. Clipirea unui led, funcțialoop()de mai sus parcurge urmatoarele etape:
Pinul 13 va fi alimentat cu 5V;
Apare o întârziere de 1000 de milisecunde ceea ce înseamnǎ căașteaptă o secundă. Deoarece pinul 13 este alimentat, LED-ul de pe placă se aprinde;
Pinul 13 nu se mai alimenteazǎ cu 5V;
Apare o altǎ întârziere de 1000 de milisecunde. Deoarece pinul 13 nu mai este alimentat, LED-ul de pe placǎ se stinge.
Pentru a face compilarea programelor, Arduino utilizează GNU Project și AVR Libc iar pentru a transfera programele pe plăcuță se utilizează Avrdude.
Limbajul Arduino este implementat în C/C++. Există unele diferențe față de limbajul Processing, care se bazează pe Java. [13].
Resetare software automată
Arduino Mega2560 este proiectat în așa fel încât să îi permitǎ sǎ fie resetat de un software ce ruleazǎ pe un calculator. Programul Arduino permite încǎrcarea codului prin simpla apăsarede buton din meniul softului Arduino.
Atunci când Arduino Mega2560 este conectat la un calculator cu sistem de operare Mac, Linux sau Windows, acesta se reseteazǎ de fiecare datǎ când are loc o conexiune de la placa Arduino cǎtre calculator prin USB. Pentru următoarea jumǎtate de secundǎ, bootloader-ul se executǎ pe Mega2560.
Activarea procedurii DFU se poate face astfel:
La generația R1: se conectează jumper-ul de pe spatele plăcii și după aceea se resetează microcontrolerul 8U2;
La generația R2 : se folosește rezistorul care leagă procesorul 8U2/16U2 la masă.
Tipuri de module
Un proiect bazat pe platforma Arduino constă din mai multe module conectate între ele. Modulele pot fi categorisite în funcție de diverse criterii.Vom vedea mai jos cum anume se conectează diversele module la platforma de dezvoltare [14];
Platforma de dezvoltare— aceasta este placa electronică ce conține microcontroler-ul („creierul”) programabil. Dat fiind că platforma Arduino este open source, sunt disponibile atât platformeArduino originale, fabricate în Italia, cât șiclone compatibile, mai ieftine, fabricate în general în China.Există mai multe modele de astfel de platforme, modele care diferă atât în ceea ce privește capabilitățile cât și în ceea ce privește dimensiunile fizice.
Totuși limbajul de programare, mediul de dezvoltare și interconectarea diverselor module sunt practic identice, indiferent de modelul specific al platformei;
Module de intrare— numite și senzori, acestea sunt module care se conectează la platforma Arduino pentru a trimite date către aceasta(de exemplubutoane,senzori de temperatură,senzori de distanță,potențiometreș.a.m.d.);
Module de ieșire— acestea sunt module care se conectează la platforma Arduino pentru a permite acesteia să transmită informații către lumea exterioară. Acestea pot firelee, afișaje,difuzoareș.a.m.d;
Module de date— modulele de date permit platformei Arduino să comunice direct cu alte dispozitive digitale(inclusiv cu alte module Arduino). Modulele de date pot fimodule Ethernet, care permit comunicația prin Internet sau printr-o rețea locală, module radio, care pot comunica cu computere sau alte platforme Arduino, module USB și așa mai departe;
Accesorii— acestea nu sunt în general considerate module Arduino, însă sunt o parte uzuală a proiectelor de acest gen. Există tot felul de accesorii, de la soluții dealimentarecu curent electric până la cele maidiverse accesorii[14].
Debugging
Mai devreme sau mai târziu programul va deveni atât de complicat încât ne vom lovi de erori de logică; este inevitabil. Vom dori să monitorizămvalorile variabilelor, să vedem care ramură condițională se execută și așa mai departe. În acest scop avem la dispoziție conexiunea la computer, prezentă și după ce ați încărcat aplicația. Pentru a vedea cum se face asta, încărcăm exemplul ASCII Table: File > Examples > 4. Communication > ASCII Table. Încărcăm aplicația, apoi porniți monitorul serial: Tools > Serial monitor. Asigurați-vă că viteza de comunicație este configurată la 9600 baud(în colțul din dreapta-jos al ferestrei monitorului). Ce se vede în acea fereastră este trimis către computer de către codul ce este încărcat[14].
Arduino Mega2560
Arduino Mega este o placă bazată pe microcontrolerul Atmega2560. Ea are 54 pini digitali de intrare/ieșire(din care 15 pot fi utilizate ca iesiri PWM), 4 UART(porturi seriale hardware), 16 pini de intrare analogici, un oscilator cu cristal de 16MHz, o interfață USB, o intrare pentru alimentare, un antet ICSP și un buton pentru reset. Se poate alimenta prin conectare la un calculator cu ajutorul interfeței USB sau utilizând un transformator Ac-Dc.
Acesta conține tot ce este necesar pentru a sprijini microcontrolerul iar utiliazarea se face conectândul la un computer cu un cablu USB,fie cu un cablu de de alimentare cu un adaptor sau baterie AC-DC.
Arduino Mega este compatibil cu cele mai multe shield-uri(scuturi)concepute pentru Arduino Duemilanove sau Diecimila. Arduino este una dintre cele mai simple platforme cu microcontroler. Poate fi asemănat cu un minicalculator(are puterea de calcul a unui computer obișnuit de acum 15 ani), fiind capabil să culeagă informații din mediu și să reacționeze la acestea,având dispozitive extrem de bine dezvoltate[14].
Față de alte dispozitive, Arduino este foarte ușor de utilizat fiind nevoie de 5 minute pentru a instala mediul de dezvoltare și pentru a începe scrierea programelor pe microcontroler Arduino,fapt ce ne aratǎ cǎ nu mai este necesar sǎ lipești fire, fiind necesar doar un port USB liber pentru funcționare.
Figura 4.2 Arduino Mega 2560 Fata / Spate[7]
Arduino Mega poate fi alimentat prin intermediul conexiunii USB sau cu o sursă de alimentare externă. Sursa de alimentare este selectată automat.
Alimentarea externă(non-USB) poate veni fie de la un adaptor AC-la-DC fie de la o baterie. Adaptorul poate fi conectat printr-un conector de 2.1mm cu centru-pozitiv. Conectare de la o baterie poate fi realizatǎ legând la GND și Vin capetele de la conectorii de alimentare.
Placa de dezvoltare poate opera pe o sursă externă de 6-20 volti. Dacă este alimentată la mai puțin de 7V, existăposibilitatea, ca pinul de 5V sǎ furnizeze mai puțin de cinci volți și placa să devină instabilă. Dacă se alimentează cu mai mult de 12V, stabilizatorul de tensiune se poate supra-încǎlzi, acest lucru ducând la deteriorarea plăcii. Intervalul de tensiune recomandat de cǎtre producator este de 7-12 volți[12].
Pinii de tensiune și alimentarea sunt după cum urmează:
Vin.Tensiune de intrare pe placa de dezvoltare atunci când este utilizată o sursă de alimentare externă(spre deosebire de 5 volți de la conexiunea USB sau alte surse de energie stabilizată). Puteți introduce tensiuni de alimentare prin intermediul acestui pin, sau, în cazul în care tensiunea de alimentare se face prin intermediul conectorului de alimentare externă, o puteți accesa prin acest pin;
5V.Stabilizator de tensiune utilizat pentru alimentarea microcontroler-ului și a altor componente de pe placa de dezvoltare. Aceasta poate fi alimentă fie de la Vinprintr-un stabilizator de pe placa de dezvoltare, fie furnizat de cǎtre USB sau de o altă sursă de tensiune de 5V;
3V3. O alimentare de 3.3 volți generat de către stabilizatorul de tensiune de pe placă. Curentul maxim care îl furnizează este de 50 mA;
GND. Pini de împământare;
IOREF-acest pin de pe placă Arduino oferă o tensiune de referință cu care operează microcontroler-ul. Un scut (shield) configurat corect poate citi tensiunea dată IOREF și poateselecta sursa de alimentare corespunzătoare sau poate permite traducători de tensiune ca ieșiri pentru a lucra cu 5V sau 3.3V.
A treia generație are următoarele îmbunătățiri: doi pini SDA și SCL puși lângă pinul AREF și alți doi lângă pinul RESET, circuit de RESET puternic, și procesorul Atmega 16U2 în locul procesorului Atmega 8U2.
ATmega2560 are 256 KB de memorie flash pentru stocarea unui cod din care 8 KB sunt utilizați pentru sistemul de operare, 8 KB de SRAM și 4 KB de EEPROM; poate fi citit și scris din biblioteca EEPROM.Intrarea și ieșirea pentru fiecare din cei 54 de pini digitali de pe Mega pot fi folosiți ca o intrare sau ieșire, folosind funcțiile:
pinMode (),
digitalWrite (),
anddigitalRead ().
Ei funcționează la 5 volți, fiecare pin poate oferii sau primii un maxim de 40 mA și are o rezistență internă de ridicare de 20-50 kohmi.
În plus, uniipini au funcții de specialitate:
Serial: 0 (RX) și 1 (TX); Serial 1: 19 (RX) și 18 (TX); Serial 2: 17 (RX) și 16 (TX); Serial 3: 15 (RX) și 14 (TX)- Este folosit pentru a primii și a transmite date seriale TTL. Se primesc date seriale pe RX și se transmit pe TX. Pinii0 și 1 sunt de asemenea conectați la pinii corespunzători plăcii ATmega16U2 USB-TTL cip serial;
External Interrupts: 2 (interrupt 0), 3 (interrupt 1), 18 (interrupt 5), 19 (interrupt 4), 20 (interrupt 3), si 21 (interrupt 2)-acești pini pot fi configurați pentru a declanșa o întrerupere pe o valoare scăzută, o margine în creștere sau în scădere, sau o modificare a valorii. Se face cu funcția attachInterrupt ();
PWM: pinii de la 2 la 13 și de la 44 la 46 – oferă o ieșire PWM de 8 biți folosind funcția analogWrite ();
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS).-acești pini realizeazǎcomunicarea cu interfața serialǎ SPI folosind biblioteca SPI;
LED: 13- Existăun LED incorporat conectat la pinul digital 13. Atuncicândpinul arevaloarearidicată LED-ulesteaprins iarcândacesta are o valoare micǎ, LED-ul este stins;
TWI: 20 (SDA) și 21 (SCL)-Suport TWI de comunicarefolosindbibliotecaWIRE;
AREF: reprezintǎ tensiunea de referință pentru intrări analogice. Folosit cu funcția analogReference ().;
Reset: este folosit pentru a reseta microcontroler-ul.
Figura 4.3 Pinii de tensiune și alimentarea pentru Arduino Mega2560
Tabel 4.1Caracteristici
Arduino Mega 2560 are mai multe facilități de a comunica cu un calculator, cu un alt Arduino sau cu un alt microcontroler. Atmega2560 dispune de comunicații seriale UART TTL(5V). Microcontroler-ul ATmega16U2 de pe placă se ocupă de comunicații seriale către USB și apare ca un port virtual pentru software-ul de pe calculator. Pentru a fi folosit pe un calculator ce utilizează Windows, este necesar un fișier de tip .inf. Programul Arduino conține un monitor serial care permite transferul de date simple de text către și de la placa Arduino[7].
Biblioteca SoftwareSerial permite comunicații seriale la oricare pini digitali de pe Mega 2560. Atmega2560 suporta transmisii de tip TWI și SPI. Programul conține o librărie Wire utilizată pentru a simplifică folosirea magistralei TWI.Mega2560 are 16 intrări analogice, fiecare dintre aceștia oferă 10 de biți de rezoluție. În mod implicit măsoară la masă până la 5 volți, deși este posibil să se schimbe capătul de sus a intervalului, folosind pinul AREF și funcția analogReference()[7].
Arduino Ethernet Shield
Arduino Ethernet Shield permiteplăcii Arduino să se conecteze la internet. Poate servi fie ca un server care acceptă conexiunile de intrare sau un client care generează conexiuni de ieșire.Biblioteca acceptă până la patru conexiuni concomitente(intrare, ieșire sau o combinație a acestora).Arduino comunică cu scutul (shield-ul) folosind SPI. Acest lucru este pe pinii digitali 11, 12, și 13 pe Uno și pinii 50, 51, și 52 la Mega. Pe ambele plăci, pinul 10 este utilizat ca SS pentru cardul SD.Pentru ArduinoMega, pin-ul hardware SS nu este folosit pentru a selecta W5100, acesta trebuie să fie utilizat ca o ieșire pentru interfață SPI,altfel aceasta nu va funcționa.
Figura 4.4 Arduino Ethernet Shield
Descriere
Arduino Ethernet Shield permite conectarea la internet a pǎcii de dezvoltare Arduino. Se bazeazǎ pe un cip W5100 Ethernet Wiznet. Cip—ul W5100 Wiznet se conecteazǎ la o rețea(IP) cu ajutorul unui cablu RJ-45, urmând instrucțiuni simple începe controlul prin intermediul internetului. Acest scut(shield) poate susține pânǎ la patru conexiuni simultane.
Necesită o placă Arduino;
Tensiune de operare de 5V;
Controlerul Ethernet: W5100 cu buffer intern 16K;
Viteza de conectare: 10/100Mb;
Conexiune cu Arduino pe portul SPI.
Specificații tehnice
Scutul (shield-ul) conține un numǎr de LED-uri informaționale;
PWR:indicǎ faptul cǎ placa și scutul(shield-ul) sunt alimentate;
LINK:indicǎ prezența unei legături de rețea și începe sǎ clipeascǎ atunci când scutul(shield-ul) transmite/primește date;
FULLD: indicǎ faptul cǎ există o conexiunea la rețea și este full duplex;
100M:indicǎ prezența unei conexiuni la rețea de 100Mb/s (spre deosebire de 10 Mb/s);
RX:se aprinde intermitent atunci când scutul(shield-ul) primește date;
TX:se aprinde intermitent atunci când scutul(shield-ul) trimite date;
COLL:clipește atunci când sunt detectate coliziuni de rețea.
Pe lângǎ LED-urile informaționale, scutul (shield-ul) prezintǎ și un conector de card MicroSD.
Figura 4.5 Schemă bloc Ethernet Shield
Ethernet Shield prezintǎ o conexiune standard RJ-45 cu o linie de transformare integratǎ și cu alimentarea Ethernet activată.
Conectorul de card MicroSD poate fi folosit pentru a stoca fișiere care vor fi prelucrate ulterior de cǎtre utilizatorii interesați. Acesta este compatibil atât cu Arduino Uno cât și cu Arduino Mega,utilizându-se biblioteca Ethernet. Conectorul de card MicroSD de pe placǎ este accesibil prin biblioteca SD. Când se lucreazǎ cu aceastǎbibliotecǎ, SS este pe Pinul 4. Revizuirea originalǎ a scutului(shield-ului) conține o marime întreagǎ a slotului de card SD; acest lucru nu este acceptat.
De asemenea, scutul (shield-ul) conține și un buton de resetare, pentru a se asigura cǎ modulul Ethernet W5100 este resetat corect la pornire. Revizuirile anterioare ale scutului(shield-ului) nu erau compatibile cu Arduino Mega, de aceea a fost necesarǎ resetarea manualǎ dupǎ pornire.Scutul( shield-ul) actual are un modul a Power over Ethernet (PoE) programat sǎ alimenteze cu energie printr-o pereche de cabluri de rețea(Ethernet) rǎsucite de categoria5.
Nivel redus al zgomotului și al variației curentului(100mVpp);
Intervalul tensiunii de ieșire este între 36V și 57V;
Protecția lasupra-încărcare și la scurtcircuit;
Ieșirea este de 9V;
Izolația este de 1500V(de la intrare la ieșire).
Scutul(shield-ul) nu are modululPoE inclus. Modulul reprezintǎ o componentǎseparatǎce trebuie să fie adăugatǎ în scut(shield)[16].
Arduino comunicǎ atât cu cardul SD cât și cu cipul W5100 utilizând magistrala SPI. Aceasta este pe pinii digitali 10,11,12 și 13 pe Arduino Uno și pe pinii 50, 51 și 52 pe Arduino Mega. Pe ambele plǎci pinul 10 este folosit pentru a selecta cipul W5100 și pinul 4 pentru cardul SD.Acești pini nu pot fi folosiți pentru intrǎri/ieșiri(I/O) generale. Pe Arduino Mega pinul hardware SS,53 nu este utilizat pentru a selecta nici cipul W5100 sau cardul SD dar trebuie pǎstrat ca ieșire, altfel interfața SPI nu funcționeazǎ[16].
Weather Shield(Arduino Shield)
Weather Shield este ușor de utilizat și conține senzori cu ajutorul cărora se pot măsura: presiunea barometrică, umiditatea relativă, luminozitate și temperatura. Există, de asemenea, legături de pe acest scut la senzori opționali,cum ar fi viteza vântului, direcția, pluviometru și GPS pentru localizare și sincronizare foarte precise.
Figura 4.6Weather Shield[16]
Acest Weather Shield utilizeazăHTU21D pentru umiditate, MPL3115A2 pentru presiunea barometrică, ALS-PT19 pentru senzorii de lumină și se bazează pe HTU21D și bibliotecile MPL3115A2 Arduino. Fiecare scut(shield) are două spații nepopulate: un conector RJ11 și un conector GPS cu 6 pini. În cele din urmă, fiecare Weather Shield poate funcționa de la 3.3V pânǎ la 16V și a fost construit cu stabilizatoare de tensiune și traductoare de semnal.
Figura 4.7Schema bloc-Weather Shield [16]
În figura de mai sus este reprezentată schema bloc a plăcii Weather Shield.
Senzori
Senzorul este dispozitivul expus unui fenomen fizic care produce un semnal de ieșire proporțional. Acest dispozitiv răspunde la variația unui fenomen fizic și convertește o formă de energie în altă formă de energie. De aceea se mai numește și traductor. Acesta prezintă la intrare o formă de energie si o alta la ieșire.
În figura 4.8 este descrisă structura sistemelor senzoriale, sisteme capabile să identifice în condiții limită și nu numai, parametrii mediului ambiant și să reacționeze la modificările acestora[24] .
Prin senzor se înțelege dispozitiv tehnic destinat înzestrării mașinilor cu simțuri[24]. Există mai multe tipuri de senzori precum:
Senzor de temperatură;
Senzor de umiditate;
Senzor de luminozitate;
Senzor de presiune.
În cele ce urmează vor fi descriși senzorii utilizați în acest proiect.
Senzor de temperaturǎ/umiditate – HTU21D
Noul senzor digital de umiditate cu ieșirea temperaturii de MEAS(Metrology Engineering Applications Solutions) este pe cale de a stabilii noi standarde în ceea ce privește mǎrimea și inteligența. Senzorul de umiditate și temperaturǎ este încorporat într-o capsulă DFN(Dual Flat No leads) cu dimensiunea 3×3 mm și înǎlțimea 0.9 mm și furnizeazǎ semnale liniare calibrate în format digital.
Fiecare senzor este calibrat și testat individual. Identficarea lotului este printat pe senzor și codul electronic de identificare este stocat în cip care poate fi afișat la comandǎ. Mai mult de atât, rezoluția senzorului de umiditate poate fi schimbat la comandǎ de la 8/12 biți la 12/14 biți pentru RH/T.
Caracteristici ale senzorului de umiditate/temperaturǎ:
Interschimbabilitate totalǎ fǎrǎ calibrare în condiții standard;
Desaturarea instantanee dupǎ perioade lungi în faza de saturare;
Compatibile cu procese automatizate agregate;
Marcarea individualǎ pentru asigurarea cerinței stricte de transabilitate [15].
Figura 4.9Senzorul de umiditate/temperaturǎ[15]
În figura 4.9 este reprezentat senzorul de umiditate .
Senzor de altitudine/presiune – MPL3115A2
MPL3115A2 pune în contact un senzor de presiune MEMS ( Micro-Electro-Mechanical Systems) cu interfața bi-direcționalǎ I2C(Inter-IC) pentru a furniza cu acuratețe presiunea/altitudinea și temperatura. Ieșirile senzorului sunt digitizate cu o rezoluție mare de 24 biți CAD(Convertor Analog Digital) .
Caracteristici ale senzorului de altitudine/presiune:
Tensiunea de alimentare între 1.95V și 3.6V;
Interfața digitalǎ a tensiunii de alimentare este de la 1.6V pânǎ la 3.6V;
Citire directǎ:
Presiune: mǎsurarea se face pe 20 de biți (Pascali);
Altitudine: mǎsurarea se face pe 20 de biți (metri);
Temperaturǎ: mǎsurarea se face pe 12 de biți (grade Celsius);
Programabil;
Achiziția informației este autonomǎ;
Rezoluție de 1 ft./30 cm;
32 de eșantioane FIFO(First In First Out);
Rata de achiziționare a datelor se poate face de la 1 secundǎ până la 9 ore;
Interfața de ieșire digitalǎI2C opereazǎ pânǎ la 400 KHZ [15].
Figura 4.10Senzor de altitudine/presiune[15]
În figura 4.10 este reprezentat senzorul de presiune.
Senzorul de lumină – ALS-PT19
ALS-PT19- este un senzor de ambient accesibil din punct de vedere al costului, constând într-un fototranzistor în miniaturǎ SMD.
Caracteristici ale senzorului de lumină:
Proiectat pentru spectrul vizual al omului;
Liniaritate bunǎ a ieșirii în întregul interval acoperit de senzor;
Variații mici ale sensibilitǎții la diferite surse de luminǎ;
Performanța temperaturii este garantatǎ între -40CC și 85C;
Intervalul tensiunii de alimentare este între 2.5V și 5.5V;
Mǎrimea : 1.7mm (lungime)*0.8mm (lǎțime)*0.6mm (înǎlțime) [15].
Programele de dezvoltare software
MySQL
În această lucrare stocarea parametrilor măsurați se face în aplicația MySQL Workbench.Acesta este un instrumet garfic folosit pentru a lucra cu serverele și bazele de date MySQL.
MySQL Workbench reprezintă un instrument ce acoperă cele mai importante activitați de gestionare a bazelor de date.
SQL Development:permite să gestionezi conexiunile la serverele MySQL. De asemenea oferă posibilitatea de a executa interogări SQL. Această funcționalitate înlocuiește produsul anterior MySQL Query Browser.
Data Modeling: permite să creezi modele de baze de date în mod grafic, cât și editarea bazelor de date deja existente.Table Editor este menit pentru editare de tabele, coloane, indici, triggere, partiționare, opțiuni, inserturi și privilegii, rutine și view-uri.
Server Administration: permite să crezi și să administrezi instanțele de server.
Data Migration: permite să migrezi pe MySQL datele din Microsoft SQL Server, Sybase ASE, SQLite, SQL Anywhere, PostgreSQL. De asemenea, este util pentru migrarea de la versiunile anterioare de MySQL.
Metode de implementare a bazelor de date:
Bazele de date sunt folosite pentru stocarea informațiilor în vederea furnizǎrii ulterioare în funcție de solicitarea primitǎ.
MySQL este un sistem de baze de date funcțional independent.
În PHP există funcții pentru toate operațiile executate asupra bazelor de date MySQL.
Administrarea MySQL
Administrarea MySQL se poate face din linie de comandǎ sau folosind browser-ul și accesând aplicația numită PHPMyAdmin scrisă in PHP.
Cele mai uzuale operații cu baze de date sunt:
ComandaSemnificație
CREATE creazǎ o bazǎ de date sau un tabel
DROP șterge o bazǎ de date sau un tabel
INSERT adaugă înregistrări într-un tabel
DELETE șterge înregistrări dintr-un tabel
UPDATE updatează înregistrările într-un tabel
SELECT selectează un tabel
ALTER alterarea unui tabel
În MySQL spațiul alocat pe discul serverului este în funcție de tipui de date.Câteva din tipurile de date folosite in bazele de date MySQL sunt:
TipSemnificație
Int() număr întreg 32 biți
Bigint() număr întreg 64 biți
Tinyint() număr întreg(-128 la 127 sau 0 la 225) 8 biți
Mediumint() număr întreg 24 biți
Smallint() număr întreg 16 biți
Char() secțiune cu lungime
XAMPP
XAMPP asigură suport pentru crearea și manipularea bazelor de date în MySQL și SQLite între utilizatori.
Odată ce XAMPP este instalat, adresa de localhost a serverului XAMPP este tratată ca un server la distanță.
Proiectele ce se doresc a fi testate terbuie să se afle în folderul htdocs din xampp, pentru a fi rulate de serverul Apache.
PHP este un limbaj de programare ce rulează server, proiectat special pentru WEB. Într-o pagină HTML puteți îngloba cod PHP care va fi executat la fiecare vizitare a paginii.
Codul PHP este interpretat pe serverul WEB și genereazǎ un cod HTML care va fi vǎzut deUilizator (clientului (browserului) fiindu-i transmis numai cod interpretat ca și HTML).
PHP este un produs Open Source, cu acces la codul sursa. Se poate utiliza, modifica și redistribui, toate acestea în mod gratuit.
MySQL este un sistem de gestiune al bazelor de date, foarte rapid și robust.O bazǎ de date vă permite sǎ stocați, sǎ cǎutați, sǎ sortați și sǎ vǎ regǎsiti datele în mod eficient. Serverul MySQL controleazǎ accesul la datele dumneavoastrǎ pentru a garanta cǎ mai mulți utilizatori potlucra simultan cu acestea.
MySQL este un server multi-user (mai mulți utilizatori) și multi-thread (mai multe fire de execuție). Utilizeazǎ SQL (StructuredQueryLanguage),limbajul standard de interogare a bazelor de date din întreaga lume
Figura 5.1 Legǎtura dintre XAMPP MySQL și Arduino
În figura 5.1este descris modul în care se primesc parametrii de mediu mǎsurați cu ajutorul senzorilor ce se aflǎ pe placa Weather Shield.Primul pas este trimiterea unei cereri localhost cǎtre server Apache oferit de programulul XAMPP care va fi prezentat în figura 5.2. În momentul în care aceastǎ cerere este inițiatǎ se vor verifica:
Conexiunea cu baza de date MySQL. Aceastǎ conexiune se verificǎ cu ajutorul unui script PHP numit “Connetion.php”. În momentul compilǎrii pot apǎrea erori precum eroarea “1049” ce ne avertizeazǎ cǎ baza de date nu a fost creatǎ și în cazul acesta, baza de date este creatǎ automat. O altǎ eroare poate sǎ aparǎ atunci cand avem probleme la autentificare. De exemplu user sau parola nu sunt cunoscute.
Scriptul “add_data.php” pe care îl apeleazǎ Arduino atunci când apare conexiunea la server.Astfel serverul preia cererea de la Arduino cu funcția GET care la rândul sau apeleazǎ scriputul “Connetion.php”. Dacǎ conexiunea este în regulǎ atunci se insereazǎ în baza de date într-un timp real valorile corespunzătoare senzorilor.
Scriptul “index.php” conține biblioteca pentru a putea creea grafice în momentul în care se face conexiunea. Acest script este utilizat pentru afișarea valorilor mǎsurate în pagina principalǎ atunci când este accesat localhost-ul.
Figura 5.2 Kit-ul XAMPP
Se acceseazǎ meniul dupǎ care se introduce numele bazei de date. Astfel, parametrii se pot vizualiza print-o comandǎ MySQL prezentatǎ în figura de mai jos.
Figura 5.3 Realizarea Bazei de Date
Instalare drivere Arduino
Am ales să folosesc Arduino pentru a achiziționa și a vizualiza parametrii de mediu, deoarece în jurul acestuia existǎ un ecosistem de dispozitive extrem de bine dezvoltat. Orice informație dorim sǎ culegem din mediu, orice conexiuni cu alte sisteme am avea nevoie, existǎ o șansa foarte mare sǎ gǎsim un dispozitiv pentru Arduino capabil sǎ ne ofere ce avem nevoie[22].
În cazul Arduino, totul este simplu de utilizat. Este nevoie de aproximativ 5 minute pentru a instala mediu de dezvoltare și pentru a scrie primul program pe Arduino. Nu este neceasar sǎ lipim fire ci este nevoie doar de un port USB liber.
Pentru a putea programa placa Arduino, primul lucru care trebuie fǎcut este sǎ instalam drivere-le pe PC. Rulând pe Windows va trebui sǎ instalǎm și driver-ele ca penru orice alt dispozitiv hardware. Driver-ele sunt disponibile în mediu de dezvoltare care se poate descǎrca de pe site-ul oficial Arduino. Trebuie descǎrcatǎ arhiva .ZIP și dezarhivatǎ într-un director la alegerea utilizatorului. Conectǎm apoi placa Arduino la portul USB. PC-ul va detecta un nou dispozitiv și va cere instalarea drivere-lor. Va trebui sǎ alegem opțiunea de instalare prin care comunicǎm windows-ului cǎ avem driverele și astfel ii cerem acestuia sǎ nu se conecteze la Internet pentru a cǎuta în mod automat. Trebuie selectat directorul “drivers” din directorul unde s-a dezarhivat arhiva .ZIP de la pasul precedent. Procesul va continua cu “Next”. În final dacǎ deschidem Device Manager, în secțiunea “Ports ( COM & LPT)” ar trebui sǎ vedem o intrare numitǎ “Arduino Mega 2560”[22].
Figura 5.4 Port Arduino Mega 2560
Dupǎce ai instalat drivere-ele, urmǎtorul pas este sa iți programezi placa Arduino. Ruleazǎ programul "Arduino", din mediul de dezvoltare pe care l-ai descǎrcat. Arduino se conecteazǎ la PC prin intermediul unui port serial. Primul pas pe care îl ai de fǎcut este sǎ determini acest port. Cea mai simplǎ cale este sǎ conectezi placa, aștepti circa 30 de secunde – 1 minut, ca sǎ fii sigur cǎ a fost detectatǎ de PC, iar apoi trebuie deschis meniul "Tools -> Serial Port". Ar trebui sǎ se observe una sau mai multe intrǎri. Se deconecteazǎ placa Arduino din portul USB. Se deschide din nou meniul "Tools -> Serial Port". Acel port care a dispǎrut este portul asociat plǎcii Arduino. Se conecteazǎ din nou placa Arduino la PC, se așteaptǎ sǎ fie recunoscutǎ de PC, apoi se selecteazǎ portul respectiv din meniul "Tools -> Serial Port". Următorul pas este selectarea tipului de placa cu care lucrezi. Din meniul "Tools -> Board", selecteazǎ tipul de placǎ cu care lucrezi[22].
După instalarea kitu-ului Arduino putem compila codul sursǎ al aplicației și putem stabilii conexiunea cu server-ul. Acest lucru va fi prezentat în figura 5.5.
Figura 5.5Conexiune Arduion-Server
Dupǎce s-a stabilit conexiunea dintre Ardiuno și server putem deschide un browser pentru a accesa localhost-ul care permite afișarea informațiilor dorite pe baza unor garfice și tabele corespunzatoare fiecǎrui senzor de pe placa Weather Shield conform figurii de mai jos.
Figura 5.6Grafic parametri mǎsurați
Aplicația este utilizatǎ pentru a furniza grafice și tabele care afișeazǎ valorile înregistrate în:
Ziua Curentǎ;
Sǎptamana Curentǎ.
Graficele sunt compuse din doua axe: OX și OY. Pe axa OX sunt afișate ore respective zile iar pe axa OY sunt afișați parametrii de mediu :temperatura, umiditatea. luminozitatea și presiunea.
Figura de mai jos indicǎ faptul cǎ valorile mǎsurate din sǎptǎmâna curentǎ sunt stocate într-un tabel din baza de date și reprezentate printr-un garific.
Figura 5.7Grafic și Tabel din Sǎptǎmâna curentǎ
Tema își propune ca achiziția datelor sa se poată face în orice moment fară a pierde informații utile. De aceea, există posibilitatea ca în momentul afișării parametrilor măsurați, utilizatorul să poată alege ziua si intervalul orar în care s-au facut măsurătorile. Acest lucru prezintă un mare avantaj deoarece toate datele sunt afișate si memorate pentru a fi accesibile utilizatorului în orice moment așa cum se poate observa și în figura 5.8.
Figura 5.8 Selectarea datelor
Realizarea practică
Pentru această lucrare am ales trei plăci Arduino, acestea fiind Arduino Mega 2560, Ethernet Shield si Weather Shield pe care le- am descris în capitolul 3. Ele sunt conectate la calculator printr-un cablu Ethernet și printr-un cablu USB ce permite achizitionarea și măsurarea parametrilor citiți de către senzorii plăcii Weather Shield.
Realizarea practică este prezentată în figura de mai jos.
Figura 5.9 Realizarea practică
După cum se poate observa în figura 5.9, cele trei plăci Arduino sunt suprapuse una peste alta corespunzător pinilor. De exemplu pinii SDA și SCL de pe Arduino Mega 2560 sunt legați la pinii SDA și SCL de pe placa Weather Shield pentru a transmite datele serial. În comunicația serială, datele sunt transmise bit cu bit.Toate comunicațiile sunt caracterizate de trei elemente principale:
Date– înțelegerea lor, cantitate, scheme de codificare,
Temporizări- sincronizarea între frecvență și fază, receptor și emițător
Semnale- tratarea erorilor, controlul fluxului și rutare
Figura 5.10 Magistrală Serială Universală
Am utilizat un cablu USB care reprezintă un nou standard de comunicație serială de viteza mică, al cărui scop este interfațarea mai ușoară intre echipamente periferice și calculator. Nu este necesară instalarea unei plăci PCI pentru fiecare periferic nou, fară configurare manuală sau necesitatea restartării sistemului. Lungimea cablului folosit este de 50 cm. Acesta are la un capăt conector de tip A pentru conectarea la calculator(master) si la celălalt capăt, un conetor de tip B pentru conectarea la periferic(slave), așa cum se poate observa in figura 4.10.
De asemenea am utlizat și un cablu ethernet ce asigură o conexiune fiabilă cu un calculator pentru schimbul de date. Lungimea cablului este de 1.5 m.
Figura 5.11 Cablu Ethernet
Un avantaj îl prezintă faptul că în cazul utilizării unui calculator performant, acel cablu Ethernet se poate comporta ca un cablu RJ-45 „crossover” . Altfel spus, în cazul în care nu există conexiune la o rețea, atunci cablul Ethernet se comportă ca un cablu obișnuit, fară a se întrerupe legătura între Arduino și calculator.
Realizarea practică a acestei lucrări a constat atât în înțelegerea schemelor bloc ale plăcilor Arduino cât și funcționalitatea acestora. Astfel am reușit să realizez conexiuni între cele trei plăci Arduino datorită pinilorrezultând stația meteo. Conexiunea între stația meteo și calculator se obține prin intermediul cablurilor prezentate mai sus.
După stabilirea conexiunilor am reușit să construiesc un dispozitiv ce poate fi programabil cu ajutorul programului Arduino.
Date experimentale
Timp de o săptămâna au fost achiziționati parametrii de mediu cu ajutorul celor trei plăci conectate la calulator. Astfel, se pot observa diferențe de temperatură, umidate, luminozitate dar și de presiune în anumite intervale orare sau în diferite zile. Acest experiment a fost făcut din data de 21 Iunie 2015 până în data de 27 Iunie 2015 ceea ce se poate vedea și din următoarea figură:
Figura 5.12Temperatura pe o săptămână
În funcție de valorile măsurate în acea săptămână se poate face o analiză a vremii cu ajutorul unor instrucțiuni MySQL. Astfel, se poate observa care a fost valoarea maximă sau minimă atât a temperaturii , umidității, luminozității cât și a presiunii
Figura 5.13 Valorile limită ale parametrilor
În figura de mai sus sunt prezentate valorile parametrilor în condițiile limită și instrucțiunile MySQL.
Scurtaprivireasupradatelorînregistrate
Pentru a testa stația meteo realizatǎ, au fost ȋnregistrate câteva serii de date. Pe durata ȋnregistrǎrilor, stația a fost locată în campus Leu. Ȋn mod evident, locația ȋn care s-au fǎcut ȋnregistrǎrile, au afectat valoarea mǎsurǎtorilor.
Mǎsurǎrile realizate cu stația au fost stocate ȋntr-un laptop.
Iatǎ mai jos alura evoluției parametrilor de mediu monitorizați, pe perioadele de monitorizare.
Figura 5.14 Evoluția temperaturii în 23.06.2015 pentru o perioadă de timp stabilită
Figura 5.15 Evoluția temperaturii în 24.06.2015 pentru o perioadă de timp stabilită
Figura 5.16 Evoluția temperaturii în 26.06.2015 pentru o perioadă de timp stabilită
Deși perioada de monitorizare a fost prea scurtǎ pentru ca datele sǎ facǎ obiectul unei analize cu instrumente de predicție de tipul seriilor de timp, se pot analiza alte aspecte ale acestor ȋnregistrǎri.
Un astfel de aspect ȋl constituie corelația dintre variațiile parametrilor monitorizați. Coeficientul de corelație, pentru douǎ șiruri discrete de date, și respectiv, are expresia data de relația de mai jos:
,
unde:
; ;
; .
Coeficientul de corelație oferǎ indicații despre modul ȋn care se raporteazǎ una la cealaltǎ, cele douǎ variații (seturi de date) considerate, cât de asemǎnǎtoare sau de diferite sunt acestea. Valorile coeficientului de corelație și sunt ȋntre -1 și 1: pentru r=1 cele douǎ variații coincid, ȋn timp ce pentru r=-1 cele douǎ variații sunt complet opuse (de exemplu ).Ȋntre aceste douǎ extreme se pot considera variațiile asemǎnǎtoare pentru r>0.5, opuse dacǎ r<-0.5 și fǎrǎ legǎturǎ ȋntre ele pentru valori ȋn jurul valorii zero.
Ȋn tabelele de mai jos sunt prezetate valorile coeficienților de corelație calculate pentru seturile de date ȋnregistrate de stația meteo.
Tabel 5.1 Coeficienții de corelație ai datelor ȋnregistrate de stația meteo
Tabel 5.2 Coeficienții de corelație ai datelor ȋnregistrate de stația meteo în 23.06.2015
Tabel 5.3 Coeficienții de corelație ai datelor ȋnregistrate de stația meteo în 24.06.2015
Tabel 5.4 Coeficienții de corelație ai datelor ȋnregistrate de stația meteo în 25.06.2015
Se observǎ cǎ luminozitatea se coreleazǎ diferit cu ceilalți parametrii de mediu. Aceasta se datoreazǎ faptului cǎ lumiozitatea ȋnregistratǎ nu a fost cea asociatǎ cu elementele naturale (zi, noapte, ziseninǎ, ziȋnnoratǎ etc.), ci a fost afectatǎ de elemente artificale (iluminat public, iluminat interior etc.).
De asemenea, corelațiile presiunii cu ceilalți parametrii de mediu sunt ȋn contradictorii. Aceasta s-a datorat, ȋn principal faptului cǎ presiunea s-a ȋnregistrat cu acuratețe de doar douǎ zecimale, ceea ce a dus la reflectarea defectoasǎ a variațiilor presiunii pe durata monitorizǎrii.
Drept consecințǎ a acestor prime observații s-a modificat, pentru monitorizǎri viitoare, modul de ȋnregistrare al presiunii și s-a plasat stația meteo ȋntr-o locație feritǎ de surse artificiale de luminǎ sau chiar de lumina directă soarelui.
Singura corelație care s-a dovedit consistentǎ, menținându-și semnificația, este cea dintre temperatura și umiditate. Acești doi parametrii variazǎ ȋn sens opus pe perioada monitotizǎrii: atunci când umiditatea crește, temperature scade, așa cum indicǎ și coeficientul de corelație negativă și cu valori mai mici de -0.5.Acestǎ situație s-ar putea explica, cel puțin la nivel calitativ, prin faptul cǎ la evaporarea apei – care conduce la creșterea umiditǎții ȋn atmosferǎ – apa absoarbe cǎldurǎ latentă de evaporare.
Având ȋn vedere comcluziile de mai sus, s-au efectuat alte înregistrǎri pentru temperatură și umiditate (presiunea nu se poate mǎsura cu o rezoluție satisfacǎtoare iar luminozitatea este perturbatǎ de prea mulți factori ce nu au legǎturǎ cu aspectele meteorologiei).
O primǎ analizǎ a acestor date poate consta ȋn eliminarea acelor seturi (perechi de date temperatură-umiditate) care nu sunt reprezentative pentru raportul sau dependența dintre temperatură și presiune mǎsurate simultan, ȋn aceeași locație.
Datele experimentale sunt ȋnsǎ afectate, ȋn mod inevitabil, de erori. Natura acestor erori poate fi diversǎ ȋnsǎ pot fi clasificate ȋn douǎ categorii [25].
Erori datorate unor cauze inerente de variațiea procesului de funcționare a sistemului, cauze ce nu pot fi eliminate din funcționarea normalǎ a acestuia și care nu afecteazǎ ȋn mod esențial relațiile funcționale a cǎror identificare se urmǎrește;
Erori datorate unor cauze speciale de variație. Aceste cauze se datoreazǎ unor stǎri anormale, nespecifice sistemului și procesului analizat, cum ar fi defecțiuni, fricțiuni excesive ȋntre elementele aflate ȋn mișcare relativǎ, blocaje accidentale etc., și genreazǎ erori semnificative, care afecteazǎ, ȋn general, raporturile normale, naturale, ȋntre intrǎrile și ieșirile sistemului analizat.
Prezența celei de a doua categorii de cauze de variație ȋntr-un proces face procedeul dificil (dacǎ nu imposibil) de predicționat și este descrisǎ spunând cǎ procesul se gǎsește ȋn afara condițiilor de control statistic. Ȋn mod evident, datele afectate de erori induse de cauze speciale trebuiesc eliminate din datele experimentale ȋnainte de a iniția identificarea sistemului pentru a asigura stabilitatea ȋn timp a raporturilor dintre variabilele care constituie intrǎrile și ieșirile sistemului și pentru a obține astfel o imagine consistentǎ, nedistorsionatǎ a sitemului.
Practica controlului statistic al proceselor oferǎ o gamǎ largǎ de procedee pentru a detecta datele care nu reflectǎ cu adevǎrat funcționarea sistemelor. Ȋntre acestea, procedeele de tip multivariabilǎ ocupǎ o poziție distinctǎ. De altfel, acestea sunt procedeele de interes pentru aplicația consideratǎ deoarece ansamblul ieșirilor și intrǎrilor sistemului poate fi considerat ca o variabilǎ multidimensionalǎ.Lucrări ca “Monitoring of Complex Product Quality” și„Diagnosticarea și controlul variabilității proceselor în industria modenă- Abordări și metode moderne” arată faptul că, dacǎ se execută procesul prin variabile multidimensionale, structura internă a procesului este surprinsă de variabila HotellingT2, variabilă utilizată în mod frecvent pentru monitorizarea multidimensională. Cu ajutorul acestei variabile se poate concepe un test statistic.
Identificarea relațiilor dintre variabilele ce caracterizează procesul și eventual gruparea acestora în agregate de variabile reprezintă o problemă strâns legată de procesul în sine. De aceea, rezolvarea acestei probleme revine, în general, specialiștilor din domeniul căruia îi aparține sistemul considerat.
În ceea ce privește statistica de control multicriterială, dintre abordările cunoscute, variabila de tip Hotelling T2 este considerată ca fiind cea mai versatilă. Această variabilă poate fi utilizată pentru monitorizarea unui grup de variabile cu valori distribuite normal. Aceste caracteristici pot fi considerate, în ansamblu, ca elemente ale unei variabile normale multidimensionale X= N (, ), în care X= [x1,…, xm]T reprezintă vectorul variabilelor normale considerate, =[1, …, m]T reprezintă vectorul mediilor și = reprezintă matricea de covarianță a celor m variabile unidimensionale ce alcătuiesc vectorul X.
Trebuie făcută observația că deși datele nu au în general o distribuție normală, dacă valorile acestora au fost obținute ca medii ale unui anumit număr de repetări, distribuția acestora se apropie, conform teoremei limite centrală, de cea normală. În aceste condiții, este rezonabilă utilizarea variabile Hotelling.
De cele mai multe ori, vectorul și matricea nu sunt cunoscute, ci sunt estimate pe baza unui eșantion, prin și respectiv S. Variabila Hotelling se construiește utilizând relația:
. (6.1)
Pentru această variabilă, în diferite situații practice, se pot stabili limite de control [6]. Depășirea acestor limite are semnificația semnalării unei modificări semnificative în structura relațiilor dintre caracteristicile de calitate agregate în variabila Hotelling.
Pentru determinarea limitei de control, se consideră modelul conform căruia matricea de corelație pentru populațiile din care provine eșantionul de proces, este aceeași. Conform acestui model, variabila T2 poate fi aproximată printr-o repartiție beta:
, (4)
în care N corespunde numărului de seturi de date din eșantionul pentru care s-a realizat analiza procesului, iar p corespunde numărului de variabile agregate în statistica de control T2. Valoarea limitei superioare de control determinată pe baza modelului (4), pentru un nivel de semnificație de 0,999 sau 99.90%.
Temperatura și umiditatea s-au considerat drept componente ale unei variabile normale cu dimensiune doi și, cu ajutorul programului STATISTICA, s-au efectuat calculele indicate prin formulele de mai sus și s-au obținut valorile T2 precum și valoarea criticǎ pentru nivelul de semnificație ales T2critic=4,76. S-a obținut diagrama din figura de mai jos și s-au eliminat datele corespunzǎtoare punctelor care depǎșesc valoarea T2critic.
Figura 5.17 Evaluarea aparteneței seturilor de date temperatura-umiditate la o aceeași populație statstică definită prin raporturile dintre variabile cu ajutorul variabilei Hotelling T2 – Runda 1
Dupǎ eliminarea datelor cu T2>T2critic, se repetǎ calculu și se obține diagrama de mai jos:
Figura 5.18 Evaluarea aparteneței seturilor de date temperatura-umiditate la o aceeași populație statstică definită prin raporturile dintre variabile cu ajutorul variabilei Hotelling T2 – Runda 2
Se eliminǎ datele cu T2>T2critic și se repetǎ procedeul pânǎ ce se obțin doar date pentru care T2T2critic. Pentru eliminarea tuturor datelor afectate de erori datorate unor surse speciale de variabilitate au fost necesare ȋn total 4 runde de aplicare a procedurii descrise mai sus.
Figura 5.19 . Evaluarea aparteneței seturilor de date temperatura-umiditate la o aceeași populație statstică definită prin raporturile dintre variabile cu ajutorul variabilei Hotelling T2 – Runda 4
Ȋn urma parcurgerii celor 4 runde de curǎțire a datelor experimentale de datele afectate de erori inacceptabile au rǎmas 37 de seturi de date utilizabile pentru identificarea sistemului sub aspectul relației funcționale dintre parametrii de comandǎ ai robotului și indicatorii de performanțǎ la parcurgerea traseului standard. .Aceste date sunt puternic corelate negativ. Coeficientul de corelație are valoarea 0,99865.
Aceste date sunt reprezentate – cu numere lor de ordine originale, ȋn figura de mai jos.
Figura 5.20 Seturile de date temperatură – umiditate rǎmase dupǎ elimiarea datelor afectate de erori excesive.
Datele considerate representative pentru relația temperatură –umiditate oferǎ posibilitatea evaluǎrii dependenței funcționale existente ȋntre aceși doi parametrii de mediu. Ȋn acest sens, figurile de mai jos prezintǎ aceastǎ dependențǎ ȋmpreunǎ, ȋmpreunǎ cu anumite curbe de regresie liniare și polinomiale de diverse grade. Curbele de regresie au fost determinate cu ajutorul metodei celor mai mici pǎtrate. Calculele și reprezentarea graficǎ s-au realizat cu programul Microsoft Excel.
Figura 5.21 Dependența funcționalǎ temperature-umiditate și curbe de regresie: a-liniarǎ, b- polinomialǎ de gradul 2, c-polinomialǎ de gradul 3.
Ȋn figura de mai sus, indicele R2 indicǎ proporția din variația conținutǎ ȋn setul de date temperature-umiditate care este explicate printr-o curbǎ de regresie sau alta. Expresia matematicǎ a acestui indice este:
Graficele din figura 5.21 ȋmpreunǎ cu valorile corespunzǎtoare ale indicelui R2, “aratǎ cǎ o funcție liniarǎ explicǎ satisfǎcǎtor dependența dintre temperature și umiditatea mǎsurate simultan, ȋn același loc”. Curbele de grad superior nu aduc un aport esențial ȋn raport cu dependența liniarǎ, așa cum indicǎ și valorile R2 [26].
Utilizând programul STATISTICA s-a aplicat acest test datelor .
CONCLUZII
Concluzionând cele arătate în capitolele anterioare, se poate constata că în lucrarea de față s-au realizat următoarele:
S-a proiectat o stație meteo bazată pe structuri din cadrul proiectului deschis (open project) Arduino;
S-a proiectat o bază de date pentru înregistrarea/colectarea unei game de parametrii de mediu măsurați de stația meteo;
S-a realizat atât stația meteo proiectată cât și conexiunea acesteia la baza de date, printr-un cablu ethernet.
S-a validat întreaga construcție prin realizarea efectivă de măsuratori ai parametrilor de mediu din zona București. Măsurătorile au acoperit intervale de la două minute până la patru ore.
S-a efectuat analiza preliminară a măsurătorilor cu mijloacele oferite de MySQL. Aceste prelucrări au inclus calculul unor parametrii statistici, cu ajurorul prelucrării grafice.
Pe principiul similar, s-a construit și o aplicație în care rezultatele măsuratorilor au fost înregistrate într-o bază de date plasată într-un calculator adresat prin local host. În acest caz, s-a utilizat un cablu ethernet pentru a conecata stația meteo(în structura căreia este inclus și un Ethernet Shield) cu calculatorul respectiv.
Iată în continuare câteva considerații privind elementele enumerate mai sus.
Stația meteo proiectată realizează măsurarea parametrilor în timp real și stocarea acestora într-o bază de date pe o perioadă de aproximativ două săptămâni în intervale orare specificate.
Informațiile pot fi accesate de către utilizator interogând baza de date în funcție de o anumită dată sau un anumit interval orar.
Datorită facilităților oferite de stația meteo realizată se pot observa variațiile de temperatură, umiditate, luminozitate și presiune,putându-se observa tendințele acestor variabile cu ajutorul unor grafice ce sunt generate în momentul în care conectăm Arduino la un calculator. Acesta permite, în principiu, realizarea de predicții asupra evoluțiilor ulterioare ale vremii, aspect de interes în multe activități economice si nu numai.
Prelucarea datelor măsurate se face mult mai ușor utilizând baza de date, putându-se accesa ȋn formatele si structurile dorite prin structurarea corespunzătoare a bazei de date respective.
Un avantaj al aplicației îl constituie faptul că această stație meteo poate fi utilizată de către orice persoană și poate fi plasată în orice locație se dorește achiziționarea datelor pe o perioadă nedeterminată, condițonată doar de fiabilitatea dispozitivelor care o alcătuiesc. Singura condiție este ca dispozitivul să fie conectat la un calculator cu ajutorul unui cablu Ethernet și unul USB. Cablul Ethernet realizează conexiunea între calculator și Ethernet Shield, iar cablul USB realizează conexiunea între calculator și placa Arduino Mega 2560.
Stația meteo realizată contribuie la procesul de automatizare în ceea ce privește măsuratorile și analiza efectuată asupra acestora. Majoritatea stațiilor meteo extrag parametrii într-un fișier pe care meteorologii trebuie să îi prelucreze separat. Aplicația de față realizează stocarea automată a datelor și totodată are capabilitatea de a genera automat grafice,ceea ce înseamnă, în ultimă instanță,chiar automatizarea prelucrării parametrilor de mediu.
Aplicația realizată în cadrul acestei lucrări se dovedește utilă, ușurând, într-o oarecare măsură, munca meteorologilor și făcând posibilă totodată extinderea rețelei de stații locale de măsurări meteorologice. În condițiile schimbărilor climatice care se manifestă atât global cât și local, această aplicație se poate dovedi cu atât mai importantă cu cât aceste schimbări afectează predictibilitatea meteorologică.
BIBLIOGRAFIE
[1] Prof.Beriliu Ilie, Curs Microcontrolere,(2012)
[2] Aplicații Arduino, http://www.robotics.ucv.ro/flexform/aplicatii, accesat la data de 21.03.2015
[3] Datasheet ATMEGA 2560, www.alldatasheet.com/datasheet-pdf/pdf/107092/ATMEL/ATMEGA2560.html, accesat la data de 21.03.2015
[4] Microcontrolerele AVR ATMEL pe 8 biți,http://electronicamicro.blogspot.ro/p/microcontrolere-avr-atmel-pe-8-biti.html, accesat la data de 22.03.2015
[5] SparkFun Weather Shield, https://www.sparkfun.com/products/12081, accesat la data de 26.03.2015
[6] Arduino Ethernet Shield, http://arduino.cc/en/Main/ArduinoEthernetShield, accesat la 26.03.2015
[7] Arduino Mega 2560, http://arduino.cc/en/Main/arduinoBoardMega2560, accesat la 26.03.2015
[8 ] Ș.L.Dr. Ing. Rodica Constantinescu, Curs MICROCONTROLERE, (2011-2012)
[9] Datasheet ATMEGA 2560, http://www.atmel.com/devices/ATMEGA2560.aspx, accesat la data de 26.03.2015
[10] ATmega2560-Arduino Pin Mappinghttp, ://www.arduino.cc/en/Hacking/PinMapping2560, accesat la data de 01.04.2015
[11] Dr.Radu Dănescu, Proiectarea cu Microprocesoare, (2014-2015)
[12] Arduino și robotică, http://www.robofun.ro/docs/curs/394854/CursGratuitArduino-Lectia1-ArduinoBlink.pdf, accesat la data de 10.04.2015
[13] Arduino Timers and Interrupts , https://arduino-info.wikispaces.com/Timers-Arduino, accesat la data de 15.04.2015
[14] Arduino, http://www.capisci.ro/articole/Arduino, accesat la data de 15.04.2015
[15] Weather Shield, http://www.robofun.ro/weather-shield, accesat la data de 17.04.2015
[16] SparkFun Weather Shiel, dhttps://www.sparkfun.com/products/12081, accesat la data de 17.04.2015
[17] Raportul Conferinței Anuale AAAS2013, http://www.bvb.ro/info/Raportari/RSCA/RSCA-Raport%20anual%202014-cu%20anexe.pdf, accesat la data de 20.04.2015
[18] Stefan Hepites, întemeietorul meteorologiei științifice din România, http://www.mixdecultura.ro/2014/04/stefan-hepites-intemeietorul-meteorologiei-stiintifice-din-romania, accesat la data de 18.05.2015
[19] Organizarea platformei meteorologice, http://www.scribd.com/doc/48277589/Organizarea-platformei-meteorologice, accesat la fata de 20.04.2015
[20] Proiectarea arhitecturală a unui sistem care realizează previziuni meteorologice- stație meteo, http://software.ucv.ro/~aion/ip/Laborator3/Exemplu.pdf, accesat la data de 20.04.2015
[21] Alexandru Sǎlceanu,PROIECTAREA CU MICROCONTROLERE 8051, Editura “GH.ASACHI”,(2002)
[22] ARDUINO PENTRU ÎNCEPĂTORI , Editura “robofun.ro”,(2013)
[23] Prof.Laurean Bogdan, Microcontrolere, (2012-2013)
[24] Prof. dr. ing. Marilena Lăcrămioara Glovnea, BAZELE SISTEMELOR MECATRONICE,(2011)
[25] SR ISO 3534-2:2009, Statistică. Vocabular și simboluri. Partea 2: Statistică aplicată
[26] Giura A., Gherghel N., Monitoring of Complex Product Quality, The 36-th International Scientific Symposium of the Military Equipment and Technologies Research Agency, May 26-27, 2005, Bucharest.
[27] Giura A., Diagnosticarea și controlul variabilității proceselor în industria modenă- Abordări și metode moderne,Editura Performantica, Iași, 2007.
ANEXA 1- Arduino Mega 2560 Schema Bloc
ANEXA 2Cod sursă al aplicației
Add_data.php
<?php
//se ocupa d eadaugarea datelor citite de arduino in baza de date
include("connection.php");
//realizaeaza conexiunea cu baza de date; daca baza de date nu exista io creeaza; daca tabela cu dtae meteo nu exista o creeaza
$con = connection();
$temperatura = (float)$_GET["temperatura"]; // valoare temperaturii este in parametrul temeprature din headerul http
$luminozitate = (float)$_GET["luminozitate"]; // valoare temperaturii este in parametrul luminozitate din headerul http
$umiditate = (float)$_GET["umiditate"]; // valoare temperaturii este in parametrul umiditate din headerul http
$presiune = (float)$_GET["presiune"]; // valoare temperaturii este in parametrul umiditate din headerul http
$temperatura/=100;
$luminozitate/=100;
$umiditate/=100;
$presiune/=100;
if($con != null)
{
$sqlString= "INSERT INTO DateMeteo (temperatura,umiditate,luminozitate,presiune,data) VALUES
(".$temperatura.",".$umiditate.",". $luminozitate.",".$presiune.", NOW())"; //introduce valorile in tabela cu data si ora curenta
if ($con->query($sqlString) === TRUE)
{
echo "Update succesfully "."Temp:".$temperatura." Umiditate:".$umiditate." Luminozitate:".$luminozitate." Presiune:".$presiune;
}
else
{
echo $con->error;
}
}
else
echo "Error connection to database !";
?>
Connection.php
<?php
function connection() {
$serverName = "localhost";
$userName = "root";
$password = "otilia";
$dbName = "StatieMeteo";
//Realizeaza conexiunea cu serverul
$myConn = new mysqli($serverName,$userName,$password, $dbName);
if($myConn->connect_error)
{
if($myConn->connect_errno==1049) //daca baza de date nu exista creeaz-o
{
$myConn = new mysqli($serverName,$userName,$password);
// Creaza baza de date daca nu exista deja
$sqlString = "CREATE DATABASE IF NOT EXISTS ". $dbName.";";
if ($myConn->query($sqlString) === TRUE) {
echo "Database created successfully";
$myConn = new mysqli($serverName,$userName,$password,$dbName);
} else {
die("Error creating database: " . $myConn->error);
return null;
}
}
else
{
die("Connection failed:".$myConn->connect_error."Numar eroare:".$myConn->connect_errno);
return null;
}
}
//Dupa ce s-a realizat conexiunea verifica creeaza tabelul daca nu exista deja
// sql to create table
$sqlString= "CREATE TABLE DateMeteo (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
temperatura FLOAT NOT NULL,
umiditate FLOAT NOT NULL,
luminozitate FLOAT NOT NULL,
presiune FlOAT NOT null,
data DATETIME
)";
if ($myConn->query($sqlString) === TRUE) {
echo "Table created successfully";
}
return $myConn;
}
?>
Index.php
<?php
/**
* Charts 4 PHP
*
* @author Shani <[anonimizat]> – http://www.chartphp.com
* @version 1.2.1
* @license: see license.txt included in package
*/
include("/phpchart/lib/inc/chartphp_dist.php");
include("connection.php");
$todayTemp = array();
$todayHum = array();
$todayLum = array();
$todayPress = array();
function retrieveTodayFromDb()
{
global $todayTemp, $todayHum, $todayLum,$todayPress;
$todayTemp = array();
$todayHum = array();
$todayLum = array();
$con = connection();
$sql = "SELECT temperatura,luminozitate,umiditate,presiune,time(data) FROM datemeteo WHERE DATE(NOW())=DATE(data) order by data desc;";
$result = $con->query($sql);
$data = array();
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
array_push($todayTemp, array($row['time(data)'],(float)$row['temperatura']));
array_push($todayHum, array($row['time(data)'],(float)$row['umiditate']));
array_push($todayLum, array($row['time(data)'],(float)$row['luminozitate']));
array_push($todayPress, array($row['time(data)'],(float)$row['presiune']));
}
return true;
} else {
false;
}
}
function drawTodayTemperatureChart()
{
global $todayTemp;
$p = new chartphp();
$p->chart_type = "line";
$p->data = array($todayTemp);
// Common Options
$p->title = "Chart Temperatura pentru Ziua Curenta";
$p->ylabel = "Temperature (°C)";
$p->xlabel = "Ora";
$out = $p->render('c1');
return $out;
}
function drawTodayTemperatureTable()
{
global $todayTemp;
echo "<table class='table table-striped'> ";
echo "<tr><th> Temperatura (°C)</th><th> Ora </th></tr>";
foreach($todayTemp as &$val)
{
echo "<tr>";
echo " <td> ".$val[1]."</td> ";
echo "<td>".$val[0]."</td> ";
echo "</tr>";
}
echo "</table>";
}
function drawTodayHumidityChart()
{
global $todayHum;
$p = new chartphp();
$p->chart_type = "line";
$p->data = array($todayHum);
// Common Options
$p->title = "Chart Umiditate Ziua Curenta";
$p->ylabel = "Umiditate (%)";
$p->xlabel = "Ora";
$out = $p->render('c2');
return $out;
}
function drawTodayHumidityTable()
{
global $todayHum;
echo "<table class='table table-striped'> ";
echo "<tr><th> Umiditate </th><th> Ora </th></tr>";
foreach($todayHum as &$val)
{
echo "<tr>";
echo " <td> ".$val[1]."</td> ";
echo "<td>".$val[0]."</td> ";
echo "</tr>";
}
echo "</table>";
}
function drawTodayLightChart()
{
global $todayLum;
$p = new chartphp();
$p->chart_type = "line";
$p->data = array($todayLum);
// Common Options
$p->title = "Chart Luminozitate Ziua Curenta";
$p->ylabel = "Luminozitate";
$p->xlabel = "Ora";
$out = $p->render('c3');
return $out;
}
function drawTodayLightTable()
{
global $todayLum;
echo "<table class='table table-striped'> ";
echo "<tr><th> Luminozitate </th><th> Ora </th></tr>";
foreach($todayLum as &$val)
{
echo "<tr>";
echo " <td> ".$val[1]."</td> ";
echo "<td>".$val[0]."</td> ";
echo "</tr>";
}
echo "</table>";
}
function drawTodayPressureChart()
{
global $todayPress;
$p = new chartphp();
$p->chart_type = "line";
$p->data = array($todayPress);
// Common Options
$p->title = "Chart presiune ziua curenta";
$p->ylabel = "Presiune(atm)";
$p->xlabel = "Hour";
$p->series_label = "Presiune(atm)";
$out = $p->render('c4');
return $out;
}
function drawTodayPressureTable()
{
global $todayPress;
echo "<table class='table table-striped'> ";
echo "<tr><th> Presiune(atm) </th><th> Ora </th></tr>";
foreach($todayPress as &$val)
{
echo "<tr>";
echo " <td> ".$val[1]."</td> ";
echo "<td>".$val[0]."</td> ";
echo "</tr>";
}
echo "</table>";
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Statie Meteo</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<!– Fonts –>
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz:400,700' rel='stylesheet' type='text/css'>
<!– Css –>
<link rel="stylesheet" href="boot/css/nivo-slider.css" type="text/css" />
<link rel="stylesheet" href="boot/css/owl.carousel.css">
<link rel="stylesheet" href="boot/css/owl.theme.css">
<link rel="stylesheet" href="boot/css/bootstrap.min.css">
<link rel="stylesheet" href="boot/css/font-awesome.min.css">
<link rel="stylesheet" href="boot/css/style.css">
<link rel="stylesheet" href="boot/css/responsive.css">
<link rel="stylesheet" href="./phpchart/lib/js/chartphp.css">
<!– jS –>
<script src="/phpchart/lib/js/jquery.min.js"></script>
<script src="/phpchart/lib/js/chartphp.js"></script>
<script src="boot/js/bootstrap.min.js" type="text/javascript"></script>
<script src="boot/js/jquery.nivo.slider.js" type="text/javascript"></script>
<script src="boot/js/owl.carousel.min.js" type="text/javascript"></script>
<script src="boot/js/jquery.nicescroll.js"></script>
<script src="boot/js/jquery.scrollUp.min.js"></script>
<script src="boot/js/main.js" type="text/javascript"></script>
</head>
<body>
<!– TOP HEADER Start
================================================== –>
<section id="top">
<div class="container">
<div class="row">
<div class="col-md-3">
<h1> Statie Meteo </h1>
</div>
<div class="col-md-6">
</div>
<div class="col-md-3 clearfix">
</div>
</div><!– End Of /.row –>
</div> <!– End Of /.Container –>
<!– MODAL Start
================================================== –>
</section><!– End of /Section –>
<!– MENU Start
================================================== –>
<nav class="navbar navbar-default">
<div class="container">
<div class="col-md-3">
<h5> Date meteorologice pentru: </h5>
</div>
<div class="collapse navbar-collapse col-md-9" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav nav-main">
<li class="active"><a href="#">Ziua Curenta</a></li>
<li ><a href="ultima_sapt.php">Saptamana curenta</a></li>
<li ><a href="zi_curenta_tabel.php">Ziua Curenta Tabel</a></li>
<li><a href="ultima_sapt_tabel.php">Saptamana Curenta Tabel</a></li>
<li><a href="select_data_chart.php">Alege data Chart</a></li>
</ul><!– End of /.nav-main –>
</div> <!– /.navbar-collapse –>
</div> <!– /.container-fluid –>
</nav> <!– End of /.nav –>
<!– breadcrumb Start
================================================== –>
<section id="tabbed-pane">
<div class="container">
<div class="row">
<div class="col-md-12">
<!– Nav tabs –>
<!– Nav tabs –>
<ul class="nav nav-tabs" >
<li class="active"><a href="#temperatura" >Temperatura</a></li>
<li><a href="#luminozitate" >Luminozitate</a></li>
<li><a href="#umiditate" >Umiditate</a></li>
<li><a href="#presiune" >Presiune</a></li>
</ul>
<!– Tab panes –>
<?php
if(retrieveTodayFromDb())
{
echo "<div id='temperatura'>";
echo drawTodayTemperatureChart();
//drawTodayTemperatureTable();
echo "</div>";
echo "<div id='umiditate'>";
echo drawTodayHumidityChart();
//drawTodayHumidityTable();
echo "</div>";
echo "<div id='luminozitate'>";
echo drawTodayLightChart();
//drawTodayLightTable();
echo "</div>";
echo "<div id='presiune'>";
echo drawTodayPressureChart();
//drawTodayPressureTable();
echo "</div>";
}
else
echo "Nu exista inregistrari ";
?>
</div> <!– End of /.col-md-12 –>
</div> <!– End of /.row –>
</div> <!– End of /.Container –>
</section><!– End of /.Single-product –><br>
<!– FOOTER Start
================================================== –>
<footer>
<div class="container">
<div class="row">
<div class="col-md-4">
<div class="block clearfix">
<p>
Statie meteo
</p>
</div> <!– End Of /.block –>
</div><!– End Of /.Col-md-4 –>
<div class="col-md-5">
</div><!– End Of Col-md-3 –>
<div class="col-md-3">
<div class="block">
<h4>Contact </h4>
<p ><i class="fa fa-map-marker"></i><span>Nume </span> Otilia Giura</p>
<p><i class="fa fa-phone"></i><span>Telefon:</span> (+40) 78 123 4567 </p>
<p class="mail"><i class="fa fa-envelope"></i><span>E-Mail:</span> [anonimizat]</p>
</div> <!– End Of /.block –>
</div><!– End Of Col-md-3 –>
</div><!– End Of /.row –>
</div><!– End Of /.Container –>
</footer><!– End Of Footer –>
<a id="back-top" href="#"></a>
</body>
</html>
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: Sistem de Achizitie Si Vizualizare Pentru Parametrii de Mediu Implementat cu Microcontroler Atmega 2560 (ID: 163485)
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.
