Monitorizarea Parametrilor de Mediu Dintr O Sera, In Vederea Inmultirii Lavandei

Capitolul I

Introducere

Acest proiect are ca scop principal, monitorizarea parametrilor de mediu (umiditate, temperatură și luminozitate) dintr-o seră, în vederea înmulțirii lavandei. Data logger-ul va fi montat într-o seră unde monitorizează într-un timp definit parametrii mediului.

Prin monitorizarea parametrilor din seră, se asigură repetabilitatea producției. Este bine cunoscut faptul că fiecare specie are nevoie de anumite condiții care trebuie menținute pentru a obține rezultate optime.

Motivul principal peaantru care s-a optat pentru construcția acestui sistem de monitorizare a spațiilor închise în care se înmulțesc plante aromatice și nu numai, este acela că documentațiile de specialitate nu oferă destulă informație cu privire la condițiile de mediu în care se înmulțesc butașii de lavandă.

Factorul principal care limiteaza raspandirea diferitelor specii de lavandă este temperatura. Plantele de lavanda pornesc în vegetație la temperaturi medii zilnice ale aerului în jurul a 10°C [1].

Modul de utilizare a acestei stații va fi:

crearea mai multor condiții simultan cu un număr egal de butași pentru fiecare condiție creată.

După două luni se va determina cazul în care a fost cel mai mare randament și se va compara cu condițiile de mediu în care aceasta a fost ținută.

a doua modalitate, prin care se va face util acest dispoziziv va fi acela de a-l mona în sera unui fermier care a înmulțit deja cu succes acest tip de plantă.

Factorii de mediu care o sa fie monitorizati si care au un rol important in înmultirea lavandei, sunt:

Lumina

La butașii erbacei lumina este necesară de la inceputul butașirii. Pentru butași lemnificari lumina este necesara numai în momentul pornirii mugurilor de crestere, pana atunci butași sunt ținuți la întuneric.

Umiditatea

Deoarece butașul nu are rădăcini, nu poate absorbi apa care se pierde prin transpirație. Pentru a limita deshidratarea și uscarea butațului trebuie diminuată transpirația. Aceasta se face prin creșterea umiditătii relative din jurul butașului prin: pulverizarea cu apă, ceață artificială, acoperirea constanta a frunzelor cu o peliculă de apă.

Temperatura

Alături de umiditate și lumina vom monitoriza și temperatura [2].

Dispozitivul cuprinde un SD card, un display grafic și trei butoane. Display-ul va forma interfața grafică cu utilizatorul prin care se va permite setarea orei și intervalului de achiziții a datelor prin intermediul a celor trei butoane.

Microcontrolerul va fi setat în mare parte a timpului într-o stare de sleep, și va fi trezit de alarma RTC-ului în momentul în care se dorește achiziția datelor. Toate datele achiziționate se vor stoca pe card în format CSV și vor fi prelucrate ulterior pe calculator.

Fig.1.1 Data Logger-ul

În figura de mai sus putem observa data logger-ul asamblat. Display-ul grafic de 84×48 pixeli, cât și cele 3 butoane de setare dispușe în următoarea ordine de la stânga la dreapta: minus, set, plus.

SD-card-ul poate fi inserat și retras pe lateralul dispozitivului printr-o simplă apăsare. În partea centrală a acestuia se poate observa microcontrolerul ATMega328P, iar deasupra butonului minus este situat RTC-ul cu cuațul aferent.

În partea superioară, din dreapta se poate observa șirul de pini prin care se vor lega sondele la dispozitiv.

Display-ul dispozitivului aparține tehnologiei pasive, fiind un display pozitiv-normally white, dot matrix- matricial. Modulul display-ului este format din backlight, adica LED-uri și celula display-ului, formată la randul ei din două bucăți de sticlă, un strat de ITO unde se găsesc linile și coloanele unei matrici de afișare pasive și două polarizatoare: una orizoltală și una verticală. Între cele două straturi de sticlă se gasesc cristalele lichide, care se orientează la diverse unghiuri de vizualizare funcție de tehnologia display-ului.

În partea din spate, într-un suport se afla 2 baterii AAA .

Capitolul II: Generalități

II.1 Structura unui data logger

Auzim astăzi adesea de wireless, internet, date din sateliți, dar totodată sunt comuni și termenii de arhivare a datelor -data logging/ data loggers. Majoritatea oamenilor au o vagă idee despre data logger și anume colectarea electronică de informații despre mediul înconjurător: temperatură, umiditate, consum de energie.

Un data logger este un instrument electronic care înregistrează masurători la intervale de timp, masurători care pot include:

Temperatura aerului

Umiditate relativă

Curent sau tensiune

Intensitate luminoasă

Temperatura apei

Oxigenul dizolvat

Directia si viteza vantului

Semnale de puls

Presiune diferențială

Timp utilizare

Precipitațile

Ocuparea unei camere

Și multe altele.

Data loggers sunt de obicei dispozitive compacte, alimentate de baterii și echipate cu un microprocesor intern, stocarea datelor și unul sau mai mulți senzori. Pot fii utilizate în aer liber, în interior, precum și sub apă, înregistrând datele nesupravegheate pana la cateva luni de zile.

Poate fii o singură unitate cu senzori interni cât palma unei mâini sau poate fii un multi-canal echipat cu unul sau mai mulți senzori externi [3].

Fig.2.1.Data logger[3].

Utilizarea data loggerelor în monitorizarea mediului a devenit comună în anii 1980 o dată cu explozia PC-urilor, fiind format din multe componente similare cu fabricarea unui calculator, devenind accesibile pentru o mai largă serie de aplicații.

Un data logger este utilizat pentru a colecta citiri sau ieșiri de la senzori, senzori care astazi pot să măsoare orice parametru fizic, de exemplu senzori care măsoara presiunea gazului din celule umane.

Senzorii sunt bazați pe teorii fizice și chimice, descoperite cu mult timp în urma, de exemplu teoria presiunii parțiale a gazelor, teoria Doppler, sau senzorii care fost dezvoltați din aplicații industriale, cum ar fii: distilare, rafinare, etc.

Cele mai importante componente a unui data logger sunt:

Canale de intrare

A/D convertor- Analogic la digital

Microprocesor

Memorie

Alimentare electrică

Output port

Carcasă rezistentă (de obicei din plastic)

Program soft [4].

II.2 SD card

Secure Digital sau prescurtat SD este un card de memorie foarte răspândit. Aparține de grupa memoriilor cu acces aleator și de grupa memoriilor SSD.

Memoria unui card este nevolatilă, adica nu necesită alimentare cu curent electric.

Fig.2.2 SD card[5].

SD-ul a fost dezvoltat în vederea utilizării în dispozitivele și aparatele portabile, găsindu-le astăzi în peste 8000 de modele:

SDHC

SDXC (capacitate maxima 2 TB)

Mini SD

Micro SD[5].

Fig.1.2.2. Scan disk SD card, diagrama bloc[6].

Interfața SD card perimite integrarea ușoară în orice design, indiferent de microprocesorul folosit, oferind în plus față de interfața pentru SD card un protocol de comunicare alternativ bazat pe standardul SPI [6].

Capitolul III: Analiză de literatură

III.1 Considerente teoretice – Microcontrolere

Cu mai bine de 30 ani în urmă a fost introdusă tehnologia care a schimbat radical modul în care analizăm și controlăm lumea din jurul nostru și anume apariția microprocesoarelor.

Un microcontroler este un computer într-un singur chip; el conține UCP (unitatea centrală de prelucrare) și un număr de periferice. Un microprocesor conține doar UCP, toate perifericile sunt externe. În literatura legată de microprocesoare, adesea întâlnim termenul “embedded system”. Microcontrolerele sunt utilizate pe scară largă în așa-numitele produse “embedded”. Aceste produse sunt proiectate pentru a executa un singur task sau proces și numai unul. O imprimantă, un monitor sunt exemple de produse “embedded” deoarece microcontrolerul conținut este proiectat pentru o anumită funcție: în cazul imprimantei în principal rolul microcontrolerului este de a culege date și a le imprima pe un suport corespunzător spre deosebire de un sistem bazat pe procesor Pentium care poate servi unui număr mare de aplicații. Softul destinat unei aplicații poate fi încărcat și rulat.

Un PC poate fi conectat la un numar mare de produse "embedded": tastatură, unitate CD, mouse și așa mai departe. Fiecare din aceste periferice pot conține un microcontroler programat pentru a executa anumite operații specifice. Deși microcontrolerele sunt de cele mai multe ori preferate pentru aplicații “embedded”, sunt totuși situații în care acestea nu sunt cele mai adecvate. Acesta este motivul pentru care în ultimii ani producătorii orientați spre microprocesoare de uz general (Intel, AMD, Cyrix) s-au orientat spre piața produselor “embedded”.

Una din cele mai critice nevoi în cazul unui produs “embedded” se referă la reducerea consumului de putere (multe produse sunt alimentate de la baterii) și spațiu, de aici apariția unor noi metode de optimizare a structurii microprocesoarelor în vederea unui consum redus (reducerea tensiunii de alimentare), precum și integrarea unui număr tot mai mare de periferice [7].

Din punct de vedere al arhitecturii un microcontroler trebuie să conțină un microprocesor și cel puțin o memorie. Astfel pornind doar de la aceste două componente s-au dezvoltat două tipuri de arhitecturi:

− arhitectura Von Neumann

− arhitectura Harvard

Arhitectura Harvard este o arhitectură de generație mai nouă și ea utilizează două module de memorie și două magistrale de date. Astfel există o memorie de program care în general este de tip ROM care beneficiază de propria magistrală de date, și mai există o memorie de date, în general de tip RAM care de asemenea are propria magistrală de date. Această arhitectură este puțin mai scumpă dar asigură viteze de transfer mai ridicate.

Din punct de vedere al modului de programare a microcontrolerelor acestea s-au dezvoltat pe două arhitecturi de CPU:

− CISC (Complex Instruction Set Computer)

− RISC (Reduced Instruction Set Computer)

Arhitectura RISC este o arhitectură mai nouă și ea este caracterizată de un număr mai redus de instrucțiuni. Acest lucru se poate realiza prin creșterea numărului de biți care corespunde unei instrucțiuni, ceea ce conduce la utilizarea ei într-o arhitectură Harvard.

Caracteristicile arhitecturii RISC:

– realizare hardware mai complexă

– conține un număr scăzut de instrucțiuni

– nu necesită regiștrii speciali

– dimensiune mai mare a programului [8].

III.2 Considerente teoretice – Tranzistorul

Tranzistorul bipolar este un dispozitiv electronic cu amplificare în curent (adica la care curentul între emitor și colector este determinat de curentul de baza). Pentru aceasta, tranzistorul trebuie polarizat corect, adică joncțiunea bază-emitor polarizată direct iar joncțiunea bază-colector polarizată invers.

Modurile de lucru ale tranzistorului, în așa numita “regiune activă normală” sunt:

• Tranzistor blocat

Tranzistorul este caracterizat în această situație de:

-VBE = 0 V (tensiunea bază – emitor mai mică decât tensiunea de deschidere a joncțiunii) iar VCE > 0 –în această situație ambele joncțiuni sunt blocate, deci nu trece curent între emitor și colector.

-între emitor și colector apare o rezistență foarte mare: Ic – curent de colector rezidual, de valoare foarte mică, de ordinul μA;

-Ib – curentul de bază 0.

