Automatizarea Unui Sistem de Irigatii Intr O Sera
Automatizarea unui sistem de irigații într-o sera
Cuprins
Introducere
1.Sisteme automate
1.1 Istoric
1.2 Definiția reglării automate
1.3 Clasificare SRA
1.4 Schema bloc a unui SRA
1.5 Funcționalitatea unui SRA 18
1.6 Reglarea automată în modulul de monitorizare și control al sistemului de irigații
2. Microcontrolerul
2.1 Noțiuni generale
2.2 Arhitectura microcontrolerelor
2.3Structura unui microcontroler
2.3.1 Unitatea de memorie
2.3.2 Unitatea centrală de procesare(CPU)
2.3.3 Porturi intrări-ieșiri
2.3.4 Alimentarea și intrarea de reset
2.3.5 Alte elemente
2.4 Microcontrolerul ATMega328
Descrierea pinilor
2.5 Placa de dezvoltare Arduino Duemilanove
3.Senzori
3.1 Senzori de umiditate
3.1.1 Senzori capacitivi
3.1.2 Senzori rezistivi
3.1.3 Senzori pe baza de termistori
3.2 Senzori de temperatură
3.2.1 Termocuplul
3.2.2 Termistorii
3.2.3Detector de temperatura rezistiv (RTD)
3.3 Senzorul analogic LM35
3.4 Senzori SMD
3.4.1 Noțiuni generale
3.4.2 SHT11
4. Comunicatia intre dispozitive
4.1 Tipuri de comunicatii
4.2 Transmisie serială prin cabluri
4.2.1 UART
4.2.2 USB
4.3 Transmisia wireless prin Bluetooth
4.3.1 Nivelul fizic
4.3.2 Stiva de protocol Bluetooth
4.3.3 Sesiunea de comunicare
5.Instrumente Software
5.1 Mediul de dezvoltare integrat
5.2 Arduino IDE
5.2.1. Introducere
5.2.2 Rutine și funcții folositoare
5.3 Programul Orcad
5.3.1 Orcad Capture
5.3.2 Orcad Layout
6. Realizare practică
6.1 Schema bloc a modului de lucru
6.2 Schema bloc a montajului
6.2.1 Monitorizarea serei
6.2.2 Controlul serei
6.3 Prelucrarea circuitului înainte de imprimare
6.3.1 Schema electrică
6.3.2 Schema în Layout
6.4 Realizarea cablajului
ANEXE
Lista acronimelor:
SRA – Sisteme de reglare automate
RA – Regulatorul automat;
EC – Elementul de comparație prin diferență (sau comparatorul diferențial);
EE – Elementul de executie;
TR – Traductorul de reacție;
ES – Element sensibil;
A – Adaptor;
EL – Element de legătură;
IT(PT) – Instalația tehnologică;
TI–traductorul de intrare
RAM – Random Access Memory
ROM – Read Only Memory
CPU – Central Processing Unit
CISC – Complex Instruction Set Architecture
RISC – Reduced instruction set computing
SFR – Special Functions Register
UART – Universal Asynchronous Receiver / Transmitter
USB – Universal Serial Bus
IDE – Integrated development environment
RTD – Resistive temperature detector
SMD – surface mounted device
PCB – Printed circuit Board
TTL – transistor-transistor logic
RS-232 – recommended standard 232
DTE – Data terminal Equipment
DCE – Data circuit ending equipment
PLL – Phase-locked loop
PID- Packet identifier
FTDI Future Technology Devices International
PAN Personal Area Network
CDMA – Code division multiple access
FHSS – Frequency-hopping spread spectrum
OBEX – OBject EXchange
SCO – Synchronous connection-oriented
RFCOMM – Radio frequency communication
L2CAP – Logical link control and adaptation protocol
HCI – Host Controller Interface
SDP – Service discovery protocol
ACL – Asynchronous Connection-Less
Introducere
1.Obiectivele lucrarii
Agricultura durabilă țintește spre dezvoltarea produselor de calitate superioarăși a materialelor de bază de o calitate acceptată de o gamă largă de consumatori. Alte obiective sunt reprezentate de uzul rațional al resurselor naturaleși conservarea mediului. De aceea, aparaturile moderne și echipamentele trebuie să fie capabile să facă față unor procese agricole complexe și să execute operații dificile fără să polueze mediul înconjurător. Pentru a controla performanța acestor mașinării, o cantitate mare de informație trebuie să fie captată de senzori și transmisă și stocată în sisteme de gestiune a informației pentru o eventuală procesare ulterioară. Mai mult, producția agricolă are loc într-un sistem dependent de schimbări imprevizibile ale mediului înconjurător.
În această lucrare se propune un modul de monitorizare și control al unui sistem de irigații, particularizat pentru o seră. O seră este o structură cu acoperiș și pereți de sticlă sau de plastic care, de multe ori, se încalzește datorită radiației solare, dar care permite un control mai bun datorită limitării spațiale și a izolării față de anumite condiții de mediu. Aceste condiții duc la comportamente imprevizibile și o vedere estimativă a consumului de resurse mult mai haotică.
Sistemul integrat este alcătuit dintr-o porțiune de achiziție de date și una de comandă. Informațiile de temperaturăși umiditate ale solului și ale aerului sunt preluate de microcontroller și comparate cu niște valori de prag. În funcție de poziția față de prag se pot comanda fie voleții de aer, fie pompele de apă, fie ambele. Atunci când aerul este uscat se recomandă pornirea voleților de aer. În cazul unei temperaturi ridicate a solului și a unei umidități scăzute, pompele de apă se pun în funcțiune. Având la dispoziție un flux de informații comparate constant, sistemul va fi construit, din punct de vedere logic, într-o buclă.Astfel, voleții de aer și pompele vor fi dezactivate după reglarea parametrilor. Considerăm, deci, căeste vorba de un sistem de reglare automată. Monitorizarea se face pe baza unui soft care permite vizualizarea valorilor la anumite intervale foarte scurte de timp. De asemenea, elementele de comandă vor funcționa în intervale de timp definite și vor avea timpi de așteptare pentru un nou impuls, pentru a ne asigura de stabilirea echilibrului termic in seră.
Prima parte a lucrarii tratazează o viziune generală asupra sistemelor de reglare automată, aratând și scheme principiale ale acestui proces. A doua parte vizează componentele sistemului și funcțiile fiecărora, în timp ce al 3-lea capitol acoperă protocoalele de comunicație dintre componente. În continuare se discută uneltele software folosite pentru dezvoltarea schemei. În cele din urmă se vor dezbate considerentele practice în realizarea hardware, atât din punct de vedere fizic, cât și logic.
2.Motivele selectării acestei teme
Am ales această temă deoarece reprezintă un sistem electronic de actualitate, ce ar trebui implementat din ce în ce mai mult în agricultură. Această automatizare aduce după sine o serie considerabilă de avantaje:
minimeaza efortul uman pentru întretinerea plantelor, fiind potrivit mai ales pentru producții în masa (efortul se focalizează pe aspectele economice), dar și pentru producție individuală, cu precădere pentru oamenii care călătoresc mult;
economisește apă – prin intervenții controlate se evită udarea plantelor atunci când nu este necesară;
economistește timp;
micșorează riscul de apariție al speciilor parazite, ce apar ca urmare a suprairigarii
ajută la controlul bolilor fungice prin păstrarea unei umidități adecvate;
prezintă o creștere a plantelor mai accentuată – cantitățile mici de apa aplicate într-un interval mai mare de timp asigură condiții de creștere ideale; cum fluxul de irigări este constant, apa pătrunde adânc în sol, ajungând și la rădacini;
previne erodarea solului și lipsa nutrienților;
este un sistem adaptabil, putând schimba parametrii după cerințele solului și speciei;
permite detecția problemelor în cazul unui sistem distribuit, fiecărei porțiuni alocându-i-se o zonăîn memorie.
1.Sisteme automate
1.1 Istoric
Conceptul de mașini automate dateazădin cele mai vechi timpuri. Automate, sau mașini cu formă umană, au apărut în ceasuri în biserici medievale datorită, în mare parte, talentului și atenției la detalii ale ceasornicarilor secolului al 18-lea, fiind recunoscuți pentru inovațiile lor inteligente în arta mecanismelor.
Unele din primele modele de astfel de roboți utilizează mecanisme de feedback pentru a reduce erorile, mecanisme care sunt încă folosite în zilele noastre. Un exemplu de sistem dezvoltat prin controlul feedback-ului este un rezervor care utilizează un flotor pentru controlul nivelului apei. Când apa scade sub nivelul dorit, flotorul coboară, se deschide o supapă și permite realimentarea rezervorului. Când nivelul apei crește, flotorul se ridică, și, dincolo de un punct atins la o anumită înălțime, supapa este închisă și taie alimentarea rezervorului. Acest sistem a fost prima oară documentat in cartea Pneumatica a lui Heron, datând din jurul anului 150 î.e.n.
Primul sistem de feedback-ul propriu-zis, având în spate un sistem matematic riguros, a fost cel de reglementare Watt, inventat în 1788 de către inginerul britanic James Watt, împreună cu Matthew Boulton. Acest dispozitiv a fost alcătuit din două bile metalice atașate la arborele de antrenare al unui motor cu aburi și conectate la o supapă de reglare a debitului de abur. Astfel, în momentul creșterii vitezei motorului cu aburi, bilele se deplasează în afara axului datorită forței centrifuge, închizând astfel supapa. Aceasta cauzează o scădere a fluxului de abur la motor și, prin urmare, o reducere a vitezei.
Sistemele de control de feedback, dezvoltarea unor instrumente specializate și dezvoltarea unor metode de distribuție a muncii către oameni și mașinarii au reprezentat instrumentele esențiale în automatizarea industrială din secolul al XVIII-lea. Pe măsura ce tehnologia a progresat, mașinării specializate au fost realizate pentru a efectua acțiuni precum înșurubarea unui dop pe o sticlă sau turnarea de lichid în matrițe pentru formarea de cauciucuri pentru vehicule. Totuși, nici una din aceste mașini nu avea versatilitatea sau eficiența omului și nu puteau sa relocheze obiecte disparate catre pozițiile dorite.
Un sistem de producție automatizat reprezintă un sistem construit pentru a exploata capacitățile mașinăriilor de a efectua anumite acțiuni, roluri ocupate anterior de către oameni, și pentru a defini, controla și executa o secventa clară de operațiuni, independente de sau raducând intervenția umana. Astfel de sisteme au fost dezvoltate și folosite cu succes în industriile de telecomunicații, avtiatică, și cea astronautică, ducând la apariția unor dispozitive precum sistemele de comutare a apelului telefonic, sisteme de pilot automat sau sisteme automatizate de ghidare și control, acestea fiind mult mai rapide sau mai eficiente decât cele în care se baza doar pe intervenția umană.
1.2 Definiția reglării automate
Reglarea automată este definită drept un ansamblu de operații care se efectuează în circuit închis, alcătuind o buclă echipată cu dispozitive anume prevăzute, cu ajutorul cărora se efectuează o comparație prin diferență a valorii măsurate a unei mărimi din procesul reglat, o valoare prestabilită constant sau variabilă în timp, și se acționează asupra procesului(sau instalației tehnologice) astfel încât să tindă spre anularea acestei diferențe.
1.3 Clasificare SRA
SRA se pot clasifica astfel:
După numărul mărimilor de ieșire:
SRA cu o singură mărime de ieșire
SRA cu mai multe mărimi de ieșire numite și SRA multivariabile
După tipul dependenței dintre mărimile de ieșire și cele de intare ale elementelor componente ale SRA:
SRA liniare în care toate dependențele sunt descrise de funcții
SRA neliniare
După modul de prelucrare al semnalelor:
SRA continue – toate mărimile sunt funcții continue în timp
SRA discontinue
După tipul elementelor componente sau/și destinației
SRA unificate – furnizează semnale unificate
SRA specializate – folosite pentru realizarea unor procese particulare; elementele lor nu furnizează neapărat semnale unificate
După numarul buclelor de reglare:
SRA cu o singură buclă de reglare, având în componență un singur regulator automat
SRA cu mai multe bucle de reglare, implicit, cu mai multe regulatoare automate.
După legea de reglare:
SRA după abatere – compară valoarea mărimii de intrare cu una de referințăși acționează spre a elimina diferența dintre ele
SRA după perturbație –supraveghează perturbațiile ce actionează asupra sistemului, încercând să elimine acești factori care îndepărtează starea sistemului de starea de referință
SRA după sării automate
Reglarea automată este definită drept un ansamblu de operații care se efectuează în circuit închis, alcătuind o buclă echipată cu dispozitive anume prevăzute, cu ajutorul cărora se efectuează o comparație prin diferență a valorii măsurate a unei mărimi din procesul reglat, o valoare prestabilită constant sau variabilă în timp, și se acționează asupra procesului(sau instalației tehnologice) astfel încât să tindă spre anularea acestei diferențe.
1.3 Clasificare SRA
SRA se pot clasifica astfel:
După numărul mărimilor de ieșire:
SRA cu o singură mărime de ieșire
SRA cu mai multe mărimi de ieșire numite și SRA multivariabile
După tipul dependenței dintre mărimile de ieșire și cele de intare ale elementelor componente ale SRA:
SRA liniare în care toate dependențele sunt descrise de funcții
SRA neliniare
După modul de prelucrare al semnalelor:
SRA continue – toate mărimile sunt funcții continue în timp
SRA discontinue
După tipul elementelor componente sau/și destinației
SRA unificate – furnizează semnale unificate
SRA specializate – folosite pentru realizarea unor procese particulare; elementele lor nu furnizează neapărat semnale unificate
După numarul buclelor de reglare:
SRA cu o singură buclă de reglare, având în componență un singur regulator automat
SRA cu mai multe bucle de reglare, implicit, cu mai multe regulatoare automate.
După legea de reglare:
SRA după abatere – compară valoarea mărimii de intrare cu una de referințăși acționează spre a elimina diferența dintre ele
SRA după perturbație –supraveghează perturbațiile ce actionează asupra sistemului, încercând să elimine acești factori care îndepărtează starea sistemului de starea de referință
SRA după stare – supraveghează starea procesului și comandă regulatorul automat în funcție de relația existentăîntre acesta și marimea de conducere
SRA evoluate –efectul neliniarităților se vrea a fi contracarat prin modificarea algoritmului de reglare în corelație cu starea procesului reglat; structurile folosite pentru implementare se numesc adaptive.
1.4 Schema bloc a unui SRA
Schema funcțională a unui sistem de reglare automată este reprezentatăîn figura<figură>. S-au folosit următoarele notații:
RA–regulatorul automat;
EC – elementul de comparație prin diferență (sau comparatorul diferențial);
EE – elementul de executie;
TR – traductorul de reacție;
IT(PT) – instalația tehnologică având ca scoprealizarea procesului tehnologic reglat;
TI–traductorul de intrare (care furnizează mărimea de intrare i, proporțională cu consemnul sau variația program q).
Mărimea de ieșire din proces y reprezintă mărimea reglata sau parametru reglat(de exemplu debitul, presiunea, turația, tensiunea, frecvența)
Marimea reglată se abate de la valoarea de consemn(i) sub efectul perturbațiilor aplicate din exterior: perturbația de la iesire p si perturbația pe calea de reacție,w
În realizările constructive ale SRA, regulatorul și elementele de comparație formează o singură unitate, având mărimile de intrare reprezentate priniși r,și, ca mărime de ieșire, mărimea de comandău. Ansamblul elementelor EC, RA, EE și TR (și eventual TI) formează dispozitivul de automatizare DA. IT (sau PT) reprezintă instalația automatizată (sau obiectul reglării automate).
Deseori, în aplicațiile industriale ale automaticii, sistemele de reglare automată cuprind mai multe elemente decât cele reprezentate în figură,și anume: adaptoare, convertoare de semnal, elemente de prescriere a mărimilor de referințăși programatoare, elemente de calcul sau înregistrare a datelor.
Unele SRA folosesc, în locul regulatorului RA, un calculator, un minicalculator de proces sau un automat programabil, rezultând astfel instalații de reglare mult mai complexe.
1.5 Funcționalitatea unui SRA
Mărimile perturbatoare p si w acționează asupra instalației tehnologice, rezultatul fiind o variație a mărimii reglate.Aceste variații sunt măsurate și prelucrate, cu ajutorul traductorului Tr, aflat pe bucla de reacție negativă;drept urmare vom avea la iesire un semnal de reacție r.
Semnalul de reacție r de la ieșirea traductorului este comparat cu mărimea de intrare iîn interiorul elementului de comparație, EC. Intrarea i este direct proporțională cu valoarea mărimii de referințăy. Diferența dintre intrare și semnalul de reacție va scoate la iveală o eroare ε.
Pentru a putea lucra cu semnalul de eroare ε, acesta se amplifică in RA și se transformă intr-un semnal de comandău (prin circuitul de reacție care fixează legea de reglare, circuit aflat în RA). Semnalul de comandă u acționează asupra servomotorului elementului de execuție EE pentru diminuarea erorii de funcționare ε. Sistemul tehnologic este în permanență influențat de mărimile perturbatoare p, existând mereu variații. Așadar, procesul de reglare se va relua, având o natura continuă.
1.6 Reglarea automată în modulul de monitorizare și control al sistemului de irigații
În cazul acestui modul, funcțiile SRA-ului sunt împărțite între dispozitivele comandate, microcontroller si traductoare. Perturbațiile mediului se regăsesc în semnalul p ce acționează asupra pompei de apăși a ventilatorului,și in semnalul w care adaugă riscul afectării traductorilor,și prin urmare, a citirii datelor de intrare. Din fericirere traductorii aleși beneficiaza de o izolare da tă de o bună încapsulare, reducând la minim influența factorilor externi asupra funcționalității lor.
Traductorul de reacție este constituit, în cazul de față, din mai multe traductoare pre-plasate pe calea de reacție, preluând din mediu valori relevante și furnizându-le ca date de intrare pentru EC. În același timp, aceste valori sunt considerate și date de ieșire din instalația tehnologică IT carea acționat sau nu asupra mediului. Un traductor de reacție are următoarea structură:
ES – element sensibil
A – adaptor
EL – element de legătură
Figura 1. 3
Sursa: www.rasfoiesc.com
Elementul sensibil sesizează marimea fizică masurată de traductor. Adaptorul este blocul funcțional care realizează o adaptare a informațiilor furnizate de elementul sensibil la cerințele impuse de celelalte parti componente ale dispozitivului de automatizare. Circuitele de intrare sunt specifice ES, iar cele de ieșire furnizează semnale unificate de tensiune sau curent, destinate prelucrarilor ulterioare.
Din traductor vor ieși anumite semnale de reacție r și vor intra în elementul de comparație EC. Valorile de temperaturăși umiditate sunt comparate cu niște valori de prag, calculate pe baza necesităților recoltei. Aceste valori pot fi oricand schimbate, sistemul dând dovada de adaptabilitate.
Elementul de comparație EC, regulatorul automat RA și elementul de execuțieEE formează un tot unitar ale cărui funcții sunt acoperite de plăcuța de dezvoltare Arduino. În urma comparației cu referința rezultă valorile de eroare, ε. Erorile sunt procesate de regulatorul automat, care stabilește dacă este nevoie de executarea unui proces de reglare sau nu. Acesta transmite mai departe un semnal de comandău spre elementul de executie.
EE furnizează comenzile specifice pentru activarea/dezactivarea elementelor de comandă, precum și resursele electrice. În instalația tehnologică, constituită din pompa de apăși ventilator, intră un semnal m de la EE ce îi determină acțiunile. În funcție de modul în care afectează mediul. vor fi preluate alte valori de TR, reinițiând lanțul tehnologic.
2. Microcontrolerul
2.1 Noțiuni generale
Un microcontroler este un microcircuit care încorporează o unitate centrală (CPU) și o memorie împreună cu resurse intrări/ieșiri care-i permit interacțiunea cu mediul exterior.
Primul microcontroler a fost creat în 1971 de cãtre inginerii Gary Boone și Michael Cochran de la Smithsonian Institution. Rezultatul muncii lor a fost TMS 1000, un microcontroler care utiliza o memorie read-only combinată cu o memorie de citire/scriere, un microprocessor și un clock pe cip. Ca răspuns la TMS 1000, Intel a creat Intel 8048, cu o memorie RAM+ROM pe același cip. La momentul respectiv existau douã variante de microcontroler. Prima avea o memorie
EPROM cu o fereastră de cuarț transparentă pentru ștergere cu expunere la raze ultraviolete, iar cea de-a doua avea o memorie PROM, programabilă doar odatã, cu un cost redus. Introducerea pe piațã în 1993 a memoriei EEPROM a permis ștergerea rapidă a datelor și cu un cost mai mic ca la EPROM. Tot în același an Atmel a introdus memoria FLASH. Odată cu trecerea timpului, costurile s-au diminuat, orice pasionat având posibilitatea să achiziționeze un microcontroler.
Acesta diferă față de microprocesor în multe feluri.În primul rând trebuie să se ia în calcul scopul folosirii. Procesoarele sunt calculatoare de uz general și pot rula mii de programe. Microcontrolerele sunt pentru un uz specific și execută un singur lucru odată. Caracteristicile principale ale microcontrolerelor sunt următoarele:
sunt integrate (“embedded”) în alte dispozitive pentru a controla starea și acțiunea asupra anumitor produse;
sunt dedicate unui task și a rulării unui anumit program; acest program este stocat în memoria ROM și nu se schimbă în general;
sunt dispozitive de mică putere: în timp ce un calculator este băgat în priză și consumă cam 50W, un microcontroler alimentat cu baterii va consuma doar 50 mW;
sunt proiectate pentru a fi mici și a avea costuri reduse;
câteodata sunt fabricate pentru a rezista la condiții extreme(ex:controlerele pentru motoare de automobile).
Un criteriu de clasificare a microcontrolerelor este lungimea (dimensiunea) cuvântului de
date. 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, 32 sau 64 de biți.
Utilizări tipice ale microcontrolerelor sunt:
în industria automobilelor (controlul alarmelor, climatizării, închiderii/deschiderii geamurilor, aprinderii motorului, controlul camerei pe spate pentru parcări, avertizări senzori de proximitate);
în industria aerospațială;
în medicină;
în controlul perifericelor PC-urilor;
în aparatura electrocasnică(frigidere, mașini de spălat,cuptoare cu microunde);
în electronice de consum(telefoanie mobilă,imprimante, televizoare, radiouri, sisteme audio);
în controlul mediului și climatizare (sere, hale, locuinte);
în robotică;
Figura 2. 1
sursa : http://www.cursuri.flexform.ro/
2.2 Arhitectura microcontrolerelor
Arhitecturile cele mai uzuale se clasifică în două categorii:
Arhitectura „von Neumann” este cea mai des folosită la realizarea microcontrolerelor și este caracterizată de existența unui singur spațiu de memorie pentru date și adrese. O singură magistralã se ocupã de preluarea datelor și adreselor iar acest lucru conduce la operații mai lente.
Arhitectura de tip „Harvard” spre deosebire de cea „von Neumann” are spații de memorie separate pentru adrese și date, deci și magistrale separate. Operațiile se pot executa în același timp, în timp ce se executa operațiile instrucțiunii anterioare se poate încãrca adresa pentru urmãtoarea instrucțiune. Aceastã tehnicã poartã numele de pipeline.
O realizare particularã a acestei arhitecturi este arhitectura Harvard modificatã, o arhitecturã cu cost redus care se deosebește printr-o magistralã comunã pentru adrese și date.
2.3Structura unui microcontroler
2.3.1 Unitatea de memorie
Memoria este o parte a microcontrolerului a carei funcție este de a înmagazina date. Cuvintele (biții de informație) sunt păstrate în locații de memorie, locații ce pot fi accesate prin diverse tipuri de adresare. Memoria poate fi de mai mai multe feluri:
ROM – Read Only Memory – este un tip de memorie folosit pentru a salva programele ce sunt executate. Dimensiunea programului ce poate fi scris depinde de capacitatea memoriei. ROM poate fi integrată în microcontroler sau adăugată ca chip extern în funcție de firma producatoare. Ambele opțiuni au și avantaje și dezavantaje. Atunci când memoria ROM este externă, microcontrolerul este mai ieftin și programul mai lung cu prețul pierderii unor pini disponibili la care se conectează. În cazul memoriei interne avem dimensiuni mai mici și costuri mai mari. Dimensiunea memoriei ROM variază de la 512B la 64kB.
Random Access Memory (RAM) – este un tip de memorie folosit pentru stocarea temporară a datelor și a rezultatelor intermediare folosite în operațiile microcontrolerului. Conținutul dispare atunci când sursa de current este oprită. Poate fi de tip DRAM(Dinamic RAM) sau SRAM(Static RAM). Dimensiunea acestor memorii ajunge la câțiva kB.
Electrically Erasable Programmable ROM (EEPROM) – este un tip special și nu il conțin toate microcontrolerele. Conținutul său poate fi schimbat în timpul execuției(similar RAM), dar rămâne salvat chiar și după oprirea curentului(similar ROM). De multe ori este folosit pentru a stoca valori create și utilizate în timpul operațiilor (valori de calibrare, coduri) care trebuie pastrate și la oprirea alimentarii. Dezavantajul principal este că procesul de programare este destul de lent. Dacă la celelalte memorii timpii se raportau la nanosecunde aici avem milisecunde.
2.3.2 Unitatea centrală de procesare(CPU)
Unitatea centrală este creierul calculatorului. Rolul CPU este de execuție a programelor stocate în memoria principală, execuție realizată în trei etape:
extragerea instrucțiunilor;
decodificarea instrucțiunilor;
execuția lor propriu-zisă.
CPU are structuri specializate numite ALU(Aritmethic Logical Unit) care implementează funcțiile logice și efectuează, între altele, operațiuni aritmetice de bază: adunare, scădere, înmulțire sau împărțire.
Orice program are un număr de instrucțiuni.Acestea sunt efectuate în mai multe cicluri. în funcție de organizarea instrucțiunilor în program obținem performanțe diferite. Avem două organizări: CISC și RISC. LaCISC (Complex Instruction Set Architecture) sunt mai puține instrucțiuni, avand fiecare un număr mare de cicluri de execuție, iar la RISC mai multe instrucțiuni cu număr limitat de cicluri.
2.3.3 Porturi intrări-ieșiri
Pentru interacțiunea cu mediul exterior microcontrolerul conține un bloc cu câteva locații de memorie al căror capăt este conectat la magistrala de date, iar conexiunile cu liniile de ieșire sunt pinii microcontrolerului. Aceste porturi pot fi de trei feluri: de intrare, de ieșire sau porturi pe douã cãi.
Figura 2. 2
http://retele.elth.ucv.ro/
2.3.4 Alimentarea și intrarea de reset
Ca orice circuit, microcontrolerul are nevoie de alimentare. Există două aspecte de care trebuie să se șina cont. Primul aspect e reprezentat de posibila stare primejdioasă care apare în momentul în care microcontrolerul este oprit și sursa de alimentare ajunge la un nivel destul de jos cauzat de zgomote. Cum dispozitivul are circuite cu niveluri diferite de tensiune, îi poate afecta performanța. Pentru a preveni acest fenomen este montat un circuit special. Acesta resetează totul atunci când nivelul de tensiune scade sub limita joasă. Al doilea aspect important este materializat într-un pin de reset care servește la resetarea externă a microcontrolerului prin aplicarea valorii 1 logic sau 0 logic, depinzând de tipul microcontrolerului.
2.3.5 Alte elemente
Magistrala – reprezintă calea prin care datele circulă de la un bloc de memorie la altul.Dacă, de exemplu, dorim sã înmulțim conținutul a două locații de memorie și să întoarcemrezultatul înapoi în memorie, vom avea nevoie de o conexiune între memorie și unitatea centralã de prelucrare.
Existã douã tipuri de magistrale: de date și de adresã. Magistrala de date conectează blocurile din interiorul microcontrolerului, iar magistrala de adresă transmite adresele de la unitatea centrală de prelucrare la memorie.
Regiștri – folosiți pentru a memora anumite valori ale unor biți.Sunt de două tipuri: generali și speciali. Sunt de un interes deosebit SFR-urile (Special Function Register) a căror funcție e predefinită de fabricant și nu poate fi schimbată. Cum biții lor sunt conecatați fizic la anumite circuite din microcontroler, spre exemplu convertoare A/D, module de comunicații seriale, orice schimbare a lor afectează direct modul de operare al microcontrolerului sau a anumitor circuite. Dacă se scrie 0 sau 1 în SFR-ul ce controlează un port de intrare/ieșire se realizează configurarea pinuluicorespunzător ca fiind de input sau output.
Program Counter – localizează în memorie adresa care conține urmatoarea instrucțiune de executat. Dupa fiecare instrucțiune valoarea counterului se incrementeaza cu 1. Așadar programul are în execuțiedoar câte o instrucțiune la orice moment dat, pe o anumită unitate de execuție. Valoarea program counterului poate fi schimbată în orice moment, lucru care cauzează un “jump” la o noua locație de memorie. Acest mecanism de salt se află la baza funcționaliății subrutinelor șiîntreruperilor.
Oscilator – generează semnale de tact care să sincronizeze acțiunile din microcontroler. Deobicei constăîntr-un oscilator extern cu cuarț sau un cristal de cuarț legat de oscilator intern pentru stabilizarea frecvenței. Instrucțiunile nu sunt executate la rata impusă de oscilator, ci de câteva ori mai lent din cauza împartirii în cicluri.
Timere – sunt registre speciale pe 8 sau pe 16 biți în care au loc incrementari la fiecare semnal de tact. Atunci când un registru este complet încarcat se generează o intrerupere. Atunci când aceste registre folosesc un oscilator cu cuarț ca și CLOCK se poate măsura perioada de timp dintre două evenimente. Dacă se folosesc semnale de tact dintr-o sursă externă timerul se transformă în counter.
Figura 2. 3
Modulator PWM – este un modulator în duratã care permite modificarea factorului de umplere.
2.4 Microcontrolerul ATMega328
ATMega328 este un microcontroler de putere joasă pe 8 biți creat de Atmel și face parte din seria MegaAVR. Are cinci moduri de economisire a energiei selectabile prin soft. Este dezirabil ca modulul de irigații să consume cât mai puțină energie. Acest dispozitiv de mare performanță are un set redus de instrucțiuni (Advandced RISC), avand 131 de instrucțiuni semnificative, majoritatea executându-se într-un singur ciclu de ceas. Astfel poate executa rapid puținele instrucțiuni de care avem nevoie. Conține 32 de regiștrii de uz general, 32 KB de memorie FLASH cu capacități de citire-scriere cu 1 KB EEPROM, 2 KB SRAM. Din punct de vedere al intrărilor și ieșirilor are 23 de porturi programabile. Pentru sincronizare avem trei timere flexibile, surse de întrerupere interne și externe, timer watchdog programabil cu oscilator intern. Achiziția de date este ușurată de comunicația serială USART, o interfață serială de 2 fire, port serial SPI, și convertorul Analog / Digital cu 6 canale pe 10 biți.
Dispozitivul funcționează între 1.8 și 5.5 volți. Prin executarea de instrucțiuni într-un singur ciclu de ceas, microcontrolerul realizează debite ce se apropie de 1 MIPS pe MHz, echilibrând consumului de energie și de viteză de procesare. Pentru a maximiza performanța și paralelismul, microcontrolerul Atmega328 folosește o arhitectură Harvard a microprocesorului cu memorii separate și magistrale de adresă și de date.
De asemenea este ideal pentru o seră rezistând la o gamă larga de temperaturi, acoperind temperaturile atmosferice și ale solului, între -40 și 85 de grade Celsius.
Figura 2. 4 ; Sursa: www.atmel.com
Descrierea pinilor
Structura plăcii poate fi clasificată astfel:
VCC – tensiunea de alimentare;
GND – masa;
Port B (PB7:0) – Portul B este un port bidirecțional I/O de 8 biți cu rezistențe interne de tip pull-up care devine activ când apare o resetare chiar dacă ceasul nu funcționează;
Port C (PC5:0) – Portul C este un port bidirecțional I/O de 6 biți similar cu portul B;
Port D (PD7:0) – Portul D este un port pe 8 biți similar cu celelalte două;
PC6/RESET – Portul este folosit și ca intrare și ca reset. Un nivel scăzut pe acest pin de durată mai mare decât lungimea minimă a unui impuls, de 2.5μs va genera o resetare, chiar dacă ceasul nu funcționează;
AVCC este pinul de alimentare pentru convertorul A/D, PC3:0 și ADC7:6. Ar trebui să fie extern conectat la VCC, chiar dacă convertorul A/D nu este folosit. Dacă se utilizează convertorul A/D, acesta ar trebui să fie conectat la VCC printr-un filtru trece-jos. Pinul PC6. funcționează cu tensiune de la VCC;
AREF este pinul de referință analogic pentru convertorul A/D;
ADC7:6 servesc ca intrări analogice la convertorul A/D. Acești pini sunt alimentați de la rețeaua analogică și servesc drept canale analog-digitale de 10 biți.
2.5 Placa de dezvoltare Arduino Duemilanove
Figura 2. 5 sursa: www.arduino.cc
Arduino este o placuță de dezvoltare bazătă pe microcontrolerul ATMega328 pe 8 biți, conținând 6 pini analogici de intrare,14 pini digitali de intrare/ieșire care permit atașarea elementelor exterioare, precum și o interfață USB ce permite comunicarea cu alte dispozitive. Are nevoie de un mediu de dezvoltare simplu (IDE) care poate fi rulat pe orice calculator și în care se scriu programele într-un limbaj similar cu C sau C++.
Fiecare dintre cei 14 pini digitali pot fi folosiți ca input sau output în funcție de cum sunt setați în program (cu ajutorul funcțiilor pinMode(), digitalWrite() și digitalRead()).Fiecare pin poate aproviziona sau primi un maxim de 40 mA (se recomandăaproximativ 20 mA) și are un rezistor intern de pull-up de 20-50 kOhmi. Acești rezistori sunt utilizați în circuite logice pentru a garanta căintrările sistemelor logice se află la nivelul logic așteptat(high sau low) atunci când dispozitivele sunt deconectate sau sunt introduse impedanțe mari.
Pinii analogici(A0-A5) au rezoluția pe 10 biti (de la 0 la 1024).Ei au valori pe scala 0-5 V, existând posibilitatea diminuării intervalului prin schimbarea tensiunii de referință. Aceasta se poate modifica cu pinul AREF și cu funcția analogReference().De asemenea, acești pini pot fi folosiți și ca pini digitali input/output.
Există și pini cu funcții speciale
Seriale: 0(RX) și 1(TX) folosite pentru a primi și transmite date seriale TTL (transistor-to-transistor-logic);
Întreruperi externe: 2 și 3. Acești pini pot fi configurați pentru a marca o întrerupere la o valoare mică, o schimbare de valoare. Se poate configura cu funcția attachInterrupt();
PWM (Pulse Width Modulation): 3,5,6,9,10 și 11;
SPI:10(SS), 11 (MOSI), 12 (MISO), 13 (SCK). Acești pini întrețin comunicația SPI(Serial Peripheral Interface), 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ă;
Figura 2. 6 sursa: www.wikipedia.org
LED intern:13;
AREF – tensiuni de referință pentru intrări analogice;
RESET – atunci când intampina valoarea LOW microcontrolerul este resetat.
Pini de putere:
VIN – pinul prin care se introduce o tensiune de la o sursă externă;
5V – alimentare pentru microcontroler și celelalte componente de pe placuță. Aceasta poate proveni de la VIN/Power Connector printr-un regulator de pe placă sau de la USB sau altă sursă reglată de 5 V;
3V3 – o sursă de tensiune generată de un regulator de pe placuță sau un chip FTDI;
3.Senzori
3.1 Senzori de umiditate
Termenul de umiditate se referă la cantitatea de vapori de apa dintr-un gaz, în cazul serei din aer. Pentru a se indica nivelul de umiditate se folosesc mai mulți termeni, dintre care se menționează cei mai importanți: umiditate relativă (%), absolută (grame/m³), nivel de topire (° C), de înghețare (° C). Există o corelație între nivelul de topire și umiditatea relativă.
Cei mai folosiți senzori sunt cei ce masoară:
umiditatea absolută – senzori bazați pe termistori
umiditatea relativă – senzori rezistivi, senzori capacitivi
3.1.1 Senzori capacitivi
Se introduce un material dielectric între doi electrozi. De obicei, acest material este o peliculă de polimer care iși modifică proprietățile dielectrice în funcție de cantitatea de vapori de apă pe care o absoarbe sau o degajă. Așadar, modificările umidității schimbă geometria și capacitatea senzorului. Dacă se alege un dielectric cu o constantă de 6, în momentul în care este expus la temperatura camerei se va lovi de constanta vaporilor de apa cu valoarea peste 80. Ca urmare a diferenței foarte mari între cele doua constante, va urma o creștere a capacității.
Figura 3. 1
3.1.2 Senzori rezistivi
Senzorul este format dintr-un suport ceramic prevăzut cu electrozi metalici intercalați și placați cu un strat de polimer higroscopic. Se introduce un semnal alternativ simetric de nivel redus și se observă că impedanța senzorului variază după o lege invers logaritmică cu umiditatea relativă (având o excursie mare a valorilor: de la peste 10MΩ (la o umiditate de 10% RH) la mai puțin de 2kΩ (la 90% RH umiditate) cu o precizie de 2%. Semnalul de excitare (sinus sau dreptunghi) are o frecvență în domeniul 60Hz – 10kHz (tipic1kHz), fără componentă de curent continuu.
3.1.3 Senzori pe baza de termistori
Senzorii pe bază de conductivitate termică sunt formați din doi termistori într-un circuit în punte: unul dintre ei este încapsulat în nitrogen uscat, iar celălalt este expus la mediul înconjurator printr-o gură de ventilație. Cel încapsulat servește ca element de compensare cu temperatura.
Figura 3. 2
Când se trece un curent de 40 mA prin circuit, termistorii sunt încălziți la circa 200°C prin efectul Joule-Lenz. Puntea este echilibrată în aer uscat. Schema de măsură este un circuit în punte. Când aerul uscat este înlocuit cu aer umed, puntea se dezechilibrează. Caldura disipată de termistorul sigilat e mai mare decât cea a termistorului expus datorită diferenței de conductivitate termică dintre vaporii de apă și nitrogen uscat. Cum căldura disipată rezultă în temperaturi de operare diferite, diferența dintre rezistențele termistoarelor este proporțională cu umiditatea absolută.
Figura 3. 3
3.2 Senzori de temperatură
3.2.1 Termocuplul
Termocuplul se bazează pe relația dintre temperatura unei substanțe și energia electrică. În unele cazuri, energia și caldura pot fi convertite reciproc. Atunci când avem doi conductori diferiți sudați într-o buclă închisă și un gradient de temperatură între joncțiuni, apare un curent electric a cărui intensitate este direct proporțională cu diferența de temperatură dintre cele 2 puncte. Când cele doua joncțiuni au aceeași temperatură, tensiunea electromotoare netă (suma celor 2 tensiuni electromotoare) devine nulă. Cu cât se incalzește unul dintre metale mai mult, cu atât tensiunea începe să crească.
Figura 3. 4
sursa: www.phys.ubbcluj.ro
Pentru a se putea măsura cu acuratețe, una din joncțiuni, denumită joncțiunea caldă, va fi considerată sondă, fiind plasată în mediul a cărei temperatură vrem să o măsurăm. Cealaltă joncțiune, denumita rece (deși poate fi expusă la temperatură mai mare ca joncțiunea caldă), este luată ca referință și menținută la o temperatură constantă, de obicei la 0° C. O astfel de situație reiese prin plasarea capătului într-o baie cu gheață. Mai practică este însa folosirea unei metode electronice prin care să se induca o tensiune corespunzătoare temperaturii de 0° C.
Ieșirea o reprezintă un Voltmetru conectat în circuit și calibrat în unități de temperatură. Firele termocuplului sunt acoperite cu o manta de protecție. Metalele folosite pentru construcția termocuplului sunt rodiul, aliajele de nichel și crom, aliajele de aluminiu și nichel sau aliajele de nichel și cupru. Metalele care se împerechează cu acestea sunt platina, cuprul și fierul. În funcție de materialele de joncțiuni și caracteristici, termocuplurile au fost împartite in mai multe categorii:
Pentru a ușura alegerea unui termocuplu pentru un sistem, se pot trasa și grafice care să arate variația tensiunii cu temperatura pentru fiecare.
Figura 3. 5 sursa: www.phys.ubbcluj.ro
3.2.2 Termistorii
Termistorii sunt, în general, realizați din materiale ceramice, cum ar fi oxizii de nichel, mangan sau cobalt acoperite în sticlă, ceea ce ii face ușor de deteriorat. Principalul lor avantaj consta in viteza lor de reacție la orice schimbare de temperatură, precizie și repetabilitate. Materialul semiconductor se formează în general pe discuri presate mici sau bile, care sunt închise ermetic, pentru a da un răspuns relativ rapid la orice schimbare de temperatură.
Cele mai multe tipuri de termistori au un coeficient de temperatură negativ (NTC), adica valoarea rezistenței lor scade odata cu creșterea temperaturii, și, desigur, există si unele care au un coeficient de temperatură pozitiv (PTC), în care valoarea rezistenței se marește odata cu creșterea temperaturii.
Termistorii sunt catalogați după valoarea lor rezistivă la temperatura camerei (de obicei, la 25° C), constanta de timp (timpul necesar pentru a reacționa la schimbările de temperatură) și ratingul lor de putere cu referire la curentul care curge prin ele. Ca și rezistorii, termistorii sunt disponibili cu valorile de rezistență, la temperatura camerei, de la zeci de MΩ pana la câțiva Ω, dar în scopuri de detecție sunt utilizați, în general, cei cu valori în kiloΩ.
Termistorii sunt dispozitive rezistive pasive, ceea ce înseamnă că trebuie să treacă un curent prin ei pentru a produce o tensiune de ieșire măsurabilă. Așadar termistorii sunt, în general, conectați în serie cu un rezistor de polarizare adecvată pentru a forma o rețea de divizor de tensiune.
Figura 3. 6
3.2.3Detector de temperatura rezistiv (RTD)
RTD-urile sunt senzori de temperatură de precizie, facuți din metale conductoare de mare puritate, ca de exemplu platina, cuprul sau nichelul, și a căror rezistență electrică se schimbă în funcție de temperatură, asemănându-se ca principiu cu termistorii. De asemenea, se fabrică și RTD-uri cu film subțire. Aceste componente au un film subțire de platină depozitat pe suportul ceramic.
Detectoarele de temperatura rezistive au coeficienți de temperatură pozitivi (PTC), dar, spre deosebire de termistori ieșirea lor este extrem de liniară, rezultând măsurători foarte precise ale temperaturii. Cu toate acestea, au sensibilitatea termică foarte mica, dată de faptul că o schimbare în temperatură va aduce o schimbare mică la ieșirea din circuit.
Ca termistorul, RTD-urile sunt dispozitive pasive rezistive și, trecând un curent constant prin senzorul de temperatură, este posibil să se obțină o tensiune de ieșire care crește liniar cu temperatura. Un RTD tipic are o rezistență de bază de aproximativ 100Ω la 0° C, crescând la aproximativ 140Ω la 100° C, cu un interval de temperatură de funcționare de între -200° la 600° C.
Deoarece RTD este un dispozitiv rezistiv, este nevoie să trecem un curent prin ele și să monitorizăm tensiunea rezultată. Cu toate acestea, orice modificare a rezistenței din cauza căldurii proprii din firele rezistive cat timp curentul o traversează, I2R, (Legea Ohm) cauzează o eroare în citirile valorilor. Pentru a evita acest lucru, RTD este de obicei conectat într-o retea cu o punte Whetstone care are fire de legătură suplimentare pentru compensarea plumbului si de conectare la o sursă de curent constant.
3.3 Senzorul analogic LM35
LM35 este un senzor cu circuit integrat folosit pentru măsurarea temperaturii, având un output electric proporțional cu temperatura (in grade C). Motivele alegerii acestui senzor sunt urmatoarele: măsuratorile sunt mai precise decât la termistori, tensiunea de ieșire este mai mare decât la termocuplu, însemnand ca nu are nevoie de amplificator la intrarea pe placa de dezvoltare și circuitul este bine izolat, ceea ce înseamnă ca nu e expus la oxidari.
Acest senzor este foarte ușor de folosit. Nu necesita calibrare externă și are o acuratețe de +/-0.4 oC la temperatura camerei și +/- 0.8 oC pe un interval de [0 oC, 100 oC]. Factorul de scalare este de .01V/oC. Cât despre consum, are nevoie de doar 60 microA de la sursă și se încalzește foarte greu. În cazul în care senzorul se încalzește de la sine, cauzează o creștere a temperaturii aerului mai mică decât 0.1 oC. De obicei, alături de LM35 se montează un rezistor pentru modelarea pierderilor.
3.4 Senzori SMD
3.4.1 Noțiuni generale
Senzorii SMD(Surface Mount Devive) sunt produși prin tehnologia de montare pe suprafață (SMT – Surface Mount Techology) și sunt mult mai mici decât restul dispozitivelor.Plăcuțele de circuit imprimat conțin suporturi din argint, staniu sau aur placate cu cupru fara găuri numite solder pads. Înainte sa se adauge SMD-ul pe suprafață se aplică o pasta de sudare. Procesul se finalizează prin introducerea într-un cuptor a PCB-ului peste care stă SMD-ul pentru fixare.
Această tehnologie prezintă mai multe avantaje:
– dimensiunile componentelor sunt mai mici, ceea ce înseamna ca pot fi mai multe montate pe o placă
-trebuie făcute mai puține găuri
-sunt montate mai rapid, mai ales în fabrici, crescând producția
-au rezistență și inductanță mai mică în punctele de conectareș în consecință se elimina o parte din semnalele RF nedorite și se obține un grad mai mare de previzibilitate
– compatibilitate electromagnetică mai mare datorată inductanței micșorate a plumbului
Dezavantaje:
– asamblarea manuală este mult mai dificilă și sunt necesare unelte scumpe
– nu pot fi folosite cu bradboarduri pentru testare, având nevoie placă PCB
– Dimensiunile jointurilor devin din ce în ce mai mici și mai puțin demne de încredere
3.4.2 SHT11
Senzorul SHT11 face parte din familia Sensiron de dispozitive montabile pe suprafață, axate pe măsurarea temperaturii și umiditatii. Senzorii integrează elementele uzuale ale senzorilor plus procesare de semnal, asigurând un output digital calibrat. Un singur element capacitiv este folosit pentru măsurarea umidității relative, în timp ce temperatura este măsurată cu un senzor de bandă interzisa (diferența dintre pragul de jos al benzii de conducție și al pragului de sus al benzii de valență). Acesta folosește tehnologia CMOSens, tehnologie care garantează stabilitate pe termen lung și siguranță. Ambii senzori sunt cuplați la un convertor analog/digital pe 14 biti și la un circuit de interfață serial. Din acestea rezultă un semnal de calitate superioară, un răspuns rapid in timp și lipsa unei sensibilități la interferențele externe.
Fiecare SHT1x este calibrat precis într-o camera de umiditate. Coeficienții de calibrare sunt programați pe o memorie pe chip. Acești coeficienți sunt folosiți pentru a calibra intern semnalele de la senzor. Interfața seriala și regularizarea internă permite integrarea ușoara și rapidă a sistemului. Un alt avantaj este dat de dimensiunea sa redusa.
Figura 3. 9
sursa:www.sensirion.com
Senzorul SHT11 are o rezoluție de 0.01 oC și de 0.03 % pentru umiditatea relativa. Acuratețea este mai bună decât la majoritatea senzorilor. La temperatura camerei atinge o acuratețe de +/- 1o C, iar în alte condiții de +/- 2o C. Senzorul de umiditate relativă ajunge la +/- 3.5% intr-un interval de [20%,80%].
Consumă doar 30 μW și trebuie alimentat de la o sursă de tensiune aflată între 2.4 și 5.5 VDC. Operează pe un interval de temperatură aflat între -40 si 123.8 °C.
Achiziția de date se realizează foarte facil folosind o placă de tip Arduino, având biblioteca special dezvoltată. Comunicarea este serială, transmițând date despre temperatură pe 12 biți și date despre umiditate pe 8 biți. Montarea la placuța se face cu ajutorul unui rezistor și a unui condensator care modelează pierderile și oșcilatiile.
Figura 3. 10
sursa:www.sensirion.com
4. Comunicatia intre dispozitive
4.1 Tipuri de comunicatii
Pentru a se efectua schimbul de date între microcontroller și intrări/ieșiri sau microcontroller și PC este nevoie de anumite tipuri de comunicație și interfețele caracteristice acestora. În aceasta lucrare interesul este centrat pe modul de transmisie legat de mediu. Se vor trata comunicația seriala prin cabluri și comunicația wireless. Fiecare canal de transmisiune are o interfață cu anumiți parametri.
Transferul de date se realizează, în funcție de nevoile sistemului, fie prin transmisie seriala prin cablu, fie prin transmisie wireless.
4.2 Transmisie serială prin cabluri
Transferul serial se definește ca fiind transmisia secvențială a datelor între două puncte de comunicație. Suportul fizic necesar transferului de informații este reprezentat de către magistrale. Caracteristica principală a unei magistrale seriale este transmisia bit cu bit a informațiilor, folosindu-se pentru aceasta un număr redus de semnale sau linii de comunicație. Cele mai utilizate comunicatii sunt UART și USB.
4.2.1 UART
4.2.1.1 Introducere
Universal Asynchronous Receiver / Transmitter (UART), controler este componenta cheie a subsistemului de comunicații seriale la un calculator. UART este, de asemenea, un feature comun integrat în cele mai multe microprocesoare. UART ia octeți de date și transmite biții individual într-un mod secvențial. La receptie, un al doilea UART reasamblează biții în octeți compleți. Transmisia serială de informații digitale (biți) printr-un singur fir sau alt mediu este mult mai rentabilă decât transmiterea în paralel prin mai multe fire. Comunicarea poate fi "full duplex" (atât a trimite și primi în același timp) sau "half duplex" (pe rând transmiterea și recepționarea).
4.2.1.2 Protocolul asincron de primire și transmitere
Transmisia asincronă permite ca datele să fie transmise fără a fi nevoie ca emițătorul să trimită un semnal de ceas la receptor. În acest caz, emițătorul și receptorul trebuie să convină asupra parametrilor de sincronizare (Baud Rate) înainte de transmisie și biți speciali se adaugă fiecarui cuvânt pentru a sincroniza trimiterea și primirea unităților. În transmisiile asincrone, expeditorul trimite un bit de start, 5-8 biți de date (LSB primul), un bit de paritate opțional, și apoi 1, 1,5 sau 2 biți de stop.
Atunci când un cuvânt este transmis prin UART asincron, bitul Start se adaugă la începutul cuvântului. Start bit este folosit pentru a informa receptorul că un cuvânt de date este pe cale de a fi trimis, forțând astfel ceasul de la receptor pentru a fi în sincronizare cu ceasul în transmițător. Este important să rețineți că diferenta de frecvență între aceste două ceasuri nu trebuie să depășească 10%. Cu alte cuvinte, atât emițătorul cât și receptorul trebuie să aibă rate de transfer identice.
După bitul de Start, biții cuvântului sunt trimiși individual, începând cu cel mai puțin semnificativ (LSB). Atunci când datele sunt transmise în întregime, un bit de paritate opțional este trimis la transmițător. Acest bit este de obicei folosit de receptor pentru a efectua verificarea erorilor. În cele din urmă, Stop bit va fi trimis pentru a indica sfârșitul de transmisie.
Atunci când receptorul a primit toti biții în cuvântul de date, se poate verifica bitul de paritate (atât transmițătorul cat și receptorul trebuie să decida dacă trebuie utilizat un bit de paritate), și apoi receptorul caută un bit de stop. Dacă bitul de stop nu apare atunci UART consideră că întregul cuvânt este deformat și va raporta o eroare de framing atunci când cuvântul este citit. Motivul comun pentru producerea eroarilor de framing este că clock-urile receptorului și al expeditorului nu au fost difuzate la aceeași viteză sau că semnalul a fost întrerupt.
Figura 4. 1
Fiecare operație de hardware UART este controlată de un semnal de ceas care merge la rata mult mai rapidă decât rata de transfer. De exemplu, modelul 16450 UART are un ceas intern, care ruleaza de 16 ori mai rapid decât rata de transfer. Acest lucru permite receptorului UART să eșantioneze datele de intrare cu granularitate de 1/16 perioada de baud-rate și are o imunitate mai mare față de eroare de rată de transfer.
Receptorul detectează bitul Start prin detectarea tranziției de tensiune de la logica 1 la 0 logic pe linia de transmisiune. Pentru funcționarea corectă a transmisiunii UART trebuie sa avem la emitere și recepție acceasi rată de transfer, caracterele să aibă aceeași lungime și să se acorde atenție la biții de paritate și de stop. Formatul tipic pentru porturi seriale utilizate cu PC-ul conectat la modemuri este de 1 bit de start, 8 biți de date, fără paritate și 1 bit de Stop.
4.2.1.3 Standardul layerului fizic
La punctual anterior s-a luat în considerare protocolul software al comunicației UART. Dar acesta conține și un layer hardware ce respecta anumite standard. Exista mai multe standard diferite asociate unor protocoale similare. Pentru majorotatea comunicațiilor seriale se folosc UART la nivel de TTL (Transistor-transistor Logic) și RS-232.
4.2.1.3.1. Nivelul TTL la UART
Multe din microcontrolerele cu UART folosesc TTL, fiind cea mai simpla forma utilizabila. Ambele valori logice de 0 și de 1 sunt repezentate de 5V și respectiv 0V. Se folosesc numai două fire pentru comunicatia full duplex.
Figura 4. 2
4.2.1.3.2 RS-232
RS-232 (Recommended Standard 232) este un standard folosit pentru semnale seriale de date binare de legătură între un echipament tip Data Terminal (DTE) și echipamente de comunicații de date (DCE). Acesta este frecvent utilizat în porturile seriale ale calculatorului. Una dintre cele mai importante diferențe dintre nivelul TTL UART și RS-232 este nivelul de tensiune. Semnalele valide în RS-232 sunt de ± 3 la – ± 15V, și semnalele apropierea tensiunii de 0V nu sunt valide .
4.2.1.3.3 Interfața intre TTL pentru UART și RS-232
Microcontrollerele utilizează nivelul TTL pentru UART, în timp ce porturile seriale din PC utilizeaza RS-232. Cum ambele standarde folosesc un protocol similar, ambele sunt adecvate comunicației UART. Totuși, din cauza diferentelor de tensiune și polaritatii, vom avea nevoie de o interfața intre cele doua.
UART-ul este cea mai simplă formă de comunicare între microcontroller și PC. Dar cum tehnologia este intr-o continuă dezvoltare, porturile seriale sunt înlocuite încet, încet cu porturi cu alte mijloace de comunicație. Totuși transmisia serială este posibila și făra un port fizic serial în PC. De exemplu USB-ul poate fit tratat ca un port serial după ce semnalul provenit de la microcontroller este ajustat cu un convertor USB-RS-232.
4.2.2 USB
4.2.2.1 Introducere
Universal Serial Bus (USB) este un standard industrial dezvoltat în mijlocul anilor 1990, care definește cablurile, conectorii și protocoalele de comunicații utilizate într-o magistrala pentru conectare, comunicare, precum și alimentarea cu energie electrică între calculatoare și dispozitive electronice.
USB a fost conceput pentru a standardiza conectarea de periferice pentru computere (inclusiv tastaturi, dispozitive de indicare, aparate foto digitale, imprimante, playere media portabile, unități de disc și adaptoare de rețea), pentru computere personale, atât pentru a comunica cât și pentru a furniza energie electrică. Ea a devenit un lucru obișnuit pe alte dispozitive, cum ar fi telefoanele inteligente, PDA-uri și console de jocuri video. USB a înlocuit în mod eficient o varietate de interfețe anterioare, cum ar fi porturile seriale și paralele, precum și încărcătoarele de alimentare separate pentru dispozitive portabile.
4.2.2.2 Protocol
Bază protocololui USB este reprezentată de transmiterea informațiilor ca și pachete de date. Exista 4 tipuri de pachete de date:
– pachet de semnalizare (Token Packet)
– pachet de date (Data Packet)
– pachet de dialog (Handshake Packet)
– pachet special (Special Packet)
Aceste pachete sunt formate din mai multe frame-uri (Data Frame). Un frame are un număr de biți variabil (in multe cazuri sunt de 4-8 biti). Biții sunt așezati ierarhic spre a fi trimiși: primul bit este cel mai puțin semnificativ (LSB) și ultimul cel mai semnificativ din acel frame.
Ca și structura logică, toate pachetele au un câmp de sincronizare, SYNC, ce ajuta bucla de PLL (Phase-locked loop) din receptor să iși mențină sincronizarea și un identificator de pachet, PID (packet identifier). SYNC-ul este codat prin NZRI, apărând ca o serie de tranziții 1/0. Câmpul PID este format din 8 biți: primii 4 biți arată tipul pachetului, iar ultimii sunt complementul primilor pentru a verifica corectitudinea transmisiunii.
Pachetul de date utile reprezintă doar o mica parte din informațiile transmise pe canal. Înainte de a fi trimise se produce o semnalizare printr-un pachet conceput cu acest scop. Starea transferului de date este indicată de pachetele handshake sau de dialog. Prin stare se ințelege dacă s-au receptionat cu success datele sau au fost respinse sau dacă dispozitivul este în stare de HALT. Fiecare tip de pachet are o anumita structura. Pachetele de semnalizare (A) au 32 de biti imparțiti în 5 cămpuri, finalizându-se cu un câmp de verificare ciclica pe 16 biți ce asigură corectitudinea, CRC. Pachetele de date (B) au un câmp special cu octeți al caror număr variază de la 0 la 1023. La handshake (C) vor fi doar octeții de sincronizare și identificare.
Figura 4. 3 sursa: http://vega.unitbv.ro/
Câmpul PID defineste 3 tipuri de pachete handshake:
– ACK – acknowledged – anunță emițătorul că recepția a fost fără erori.
– NAK – not acknowledged – indică faptul că nu s-au recepționat date de la gazdă sau că nu sunt date de transmis.
– STALL – este emis ca răspuns la un pachet de semnalizare sau după o tranzacție de date; astfel se stie că funcția nu are capabilitatea să emită sau să recepționeze date.
4.2.2.3Nivel fizic
Acest nivel este construit după o serie de reglementări foarte exacte. Semnalele electrice sunt transmise diferențial. Se folosește codarea NRZI cu împanare de biți și datele transmise generează un tact de recepție care asigură sincronizarea. Un USB este constituit din 4 fire. Un cablu conductor transportă tensiunea de alimentare de 5V, unul transportă potențialul de referință (GND) și ultimele două, poate cele mai importante, sunt torsionate și prin ele trece semnalul util.
4.2.2.4 Interfața
Pentru a cupla un microcontroller la USB există două variante: fie se adoptă o interfață specilizată așa cum sunt cele din familia FTDI, fie se alege un microcontroller cu interfața USB integrată.
4.3 Transmisia wireless prin Bluetooth
Transmisia wireless presupune transferul de informații din două sau mai multe puncte făra a fi nevoie de un conductor fizic. Majoritatea tehnologiilor folosesc undele radio. Într-o sera de dimensiuni mari se poate crea o rețea personală (PAN – Personal Area Network) care să permită tuturor senzorilor să transmită prin radiofrecvența informațiile necesare. Principalul dezavantaj față de transmisia pe fire îl constituie zgomotul mai mare ce poate degrada informațiile la recepție. Tehnologia Bluetooth a fost concepută pentru a funcționa în medii zgomotoase și are canale de comunicație robuste. Această robustețe se datorează fenomenului indus de ”frequency hopping” sau salturilor de frecvență.
4.3.1 Nivelul fizic
Bluetooth-ul funcționează în intervalul 2400 – 2483.5 MHz (inclusiv benzi de gardă). Acest interval din jurul frecvenței de 2,4 GHz este o bandă ingusta de frecvențe radio folosita la nivel global fără licență (dar nu nereglementat) în domeniile industriale, științifice și medicale (ISM). Bluetooth utilizează o tehnologie bazăta pe salturi de frecvență(FHSS). Datele transmise sunt împărțite în pachete și fiecare pachet este transmis pe unul din cele 79 canale Bluetooth desemnate. Fiecare canal are o lățime de bandă de 1 MHz. Bluetooth 4.0 are spații 2 MHz, care permite 40 canale. Primul canal începe la 2402 MHz și continuă până la 2480 MHz, în trepte de 1 MHz. Deobicei, efectuează 1600 de salturi pe secundă, cu AFH-ul (Adaptive Frequency-Hopping) activat.
FHSS ( frequency hopping sprea spectrum ) este o tehnică de modulație a semnalului transmis și face parte din metodele de acces multiplu(CDMA), metode care adaugă o modulație în plus prin coduri pentru a permite transmiterea simultană a informațiilor pe un canal cu un minim de interferențe.FHSS se execută în 3 procese:
1) Stabilește codul frecvențelor – frecvența purtătoarei este modificată periodic (salturi) urmând o secvență precisă de frecvențe. Codul de imprăștiere este lista frecvențelor ce vor fi folosite de semnal purtător. Predefinită mai este și perioada de folosire a unei frecvențe.
2) Modulează mesajele – mesajul modulează purtatoarea , drept urmare se generează un semnal de bandă ingustă pe durata de folosire a unei frecvențe, dar se generează un semnal de banda largă dacă procesul este privit pe o perioadă mai mare de timp.
3)Asigură redundanța prin posibilitatea executării retransmisiei pe diverse frecvențe purtătoare (verifică mesajul prin schimbarea drumului)
4.3.2 Stiva de protocol Bluetooth
Nucleul funcționării Bluetooth este în stiva de protocoale. Prin oferirea unor straturi de funcționalitate foarte bine definite se asigură interoperabilitatea dispozitivelor pe bază de Bluetooth. Aceste niveluri pornesc de la cele mai joase legate de radio și ajung la aplicații și profiluri.
Figura 4. 4
sursa: https://developer.apple.com
4.3.2.1 Nivelurile inferioare
La bază stivei de protocoale Bluetooth este nivelul radio. Modulul radio într-un dispozitiv Bluetooth este responsabil pentru modularea și demodularea datelor în semnale RF pentru transmiterea prin aer. Nivelul radio descrie caracteristicile fizice pe care trebuie să le aibă un transceiver dintr-un dispozitiv Bluetooth. Acestea includ caracteristici de modulare, toleranța de frecvență radio, și nivelul de sensibilitate.
Nivelul superior celui radio este legat de baseband și link controller. Specificațiile Bluetooth nu stabilesc o distincție clară între responsabilitățile baseband și cele ale controlerului link. Porțiunea de baseband a stratului este responsabilă pentru formatare corespunzătoare a datelor ce trebuie transmise spre stratul radio și invers. În plus, ea se ocupă de sincronizarea link-urilor. Porțiunea de Link controller a acestui strat este responsabilă pentru transportul comenzilor link managerului și stabilirea și menținerea link-ului prevăzut de către link manager.
Link Managerul în sine traduce comenzile interfaței controlerului gazdă (HCI) primate în operațiunile la nivel de baseband. Acesta este responsabil pentru stabilirea și configurarea link-urilor și de gestionare a cererilor de schimbare alimentare, printre alte sarcini.
Exista două tipuri de legaturi intre dispozitivele Bluetooth.
– Synchronous, Connection-Oriented (SCO) – pentru comunicare isocronă și pentru voce, ca de exemplu în cazul căștilor
– Asynchronous, Connectionless (ACL) – pentru schimburi de date
Fiecare tip de legatură (link) este asociat cu un anumit tip de pachet. O legatura SCO furnizează banda pentru canale dedicate pentru comunicarea dintre master și slave și susține schimbul periodic de date fără retransmiterea pachetelor SCO.
O legatură ACL între master și slave apare când se stabilește conexiunea. Pachetele de date Bluetooth folosesc pentru legăturile ACL 142 de biți de informații de codare în plus față de un registru ce ajunge pana la 2712 biți. Datele adiționale de codare întăresc siguranța transmisiunii. De asemenea ajută la menținerea unui link de comunicații robust într-un mediu încărcat de alte dispozitive ce produc implicit zgomot.
Nivelul de HCI (host controller interface) se comportă ca o delimitare între straturile inferioare ale stivei de protocol Bluetooth și straturile superioare. Specificațiile Bluetooth definesc un standard de HCI pentru a sprijini sistemele de Bluetooth, care sunt implementate în două procesoare separate. De exemplu, un sistem Bluetooth de pe un calculator ar putea folosi procesorul modului Bluetooth pentru a implementa straturile inferioare ale stivei (radio, banda, controlor link-ul, și director link-ul) și ar putea folosi apoi propriul procesor pentru a implementa straturile superioare (L2CAP, RFCOMM, OBEX, și profilele selectate). În această schemă, porțiunea inferioară este cunoscută ca modulul Bluetooth și porțiunea superioară ca gazdă Bluetooth.
Desigur, nu este neaparat nevoie sa împarți stiva Bluetooth în acest fel. Seturile de căști Bluetooth, de exemplu, combină modulul și porțiunile gazdă ale stivei pe un singur procesor, deoarece acestea trebuie să fie mici și de sine stătătoare. În astfel de dispozitive, HCI poate să nu fie implementat, cu excepția cazului când este nevoie de testarea dispozitivului. Deoarece HCI Bluetooth este bine definit, puteți avea drivere care se ocupă de diferite module Bluetooth de la diverși producători. Apple oferă un controler HCI care acceptă o implementare USB a stratului de HCI.
4.3.2.2 Nivelurile superioare
Deasupra stratului de HCI sunt straturile superioare ale stivei de protocol. Primul dintre acestea este stratul de L2CAP(logical link control and adaptation protocol).L2CAP este în primul rând responsabil pentru:
• Stabilirea conexiunilor din legături ACL existente sau solicitarea unei legături ACL cazul în care nu există deja
• Multiplexarea între diferite protocoale de nivel superior, cum ar fi RFCOMM și PSD, pentru a permite mai multe aplicații diferite sa utilizeze un singur link ACL
• Reambalarea pachetelor de date pe care le primește de la straturile superioare în forma așteptata de către straturile inferioare
L2CAP folosește conceptul de canale pentru a urmări de unde provin pachetele de și în unde ar trebui să se duca. Un canal poate fi perceput ca o reprezentare logică a fluxului de date dintre starturile L2CAP în dispozitive remote. Deoarece acesta joaca un rol central în comunicarea între starturile superioare și inferioare ale stivei de protocol Bluetooth, stratul de L2CAP este o parte necesară oricărui sistem Bluetooth.
Superior startului de L2CAP, straturile rămase stivei de protocoale Bluetooth nu sunt atât de bine ordonate liniar. Cu toate acestea, este logic sa se discute despre SDP (service discovery protocol) în continuare, pentru că există independent de alte straturi de protocol de nivel superior. În plus, este comună oricărui dispozitiv Bluetooth.
SDP-ul (service discovery protocol) definește acțiuni și pentru servere și pentru clientii serviciilor Bluetooth. Specificațiile definesc un serviciu ca orice facilitate care poate fi utilizata de un alt dispozitiv Bluetooth (remote). Un singur dispozitiv Bluetooth poate fi atât un server și client de servicii. Un exemplu în acest sens este computerul Macintosh în sine. Utilizand profilului de transfer de fișiere (descris în "Bluetooth Profiluri-o ierarhie de grupuri") un calculator Macintosh poate parcurge fișierele de pe un alt dispozitiv și permite altor dispozitive sa parcurga fișierele sale.
Un client SDP comunică cu un server SDP folosind un canal rezervat pe un link L2CAP pentru a afla ce servicii sunt disponibile. În cazul în care clientul gaseste serviciul dorit,cere o conexiune separată pentru a utiliza serviciul. Canalul rezervat este dedicat comunicării SDP, astfel încât un dispozitiv o seștie întotdeauna cum să se conecteze la serviciul SDP de pe orice alt dispozitiv. Un server SDP își pastreaza propria bază de date SDP, fiind un set de înregistrări de servicii care descriu serviciile oferite de server. Împreună cu informațiile care descriu modul în care un client se poate conecta la serviciu, inre de servicii conține UUID al serviciului, sau identificator universal unic.
De asemenea, deasupra stratului de L2CAP este stratul RFCOMM. Protocolul RFCOMM emulează setările de linie de cablu serial și statutul de port serial RS-232. RFCOMM se conectează la straturile inferioare ale stivei de protocol Bluetooth prin stratul L2CAP.
OBEX (object exchange) este un protocol de transfer care definește obiectele de date și un protocol de comunicație pe care il pot folosi două dispozitive pentru a schimba cu ușurință aceste obiecte. Bluetooth a adoptat OBEX din specificația IrDA IrOBEX deoarece straturile inferioare ale protocolului IrOBEX sunt foarte asemănătoare cu straturile inferioare ale stivei de protocol Bluetooth. În plus, protocolul IrOBEX este deja acceptat în mare masura și, prin urmare, este o alegere bună pentru Bluetooth SIG, care se străduiește să promoveze adoptarea prin utilizarea tehnologiilor existente.
4.3.3 Sesiunea de comunicare
Un dispozitiv Bluetooth care doreste să înființeze o sesiune de comunicare OBEX cu un alt dispozitiv este considerat a fi dispozitivul client.
1. Clientul trimite mai întâi cererile SDP pentru a se asigura ca celalalt dispozitiv poate acționa ca un server de servicii OBEX.
2. În cazul în care dispozitivul de server poate oferi servicii OBEX, răspunde cu propriul registru de servicii OBEX. Această înregistrare conține numărul de canal RFCOMM pe care clientul ar trebui să il folosească pentru a stabili un canal de RFCOMM.
3. În continuare comunicarea dintre cele două dispozitive este continuata prin pachete, care conțin solicitări și răspunsuri, precum și a date. Formatul pachetului este definit prin protocolul OBEX sesiune.
5.Instrumente Software
5.1 Mediul de dezvoltare integrat
Un mediu de dezvoltare integrat (IDE) sau mediu de dezvoltare interactiv este o aplicație software care oferă facilități complete pentru programatori pentru dezvoltarea de software. Un IDE constă în mod normal dintr-un editor de cod sursă, compilator și un debugger. Cele mai multe IDE-uri moderne oferă caracteristici inteligente pentru finalizarea codului.
Majoritatea IDE-urilor conțin un compilator,un interpretor de cod, sau ambele tool-uri. Cateva astfel de integrari pot fi observate in aplicații precum NetBeansșiEclipse; dar există și unele care nu le conțin, cum ar fi SharpDevelop și Lazarus. Granițadintre un mediu de dezvoltare integrat și alte părți ale unui mediu de dezvoltare software mai extins nu este bine definită. Uneori,o versiune a unui sistemde control și diverse instrumente sunt integrate pentru a simplifica construcția unuiGUI. Mai multe IDE-uri moderne au, de asemenea, un vizualizator de structură al claselor, un arbore ierarhic de module,și un generator de diagramăde ierarhie de clase, pentru a fi utilizatein programare orientată pe obiect.
Mediile de dezvoltare integrate sun tconcepute pentru a maximiza productivitatea programatorilor prin furnizarea unor componente cuinterfețe similare. Un IDE prezinta un singur program care acoperă toate ariile dezvoltării de sisteme software. Acest program oferă de obicei multe din facilitățile pentru modificarea, compilarea, implementarea și depanarea software.
Unul dintre scopurile IDE este de a reduce configurația necesară pentru a pune cap la cap mai multe facilități de dezvoltare, furnizând în schimb același set de capabilități ca o unitate singulară. Reducerea timpului de setup poate crește productivitatea dezvoltatorilor, în cazuri în care este mai rapid să se învețe cum să se utilizeze un singur IDE decât să se integreze manual fiecare uneală. Integrarea mai strânsă a tuturor sarcinilor de dezvoltare are potențialul de a îmbunătăți productivitatea generală dincolo de a ajuta cu sarcini de configurare. De exemplu, codul poate fi analizat în mod continuu în timp ce acesta este în curs de editare, furnizând astfel un feedback instant atunci când sunt introduse erori de sintaxă.
Arduino IDE
5.2.1. Introducere
Mediul de dezvoltare integrat Arduino(IDE) este o aplicație multiplatformă scrisă înJava, și are la bază IDE-ul pentru limbajul de programare de preluare si prelucrare a datelor derivat din C. Acesta include un editor de cod cu caracteristici cum ar fi recunoașterea de sintaxă, formatare automata și analiză in timp real a codului scris, și este, de asemenea, capabil de compilarea și încărcarea programelor pe placă, cu un singur clic. Un program sau cod scris pentru Arduino este numit o "schiță".
Programele Arduino sunt scrise într-o manieră similară cu cele C sau C++. Arduino IDE vine cu o bibliotecă software numită "Wiring" din cadrul proiectuluiWiring inițial, ceea ce face ca multe operații comune de intrare/ieșire să fie mult mai ușoare. Astfel, programatorii trebuie doar să definească două funcții pentru a face un program de executie ciclicoperabil:
setup(): este executată o singură dată, la începutul unui program, și are rolul de a inițializa setările programului;
loop(): o funcție apelată în mod repetat.
Figura 5. 1
sursa: www.arduino.cc
5.2.2 Rutine și funcții folositoare
Pentru conceperea algoritmului de bază a fost nevoie de câteva funcții implicite și rutine de ciclare. Înainte de a descrie acești pași esențiali, trebuie subliniat faptul că funcția setup() rulează o singura data, la pornirea plăcuței,și conține informații legate de inițializare, cum ar fi stabilirea valorilor incipiente ale unora din variabile sau ale pinilor, sau configurarea pentru uz a anumitor biblioteci ce au fost incluse în proiect. Astfel, în conceperea unui soft pentru plăcile Arduino trebuie luate în considerare urmatoarele aspecte:
Declararea bibliotecilor:
#include<nume.biblioteca>
Declararea variabilelor – se face înafara funcției de loop sau a celei de setup atunci când se vrea folosirea globală
ex: const int tempPin=3
Declararea stării de input sau de output – pentru a putea lucra cu date de la senzori se alcătuiește o asociere între piniifolosițiși variabile, aceștiacăpătând un nume și rol de intrare sau de ieșire. În general, intrarile se citesc, iar la ieșirise scriu valori. Pentru această etapa se folosește funcția pinmode()
ex:pinMode(tempPin, INPUT) – aici, pinul 3, este considerat de intrare și va fi asociat variabilei tempPin
Citirea intrărilor depinde de tipul pinilorși se folosesc funcțiile digitalRead(pin) sau analogRead(pin); la citirea analogică se realizează o traducere din tensiunea de la intrare (ce variază de la 0 la 5V) pe trepte de la 0 la 1023.
Scrierea ieșirilor se face cu funcția digitalWrite(pinIesire, stare); starea poate să fie HIGH sau LOW. In cazul nostru se scrie HIGH atunci cand se vrea comandarea instalației tehnologice.
Introducerea unei întârzieri cu delay(nr de microsecunde); această funcție permite sesizarea diverselor procese, dat fiind faptul că un microcontroller achiziționează date si execută procese mult mai rapid decât ar putea observa un om.
Inceperea transmisiei seriale se face cu funcția Serial.begin(baudrate); baudrate-ul este o valoare care desemnează numărul de simboluri transmise pe secundă.
Afișarea mesajelor pe serial monitor se face cu funcția Serial.print(“mesaj”);
Pentru o ușoară manipulare a datelor se folosesc structurile logice:
if(condiție) { } – între acolade se pun instrucțiuni ce vor fi executate in cazul în care condiția evaluată este adevărata, instrucțiunile vor rula o singură dată;
switch(case) {} – instrucțiunile sunt executate o singură dată, similar structurii if, dar pot exista mai mult de doua cazuri discrete(adevarat sau fals sunt materializate prin 0 sau 1 la if);
while(condiție) { } – instrucțiunile se execută in mod repetat, cât timp condiția este îndeplinită;
for(conditie) { }– instrucțiunile se executăîn mod repetat, cu mențiunea că numărul de iterații este cunoscut aici, spre deosebire de while(condiție).
5.3 Programul Orcad
Orcad este un software care prezintă o suită de instrumente utile pentru creerea unei plăci PCB. În general, se folosesc 2 aplicații ale acestuia: Capture si Layout. Capture este folosit pentru design-ul schemelor electrice în forma de intrare, în timp ce Layout creează layout-ul fizic al componentelor si a circuitelor de pe PCB. Ambele dispun de o gama extinsă de librării de componente, existând , în același timp, și opțiunea de a-ți crea și utilize propria componentă.
Capture oferă salvarea cu extensia .OPJ, care conține toate fișierele cu informații legate de proiectul respectiv: schema electric, bibliotecile utilizate, fișierele generate (verificarea legăturilor electrice, netlist-fișierul listă de legături, lista de componente). Se pot general fișiere de transfer compatibile cu mai multe programe de proiectare,de exemplu Tango, Spice, Protel.
Orcad Layout oferă o soluție completă pentru proiectarea plăcilor de circuite imprimate, ce include proiectarea mecanică și post-procesarea în vederea fabricației, permițând gestionarea și transferul datelor în toate fazele procesului de proiectare. Acesta pornește de la un set de date inițiale preluate de la Capture. Pe parcurs pot fi adaugate și constrângeri suplimentare legate de proiectarea plăcilor cu circuite imprimate. Programul Layout se ocupa de rutare, adică de plasarea traseelor de circuit imprimat pe PCB astfel încât să nu fie afectată buna funcționare a circuitului. Aceasta rutare poate să fie manuală, cât și automată. Dupa finalizarea proiectării plăcii in Layout se poate trece la imprimarea circuitului si realizarea cablajelor.
5.3.1 Orcad Capture
Pentru a crea un proiect în Orcad e de ajuns selectarea din meniu a opțiunii si stabilirea locației. Nu trebuie uitată,totuși,bifarea opțiunii de PC Board Wizzard. În proiectul salvat vor apărea folderele de Design și Schematic. Mai departe ne vom ocupa de elaborarea efectivă a schemei. De aceea se folosesc o serie de librării esențiale, ce trebuie selectate din PCB Project Wizzard. În timpul lucrului se folosesc doua ferestre: cea de Project Manager (în care verificăm resursele) și cea de Schematic(în care se deseneaza schema electronică).
În etapa de desenare a schemei propriu-zise trebuie sa plasăm componente și fire. Folosind butonul de Place parts intrăm intr-o fereastră cu toate bibliotecile din care se selectează componenta dorită. Programul Capture furnizează și opțiunea de Preview. Revenind în fereastra de Schematic, se plasează piesa și se cere oprirea procesului de plasare prin opțiunea de End Mode. Pentru plasarea firelor se alege din meniu opțiunea de Place Wire, urmând ca la sfârșitul operațiunii să se foloseasca opțiunea de End Wire.
După desenarea schemei se generează lista de rețea (netlist). Aici vor apărea probleme dacă există greșeli in conceperea schemei. Netlist-ul este,de fapt, un fișier ASCII care descrie circuitul. Există mai multe categorii de liste de legături, dar interesul de a realiza cablaj imprimat presupune crearea unei liste de legături numite Layout netlist. Creerea se face, practic, prin selectarea din meniul Tools a opțiunii aferente. Dupa acest pas, se salvează cu extensia .MNL, putănd fi utilizat oricând în cadrul programul Orcad Layout.
5.3.2 Orcad Layout
Când se creează un fișier nou în Layout trebuie să se țină cont de 3 parametri:
– TCH – presupune alegerea tehnologiei pentru placa de circuit imprimat; deobicei se alege default, dar există și alte posibilități precum cea a traseelor pe 4 straturi ;
– MNL – presupune alegerea programului făcut in Capture;
– MAX – reprezintă un fișier de tip proiect de cablaj imprimat și conține toate informațiile necesare pentru proiectarea plăcii
Fiecărei componente din schemă îi va fi asignat un „footprint” în urma apăsării butonului ApplyECO. Footprintul înglobează proprietățile fizice ale componentei, dimensiuni precum distanța dintre padurile pe care se fixează componenta și poziția fiecărui pin unde se face conexiunea, dimensiunea fiecărui pin și dimensiunile exacte ale fiecărei componente pentru a se încadra perfect pe placa. Se va folosi termenul de „capsulă” pentru footprint. Dacă la componenta respectivă nu este atașată o capsula, alocarea se va face manual printr-o fereastra specială, numită Link Footprint to Component sau se va crea una in concordanță cu specificațiile produsului.
Dupa acești pași se va afișa mediul de proiectare pentru cablajul imprimat. Aici sunt vizibile footprinturile, placa pe care se face proiectul și detalii de asamblare, precum și punctul de referință al plăcii și tabela cu simbolurile pentru găurile care se vor face în placă. Se pot observa cele doua ferestre de lucru, adică sesiunea de lucru layout (layout session frame) și fereastra de proiectare (design window). Pentru a se seta conturul plăcuței se folosește tool-ul Obstacle și se editează.
Plasarea componentelor pe plăcuță se poate face fie manual, fie automat, în ultimul caz fiind nevoie de o preplasare a unor componente care se vor cu o locație fixă. Desenarea automată a traseelor de legătură se face cu funcția autoroute. Programul Layout automat va alege cele mai bune trasee pentru circuitul electronic proiectat. Exista 4 moduri de desenare a traseelor de către utiliztor:
– Desenare automată a traseelor – Auto Path Route;
– Împingerea traseelor – Shove Track
– Editarea segmentelor – Edit Segments
– Adăugare/Editare traseu – Add/Edit Route
Primele 2 sunt folosite în stadiul de proiectare, iar următoarele ulterior pentru editare. Exista câteva funcții care ajută la editare: Cleanup pentru ștergerea anumitor elemente, Lock pentru blocarea unui element(astfel se evita si ștergerea). Pentru verificare regulilor de proiectare se folosește Design Rule Check (DRC).
Ultima etapă o constituie cea de postprocesare, etapă în care se stabilesc anumite setări care vizează starea unui strat. Astfel din foaia de postprocesare, în care apar toate straturile, se pot modifica proprietățile fiecărui strat și se poate decide dacă se va folosi conversia între formatul .MAX(actual) și .GTD pentru fiecare în parte. Fișierul de tip Gerber (cu extensia .GTD) este un format standard folosit mai ales de fabricanții de circuite imprimate. În final se demarează procesul de postprocesare.
6. Realizare practică
6.1 Schema bloc a modului de lucru
6.2 Schema bloc a montajului
Modulul de monitorizare și control al sistemului de irigații dintr-o seră conține două părți functionale: partea de achiziție de date și afișaj și partea de procesare a datelor și comanda.
6.2.1 Monitorizarea serei
Pentru achiziția de date, temperatura dintr-un loc, respectiv temperatura și umiditatea din alt loc, se folosesc trei senzori. Senzorii de temperature și de umiditate sunt integrați, deci nu vor fi expuși la oxidări. Luând in considerare modul în care ar putea influența temperature aerului, senzorul LM35 provoacă o încălzire de cel mult 0.1 grade Celsius. Asta înseamna că nu va afecta funcționalitatea modulului. LM35 este un senzor analogic, însemnând că va trece prin convertorul analogic/digital de pe plăcuța Arduino, nivelul de tensiune raportându-se la nivelul maxim pe o scala de la 0 la 1023. Cât despre SHT11, avem de-a face cu un senzor digital ce transmite semnalul pe 20 de biți: primii 12 de biți arată temperatura, iar următorii arată umiditatea relativă . Mai este necesar un senzor de lumina, în funcție de care se stabilește intervalul de temperature premise.
Microcontrolerul citește datele pe rând și le transmite mai departe prin USB în PC. Prin intermediul monitorului serial din mediul de dezvoltare se pot vedea valorile cu o rată de 9600 de simboluri pe secundă.
6.2.2 Controlul serei
Înainte de a fi transmise prin USB, datele citite la intrare sunt memorate temporar pentru a fi procesate în continuare. Având la dispoziție umiditatea și temperaturile aerului și solului, rămâne de aflat dacă acestea corespund condițiilor de creștere impuse. Așadar se vor compara cu valori de prag, stabilite în funcție de tipul plantelor și de faza lor de dezvoltare. În funcție de valoarea de adevăr a anumitor comparații se vor porni fie voleții de aer, fie pompele de apă, fie amândouă. Comandarea voleților de aer și a pompelor se face prin aceeași metoda, având la bază relee.
Un releu poate să comande în funcție de tensiunea de alimentare a dispozitivelor, poate comanda în funcție de tensiuni alternative sau continue. Poate comanda chiar și tensiuni de 230V, furnizând o izolare electrică adecvată. In multe cazuri se poate înlocui cu un contactor cu 3 poli. Cum voleții și pompele funcționează la tensiuni mai mari decât cea oferită de Arduino în modul vor apărea și baterii.
6.3 Prelucrarea circuitului înainte de imprimare
Pentru relizarea cablajului imprimat se trece prin următoarele etape:
În cadrul programului Orcad Capture se alege crearea unui proiect PCB
În continuare se trasează schema electronică în Schematic, plasându-se componentele necesare și firele de legătura dintre ele
Se generează lista de legături(Layout list) tot în Orcad Capture și se salvează cu extensia .MNL
Se pornește programul Orcad Layout, se selectează tehnologia PCB pentru placa de circuit imprimat.
Se salvează proiectul de cablaj imprimat ca un fișier de tip proiect cu extensia .MAX
Se folosește programul Orcad Layout pentru a importa fișsierul cu lista legăturilor cu extensia .MNL în fișierul proiect cu extensia .MAX
Se aleg dimensiunile plăcii prin editarea conturului plăcii de circuit imprimat
Se plasează componentele pe placă
Se realizează rutarea conexiunilor(traseelor) dintre componente
Se ruleaza postprocesorul pentru a genera fișierele care vor fi folosite pentru fabricarea plăcii de circuit imprimat.
6.3.1 Schema electrică
6.3.2 Schema în Layout
6.4 Realizarea cablajului
Pentru realizarea cablajului avem nevoie mai intai de schema realizată in Orcad Layout, schema imprimata pe o foaie lucioasa cu rezolutie mare cu ajutorul unei imprimante laser. Avand la dispozitie modelul imprimat, urmăm următorii pași:
Dimensionăm bucățile de circuit imprimat
Se face trasarea (zgârierea) cablajului la dimensiunile dorite, pe ambele părți, după care se rupe in bucati
Se șlefuiește placa dorită cu ajutorul unei hârtii abrazive de P100-P150
Se curăță riguros suprafața ce urmează a fi acoperită pentru a nu avea grăsimi ce pot încurca procesele chimice. Pentru a asigura aceasta, se curăță placuta cu o solutie de curatat. Am frecat placuta cu o cârpa sau un burete umed înmuiat in praful de curățat, eliminând oxizii si impuritățile, astfel incât suprafața de cupru să primească luciu. Aceasta poate fi verificată prin punerea plăcuței sub jetul de apa, iar apoi scotând-o; pelicula de apă formata trebuie sa fie continuă, fara insule. La curățare nu se folosesc hârtie sau solvenți abrazivi.
Uscăm placa intre doua foi de hîrtie absorbanta
Se aplică un strat de lichid foto-rezistiv prin intermediul unui spray, intr-un mediu ferit de razele solare, semiobscură pulverizarea se face șerpuit, incepând dintr-un colț pentru a da o acoperire uniformă;
Se usuca într-un cuptor cam la 70 grade timp de 20 de minute
Circuitul imprimat cu stratul uscat de P20 se pune pe o suprafață neteda, peste el filmul cu desenul circuitului imprimat în oglinda, și aplicat cu partea imprimata spre placă și peste toate acestea se pune o bucată de sticlă de 3mm.Timpul de expunere depinde de intensitatea sursei de lumină și de grosimea stratului de lac. Pentru a obține muchii mai clare se lasă mai mult sub incidența razelor.
Urmează procesul de developare prin care se introduce placa într-o baie de developare, obținută în urma amestecului apei cu sodă caustic, și se agită. În urma acestei etape, imaginea traseelor va fi absolute vizibilăș
Introducem plăcuța într-o soluție de clorura ferica cu fața în jos. Soluția e destul de densă încât să țina la suprafață plăcuța. O ținem cu fața în jos deoarece în timpul corodării, cuprul se depune pe fundul băii de clorură ferică, nu pe placuță. Corodarea durează cam 15-20 de minute, iar dacă incălzim soluția de clorură ferică (la 70-90°C) procesul durează 3-5 min.
In ultima etapă se găurește placa prin intermediul bormașinii și burghiului.
Concluzii
În urma realizării modului de monitorizare și control pentru o seră am constatat că aceasta este o soluție accesibilă și folositoare în mare măsure. Acest sistem a fost conceput cu titlu demonstrativ pentru uz personal și nu a fost dezvoltat pe o scală mare. Totuși, conceptul poate fi utilizat și in scopuri industriale, automatizările îmbunătățind timpul de dezvoltare al plantelor și micșorând rata de intervenție umană. De asemenea, scade gradul de îmbolnăvire al plantelor. Mai departe se poate crea chiar un cloud în care să se înmagazineze informațiile legate de anumite culturi , informații ce pot fi folosite pentru statistici. Acestea se pot modela ca o soluție universală de creștere controlată.
Pentru realizarea acestui proiect a fost nevoie atât de cunoștiințe de electronică, cât și de cunoștiințe de programare, fiind nevoită să reîntăresc noțiunile aferente limbajului C. Din fericire, mediul de dezvoltare și placa de dezvoltare mi-au permis o structură mai puțin mapată pe arhitectura microcontrolerului și mai mult axata pe acest limbaj. Pentru programarea altor placuțe trebuiau luați în considerare factori cum ar fi: starea fanioanelor, setarea unor biți de referință si negarea lor, selectarea explicită a unor anumite registre, etc. A trebuit sa fiu foarte atentă, în schimb, la timpii de delay atât pentru citirea valorilor senzorilor, cât și pentru așteptarea restabilirii echilibrului termic. Arduino a ușurat din procesul transpunerii algorimului în linii de cod, având biblioteci special pentru citirea senzorilor. Am invațat mai multe despre comunicații, întâmpinând pe parcurs diverse erori.
Lipirea pieselor pe cablaj necesită foarte multă atenție și îndemânare. Senzorul SHT11 este împachetat în format SMD, iar dimensiunile sale foarte mici, din acest motiv cea mai mică eroare poate duce la lipirea incorectă a acestuia. Crearea senzorului de lumină și partea de comandă au presupus punerea în practică a conceptelor studiate în timpul facultății. Divizoarele de tensiune și calculul anumitor parametri au fost nelipsite, precum și uzul tranzistoarelor corespunzătoare.
Concluzionez astfel că prezenta lucrare a permis agregarea conceptelor dobândite din surse separate în cadrul facultății, dar și o documentare individuala.
BIBLIOGRAFIE
Mihoc, D., Iliescu, S. St., Teoria și elementele sistemelor de reglare automată, Editura Didactică și Pedagogică, București – 1984
Rădescu, R., Arhitectura sistemelor de calcul, Editura Politehnica Press – 2012
Vasile, A., Bacîș, I. B., Bazele electronicii auto, Editura Cavallioti – 2013
www.arduino.cc
www.elf.cs.pub.ro/pm
http://www.engineersgarage.com/articles/risc-and-cisc-architecture
http://www.mikroe.com/chapters/view/64/chapter-1-introduction-to-microcontrollers/
http://retele.elth.ucv.ro/Bratu%20Cristian/MAP/001%20-%20Curs%20001%20-%20MAP%20-%20Microcontrolerul.pdf
http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Summary.pdf
http://www.ijese.org/attachments/File/v1i6/E0213031513.pdf
https://developer.apple.com/library/mac/documentation/devicedrivers/conceptual/bluetooth/BT_Bluetooth_Basics/BT_Bluetooth_Basics.html
http://www.micromedia.home.ro/p20/p20.htm
http://www.neduet.edu.pk/electronics/electronics/pdf/OrcadTutorial.pdf
www.phys.ubbcluj.ro/~anghels/teaching/SIS/diverse…/trad_temp.pdf – referinta
www.wikipedia.org
ANEXE
Codul programului
#include <Sensirion.h>
#define ENA_ERRCHK // Activează codul detector de erori
const byte dataPin = 2; // SHTxx serial data
const byte sclkPin = 3; // SHTxx serial clock
const byte ledPin = 13; // Arduino built-in LED
const unsigned long TRHSTEP = 5000UL; // Sensor query period
const unsigned long BLINKSTEP = 250UL; // LED blink period
Sensirion sht = Sensirion(dataPin, sclkPin);
unsigned int rawData;
float temperature;
float humidity;
float dewpoint;
byte ledState = 0;
byte measActive = false;
byte measType = TEMP;
unsigned long trhMillis = 0; // Monitorizează intervalele de timp
unsigned long blinkMillis = 0;
#ifdef ENA_ERRCHK
byte error = 0;
void setup() {
byte stat;
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
delay(15);
if (error = sht.readSR(&stat))
logError(error);
Serial.print("Status reg = 0x");
Serial.println(stat, HEX);
if (error = sht.writeSR(LOW_RES))
logError(error);
if (error = sht.readSR(&stat))
logError(error);
Serial.print("Status reg = 0x");
Serial.println(stat, HEX);
// Demonstrate blocking calls
if (error = sht.measTemp(&rawData))
logError(error);
temperature = sht.calcTemp(rawData);
if (error = sht.measHumi(&rawData))
logError(error);
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
}
void loop() {
unsigned long curMillis = millis();
// Rapidly blink LED. Blocking calls take too long to allow this.
if (curMillis – blinkMillis >= BLINKSTEP) {
ledState ^= 1;
digitalWrite(ledPin, ledState);
blinkMillis = curMillis;
}
// Demonstrate non-blocking calls
if (curMillis – trhMillis >= TRHSTEP) {
measActive = true;
measType = TEMP;
if (error = sht.meas(TEMP, &rawData, NONBLOCK))
logError(error);
trhMillis = curMillis;
}
if (measActive && (error = sht.measRdy())) {
if (error != S_Meas_Rdy)
logError(error);
if (measType == TEMP) {
measType = HUMI;
temperature = sht.calcTemp(rawData);
if (error = sht.meas(HUMI, &rawData, NONBLOCK))
logError(error);
} else {
measActive = false;
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
}
}
}
#else // If ENA_ERRCHK is not defined
void setup() {
byte stat;
byte error = 0;
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
delay(15);
sht.readSR(&stat);
Serial.print("Status reg = 0x");
Serial.println(stat, HEX);
sht.writeSR(LOW_RES);
sht.readSR(&stat);
Serial.print("Status reg = 0x");
Serial.println(stat, HEX);
sht.measTemp(&rawData);
temperature = sht.calcTemp(rawData);
sht.measHumi(&rawData);
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
}
void loop() {
unsigned long curMillis = millis();
if (curMillis – blinkMillis >= BLINKSTEP) {
ledState ^= 1;
digitalWrite(ledPin, ledState);
blinkMillis = curMillis;
}
if (curMillis – trhMillis >= TRHSTEP) {
measActive = true;
measType = TEMP;
sht.meas(TEMP, &rawData, NONBLOCK);
trhMillis = curMillis;
}
if (measActive && sht.measRdy()) {
if (measType == TEMP) {
measType = HUMI;
temperature = sht.calcTemp(rawData);
sht.meas(HUMI, &rawData, NONBLOCK);
} else {
measActive = false;
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
}
}
}
#endif
void logData() {
Serial.print("Temperature = "); Serial.print(temperature);
Serial.print(" C, Humidity = "); Serial.print(humidity);
Serial.print(" %, Dewpoint = "); Serial.print(dewpoint);
Serial.println(" C");
}
void logError(byte error) {
switch (error) {
case S_Err_NoACK:
Serial.println("Error: No response (ACK) received from sensor!");
break;
case S_Err_CRC:
Serial.println("Error: CRC mismatch!");
break;
case S_Err_TO:
Serial.println("Error: Measurement timeout!");
break;
default:
Serial.println("Unknown error received!");
break;
}
}
BIBLIOGRAFIE
Mihoc, D., Iliescu, S. St., Teoria și elementele sistemelor de reglare automată, Editura Didactică și Pedagogică, București – 1984
Rădescu, R., Arhitectura sistemelor de calcul, Editura Politehnica Press – 2012
Vasile, A., Bacîș, I. B., Bazele electronicii auto, Editura Cavallioti – 2013
www.arduino.cc
www.elf.cs.pub.ro/pm
http://www.engineersgarage.com/articles/risc-and-cisc-architecture
http://www.mikroe.com/chapters/view/64/chapter-1-introduction-to-microcontrollers/
http://retele.elth.ucv.ro/Bratu%20Cristian/MAP/001%20-%20Curs%20001%20-%20MAP%20-%20Microcontrolerul.pdf
http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Summary.pdf
http://www.ijese.org/attachments/File/v1i6/E0213031513.pdf
https://developer.apple.com/library/mac/documentation/devicedrivers/conceptual/bluetooth/BT_Bluetooth_Basics/BT_Bluetooth_Basics.html
http://www.micromedia.home.ro/p20/p20.htm
http://www.neduet.edu.pk/electronics/electronics/pdf/OrcadTutorial.pdf
www.phys.ubbcluj.ro/~anghels/teaching/SIS/diverse…/trad_temp.pdf – referinta
www.wikipedia.org
ANEXE
Codul programului
#include <Sensirion.h>
#define ENA_ERRCHK // Activează codul detector de erori
const byte dataPin = 2; // SHTxx serial data
const byte sclkPin = 3; // SHTxx serial clock
const byte ledPin = 13; // Arduino built-in LED
const unsigned long TRHSTEP = 5000UL; // Sensor query period
const unsigned long BLINKSTEP = 250UL; // LED blink period
Sensirion sht = Sensirion(dataPin, sclkPin);
unsigned int rawData;
float temperature;
float humidity;
float dewpoint;
byte ledState = 0;
byte measActive = false;
byte measType = TEMP;
unsigned long trhMillis = 0; // Monitorizează intervalele de timp
unsigned long blinkMillis = 0;
#ifdef ENA_ERRCHK
byte error = 0;
void setup() {
byte stat;
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
delay(15);
if (error = sht.readSR(&stat))
logError(error);
Serial.print("Status reg = 0x");
Serial.println(stat, HEX);
if (error = sht.writeSR(LOW_RES))
logError(error);
if (error = sht.readSR(&stat))
logError(error);
Serial.print("Status reg = 0x");
Serial.println(stat, HEX);
// Demonstrate blocking calls
if (error = sht.measTemp(&rawData))
logError(error);
temperature = sht.calcTemp(rawData);
if (error = sht.measHumi(&rawData))
logError(error);
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
}
void loop() {
unsigned long curMillis = millis();
// Rapidly blink LED. Blocking calls take too long to allow this.
if (curMillis – blinkMillis >= BLINKSTEP) {
ledState ^= 1;
digitalWrite(ledPin, ledState);
blinkMillis = curMillis;
}
// Demonstrate non-blocking calls
if (curMillis – trhMillis >= TRHSTEP) {
measActive = true;
measType = TEMP;
if (error = sht.meas(TEMP, &rawData, NONBLOCK))
logError(error);
trhMillis = curMillis;
}
if (measActive && (error = sht.measRdy())) {
if (error != S_Meas_Rdy)
logError(error);
if (measType == TEMP) {
measType = HUMI;
temperature = sht.calcTemp(rawData);
if (error = sht.meas(HUMI, &rawData, NONBLOCK))
logError(error);
} else {
measActive = false;
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
}
}
}
#else // If ENA_ERRCHK is not defined
void setup() {
byte stat;
byte error = 0;
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
delay(15);
sht.readSR(&stat);
Serial.print("Status reg = 0x");
Serial.println(stat, HEX);
sht.writeSR(LOW_RES);
sht.readSR(&stat);
Serial.print("Status reg = 0x");
Serial.println(stat, HEX);
sht.measTemp(&rawData);
temperature = sht.calcTemp(rawData);
sht.measHumi(&rawData);
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
}
void loop() {
unsigned long curMillis = millis();
if (curMillis – blinkMillis >= BLINKSTEP) {
ledState ^= 1;
digitalWrite(ledPin, ledState);
blinkMillis = curMillis;
}
if (curMillis – trhMillis >= TRHSTEP) {
measActive = true;
measType = TEMP;
sht.meas(TEMP, &rawData, NONBLOCK);
trhMillis = curMillis;
}
if (measActive && sht.measRdy()) {
if (measType == TEMP) {
measType = HUMI;
temperature = sht.calcTemp(rawData);
sht.meas(HUMI, &rawData, NONBLOCK);
} else {
measActive = false;
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
}
}
}
#endif
void logData() {
Serial.print("Temperature = "); Serial.print(temperature);
Serial.print(" C, Humidity = "); Serial.print(humidity);
Serial.print(" %, Dewpoint = "); Serial.print(dewpoint);
Serial.println(" C");
}
void logError(byte error) {
switch (error) {
case S_Err_NoACK:
Serial.println("Error: No response (ACK) received from sensor!");
break;
case S_Err_CRC:
Serial.println("Error: CRC mismatch!");
break;
case S_Err_TO:
Serial.println("Error: Measurement timeout!");
break;
default:
Serial.println("Unknown error received!");
break;
}
}
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: Automatizarea Unui Sistem de Irigatii Intr O Sera (ID: 161983)
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.