• Tranzistor în conducție

Tranzistorul este caracterizat în această situație de:

-VBE > VBE0 (tensiunea de deschidere specificată în catalog pentru tranzistorul respectiv) iar VCE > VCEsat (specificată în catalog) – în această situație joncțiunea bază-emitor este polarizată direct, avem curent de baza IB diferit de 0; electronii care ajung din emitor în bază au energie cinetica suficient de mare încât să “treacă” de bariera de potențial a jonctiunii emitor-colector care este încă polarizată invers;

-între emitor și colector apare o rezistență din ce în ce mai mică, pe masură ce crește curentul de bază, deci curentul stabilit între emitor și colector este de forma IC = β* IB. Spunem că tranzistorul este în zona de conducție liniară.

•Tranzistor saturat

-VBE > 0.7V, VCE = 0.2V (valorile – emitor mai mică decât tensiunea de deschidere a joncțiunii) iar VCE > 0 –în această situație ambele joncțiuni sunt blocate, deci nu trece curent între emitor și colector.

-între emitor și colector apare o rezistență foarte mare: Ic – curent de colector rezidual, de valoare foarte mică, de ordinul μA;

-Ib – curentul de bază 0.

• Tranzistor în conducție

Tranzistorul este caracterizat în această situație de:

-VBE > VBE0 (tensiunea de deschidere specificată în catalog pentru tranzistorul respectiv) iar VCE > VCEsat (specificată în catalog) – în această situație joncțiunea bază-emitor este polarizată direct, avem curent de baza IB diferit de 0; electronii care ajung din emitor în bază au energie cinetica suficient de mare încât să “treacă” de bariera de potențial a jonctiunii emitor-colector care este încă polarizată invers;

-între emitor și colector apare o rezistență din ce în ce mai mică, pe masură ce crește curentul de bază, deci curentul stabilit între emitor și colector este de forma IC = β* IB. Spunem că tranzistorul este în zona de conducție liniară.

•Tranzistor saturat

-VBE > 0.7V, VCE = 0.2V (valorile sunt cele uzuale, în caz real sunt cele specificate în catalog);

-Pe masură ce creștem tensiunea VBE, la un moment dat se ajunge la saturarea joncțiunii bază-emitor și corespunzator și creșterea foarte puternică a curentului de bază (și implicit cel de colector). Tensiunea Vce ajunge la o valoare foarte mică, iar cele două joncțiuni (bază-emitor și bază-colector) sunt polarizate direct. În această situație, curentul de colector este limitat doar de rezistențele externe.

În cazul în care se dorește amplificarea unui semnal se utilizează tranzistorul în regiunea liniara a regimului activ normal iar daca se dorește utilizarea ca element de comutare (în circuitele logice) se utilizează în regim saturat-blocat.

Polarizarea corectă în cazul utilizării ca amplificator se realizează de obicei cu rezistoare ale caror valori se aleg astfel încât să se stabilească un anumit regim de funcționare în zona liniară a tranzistorului, adică IC = β* IB, unde IC reprezinta curentul de colector, IB reprezinta curentul de baza iar β reprezinta factorul de amplificare al tranzistorului (stabilit prin fabricatie) [9].

III.3 Considerente teroretice – RTC

RTC (Real-time clock) este un dispozitiv periferic de intrare, acesta având ca scop principal păstrarea orei exacte, asigurand o abatere anulală de maxim ±2s/an.

Multe dintre acestea au în dotare o ieșire, care devine logic 0 în momentul în care este declanșată o alarmă. Alarma poate fi setată prin configurarea regiștrilor de alarmă, iar în momentul în care aceasta este activată, este necesă o curățare a registrului pentru a opri alarma.

El vine sub forma unui circuit integrat, acesta comunicând pe o interfață serială I2C.

Fig.3.1 Schema bloc a unui RTC [10]

Este de asemenea prezent în aproape fiecare dispozitiv electonic care trebuie să aibe ora exactă.

Avantajele utilizării RTC-ului:

Consum mic de energie

Oprește sistemul principal pentru operațiile dependente de timp

Câteodată este mai precis decat alte metode.

Majoritatea RTC-urilor folosesc un cristal oscilator, iar unele folosesc frecventa liniei de alimentare. În multe cazuri, frecventa oscilatorului este 32.768 kHz, fiind aceeași frecvență utilizată și în ceasuri de mana din acelasi motiv și anume că frecvența este exact 215 cicluri pe secundă, convenabil circuitelor simple.

Adesea RTC-urile au o sursa alternativă de energie pentru a pastra timpul, atunci cand sursa primară de energie este indisponibilă. Acesta sursă alternativă de energie este o baterie cu litiu pentru sistemele vechi, în timp ce sistemele noi folosesc un supercapacitor, fiind reincarcabil [11].

III.4 Considerente teoretice –SPI

Fig.3.2 Reprezentarea SPI bus: single master și single slave[12].

Interfața seriala SPI (Serial Peripheral Interface) este o interfața sincronă standard de mare viteză, ce operează în mod full duplex. 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 (circuitul) digital master inițiază cuvântul de date. Mai multe dispozitive (circuite) digitale slave sunt permise cu slave select individual, adică cu selectare individuală.

SPI-ul are patru semnale logice specifice.

SCLK – Ceas serial (ieșire din master).

MOSI/SIMO – Master Output, Slave Input (ieșire din master).

MISO/SOMI – Master Input, Slave Output (ieșire din slave).

SS – Slave Select (active low, ieșire din master) [12].

SPI este o interfață folosită de obicei pentru a trimite date între microcontrolere și periferice mici, cum ar fi registrele de deplasare, senzori și carduri SD [13].

III.5 Considerente teoretice – Interfata I2C

Busul I2C sau Inter-IC a fost inventat de Philips cu 20 de ani in urma, proiectat la origine pentru a interactiona cu un numar mic de dispozitive de pe o singura placa, asa cum ar fi controlul reglajului unui radio sau a unui televizor. Capacitatea maxima admisa a fost aleasa de 400 pF pentru a permite timpi de crestere si de cadere adecvati pentru un clock optim si o integritate a datelor cu o viteza de varf de 100 kbit/s.

In 1992 viteza maxima a busului a fost crescuta la 400 kbit/s; toate dispozitivele I2C sunt proiectate sa lucreze impreuna pe acelasi bus de doua fire, iar o arhitectura functionala a unui sistem este limitata doar de imaginatia proiectantului.

Carcateristici generale ale interfetei I2C:

Magistrala contine doar doua linii: o linie seriala de date (SDA) si o linie de ceas serial (SCL)

Fiecare dispozitiv conectat la magistrala este adresabil prin software, avand o adresa unica; pe magistrala I2C se manifesta la orice moment de timp o relatie de tip master-slave;

Magistrala I2C este o magistrală multi-master, incluzând detecția conflictelor și arbitrarea acesteia, pentru a preveni alterarea informației dacă două sau mai multe dispozitive master inițiază transferuri simultane;

Transferurile bidirecționale de date, cu lungimi de 8 biți, pot fi efectuate cu rate de transfer de 100 kbit/s, în modul standard, sau cu maxim 400 kbit/s în modul rapid și 3,4 Mbit/s în modul foarte rapid;

Rejectarea impulsurilor scurte, parazite, de pe magistrală, este asigurată de circuitele de filtrare implementate în fiecare dispozitiv cuplat la magistrală; rejecția acestor impulsuri asigură pastrarea integrității datelor;

Numarul de dispozitive cuplabile pe aceeasi magistrală I2C este limitat doar de capacitatea maximă suportată de aceasta și care este 400 pF.

Specificațiile interfeței I2C

Pentru aplicații de control pe 8 biți, care necesită utilizarea de microcontrolere, pot fi stabilite înainte anumite criterii de proiectare:

Un astfel de sistem este produs din cel puțin un microcontroler și din alte dispozitive periferice, ca de pildă memorii și circuite de intrare-ieșire.

Criteriul principal de proiectare constă în minimizarea costului de interconectare a diferitelor dispozitive din componența sistemului.

Un sistem care asigură o funcție de control într-un proces nu necesită rate mari ale transferurilor de date.

Eficiența globală a sistemului depinde de natura circuitelor utilizate și de structura magistralei de interconectare a acestora.

Pentru a satisface aceste criterii este necesară utilizarea unei magistrale seriale, care deși nu permite rate de transfer a informațiilor atât de mari ca o magistrală de tip paralel, asigură minimizarea numarului firelor și a pinilor de interconectare între diversele circuite utilizate în proiect.

Dispozitivele care intercomunica prin intermediul unei magistrale seriale necesită utilizarea unor protocoale care au rolul de a elimina erorile, pierderile de informații și conflictele pe magistală și în plus, posibilitatea ca unele dispozitive rapide să poată comunica cu dispozitive lente. Este necesar ca sistemul să poată funcționa independent de numarul de dispozitive înglobate în structura sa.

Conceptul de magistrala I2C

Magistrala I2C permite cuplarea unor circuite compatibile în structura sistemului, indiferent de tehnologia de fabricație a acestora: NMOS, CMOS sau bipolară. Orice dispozitiv este recunoscut prin intermediul unei adrese unice asociate, indiferent dacă este vorba de un microprocesor, display cu cristale lichide, interfață de tastaură, și poate funcționa ca emițător sau receptor, depinzând de funcția realizată de acesta. O clasificare suplimentară a dispozitivelor cuplate la magistrala I2C constă în dispozitive master, respectiv slave.

Un dispozitiv master este acela care poate iniția un transfer de date pe magistrală și care generează semnalul de ceas ce inițiază transferul. În tot acest timp, orice alt dispozitiv adresat este privit ca slave.

Magistrala I2C este o magistrală de multi-master. Aceasta înseamnă că mai multe dispozitive care pot controla magistrala pot fi cuplate la aceasta. Posibilitatea de a cupla mai mult de un dispozitiv master la magistrală înseamnă că mai mult de un singur dispozitiv poate încerca să inițieze un transfer pe magistrală, la aceeași moment de timp. Pentri a evita această situație de incertitudine s-a elaborat o procedură de arbitrare a priorităților, bazată pe conectarea de tip ȘI-cablat a tuturor dispozitivelor la magistrală. Semnalele de ceas pe durata arbitrării de priorități reprezintă rezultatul sincronizării semnalelor de ceas generate de cele două dispozitive master prin utilizarea funcției de tip ȘI-cablat a liniilor de SCL. Generarea semnalelor de ceas pe magistrală revine întodeauna în sarcina dispozitivelor master; fiecare dispozitiv master generează propriul său semnal de ceas pe durata transferului de date pe magistrala sistemului. Semnalele de ceas de pe magistrală pot fi alterate numai dacă un dispozitiv slave lent forțează linia de ceas la nivel logic LOW sau de un alt dispozitiv master, pe durata arbitrării priorităților.

Ambele linii SDA și SCL sunt bidirecționale și conectate printr-o rezistență de pull-up la tensiunea de alimentare. Atunci cand magistrala este liberă ambele linii sunt în starea HIGH. Etajul de ieșire al dispozitivului conectat la magistrală trebuie să fie de tip open-drain sau open-collector pentru a se realiza funcția ȘI-cablat.

Tabelul 3.1. Definirea terminologiei pentru busul I2C

Transferul de date pe magistrala I2C

Datorită diversității tehnologiilor de implementare a circuitelor cuplabile la liniile interfeței I2C (CMOS, NMOS, bipolar) nivelele logice nu sunt fixate și depind de valoarea tensiunii de alimentare VDD. Pentru transferul fiecărui bit este generat câte un implus de ceas.

Validitatea datelor

Datele vehiculate pe linia SDA trebuie să fie stabile pe durata HIGH a impulsului de ceas. Modificările stării liniei SDA trebuie să se producă doar atunci cand semnalul de ceas este în LOW [14].

III.5.1 Considerente teoretice –SPI vs I2C

Fig.3.3 Reprezentarea SPI vs I2C[15].

Pentru conexiuni point-to-point, SPI este mai simplu și eficient

–“Less overhead” decât I2C datoritâ lipsei adresării, plus SPI este full duplex

Pentru slaves multipli, fiecare slave necesită semnal SS separat

–Necesita mai mult hardware decat I2C.

Ambele standarde sunt folosite cu succes pentru comunicația cu periferice lente ce sunt accesate intermitent (EEPROM-urile și ceasurile de timp real sunt exemple de astfel de device-uri):

• SPI este mai adecvat decat I2C la aplicațiile care folosesc stream-uri de date (spre deosebire de aplicațiile unde se citesc/scriu diverse locații din slave device). Un exemplu de aplicație ce folosește stream-uri este comunicația dintre micropocesoare sau DSP-uri (digital signal processors).

• SPI poate atinge rate de transfer semnificativ mai mari decat I2C – interfețele SPI putând funcționa la zeci de MHz.

• SPI este eficient mai ales în aplicații ce ii folosesc capacitatea de a realiza conexiuni full duplex, ca de exemplu comunicarea dintre un “codec” (coder-decoder) și un DSP, ce presupune trimiterea de sample-uri în ambele direcții.

• Datorită faptului că nu există suport built-in pentru adresarea device-urilor, SPI necesită mai mult efort și mai multe resurse hardware decât I2C, cand avem mai mulți slave.

• SPI este mai simplu și mai eficient în aplicații point-to-point (single master, single slave) din același motive: lipsa adresării device-urilor presupune mai puține date transferate.

Avantaje ale SPI:

– Comunicație full-duplex

– Transfer de date semnificativ mai mare

– Flexibilitate pentru bitii transferați (nu există limitarea la cuvinte de 8-bit, se pot trimite mesaje de orice lungime)

– Se interfațează ușor, usurința în folosire

– Mai eficient în comunicarea point-to-point

Dezavantaje SPI:

– Folosește mai multe fire/conexiuni

– Nu are suport pentru adresarea dispozitivelor;

– Este necesar câte un semnal de Slave Select pentru fiecare slave

– Nu exista flow control și slave acknowledgement (master poate “vorbi în gol” fară să știe).

– Suportă numai un singur master

– Funcționează pe distanțe mici spre deosebire de RS-232 sau RS-485 [15].

III.6 Considerente teoretice – Dispozitive periferice de ieșire

Monitorul este un dispozitiv periferic de ieșire care permite vizualizare rapidă a rezultatelor executării unei aplicații. Numit și ecran, video -terminal, display video etc., acest echipament periferic reprezintă una dintre componentele de bază ale configurației oricărui PC. Principalele caracteristici ale unui monitor sunt: claritatea imaginii, numărul de culori permis pentru afișare și nivelul de radiații.

Imaginea este formată din puncte individuale aprinse numite pixeli, care sunt elemente informaționale în format alfanumeric sau grafic. Un pixel are o serie de atribute, cum ar fi: aprins/ stins, culoare, clipire (blinking), strălucire etc. Calitatea imginii este dată în principal de rezoluție, care reprezintă numărul de pixeli ai ecranului.

Monitorul constituie componenta de bază în interfața cu utilizatorul/operatorul. El redă sub formă de imagini sau text, informații sau rezultate furnizate de procesor.

După numărul de culori pe care este capabil să le redea, monitoarele se clasifică:

monitoare monocrom, care pot afișa doar două culori, negru în combinație cu verde, alb sau galben,

monitoare cu nuanțe de gri care redau imaginea cu ajutorul nuanțelor de gri,

monitoare color care pe baza combinației RGB (Red – Green – Blue) și a variației de intensitate, formează imagini color.

Din punct de vedere constructiv, monitoarele pot fi de tip:

CRT -Cathode Ray Tube,

LCD – Liquid Crystal Display

PDP – Plasma Display Panels.

Cele mai noi modele de monitoare sunt cele cu plasmă sau de tip LED – Light – Emitting Display, exportând tehnologia de vizualizare din domeniu TV.

Monitoarele CRT folosesc o tehnologie mai veche, dar care se mai utilizează și astăzi. Ele sunt alcătuite dintr-un tub care are la un capăt un tun cu electroni, iar la celalalt capăt un ecran cu un înveliș fosforescent. Imaginile se obțin prin dirijarea fascicolului de electroni prin tubul care conține un gaz inert la o presiune scăzută, către ecranul încărcat cu sarcină pozitivă.

În momentul în care pelicula fosforescentă de pe ecran este bombardată de fascicolul de electroni, ea emite pixeli sub forma de lumină. Însă acesta durează foarte puțin și, prin urmare, ecranul trebuie bombardat în continuare în mod continuu. Acest proces se numește reafișare iar una dintre caracteristicile tehnice ale monitoarelor o constituie rata de reafișare sau frecvența. Majoritatea monitoarelor au o rată de reafișare de aproximativ 70 Hz, adică sunt afișate 70 de imagini pe secundă.

Din punct de vedere constructiv, monitoarele CRT sunt de două tipuri:

unele bombate care deformează ușor imaginea

unele care aplică tehnologia Trinitron, care sunt curbate pe orizontală dar plate pe verticală. Monitoarele CRT tip Trinitron oferă o calitate a imaginii mai bună la un preț de cost mai ridicat.

Monitoarele LCD au o tehnologie diferită de funcționare: un fascicul de lumină trece prin filtre speciale care o transformă în culorile roșu, verde sau albastru, iar electricitatea le direcționează la fiecare celulă. Aceste celule conțin câte 3 pixeli care au valorile culorilor roșu, verde și albastru (RGB).

Performanțele monitoarelor LCD depind foarte mult de tipul de model de ecran/panel folosit:

TN (Twisted Nematic), care este cel mai des folosit de producători datorită prețului de cost scăzut și rapidității, având rata de reafișare de 2 ms; în schimb, prezintă un unghi îngust de vizibilitate, luminozitate relativ scăzută și o reproducere inexactă a culorilor;

VA (Vertical Alignment), care are unghiul de vizibilitate îmbunătățit față de modelul TN, o reproducere mai bună a culorilor și o luminozitate mai mare, având nivelurile de negru cel mai bine redate dintre toate modelele, în schimb, timpul de răspuns și semnalul de intrare sunt mai lente iar costurile de fabricație sunt mai ridicate, fiind proporționale cu dimensiunea ecranului;

IPS (In – Plane Switching), care sunt cele mai lente din branșă și cele mai costisitoare, în schimb excelează la calitate și acuratețea culorilor;

PLS (Plane to Line – Switching), care au un unghi de vizibilitate similar modelului IPS, oferă o luminozitate mai mare și un consum energetic mai redus, fiind și mai ieftine decât modelul anterior.

Principial, fabricația ecranelor LCD are la bază două tehnologii majore: DSTN și TFT.

Tehnologia DSTN (Dual – Scan Twisted Nematic) constă în realizarea ecranului într-o structură multistrat. Primul strat îl constituie o placă de sticlă acoperită prin pulberizare cu un amestec uniform și omogen de oxid de metal. Materialele folosite sunt transparente pentru a nu diminua sau distorsiona calitatea imaginii. Sub primul strat se amplasează un al doilea strat de electrozi, care alimentează elementele necesare pentru funcționarea monitorului. Apoi se dispune al treilea strat prevăzut cu șanțuri microscopice care au rolul de a alinia cristalele lichide în poziția corectă. Culorile vizualizate pe ecran sunt rezultatul filtrării fasciculului de lumină prin filtrul de culoare. Totuși, acest proces este relativ lent și din acest motiv, la o mișcare mai rapidă a cursorului pe ecran sau la vizionarea unui film, pe monitor apar dâre pentru scurte perioade de timp.

Tehnologia TFT (Thin Film Transistor) se bazează în schimb pe o matrice activă și drept urmare, ecranul are strălucire și contrast foarte bune, comparabile cu cea a ecranelor CRT. Această tehnologie face ca dârele să dispară prin folosirea unui tranzistor pentru fiecare culoare a fiecărui pixel. Viteza de răspundere la comenzi este de aproximativ 25 ms. Monitoarele TFT pot fi mult mai subțiri decât cele DSTN, ceea ce le face mai flexibile și mai ușoare. Rata de reafișare a lor se apropie foarte mult de cea a monitoarelor CRT, ea fiind de aproximativ 10 ori mai mare decât cea a monitoarelor DSTN. Pentru o rezoluție de 1 024 x 768 sunt folosiți 2 359 296 tranzistori. Aceștia trebuie însă amplasați pe o matrice confecționată din silicon într-o singură bucată, care este extrem de costisitoare. Pe de altă parte, prezența oricărei impurități poate afecta tot sistemul de tranzistoare, influențând negativ performanțele acesteia.

Comparativ cu monitoarele CRT, un monitor LCD este foarte compact și ocupă un spațiu mult mai mic. De pildă, datorită formei ecranului, un monitor LCD de 15” oferă o suprafață de lucru reală echivalentă cu cea a unui monitor clasic de 17”. Deasemenea, un display bazat pe cristale lichide este deosebit de util atunci când se necesită editarea de texte. Imaginea este mult mai clară și nu mai afectează starea fiziologică a utilizatorului/operatorului datorită faptului că nu se mai emit radiații electromagnetice

O diversificare a monitoarelor LCD o constituie monitoarele LED. Monitoarele cu tehnologie LED sunt tot LCD – uri pentru că afișează imaginea pe ecran cu ajutorul cristalelor lichide, dar folosește un tip diferit de iluminare față de LCD. Majoritatea monitoarelor folosesc pentru iluminare tuburi fluorescente (catodice, reci) – de tip CCFL (Cold Cathode Florescent

Light) amplasate în spatele ecranului.

Producătorii aplică în prezent 3 variante de realizare a iluminării monitoarelor LED.

– Tehnologia EL – WLED, care realizează iluminarea pe margine (Edge – Lit BackLights) cu

lumina albă. Tehnologia include un șir de led – uri albe aranjate pe marginile matricei monitorului, în spatele panelului cu cristale lichide. Cu ajutorul unui mecanism de difuzare special, lumina este distribuită pe suprafața întregului ecran.

– Tehnologia RGB – LED, unde led – urile RGB sunt aliniate pe întreaga suprafață a matricei

monitorului. Fiecare led individual este capabil să emită lumina roșie, galbenă sau albastră, fapt care conferă monitorului un spectru mai larg de culori precum și o claritate superioară tehnologiei EL –WLED.

– Tehnologia WLED IN FLAT ARAY, unde led – urile sunt asamblate într-un plan compact care

acoperă întreg ecranul. Această tehnologie se aseamănă cu cea RGB – LED, doar că led – urile sunt de culoare albă și nu tricoloră.

Monitoarele PDP (Plasma Display Panels) utilizează în realizarea ecranelor o tehnologie diferită de cea bazată pe cristale lichide: un strat de gaz special este interpus între două ecrane/paneluri transparente pe care există fixate două rânduri, respectiv două coloane de electrozi sub formă de pelicule transparente.

Prin activarea unei anumite perechi de electrozi rând – coloană, gazul de la intersecția lor se ionizează, emițând lumină. Tipul gazului determină culoarea de afișare. Imaginile afișate prezintă contrast și strălucire excelente, și în plus, scalarea la dimensiuni mari se poate face foarte ușor.

Avantajele tehnologie PDP sunt:

imaginea nu mai prezintă distorsiuni,

este omogenă în luminozitate, mai clară și mai strălucitoare cu o acuratețe de peste 16 milioane de nuanțe de culoare, fără deficiențe de focalizare și fără zone ușor întunecate sau luminate.

Spre deosebire de ecranele clasice CRT, unde distanța optimă față de monitor era de 4,5 ori diagonala ecranului, modelele LCD, LED și cu plasmă permit amplasarea utilizatorului/operatorului practic la orice distanță. Aceasta se datorează faptului că imaginea nu mai este compusă din linii, ci din puncte luminoase (pixeli) [16].

Comanda unui modul LCD

LCD-ul (Liquid Crystal Display) este folosit în ceasurile digitale, în calculatoarele portabile și mai nou a luat amploare fabricarea monitoarelor de 15”, 17”, 19” care folosesc tot tehnologia cu cristale lichide. Sunt mai multe tipuri de display cu cristale lichide fiecare cu proprietăti unice, dar cele mai comune LCD-uri se bazează pe tehnologia TN (Twisted Nematic), care constă în punerea cristalului lichid între două folii de sticlă. Suprafeței de sticlă i se aplică un tratament special astfel încat orientarea moleculelor să poată fi dirijată. Principiul de bază al acestor LCD-uri este manipularea luminii polarizate.

Un display cu cristale lichide este compus din mai multe straturi. Mai întâi o coală de sticlă este acoperită cu o peliculă de oxid metalic transparent, care actionează ca un electrod. Această peliculă poate fi modelată să formeze linile și coloanele unei matrici de afișare pasive sau pixelii unei matrici de afișare active.

Acești electrozi sunt folosiți pentru a aplica tensiunea necesară pentru reorientarea moleculelor de cristal lichid. Apoi este depus un strat de polimer. Acest strat suportă un proces de fricțiune care lasă o serie de canale microscopice în peliculă. Aceste canale ajută la alinierea moleculelor de cristal în direcțiile preferate, două astfel de sticlă sunt folosite [14].

III.7 Considerente teoretice – Stabilizatoare liniare

Stabilizatoarele de tensiune sunt circuite electronice care mențin constantă tensiunea pe rezistența de sarcină (tensiunea stabilizată), în condițiile variației tensiunii de intrare (tensiunea nestabilizată), a curentului de sarcină și a temperaturii.

Conectat între redresor și sarcină, stabilizatorul transformă sursa de tensiune nestabilizată într-o sursă de tensiune stabilizată.

Stabilizatoarele de tensiune integrate sunt de construcție monolitică și se încadrează în categoria stabilizatoarelor cu reacție, cu element de reglare serie și cu amplificator de eroare. În principiu, schema electrică nu diferă de schema stabilizatorului cu elemente discrete. Există totuși o deosebire majoră care constă în utilizarea unor tehnici de circuit destul de complexe, pentru a se obține performanțe ridicate.

Stabilizatoarele de tensiune fixă s-au proiectat în ideea unei stabilizări locale a tensiunii de alimentare pe modulelel cu circuite integrate.

Aceste stabilizatoare prezintă avantajul simplității maxime de utilizare deoarece nu necesită componente externe. De asemenea sunt avantajoase din punct de vedere al raportului cost-performanță. Capsulele sunt prevăzute doar cu trei terminale, existând posibilitatea montării lor pe radiator.

Stabilizatoarele de tensiune fixă au următoarele caracteristici generale:

• tensiunea de ieșire, fixată intern, se garantează cu o precizie de 5%;

• limita curentului maxim de ieșire, fixată intern prin circuitul de protecție la suprasarcină, este,

în general, independent de temperatură;

• stabilizatoarele conțin un circuit de menținere a funcționării tranzistorului serie în aria de siguranță;

• circuitul de protecție intern asigură imunitate la scurtcircuitarea ieșirii la masă pe o durată nedefinită [17].

Fig.3.4 Stabilizator liniar de tensiune [23]

În figura 3.4 avem:

REF = referinta de tensiune (VREF = 6.8V 7.6V, tipic 7.15V);

A.E. = amplificator de eroare;

Q15 = regulator serie intern;

Q16 = tranzistor de protectie[23].

Capitolul IV: Proiectarea Data -Logger

IV.1 Proiectarea hardware

Fig.4.1 Schema bloc a Data Logger-ului

În figura de mai sus este prezentată schema block a data logger-ului. Acesta comunică cu trei periferice, RTC, SD card și display pe două interfețe seriale, I2C și SPI.

Alimentarea microcontrolerului se face din două baterii AAA, acestea alimentând de asemenea în permanență și display-ul, SD card-ul și RTC-ul.

Schema electrică a dispozitivului electronic realizat se prezintă în Anexa 1.

IV.1.1 Descrierea microcontrolerului

În proiectul de licență folosesc un microcontroler de la Atmel- ATMega 328P.

Microcontrolerul ales este de tipul ATMega 328, produs de compania Atmel.

S-a ales acest controler datorită numărului de ieșiri I/O, disponibilitatea interfețelor I2C și SPI, memoriei flash, tensiunii de lucru și consumului de curent în sleep mode.

Microcontrolerul ATMega 328P- 8 biți are o performanță ridicată combinând 32 KB ISP memorie flash cu capacitați de citire-scriere, interfața serială, timer watchdog programabil cu oscilator intern și moduri de economisire a energiei.

Dispozitivul funcționează între 1.8-5.5 V.

În figura 4.2 de mai jos găsim configurarea pinilor microcontrolerului, unde VCC este tensiunea de alimentare și GND este masa.

Fig.4.2. Microcontrolerul ATMega 328P – Configurarea pinilor[18].

Caracteristici ale microcontrolerului ATMega328P

Procesor cu performanțe ridicate de tip RISC:

• 131 de instrucțiuni

– 32 x 8 registri generali

• Memorie Non-volatilă cu durată mare de viață:

– 32K byte spațiu pentru memria programului

– 1K byte EEPROM

– 2K byte SRAM

– Cicli de scriere citire: 10 000 Flash / 100 000 EEPROM

– Retenția de date: 20 de ani la 85°C sau 100 de ani la 25°C.

– Protecția codului programat

• Carateristicile perifericilor:

– Două timer-e pe 8 biți

– Interfață internă serială SPI Master/Slave

– Interfață internă seriala I2C

– Intrerupere pe modificarea stării pinilor și trezirea din sleep

• Carateristici speciale:

– Surse de înrerupere internă și externă

– Șase moduri de sleep: Idle, ADC Noise Reduction, Power-Save, Power-down, Standby și extended standby

• Tensiuni de operare:

-1.8 – 5.5V

• Viteza de procesare:

– 0 – 4MHz la 1.8-5.5V, 0-10MHz la 2.7-5.5V, 0-20MHz la 4.5 – 5.5V

• Consum de curent la 1MHz, 1.8V, 25°C:

– Mod activ: 0.2mA

– Power-down mode: 0.1uA

– Power-save mode: 0.75uA[18].

IV.1.2 LDO – Low dropout voltage regulator

LDO-ul este prevăzut în circuit pentru a asigura o tensiune de referință și pentru a alimenta senzorii aferenți data logger-ului.

Schema electrică a circuitului este prezentă în imaginea de mai jos.

Fig.4.3. Schema electrică a tensiunii de referință

Circuitul LDO-ului a fost dimensionat astfel încât la ieșirea lui să fie aproximativ 2V.

IV.1.3 RTC-ul – Real time clock

Are rolul de a menține ora exactă a modului, și de a trezi controlerul din starea de sleep pentru a putea face citirile analogice. Comunicarea dintre RTC și microcntonroler se realizează printr-o interfață I2C.

Schema electrică a circuitului este prezentată mai jos:

Fig.4.4 Schema elctrică a RTC-ului

Pe fiecare linie de date și de clock este plasată o rezistență de pull-up pentru a defini tensiunile la bornele microcntroler-ului. Acest RTC are nevoie de un quartz extern de 32.768kHz cu două condensatoare de 22p, iar legătura compentelor se realizează conform specificațiilor producătorului.

Microcontroler-ul va fi trezit de intreruperea care are loc la nivelul /IRQ-ul, acest pin devenind Low în momentul în care resigtrul de alarmă pentru minute și ore crespund cu ora respectiv minutele curente. Pentru a reseta pinul de /IRQ ca să devină iar High, registrul de alarma trebuie sa fie resetat înainte de fiecare intrare în modul sleep al microcontroler-ului, respectiv noua oră și minut al alarmei trebuie să fie rescrisă.

IV.1.4 Microprocesorul

În acest circuit s-a folosit micontrolerul ATMega 328P, acesta poate fi folosit cu oscilatorul inter de 8MHz sau cu unul extern care poate sa ajungă la valoarea de 20MHz.

În lucrarea de față s-a prevăzut folosirea oscilatorului intern, fiind mai mult decât suficient pentru această aplicație.

Fig.4.5. Modulul de microcontroler

Este alimentat din două baterii AAA, care asigură o tensiune aproximativ egală cu 3V.

Microcontrolerul comunică pe două interfețe seriale, o interfață I2C pentru RTC și interfața SPI care este împărțită între display și SD card.

Are 4 pini care sunt configurati ca și output, și sunt folosiți pentru activarea sau dezactivarea diferitelor periferice de pe placă, 4 intrări analogice și 4 intrări digitale dintre care unul este configurat ca și întrerupere, și are rolul de a trezi uC cand acesta se află în sleep.

IV.1.5 High side switch

Decuplarea alimentărilor de la senzori se face prin high side switch-uri. Este foarte important ca să oprim alimentarea senzorilor ca să nu avem un consum adițional în timpul în care controlerul se află în deep-stop mode.

Schema electrică a high side switch-urilor este prezentată mai jos:

Fig.4.6 Schema electică a high side switch-urilor

Capacitorii C27, C26, C24, C25, C13, C21 sunt considerați pentru socuri ESD. Fiecare tranzistor are considerat intern rezistorii care să definească potențialul din baza lui în momentul în care aceștia nu sunt configurați de către uC.

Data logger-ul poate să aibe mai mulți sateliți, fiecare satelit cuprinde următoarele sonde: temperatura, intensitate luminoasă, umiditate sol, sateliții vor fi selectați pe rând deoarece ei împărtășesc același intrări analogice ale microcontroler-ului.

Tranzistorii chiar daca sunt PNP, in sleep semnalele vor fi configurate ca și output low, deoarece alimentarea lor este oprită de la regulatorul liniar, care are capabilitatea de a fi activat sau dezactivat.

IV.1.6 Display (PCD8544)

Este un display grafic, întâlnit pentru prima oară în telefoanele NOKIA 5110. Este un display dot-matrix 84×48 pixeli, dotat cu o interfață SPI. Imaginile care sunt afișate la pornirea dispozitivului sunt stocate în memoria flash.

Fig.4.7 Configurare HW a display-ului

Pull-up-urile R2 și R14 sunt pentru a defini starea display-ului chiar și atunci când acesta nu mai comunică cu microcontroler-ul, acesta fiind în mare parte în starea de sleep[19].

IV.1.7 Sondele

Fiecare sondă este prevăzută cu un set de senzori, și anume: temperatura, umiditate și intensitate luminoasă.

Schema electrică a sondelor este descrisă mai jos:

Fig.4.8 Schema electrică a sondelor

Sa optat pentru folosirea a mai multor seturi de senzori pentru excluderea anumitor abateri care pot să apară într-o seră, ca de exemplu:

O frunză de la o plantă acoperă senzorul de lumină, rezultatul fuznizat de acest senzor va fi eronat.

În cazul umidității, dacă vorbim despre un sistem de udare manuală, omogenitatea cantității de apă pe spurafața serei v-a lăsa de dorit, din acest motiv pentru determinarea umidității solului se vor putea face medii.

Toate abaterile de mai sus v-or putea fi corectate deoarece mai sunt și alți sateliți cu care aceste valori se vor putea compara și abaterile majore se vor putea exclude din calcul, iar restul mediate, pentru a obține valori cât mai descriptive.

IV.1.7 .1 Realizarea practică a sondei

Cablajul imprimat este realizat pe două straturi, fiind prezentat in figura de mai jos.

Fig.4.9 Cablajul imprimat al sondei

Sonda pe lângă componentele electice mai are și componente care ajută la realizarea măsurării, realizate din cablajul imprimat, printre acestea se numără, serpentinele pentru determinarea umidității solului, respectiv planul de masă, care a fost gândit pentru a asigura un transfer termic mai bun între temperatura solului și senzorul de temperaura, care nu poate fi introdus în sol.

Am ales să realizez acești senzorii din urmatoarele motive:

sunt dimensionați special pentru mini-sera utilizată în înmulțirea lavandei;

au grupați într-o singură sondă cei trei senzori de umiditate, temperatură și lumină, putând fi manipulată sonda cu ușurință;

costul unei sonde este mai mic decât cel de pe piață (de regulă comercializându-se separat);

circuitul sondei este dimensionat astfel încât să fie compatibil cu data logger-ul (tensiuni de lucru).

IV.2 Proiectarea software

Programul pentru uC a fost codat în compilatorul MikroC în limbaj C. MikroC este un compilator de limbaj de asamblare din ANSI C pentru dispozitive de tip PIC de la Microchip.

Codul este împărțit în 4 mari elemente:

Inițializarea modulelor din uC

Interfațarea cu RTC

Interfatarea cu display-ul

Interfatarea cu SD cardul

Codul sursă realizat conform schemei bloc din fig.4.10 se prezintă în Anexa 2.

Fig.4.10 Schemă bloc al aplicației

În prima parte a codului are loc inițializarea modulului I2C , SPI respectiv configurarea porturilor, fiind urmată de afișarea numelui lucrării pentru o perioada de 1.5s. După această perioadă este apelată funcția de afișare a meniului de setare a orei, care la rândul ei accesează o funcție care va tipării două săgeți pe display indicând posibilitatea de setare a unui parametru.

Fig.4.11 Meniul de setare ora

În cursul acestui meniu se va seta ora și minutul, secunda fiind setată implicit zero în momentul în care s-a completat și data curentă. Meniul de dată curentă este accesată imediat după terminarea completării orei curente și apăsarea butonului de set.

În meniul de setare a datei curente se va putea seta ziua, luna și anul. După ce a fost introdus și anul curent și se apasă butonul set, are loc scrierea datelor setate în RTC. După care se deschide meniul de interval achiziții, asemnănător cu cel al meniului de setare a orei și se poate seta întervalul de achiziție, perioada minimă fiind 1 minut, și și maxim 24 de ore.

După ce a fost completat și minutul și se acționează butonul de set are loc scrierea alarmei în RTC, odată cu activarea alarmei din regiștrii de alarmă.

Următorul pas este verificarea existenței cardului, dacă acesta există, se verifică dacă este fișierul CSV cu numele corespunzător. Dacă este găsit se va completa într-un rând nou noile date achiziționate pe ADC, iar în cazul în care nu există, este creeat și se scrie capul de tabel. De aici controlerul și display-ul sunt setați pentru sleep, întreruperile sunt activate și se apelează comanda sleep.

În momentul în care controlerul este trezit de o întrerupere externă, acesta va dezactiva întreruperile globale, va opri modul sleep al controlerului, și va începe achiziția datelor de la senzori. Se va seta pe rând fiecare set de senzori prin intermediul unui high-side switch, iar după o perioadă de stabilizare se va realiza achiziția de date ADC, când s-a terminat cu o sondă se trece la următoarea și așa mai departe până s-au apelat toate sondele și au fost citite valorile de temperatura, intensitate luminoasă și umiditate.

Următorul pas în cod îl constituie scrierea datelor achizitionate pe card în format CSV pe un rând nou. După ce scrierea s-a finalizat s-a este configurat registrul de sleep al controler-ului, sunt activate întreruperile globale și se apelează comanda sleep.

Dacă pe parcurs a apărut o eroare de detectare a cardului sau scriere, atunci pe display-ul data logger-ului se va afișa mesajul Eroare Card, mesaj ce va rămâne prezent până la resetarea dispozitivului. Acest mesaj are ca scop avertizarea utilizatorului de eventuale anomalii care pot să apară în timpul stocării datelor.

Fig.4.12 Eroare Card

Data logger-ul achizitionează parametrii de mediu urmăriți prin intermediul ADC-ului și apoi aceste date sunt stocate în format CSV pe cardul de memorie.

Salvarea datelor în acest format prezintă avantajul compatibilității cu aplicații specifice, de exemplu excel, care poate apoi genera și curbe care să prezinte ciclul zi-noapte și variațiile celorlalți parametrii.

După ce s-a terminat achizitia de date, prin introducerea cardului în card reader-ul oricărui calculator, se deschide fișierul în format CSV, unde avem un tabel care conține informațiile citite și anume parametrii de mediu: temperatură, umiditate și luminozitate, grupate pentru fiecare set de senzori în parte.

Astfel, prin construcția acestui data logger și cu ajutorul sondelor putem monitoriza umiditatea solului, intensitatea luminoasă și temperatura solului și analiza datele stocate de SD card.

Cu un consum relativ scăzut în timpul, în care controlerul este în sleep durata de funcționare în această stare poate să ajungă la 2000 de ore.

Data logger-ul are un consum tipic de 380 uA, din care 300 o reconstituie consumul SD cardului și este recomandabil oprirea în timpul standby-ului a alimentării SD cardului (consumul acestuia fiind de aproximativ 300 uA).

Capitolul V: Măsurători practice ale semnalelor

Pentru a determina integritatea semnalelor și modul de impelmentare a acestora s-a realizat un set de măsurători, folosind un osciloscop Tektronix seria 3000.

Panta crescătoare respectiv descrescătoare a fost măsurată între 10%-90% din amplitudinea ei.

V.1 Integritatea semnalului SPI

Fig.5.1 Integritatea semnalului SPI – Clock

Figura 5.1 prezintă forma semnalului SPI-Clock, în urma acestei oscilograme se urmărește verificarea amplitudinii semnalului, respeciv frecvența de operare a clock-ului. S-a verificat și integritatea semnalului. Nivelele logice sunt bine definite, 3.08V pentru output High, respectiv 0V pentru Low.

În această oscilogramă nu se pot observa reflexi, repectiv e foarte greu de determinat panta crescătoare și descrescătoare a semnaului, de aceea s-a optat pentru realizarea altor oscilograme care vor permite o insepcție în mai de-aproape a acestui semnal.

În figura 5.2 este prezentat semnalul Clock al SPI-ului cu o bază de timp de 40ns.

Fig.5.2 Integritatea semanalului SPI – Clock

Se poate observa un semnal dreptunghiular curat. Smnalul de SPI măsurat în acest caz era o comunicare între microcontroler și display. Panta semnaului este de 8.7ns la creșterea semnalului de la 0 la 3.08V și 7.8 ns pentru panta descrescătoare de la 3.08V la 0V.

Nu se pot observa relexii ceea ce arată că circuitul este rutat într-un mod eficient.

Fig.5.3 Integritatea semanalului –SPI- MOSI

În figura 5.3 este prezentată forma semnalului MOSI (master out slave input). Din această oscilogramă s-a dedus timpul de creștere a semnalului respectiv timpul în care semnalul scade de la 3.04V la -40mV, timpul fiind aproximativ 7ns.

Fig.5.4 Integritatea semanalului de SPI – MISO

Semnalul MOSI este unul bine conturat, curat precum și Clock-ul. Diferența care se poate observa în cazul semanlului MISO poate fi datorat faptului că bateriile au fost schimbate, acest lucru reise și din amplitudinea semnalului.

Se poate observa de asemenea și urma unor reflexii. În acest caz nu mai este vorba despre comunicare dintre microcntroler și display ci microcontroler și SD card, acesta fiind singurul care răspunde microcontrolerului pe SPI.

Un alt aspect care poate să genereze aceste reflexii este plasare rezistorului serie, care de data asta a fost plasat lângă receptor, iar poziționarea lui corectă, ar fi lângă emițător (SD Card-ul).

Fig.5.5 Forma semnalului SPI

În figura 5.5 s-a urmărit timpul dintre doi bytes consecutivi, acesta fiind de 10us. În cazul display-ului este foarte importantă această secvențiere, necesar pentru trimiterea a 504 bytes, pentru rescrierea completă a display-ului. Dacă acest interval va fi prea mare, o licărire va putea fi observată de către utilizator, o soluție pentru scăderea acestui timp ar fi creșterea frecvenței de operare a microcontrolerului, dar acest lucru nu este posibil pentru că o dată cu creșterea frecvenței va crește și consumul de curent, respectiv tensiunea de alimentare a display-ului va trebui crescută de asemenea. Operarea microcontrolerului la o frevență mai mare decât cea permisă în datasheet pentru o tensiune redusă de alimentare poate duce la overclock, care trage după sine scăderea timpului de viață a dispozitivului.

Fig.5.6 Forma semnalului SPI

În figura 5.6 s-a urmărit alinierea semnalului de clock cu cel de MOSI respectiv MISO. Semnalele de mai sus au fost generate în urma citirii comunicării dintre microcontroler și SD card, acesta fiind singurul care comunică pe SPI cu controlerul, spre deosebire de display care doar acceptă date, dar nu trimite nici o informație pe SPI către controler.

Și în această oscilogramă se poate observa prezența reflexiilor pe linia de date MOSI, de asemenea se poate observa și influența liniei de date MOSI asupra lui MISO, acesta poate fi datorată unui cuplaj extern pe circuitul imprimat sau s-ar putea realiza în interiorul unui circuit integrat care are conectate ambele semnale, SD card-ul.

O posibilă rezolvare a acestei probleme ar putea să il constituie plasarea rezistorului serie de la linia MISO lângă SD card.

V.2 Integritatea semnalului I2C

Fig.5.7 Integritatea semanalului I2C – SCL

În figura 5.7 se poate obseva timpul crescut de stabilizare a semnalului, acesta duce la un semnal de clock imperfect, cu un factor de umplere de aproape 54%, pe când un semnal de clock are trebui sa aibe un factor de umlere de 50%.

Comanda RTC-ului este realizată prin open drain, adică în momentul în care se dorește creșterea semnalului tranzistorul care trăgea la masă rezistența este blocat iar tensiunea crește încet pentru că avem o rezistență de valoare foarte mare și împreună cu capacitatea parazită a tranzistorului, pinului de intrare în microcontroler, ieșirea RTC-ului și conexiunilor de pe dye formează un circuit RC.

În ceea ce privește reflexiile de pe panta descrescătoare, acestea sunt generate tot de rezistența prea mare a pull-up-ului, impedanța de ieșire a RTC-ului fiind prea mare, iar cea de intrare prea mică, pentru că nu va exista un consumator la capătul controlerului care să absoarbă energia, aceasta va fi reflectată și se va regăsi pe partea de comutare, acest fenomen va apărea doar dacă comutarea semnaului are loc brusc. Pentru a investiga acest fenomen s-a realizat o oscilogramă care să cuprindă un semnal al clock-ului în figura 5.8.

Fig.5.8 Integritatea semanalului I2C – SCL

Integritatea semnalului de I2C lasă de dorit, în acest caz, se poate observa un timp foarte mare de creștere a semnalului, iar la căderea semnalui se poate observa urma unor reflexii.

Cauza acestor reflexii este rezistența de pull-up foarte de vaolare foarte mare (51K ohm).

Pentru a reduce aceste efecte nedorite se va scădea valoarea acesteia la 10K ohmi, făcând un compromis între integritatea semnalului și consumul de curent în timpul conumicării pe interfața I2C.

Fig.5.9 Integritatea semnalului I2C – SDA

Același efect nedorit se poate observa și în cazul semnalului SDA, rezolvarea fiind aceeași, adică valoare rezistenței de pull-up va fi scăzută la 10K. În acest fel se va micșora timpul de creștere a smnalului și vor disparea și reflexiile.

Fig.5.10 Integritatea semanalului I2C – SDA

Din cauza rezistențelor, temporizările celor două semnale nu sunt optime.

Motivul pentru care funcționarea comunicării pe I2C este posibilă este dată de frecvența mică de comunicare.

Fig.5.11 Timpul de achiziție

Trezirea microcontrolerului este asigurată de semanlul /INT, iar de aici putem deduce timpul în care controlerul este pornit și achiziționează date, acest timp fiind de aproximativ 230ms, timp în care se realizează achiziția de date de la 3 sonde a câte 3 sezori și se trec toate datele pe card, urmată de oprirea microcontrolerului, și setarea acestuia în sleep.

Fig.5.12 Timpul achiziționării și factorul de umplere

Timpul setat a fost de 1minut, acesta fiind perioada minimă care se poate seta.

Pentru a avea o mai bună privire în perspectivă a consumului de curent în timpul achiziției s-a realizat următoarea măsurătoare.

Fig.5.13 Consumul de curent

În figura Fig.5.13 Consumul de curent, este prezentată integrarea consumului de curent pe perioada achiziției, rezultând un consum de 3.124 mAs, un consum destul de mare, dar să nu uităm că acest consum este doar pentru o perioadăd de 230ms.

S-a observat un consum de curent de 380uA cand controlerul era în sleep. Acest consum a fost restrâns apoi la SD-card, care consuma 300uA din valoarea totală.

Capitolul VI: Concluzii

Scopul acestei lucrării este monitorizarea unor parametrii de mediu, cu ajutorul unui data logger pentru a înmulți plantația de lavandă.

Motivul principal pentru care s-a optat pentru construcția acestui sistem de monitorizare a spațiilor închise în care se înmulțesc plante aromatice, este acela că documentațiile de specialitate nu oferă destulă informație cu privire la condițiile de mediu în care se înmulțesc butașii de lavandă.

Astfel, prin construcția acestui data logger și cu ajutorul sondelor putem monitoriza umiditatea solului, intensitatea luminoasă și temperatura solului și analiza datele stocate de SD card.

Data logger-ul achizitionează parametrii de mediu urmăriți prin intermediul ADC-ului și apoi aceste date sunt stocate în format CSV pe cardul de memorie. Salvarea datelor în acest format prezintă avantajul compatibilității cu aplicații specifice, de exemplu excel, care poate apoi genera și curbe care să prezinte ciclul zi-noapte și variațiile celorlalți parametrii.

Costul acestui proiect incluzând și sondele este prezentat și în tabelul 6.1 și anume 50,80 lei fara TVA.

Cu un consum relativ scăzut în timpul, în care controlerul este în sleep durata de funcționare în această stare poate să ajungă la 2000 de ore.

Data logger-ul are un consum tipic de 380 uA, din care 300 o reconstituie consumul SD cardului și este recomandabil oprirea în timpul standby-ului a alimentării SD cardului (consumul acestuia fiind de aproximativ 300 uA).

Costuri de implementare ale data logger-ului și perioada lui de amortizare

S-a făcut o evaluare a costurilor componentelor în urmatorul tabel, Tab.5.1 rezultând un cost total 50,80 de lei fară TVA, iar cu TVA costul total este 62,99 lei.

Perioada de amortizare a investiției este de 1-2 ani.

Tabelul 6.1 Costul componentelor [20,21,22].

Bibliografie

http://agroromania.manager.ro/articole/plante-aromatice/lavanda-cultivarea-lavandei-folosirea-lavandei-in-industrie-292.html

http://gabyral.blogspot.ro/2014/01/inmultirea-plantelor-prin-butasi.html

http://www.onsetcomp.com/

http://www.geoscientific.com/technical/tech_references_pdf_files/Data_Logger_Fundamentals.pdf

http://ro.wikipedia.org/wiki/Secure_Digital

http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Components/General/SDSpec.pdf

Sisteme cu microcontrolere –Notițe curs, Prof.dr.ing. Petreuș Dorin

Note de curs – Sisteme incorporate Prof. Molnar Florin, 2014

Curs Circuite Analogice și Digitale, Prof. Ing. Adrian Peculea, UT Cluj, 2012

http://www.idt.com/products/clocks-timing/application-specific-clocks/real-time-clocks-rtc-ic

http://en.wikipedia.org/wiki/Real-time_clock

http://ro.wikipedia.org/wiki/Interfa%C8%9Ba_serial%C4%83_SPI

https://learn.sparkfun.com/tutorials/serial-peripheral-interface-spi

D.Petreuș, G.Munteanu, Z.Juhos, N.Palaghiță – Aplicații cu microcontrolere din familia 8051 –Editura Mediamira,Cluj-Napoca, 2005

Interfețele seriale I2C și SPI-Curs, Sisteme cu Microprocesoare, Prof.dr.ing. Eugen Lupu

Notițe de curs- Echipamente Periferice Nani Viorel, 2013

Circuite integrate analogice, Note de curs, Gheorghe Pana, Univ. Tehnica Brasov

Data sheet – ATMEL 8-BIT MICROCONTROLLER WITH 4/8/16/32KBYTES IN-SYSTEM PROGRAMMABLE FLASH

Data sheet Nokia 5110

http://www.mivarom.ro/catalog/

http://www.tme.eu/ro/

http://ro.farnell.com/

http://www.rasfoiesc.com/inginerie/electronica/STABILIZATOARE-LINIARE-DE-TENS29.php

Anexa 1: Schema electrică a dispozitivului electronic

Anexa 2: Codul Sursă

Inițializarea modulelor

Această bucată a codului ruleaza o singură data la începutul programului. Prin parcurgerea ei se realizează:

DDRB = 0xFF; //Se configureaza portul B

DDRC = 0x21; //Se configureaza portul C

DDRD = 0x8B; //Se configureaza portul D

display_init(); //Se initializeaza display-ul

afiseaza_prima_pagina(); //Se afiseaza Lvanter…

delay_ms(1500); //Timp de 1.5 secunde in scop demonstrativ comisiei de licenta

afiseaza_proiect_licenta(); //Se afiseaza Lucreare Licenta…

delay_ms(1500); //Timp de 2.5 secunde in scop demonstrativ comisiei de licenta

Soft_I2C_Init(); //Se initializeaza I2C-ul

LCD_text(""); //Se reseteaza LCD_text

sageti(30,3); //Se pozitioneaza sagetile

LCD_text("");

Fiecare funcție folosită mai sus este descrisă în cele ce urmează:

Inițializarea display-ului:

void display_init(){

SPI1_init(); //Se initiaza SPI-ul

Chip_Select = 0; //Se selecteaza Display-ul

Display_Reset = 0; Display_Reset = 1; //se reseteaza display-ul

Display_DC = 0; //Se seteaza modul de configurare display-ului

//Se trimite modul de adresare (chip is active, horizontal adressing, use extended instruction set)

SPI1_Write(0x21);

SPI1_Write(0xB8); //Seteaza contrastul (Vop)

SPI1_Write(0x04); //Seteaza coeficientul de temepratura

SPI1_Write(0x14); //Seteaza viteaza de multiplexare 1:40

SPI1_Write(0x20); //Instructiune de basza (nu se configureaza, trebuie rulata)

SPI1_Write(0x0C); //Seteaza video mode

//Se pozitioneaza cursorul la coordonatele 0,0 si se seteaza display-ul pentru a accepta date

SPI1_Write(0x80);SPI1_Write(0x40);Display_DC=1;

// Se curata display-ul scriind 0 in toata memoria display-ului

for(contorDisplay=0; contorDisplay<504;contorDisplay++) SPI1_Write(0x00);

Chip_Select = 1; //Se deselecteaza display-ul

}

Afișează Lavanter:

//Actiuni luate la prima pornire, aceasta functie va fi apelata in momentul in care porneste prima data dispozitivul

void afiseaza_prima_pagina(){

Chip_Select=0;Display_DC=0;(0x80);SPI1_Write(0x41);Display_DC=1;

//Display-ul accepta date pentru afisaere

for(contorDisplay=0;contorDisplay<252;contorDisplay++)

SPI1_Write(primapagina[contorDisplay]); Chip_Select = 1;

}

Se afiseaza Lucreare Licenta…

void afiseaza_proiect_licenta(){

Chip_Select=0;Display_DC=0;(0x80);SPI1_Write(0x40);Display_DC=1; //Display-ul accepta date pentru afisaere

for(contorDisplay=0;contorDisplay<504;contorDisplay++) SPI1_Write(licentaalina[contorDisplay]); // Se tipareste a doua imagine

Chip_Select = 1; // Se deselecteaza displayul

}

Afisarea textului

void LCD_Tipareste_Caracter(char caracter){

Chip_Select = 0;Display_DC = 1;

for(contorFont=0;contorFont<5;contorFont++)SPI1_Write(font[caracter – 0x20][contorFont]);

Chip_Select = 1;

}

void LCD_text(char *caractere){

while(*caractere) LCD_Tipareste_Caracter(*caractere++);

}

while(1){

if(contor_meniu < 3){

meniu_setare_ora(); //Se afiseaza meniul de setare a orei

pozitie_Cursor(30,3); //Se pozitioneaza cursorul

LCD_text(ora_curenta); //Se afiseaza ora setata

}

else if (contor_meniu > 3 && contor_meniu < 8){

meniu_setare_data(); //Se afiseaza meniul de setare a datei

pozitie_Cursor(20,3); //Se pozitioneaza cursorul

LCD_text(data_curenta); //Se afiseaza data setata

} else if (contor_meniu >8 && contor_meniu < 11){

meniu_setare_alarma(); //Se afiseaza meniul de stare a alarmei

pozitie_Cursor(30,3); //Se pozitioneaza cursorul

LCD_text(alarma); //Se afiseaza alarma setata

}

if(contor_meniu == 0){

LCD_clear(); //Se sterg toate informatiile de pe display

secunda_setata = 0; //Secunda care urmeaza sa fie setata este initializata cu 0

minuta_setata = 0; //Minutul care urmeaza sa fie setat este initializat cu 0

ora_setata = 0; //Ora care urmeaza sa fie setata este initializat cu 0

ziua_setata = 31; //Ziua care urmeaza sa fie setata este initializata cu 1

luna_setata = 12; //Luna care urmeaza sa fie setata este initalizata cu 1

anul_setat = 15; //Anul care urmeaza sa fie setat este initializat cu 15

LCD_text(""); //Se reseteaza textul care se afiseaza pe display

pozitie_Cursor(15,1); //Se pozitioneaza cursorul pentru Setare ora

LCD_text("Seteaza ora"); //Se afiseaza "Seteaza ora"

pozitie_Cursor(30,3); //Se pozitioneaza cursorul pentru afisarea ghidului

LCD_text("OO:MM"); //Se afiseaza ghidul de setare…

delay_ms(1000); //Timp de 1 secunda

contor_meniu = 1;

}

if(contor_meniu == 1){

if(contor_general > 23) contor_general=0; //Se fixeaza o limita superioara pentru ora

if(contor_general <0 ) contor_general = 23; //Se fixeaza o limita inferioara pentru ora

sageti(30,3); //Se pozitioneaza sagetile deasupra orei

ora_setata = contor_general; //Se aloca valoarea contorului general la ora_setata

}else if(contor_meniu == 2){

if(contor_general > 59) contor_general=0; //Se fixeaza o limita superioara pentru minute

if(contor_general < 0) contor_general= 59; //Se fixeaza o limita inferioara pentru minute

sageti(45,3); //Se pozitioneaza sagetile deasupra minutelor

minuta_setata = contor_general; //Se aloca valoarea contorului general la minuta_setata

} else if(contor_meniu == 3){

LCD_clear(); //Se sterg toate informatiile de pe display

pozitie_Cursor(15,1); //Se positioneaza cursorul pentru Setare data

LCD_text("Seteaza data"); //Se afiseaza Seteaza data

sageti(20,3); //Se pozitioneaza sagetile la setarea zilei

//Se pozitioneaza cursorul pentru afisarea ghidului de setare

pozitie_Cursor(20,3);

LCD_text("ZZ-LL-AA"); //Se afiseaza ghidul se setare…

delay_ms(1000); //Timp de 1 secunda

luna_setata = 1; // Se aloca valoarea 1 la luna_serata

anul_setat = 15; // Se aloca valoarea 15 la anul_setat

contor_meniu = 4; //Se trece la meniul urmator

} else if(contor_meniu == 4){

if(contor_general > 31) contor_general = 1; //Se fixeaza o limita superioara pentru zi

if(contor_general < 1) contor_general = 31; //Se fixeaza o limita inferioara pentru zi

luna_setata = 1; // Se aloca valoarea 1 la luna_serata

anul_setat = 15; // Se aloca valoarea 15 la anul_setat

sageti(20,3); //Se pozitioneaza sagetile deasupra zilei

ziua_setata = contor_general; //Se aloca valoarea contorului general la ziua_setata

} else if(contor_meniu == 5){

if(contor_general > 12) contor_general = 1; //Se fixeaza o limita superioara pentru luna

if(contor_general < 1) contor_general = 12; //Se fixeaza o limita inferioara pentru luna

sageti(35,3); //Se pozitioneaza sagetile deasupra lunii

luna_setata = contor_general; //Se aloca valoarea contorului general la luna_setata

} else if(contor_meniu == 6){

if(contor_general > 30) contor_general = 15; //Se fixeaza o limita superioara pentru an

if(contor_general < 15) contor_general = 30; //Se fixeaza o limita inferioara pentru an

sageti(50,3); //Se pozitioneaza sagetile deasupra anului

anul_setat = contor_general; //Se aloca valoarea contorului general la anul_setat

} else if(contor_meniu == 7){

LCD_clear(); //Se sterg toate informatiile de pe display

seteaza_ora(); //Se apeleaza functia de setare a orei

seteaza_data(); //Se apeleaza functia de setare a datei

contor_meniu = 8; //Se trece la meniul urmator

} else if(contor_meniu == 8){

//seteaza incrementul

LCD_clear(); //Se sterg toate informatiile de pe display

pozitie_Cursor(0,1); //Se pozitioneaza cursorul pentru afisarea Intervalului de //achizitie

LCD_text("Interv achizitie"); //Se afiseaza "Interv Achizitie"

contor_meniu = 9; //Se trece la meniul urmator

ore_alarma = 0; //Se aloca valoarea 0 la ore_alarma

minute_alarma = 0; //Se aloca valoarea 0 la minute_alarma

}

if(contor_meniu == 9){

//Se fixeaza o limita superioara pentru ora de alarma

if(contor_general > 23) contor_general=0;

//Se fixeaza o limita inferioara pentru ora de alarma

if(contor_general < 0 ) contor_general = 23;

sageti(30,3); //Se pozitioneaza sagetile deasupra orei

ore_alarma = contor_general; //Se aloca valoarea contorului general la ore_alarma

}else if(contor_meniu == 10){

//Se fixeaza o limita superioara pentru minutele de alarma

if(contor_general > 59) contor_general=0;

//Se fixeaza o limita inferioara pentru minutele de alarma

if(contor_general < 0) contor_general= 59;

sageti(45,3); //Se pozitioneaza sagetile deasupra minutelor

minute_alarma = contor_general; //Se aloca valoarea contorului general la minute_alarma

} else if (contor_meniu == 11){

LCD_clear(); //Se sterg toate informatiile de pe display

//Se salveaza incrementul de ora in EEPROM la adresa 0x20

EEPROM_Write(0x20, ore_alarma);

//Se salveaza incrementul de minut in EEPROM la adresa 0x10

EEPROM_Write(0x10, minute_alarma);

setare_alarma(); //Se apeleaza functia de setare a alarmei

contor_meniu = 12; //Se trece meniul urmator

} else if (contor_meniu == 12){

pozitie_Cursor(0,1); //Se pozitioneaza cursorul pentru a se afisa "Lavanter"

afiseaza_prima_pagina(); //Se afiseaza "Lavanter"

scriere_date_card(); /*Se apeleaza functia de scriere a datelor pe card

Are rolul de a crea un fisier nou, daca nu exista,

Respectiv in cazul in care exista se trece ora si datele

In cazul in care fisierul exista*/

contor_meniu = 13; //Se trece la meniul urmator

SREG_I_bit = 1; //Activează întreruperi globale

EIMSK = 0x01;

SE_bit = 1; // sleep mode enabled

SM1_bit = 1; //Power-down mode

} else if (contor_meniu == 13){

//LCD_text("SOMN");

}

//–Se Verifica Starea Butoanelor–\\

//Se verifica daca butonul de set a fost apasat

if(button(&PIND,5,1,0)){

stare_buton = 1; //Starea butonlui se seteaza pe 1

}

if(stare_buton && Button(&PIND,5, 1,1)){ /*Se verifica daca starea butonului de set s-a modificat, Daca da se iau urmatoarele masuri*/

contor_general=0; //Contorul general ia valooarea 0

stare_buton=0; //Se reseteaza starea butonului pentru a nu se repeta aceasta bucla

contor_meniu++; //Se incrementeaza meniul

if(contor_meniu == 3 || contor_meniu == 5) contor_general = 1; /*In cazul in care se ajunge la setarea zilei sau a lunii contorul general va lua valoare 1 */

else if (contor_meniu == 6) contor_general = 15; /*In cazul in care e ajunge la setarea anului contorul general va lua valoare 15 */

}

//Se verifica daca butonul de minus a fost apasat

//Daca butonul a fost apasat mai mult de 50ms contorul general se decrementeaza

if(button(&PIND,4,50,0)){

contor_general–;

}

//Daca butonul a fost apasat mai mult de 50ms contorul general se incrementeaza

if(button(&PIND,6,50,0)){

contor_general++;

}

}

Bibliografie

http://agroromania.manager.ro/articole/plante-aromatice/lavanda-cultivarea-lavandei-folosirea-lavandei-in-industrie-292.html

http://gabyral.blogspot.ro/2014/01/inmultirea-plantelor-prin-butasi.html

http://www.onsetcomp.com/

http://www.geoscientific.com/technical/tech_references_pdf_files/Data_Logger_Fundamentals.pdf

http://ro.wikipedia.org/wiki/Secure_Digital

http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Components/General/SDSpec.pdf

Sisteme cu microcontrolere –Notițe curs, Prof.dr.ing. Petreuș Dorin

Note de curs – Sisteme incorporate Prof. Molnar Florin, 2014

Curs Circuite Analogice și Digitale, Prof. Ing. Adrian Peculea, UT Cluj, 2012

http://www.idt.com/products/clocks-timing/application-specific-clocks/real-time-clocks-rtc-ic

http://en.wikipedia.org/wiki/Real-time_clock

http://ro.wikipedia.org/wiki/Interfa%C8%9Ba_serial%C4%83_SPI

https://learn.sparkfun.com/tutorials/serial-peripheral-interface-spi

D.Petreuș, G.Munteanu, Z.Juhos, N.Palaghiță – Aplicații cu microcontrolere din familia 8051 –Editura Mediamira,Cluj-Napoca, 2005

Interfețele seriale I2C și SPI-Curs, Sisteme cu Microprocesoare, Prof.dr.ing. Eugen Lupu

Notițe de curs- Echipamente Periferice Nani Viorel, 2013

Circuite integrate analogice, Note de curs, Gheorghe Pana, Univ. Tehnica Brasov

Data sheet – ATMEL 8-BIT MICROCONTROLLER WITH 4/8/16/32KBYTES IN-SYSTEM PROGRAMMABLE FLASH

Data sheet Nokia 5110

http://www.mivarom.ro/catalog/

http://www.tme.eu/ro/

http://ro.farnell.com/

http://www.rasfoiesc.com/inginerie/electronica/STABILIZATOARE-LINIARE-DE-TENS29.php

Anexa 1: Schema electrică a dispozitivului electronic

Anexa 2: Codul Sursă

Inițializarea modulelor

Această bucată a codului ruleaza o singură data la începutul programului. Prin parcurgerea ei se realizează:

DDRB = 0xFF; //Se configureaza portul B

DDRC = 0x21; //Se configureaza portul C

DDRD = 0x8B; //Se configureaza portul D

display_init(); //Se initializeaza display-ul

afiseaza_prima_pagina(); //Se afiseaza Lvanter…

delay_ms(1500); //Timp de 1.5 secunde in scop demonstrativ comisiei de licenta

afiseaza_proiect_licenta(); //Se afiseaza Lucreare Licenta…

delay_ms(1500); //Timp de 2.5 secunde in scop demonstrativ comisiei de licenta

Soft_I2C_Init(); //Se initializeaza I2C-ul

LCD_text(""); //Se reseteaza LCD_text

sageti(30,3); //Se pozitioneaza sagetile

LCD_text("");

Fiecare funcție folosită mai sus este descrisă în cele ce urmează:

Inițializarea display-ului:

void display_init(){

SPI1_init(); //Se initiaza SPI-ul

Chip_Select = 0; //Se selecteaza Display-ul

Display_Reset = 0; Display_Reset = 1; //se reseteaza display-ul

Display_DC = 0; //Se seteaza modul de configurare display-ului

//Se trimite modul de adresare (chip is active, horizontal adressing, use extended instruction set)

SPI1_Write(0x21);

SPI1_Write(0xB8); //Seteaza contrastul (Vop)

SPI1_Write(0x04); //Seteaza coeficientul de temepratura

SPI1_Write(0x14); //Seteaza viteaza de multiplexare 1:40

SPI1_Write(0x20); //Instructiune de basza (nu se configureaza, trebuie rulata)

SPI1_Write(0x0C); //Seteaza video mode

//Se pozitioneaza cursorul la coordonatele 0,0 si se seteaza display-ul pentru a accepta date

SPI1_Write(0x80);SPI1_Write(0x40);Display_DC=1;

// Se curata display-ul scriind 0 in toata memoria display-ului

for(contorDisplay=0; contorDisplay<504;contorDisplay++) SPI1_Write(0x00);

Chip_Select = 1; //Se deselecteaza display-ul

}

Afișează Lavanter:

//Actiuni luate la prima pornire, aceasta functie va fi apelata in momentul in care porneste prima data dispozitivul

void afiseaza_prima_pagina(){

Chip_Select=0;Display_DC=0;(0x80);SPI1_Write(0x41);Display_DC=1;

//Display-ul accepta date pentru afisaere

for(contorDisplay=0;contorDisplay<252;contorDisplay++)

SPI1_Write(primapagina[contorDisplay]); Chip_Select = 1;

}

Se afiseaza Lucreare Licenta…

void afiseaza_proiect_licenta(){

Chip_Select=0;Display_DC=0;(0x80);SPI1_Write(0x40);Display_DC=1; //Display-ul accepta date pentru afisaere

for(contorDisplay=0;contorDisplay<504;contorDisplay++) SPI1_Write(licentaalina[contorDisplay]); // Se tipareste a doua imagine

Chip_Select = 1; // Se deselecteaza displayul

}

Afisarea textului

void LCD_Tipareste_Caracter(char caracter){

Chip_Select = 0;Display_DC = 1;

for(contorFont=0;contorFont<5;contorFont++)SPI1_Write(font[caracter – 0x20][contorFont]);

Chip_Select = 1;

}

void LCD_text(char *caractere){

while(*caractere) LCD_Tipareste_Caracter(*caractere++);

}

while(1){

if(contor_meniu < 3){

meniu_setare_ora(); //Se afiseaza meniul de setare a orei

pozitie_Cursor(30,3); //Se pozitioneaza cursorul

LCD_text(ora_curenta); //Se afiseaza ora setata

}

else if (contor_meniu > 3 && contor_meniu < 8){

meniu_setare_data(); //Se afiseaza meniul de setare a datei

pozitie_Cursor(20,3); //Se pozitioneaza cursorul

LCD_text(data_curenta); //Se afiseaza data setata

} else if (contor_meniu >8 && contor_meniu < 11){

meniu_setare_alarma(); //Se afiseaza meniul de stare a alarmei

pozitie_Cursor(30,3); //Se pozitioneaza cursorul

LCD_text(alarma); //Se afiseaza alarma setata

}

if(contor_meniu == 0){

LCD_clear(); //Se sterg toate informatiile de pe display

secunda_setata = 0; //Secunda care urmeaza sa fie setata este initializata cu 0

minuta_setata = 0; //Minutul care urmeaza sa fie setat este initializat cu 0

ora_setata = 0; //Ora care urmeaza sa fie setata este initializat cu 0

ziua_setata = 31; //Ziua care urmeaza sa fie setata este initializata cu 1

luna_setata = 12; //Luna care urmeaza sa fie setata este initalizata cu 1

anul_setat = 15; //Anul care urmeaza sa fie setat este initializat cu 15

LCD_text(""); //Se reseteaza textul care se afiseaza pe display

pozitie_Cursor(15,1); //Se pozitioneaza cursorul pentru Setare ora

LCD_text("Seteaza ora"); //Se afiseaza "Seteaza ora"

pozitie_Cursor(30,3); //Se pozitioneaza cursorul pentru afisarea ghidului

LCD_text("OO:MM"); //Se afiseaza ghidul de setare…

delay_ms(1000); //Timp de 1 secunda

contor_meniu = 1;

}

if(contor_meniu == 1){

if(contor_general > 23) contor_general=0; //Se fixeaza o limita superioara pentru ora

if(contor_general <0 ) contor_general = 23; //Se fixeaza o limita inferioara pentru ora

sageti(30,3); //Se pozitioneaza sagetile deasupra orei

ora_setata = contor_general; //Se aloca valoarea contorului general la ora_setata

}else if(contor_meniu == 2){

if(contor_general > 59) contor_general=0; //Se fixeaza o limita superioara pentru minute

if(contor_general < 0) contor_general= 59; //Se fixeaza o limita inferioara pentru minute

sageti(45,3); //Se pozitioneaza sagetile deasupra minutelor

minuta_setata = contor_general; //Se aloca valoarea contorului general la minuta_setata

} else if(contor_meniu == 3){

LCD_clear(); //Se sterg toate informatiile de pe display

pozitie_Cursor(15,1); //Se positioneaza cursorul pentru Setare data

LCD_text("Seteaza data"); //Se afiseaza Seteaza data

sageti(20,3); //Se pozitioneaza sagetile la setarea zilei

//Se pozitioneaza cursorul pentru afisarea ghidului de setare

pozitie_Cursor(20,3);

LCD_text("ZZ-LL-AA"); //Se afiseaza ghidul se setare…

delay_ms(1000); //Timp de 1 secunda

luna_setata = 1; // Se aloca valoarea 1 la luna_serata

anul_setat = 15; // Se aloca valoarea 15 la anul_setat

contor_meniu = 4; //Se trece la meniul urmator

} else if(contor_meniu == 4){

if(contor_general > 31) contor_general = 1; //Se fixeaza o limita superioara pentru zi

if(contor_general < 1) contor_general = 31; //Se fixeaza o limita inferioara pentru zi

luna_setata = 1; // Se aloca valoarea 1 la luna_serata

anul_setat = 15; // Se aloca valoarea 15 la anul_setat

sageti(20,3); //Se pozitioneaza sagetile deasupra zilei

ziua_setata = contor_general; //Se aloca valoarea contorului general la ziua_setata

} else if(contor_meniu == 5){

if(contor_general > 12) contor_general = 1; //Se fixeaza o limita superioara pentru luna

if(contor_general < 1) contor_general = 12; //Se fixeaza o limita inferioara pentru luna

sageti(35,3); //Se pozitioneaza sagetile deasupra lunii

luna_setata = contor_general; //Se aloca valoarea contorului general la luna_setata

} else if(contor_meniu == 6){

if(contor_general > 30) contor_general = 15; //Se fixeaza o limita superioara pentru an

if(contor_general < 15) contor_general = 30; //Se fixeaza o limita inferioara pentru an

sageti(50,3); //Se pozitioneaza sagetile deasupra anului

anul_setat = contor_general; //Se aloca valoarea contorului general la anul_setat

} else if(contor_meniu == 7){

LCD_clear(); //Se sterg toate informatiile de pe display

seteaza_ora(); //Se apeleaza functia de setare a orei

seteaza_data(); //Se apeleaza functia de setare a datei

contor_meniu = 8; //Se trece la meniul urmator

} else if(contor_meniu == 8){

//seteaza incrementul

LCD_clear(); //Se sterg toate informatiile de pe display

pozitie_Cursor(0,1); //Se pozitioneaza cursorul pentru afisarea Intervalului de //achizitie

LCD_text("Interv achizitie"); //Se afiseaza "Interv Achizitie"

contor_meniu = 9; //Se trece la meniul urmator

ore_alarma = 0; //Se aloca valoarea 0 la ore_alarma

minute_alarma = 0; //Se aloca valoarea 0 la minute_alarma

}

if(contor_meniu == 9){

//Se fixeaza o limita superioara pentru ora de alarma

if(contor_general > 23) contor_general=0;

//Se fixeaza o limita inferioara pentru ora de alarma

if(contor_general < 0 ) contor_general = 23;

sageti(30,3); //Se pozitioneaza sagetile deasupra orei

ore_alarma = contor_general; //Se aloca valoarea contorului general la ore_alarma

}else if(contor_meniu == 10){

//Se fixeaza o limita superioara pentru minutele de alarma

if(contor_general > 59) contor_general=0;

//Se fixeaza o limita inferioara pentru minutele de alarma

if(contor_general < 0) contor_general= 59;

sageti(45,3); //Se pozitioneaza sagetile deasupra minutelor

minute_alarma = contor_general; //Se aloca valoarea contorului general la minute_alarma

} else if (contor_meniu == 11){

LCD_clear(); //Se sterg toate informatiile de pe display

//Se salveaza incrementul de ora in EEPROM la adresa 0x20

EEPROM_Write(0x20, ore_alarma);

//Se salveaza incrementul de minut in EEPROM la adresa 0x10

EEPROM_Write(0x10, minute_alarma);

setare_alarma(); //Se apeleaza functia de setare a alarmei

contor_meniu = 12; //Se trece meniul urmator

} else if (contor_meniu == 12){

pozitie_Cursor(0,1); //Se pozitioneaza cursorul pentru a se afisa "Lavanter"

afiseaza_prima_pagina(); //Se afiseaza "Lavanter"

scriere_date_card(); /*Se apeleaza functia de scriere a datelor pe card

Are rolul de a crea un fisier nou, daca nu exista,

Respectiv in cazul in care exista se trece ora si datele

In cazul in care fisierul exista*/

contor_meniu = 13; //Se trece la meniul urmator

SREG_I_bit = 1; //Activează întreruperi globale

EIMSK = 0x01;

SE_bit = 1; // sleep mode enabled

SM1_bit = 1; //Power-down mode

} else if (contor_meniu == 13){

//LCD_text("SOMN");

}

//–Se Verifica Starea Butoanelor–\\

//Se verifica daca butonul de set a fost apasat

if(button(&PIND,5,1,0)){

stare_buton = 1; //Starea butonlui se seteaza pe 1

}

if(stare_buton && Button(&PIND,5, 1,1)){ /*Se verifica daca starea butonului de set s-a modificat, Daca da se iau urmatoarele masuri*/

contor_general=0; //Contorul general ia valooarea 0

stare_buton=0; //Se reseteaza starea butonului pentru a nu se repeta aceasta bucla

contor_meniu++; //Se incrementeaza meniul

if(contor_meniu == 3 || contor_meniu == 5) contor_general = 1; /*In cazul in care se ajunge la setarea zilei sau a lunii contorul general va lua valoare 1 */

else if (contor_meniu == 6) contor_general = 15; /*In cazul in care e ajunge la setarea anului contorul general va lua valoare 15 */

}

//Se verifica daca butonul de minus a fost apasat

//Daca butonul a fost apasat mai mult de 50ms contorul general se decrementeaza

if(button(&PIND,4,50,0)){

contor_general–;

}

//Daca butonul a fost apasat mai mult de 50ms contorul general se incrementeaza

if(button(&PIND,6,50,0)){

contor_general++;

}

}

Similar Posts