Indrumător: Conf. dr. ing. Daniel Tudor COTFAS Conf. dr. ing. Petru Adrian COTFAS BRAȘOV 2016 SISTEM DE MONITORIZARE WIRELESS PENTRU O SERĂ… [311319]
PROIECT DE DISERTAȚIE
Absolvent: [anonimizat]: Conf. dr. ing. Daniel Tudor COTFAS
Conf. dr. ing. Petru Adrian COTFAS
BRAȘOV
2016
SISTEM DE MONITORIZARE WIRELESS PENTRU O SERĂ
Absolvent: [anonimizat]: Conf. dr. ing. Daniel Tudor COTFAS
Conf. dr. ing. Petru Adrian COTFAS
BRAȘOV
2016
CUPRINS
INTRODUCERE
Prezenta lucrare descrie un subiect ce prezintă un interes crescut datorită tendinței mondiale de a deține controlul asupra resurselor pe care le folosim cu scopul de a [anonimizat] a crește confortul și de a proteja mediul. Sistemul prezentat se bazează pe o [anonimizat]. Obiectivul general al proiectului constă în dezvoltarea unui sistem inteligent de monitorizare la distanța a parametrilor dintr-o seră fară interacțiunea factorului uman.
Dezvoltarea sistemelor de monitorizare reprezintă un subiect foarte important atât pe plan intern cât și internațional. [anonimizat] a [anonimizat]. [1]
“Un sistem de monitorizare reprezintă un sistem complex ce realizează o serie de funcții:
achiziționează informații din procesul supravegheat;
transmite datele culese din proces către nivelul central;
prelucrează informațiile și prezintă aceste informații operatorului uman;
[anonimizat], ceea ce permite o [anonimizat];
prelucrează statistic evenimentele apărute în proces.” [1]
[anonimizat]. Prin echipament se întelege orice ansamblu care realizează monitorizare sau controlul unui sistem.
O stație meteo poate fi definită ca un ansamblu de echipamente pentru observarea condițiilor atmosferice care furnizează informații pentru a analiza datele și climatul unei anumite regiuni. Măsurătorile sunt realizate cu ajutorul unor senzori poziționati pe sistemul dedicat care monitorizează temperatura și umiditatea.
Scopul acestui proiect este realizarea unui sistem inteligent de măsurare a parametrilor externi. Tot ansamblul va fi controlat de un microcontroller urmând ca datele să fie stocate într-o bază de date. Întregul echipament va putea fi utilizat pentru verificarea rapidă a temperaturi si a umidități dintr-o seră, acest sistem va fi alimentat de la celule fotovoltaice.
Energia electrică a [anonimizat], deoarece aproape toate activitățile cotidiene se desfășoară cu aparate alimentate cu energie electrică.
[anonimizat], [anonimizat], energia geotermică ș.a. [anonimizat] a produce curent electric.
S-a [anonimizat], [anonimizat], care totodată să ofere un raport performanță/preț avantajos. Produsul final al proiectului este menit să fie ușor de utilizat și de citit de orice persoană, care afișează înregistrări de date de senzori meteorologici.
Sistemul proiectat poate fi utilizat în sere de legume, sau de plante exotice, utilizatorul având posibilitatea să citească principalele mărimi măsurate la distanță, prin accesarea unei pagini de internet.
În prezenta lucrare vor fi prezentate aspecte legate de arhitectura sistemului, informații și instrucțiuni referitoare la programele utilizate pentru dezvoltarea aplicației, detaliile de implementare a aplicației, problemele întâmpinate și rezultatele experimentelor efectuate.
Realizarea acestui sistem de monitorizare consider că va duce la îmbunătățirea soluțiilor deja existente pe piață, deoarece acesta oferă posibilitatea persoanelor să monitorizeze ce se întâmplă din mai multe puncte de vedere, de la distanță.
Tema lucrării este dezvoltată în 4 capitole, iar structura acestora este următoarea:
Al doilea capitol prezintă noțiunile teoretice care au stat la baza dezvoltarii sistemului.
În capitol al 3-lea sunt prezentate rețelele de comunicare folosite.
În capitol al 4-lea se prezintă descrierea sistemului proiectat(reprezentat în fig. 1) atât din punct de vedere hardware cât și software.
Fig. 1 Sistemul de transimie și modulul de alimentare
SENZORII ȘI DISPOZITIVELE UTILIZATE
Generalități
Dezvoltarea din ultima perioada a electronicii și a circuitelor integrate oferă noi posibilități pentru multe aplicații practice și conduce la noi descoperiri în domeniul senzorilor. Senzorul poate fi definit în mod general ca fiind un dispozitiv sensibil care sesizează un anumit fenomen. [2]
“Senzorul este un dispozitiv care sesizează un fenomen. Termenul de senzor este folosit pe scară largă și este asociat acelei componente electronice care permite măsurarea unei mărimii fizice. De fapt, senzorul sesizează (simte) un anumit fenomen, recepționează și răspunde la un stimul fizic. Este dispozitivul de la intrarea sistemului de măsurare.” [3]
Senzorul de temperatură DS1820
Una dintre cele mai importante caracteristici de monitorizare a unei stații meteo este temperatura, ea fiind foarte importantă în orice împrejurări.
DS1820 este un senzor utilizat pentru determinarea temperaturii digital ce este prevăzut cu 9 biți pentru citirea temperaturii dispozitivului. Comunicația se realizează prin magistrala 1-Wire, ce permite conectarea mai multor dispozitive pe același fir. Identificarea se realizează cu ajutorul unui ID unic pe 64biți, stocat în memoria senzorului.[4]
Senzorul DS1820 prezentat în fig. 2 este un senzor de tempreratură care poate măsura valori de la -55°C până la +125°C, acesta este un tranzistor termic.
Fig. 2 Senzorul de temperatură DS1820 [5]
DS1820 este un circuit integrat produs de firma Dallas Semiconductor, reprezentat în fig. 3, cu funcționare specializată pentru măsurarea temperaturilor mediului ambiant sau a suprafeței cu care se află în contact.
Â
Fig. 3 Descrierea și asignarea pinilor [4]
Caracteristicile acestui circuit sunt următoarele:
Este conceput cu o capsulă de mici dimensiuni tip TO92 cu numai 3 pini;
Interfața de comunicație se bazează pe un protocol de comunicatie „1-Wire” care necesită o conexiune de date cu un singur fir, cu excepția pinului de masă, la care se pot conecta simultan mai multe dispozitive;
Poate fi alimentat prin conexiunea de date;
Fiecare dispozitiv are un cod pe 64 de biți unic stocat într-un ROM On–Board;
Gamă de măsură cuprinsă între -55°C și +125°C cu pas de 0,5°C;
Tensiune de alimentare de la 3V pâna la 5.5V;
± 0,5 ° C Precizie pentru temperaturi de la -10 ° C până la + 85 ° C;
Convertește temperaturii cu o precizie de 12-bitti în 750ms (Max);
Rezoluție Termometru este selectabilă între 9 și 12 biți
Poate memora într-o memorie nevolatilă, se poate observa în fig.4, valori limită de temperatură la depășirea cărora va genera automat stare de alarmă [4]
Fig. 4 Schema bloc internǎ a senzorului de temperaturǎ DS1820 [4]
Conversia temperaturii se realizează după un mecanism hardware proprietar imediat după ce se primește o comandă de inițiere a acesteia. Când conversia a fost realizată rezultatul va fi reprezentat în formă binară pe un număr total de 16 biți. Primul octet al rezultatului indică semnul conversiei. Un exemplu pentru poate fi interpretarea valoari FFh semnifică o temperatură negativă care va fi reprezentată în cel de-al doilea octet (cel mai puțin semnificativ) în complement față de doi. Dacă temperatura este pozitivă, octetul cel mai semnificativ va fi 00h și valoarea acesteia va avea o reprezentare directă în cel de-al doilea octet. Un exemplu de legătură între rezultatul conversiei și valoarea temperaturii este prezentat în tabelul de mai jos. [6]
Tab. 1 Relația dintre rezultatul conversiei și valoarea temperaturii
DS1820 dispune de o memorie RAM numită „scratchpad” cu dimensiunea de 9 octeți. Rezultatul conversiei se memorează întotdeauna cu octetul LS la adresa 0 și octetul MS la adresa 1. Rezultatul unei măsurări va fi plasat într-o memorie scratchpad a DS1820, și poate fi citită prin emiterea unei comenzi care citește conținutul memoriei scratchpad.
În figura cu numărul 5 este prezentat modul în care senzorul de temperatură a fost conectat la microcontroller și alimentarea acestuia care a fost realizată de la o sursa externă de 5V. Desigur la acesta configurație se pot adăuga și alte dispozitive cu comunicare prin interfața 1-Wire.
Fig. 5 Conectarea senzorului la microcontroller
LCD alfanumeric
Modulul LCD ales pentru realizarea acestui sitem permite afișarea a 16 caractere pe două lini pe un ecran de tip LED, având 8 biti pentru numărul de linii de date. În fig. 6 este reprezentă configurarea pinilor a unui LCD de 16 caractere.
Fig. 6 Configurarea pinilor modului LCD [7]
Controlul semnalelor este următorul:
RS (Register Select) – Selectarea Registrului Lcd-ul are două registre importante:
Registrul codului de comandă
Registrul de date
Cand RS = 0 este selectat registrul codului de comandă, permite utilizatorului să trimită comanda, iar când RS = 1 este selectat registrul de date, permite utilizatorului să trimită care trebuie să fie afișate.
R\W (Read\ Write) – Citire\Scriere
R\W permite utilizatorului să scrie sau să citească informația de la LCD. Datele care sunt în curs de afișare vor fi stocate în buffer-ul memoriei DDRAM. Foloește R\W = 0 pentru citire și R\W = 1 pentru scriere.
E (Enable) – Bit de activare al LCD-ului.
Cand E = 0, LCD nu este activ respectiv semnalale de pe D, RW și RS vor fi ignorate.
Cand E = 1, afișorul este activat și va procesa datele de pe ceilalti pini de interfațare.
D0-D7 – Data Bus
VDD și VSS – pini de alimentare a afisorului
Fig. 7 – Conectarea LCD-ului la microcontroller
Stabilizator de tensiune ajustabil LM317
Unul din cele mai cunoscute, flexibile și des utilizate stabilizatoare de tensiune este LM 317. Cu ajutorul acestui integrat se pot pune în practică ușor, diverse surse de alimentare pentru o mulțime de aplicații. LM 317 se poate folosit atât pentru surse cu tensiune fixă cât și pentru cele cu tensiune reglabilă, la un curent standard de 1,5A[8].
Pentru aplicația dezvoltată rezistentele au fost calculate conform formulei reprezentate în fig. 8 de mai jos.
Fig. 8 Stabilizator de tensiune ajustabil LM317 [8]
LM317 este un regulator de tensiune foarte eficient care poate asigura o tensiune între 1,2 si 25V la o intensitate de 1,5A. Deoarece LM317 este prevăzut cu protecții le scurt-circuit nu este necesară o siguranța fuzibilă în curent.
În fig. 9 este reprezentat modul în care a fost generată tensiunea de 5V, necesară pentru alimentarea sistemului. Se poate observa că pentru asigurarea celor 5V sunt necesare două rezistente cu valori de 1000 respectiv de 330 de ohmi.
Fig. 9 Schema electrică a stabilizatorului LM317
Modulele wireless
Modulul transmițător wireless
Modulul transmițător digital de RF utilizează o frecvență purtătoare de 434MHz cu modulație FSK si o antenă externă, având o viteză maximă de transmisie de 9600bps. Modul în care pinii sunt asignați modului Aurel TX FM-MID este reprezentat în fig.10.
Fig. 10 Asignarea pinilor [10]
Modulul este alimentat cu 3,3V pe pinul Vcc, are o deviație de ±20kHz și modulează o formă de undă dreptunghiulară care lucrează la 5kHz și poate să ajungă până la 40kHz. Acest modul de dimensiuni mici este conceput pentru echipamente portabile.
Conform datelor furnizate în data sheet-ul modulului modulul are un consum foarte mic cuprins între 11 și 16 mA. În fig. 11 este prezentată conectarea modului transmițător wireless la microcontroller.
Fig. 11 Conectarea modului la microcontroller
Modulul receptor wireless
Modulul receptor digital de RF utilizează o frecvență purtătoare de 434MHz cu modulație FSK si are o viteză maximă de transmisie de 19200bps. Modul în care pinii sunt asignați modului Aurel RX-4M50FM60SF este reprezentat în fig.12.
Fig. 12 – Asignarea pinilor [11]
În Fig. 13 este prezentată conectarea modului receptor wireless la RS232
Fig. 13 – Conectarea modului la microcontroller
Microcontroller-ul Atmega 8
Pentru controlul întregului sistem și pentru prelucrarea datelor am utilizat un microprocesor ATMEGA8L produs de ATMEL.
ATMEGA8 este un microcontroller CMOS pe 8-biți de mică putere din familia AVR bazat pe o arhitectură îmbunătățită RISC. Incorporează un procesor ce folosește un set de instrucțiuni de 32 de registre de uz general. Toate cele 32 de registre sunt conectate direct la ALU (Unitatea Aritmetică și Logică), permițând numai două registre independente să fie accesate într-o singură instrucțiune.[12]
Microcontroller-ul ATmega 8 oferă următoarele caracteristici: 8KB memorie Flash internă autoprogamabilă, 512 biți EEPROM, 1Kb SRAM, o interfață de memorie externă, 23 de instructiuni pentru porturile de intrari ; iesiri, 32 de registrii functionali, trei cronometre (Timer) cu moduri de comparare, intreruperi interne si externe, un port serial programabil USART, o interfata seriala, ADC (ADD with Carry) pe 6 canale (8 canale in TQFP si pachete de date MLF) cu o precizie de 10 biti, un timer de rezerva programabil cu oscilator intern, un port serial SPI , si 5 moduri de economisire a energiei programabile prin software.
Modul Idle oprește unitatea centrală în timp ce permite SRAM-ului, cronometrelor/numărătoarelor, porturilor SPI și sitemului de intrerupere să funcționeze.
Modul Power-down salvează conținutul registrelor, dar “îngheață” oscilatorul, facând neutilizabile oricare alte funcții ale cip-ului până la urmatoarea intrerupere sau resetare de hard.
În modul Power-save numărătorul asincron continuă să funcționeze, fapt ce permite utilizatorului să mențină o baza, în timp ce restul dispozitivului este în repaus. Modul ADC Noise Reduction opreste Unitatea centrala și toate modulele de I/O cu excepția numaratorului asincron și ADC-ul, pentru a minimaliza zgomotul de comutație din timpul conversiei ADC. In modul Standby funcționează doar oscilatorul în timp ce restul dispozitivului este în repaus. [13]
Microcontrolerul este fabricat folosind tehnologia de memorie volatile cu densitate mare Atmel. Memoria flash poate fi reprogramată folosind o interfață serială SPI , printr-un program de memorie convențional nonvolatil. Programul boot poate folosi orice interfață pentru a descarca programul de aplicații din memoria de aplicații flash. Soft-ul din secțiunea de boot flash va continua să ruleze în timp ce aplicațiile flash sunt updatate furnizând operații reale de citire în timpul scrierii. Combinând o unitate centrală RISC pe 8 biți cu o memorie internă autoprogramabilă de tip flash, pe un cip monolitic.
ATmega8 AVR este are un set complet de programe și instructiuni ce includ compilatoare C, macro-asamblatoare și simulatoare/corectoare de programe, emulatoare de circuite si kituri de evaluare.
Microcontroller-ul folosește diferite tipuri de informații, care sunt stocate în diferite tipuri de memorii. Instrucțiunile care controlează funcționarea microcontroller-ului trebuie stocate într-o memorie nevolatilă, unde informațiile se păstrează și după oprirea și repornirea sursei de alimentare. Rezultatele intermediare și variabilele pot fi înscrise într-o memorie volatilă, la acestea este important să se poată face scrierea /citirea rapid și simplu în timpul funcționării.[13]
Memoria RAM (Random Access Memory) este o memorie volatilă care poate fi citită sau scrisă de unitatea centrală. Locațiile din RAM sunt accesibile în orice ordine. Pe chip, memoria RAM ocupă mult loc și implicit costurile de implementare sunt mari. [13]
Memoria ROM (Read Only Memory) este cea mai ieftină și cea mai simplă memorie și se folosește la stocarea programelor în faza de fabricație. Unitatea centrală poate citi informațiile, dar nu le poate modifica.[13]
Comunicația serială se poate potrivi cu o gamă extinsă de dispozitive și necesită un număr minim de fire, implicit un număr minim de conexiuni (pini puțini).
„În transferul serial de date este necesar să se cunoască începutul și sfârșitul informației transferate. Pentru a identifica cele două coordonate emițătorul și receptorul trebuie să fie sincronizați. Sincronizarea se poate realiza prin trei metode, dintre care numai două sunt folosite în microcontroller. Oricare din metode presupune că durata unui bit este aceeași atât la emițător cât și la receptor (este folosit același semnal de ceas pentru serializarea informației). Numărul de biți transmiși într-o secundă reprezintă rata de transfer numită baud rate; aceasta se măsoară în biți/secundă (bps). Durata unui bit este 1/(baud rate).” [13]
Modulul serial asincron
Prima metodă considerată este transferul serial asincron. Modulul serial asincron este referit ca UART (Universal Asynchronous Receiver Transmiter). Într-un transfer serial asincron începutul fiecărui byte este marcat de o tranziție a liniei menținută pe durata corespunzătoare unui bit. Sfârșitul este marcat de asemenea de un bit de stop; bitul de stop constă în menținerea liniei pe durata unui bit într-o stare predefinită. Între bitul de start și bitul de stop sunt transferați biții de informație.[13]
O metodă care necesită puține resurse hardware este un program care să genereze secvența de transfer ca și componență și ca durată a fiecărui bit. Programul trebuie să măsoare durata fiecărui bit.
O altă soluție de implementare a interfeței seriale este cea în care interfața realizează modul hardware specializat. Unitatea centrală înscrie informația de transferat într-un registru al interfeței după care sarcina serializării și a generării secvenței este finalizată de către hardware-ul interfeței. În cazul recepției interfața preia secvența recepționată, extrage elementele de sincronizare și înscrie datele efective într-un registru. Datele recepționate sunt accesibile unității centrale în acest registru al interfeței. În cazul în care registrul de transmisie este gol sau registrul de recepție este plin interfața semnalizează starea și poate chiar suspenda temporar execuția programului principal prin întreruperi hardware [13]. Schemă bloc simplifică a unei interfețe seriale asincrone este reprezentată în Fig. 14.
Fig. 14 Schema bloc a UART [13]
Integratul LT3652
LT3652 este un încărcător pentru celule solare care poate genera curent până la 2A cu circuite simple de control pentru a urmări puterea maximă. LT3652 este un integrat produs de către firma Linear Technology Corporation, care reglează tensiunea de intrare astfel încât circuitul să utilizeze tehnica MPPT (urmărirea punctului de putere maximă).
Un controler MPPT sau în traducere, "controler cu urmărirea punctului de putere maximă" este un convertor DC – DC care optimizează perfect transferul de energie între aria de panouri solare fotovoltaice și bateria de acumulatori.[14]
LT3652 utilizează o buclă de reglare a tensiunii de intrare, care reduce curentul de încărcare, în cazul în care tensiunea de intrare scade sub un anumit nivel programat. Când integratul este alimentat de la un panou solar bucla de reglare este utilizată pentru a menține panoul la puterea de ieșire de vârf.
Caracteristici:
Tensiunea de intrare: 4.95V la 32V
Grad de încărcare programabil până la 2A
Frecvența 1MHz
5% precizia curentului de încărcare [15]
LT3652 este prevăzut cu un convertor ridicător de tensiune (boost), acesta produce o tensiune de ieșire stabilizată mai mare decât cea de la intrare.
Figura cu numărul 15 reprezintă o configurație electrică tipică a integratului LT3652 .
Fig. 15 Schema electrică a circuitului de încărcare [15]
Celulele fotovoltaice
Celulele fotovoltaice fac posibilă conversia din energie solară în energie electrică, bazându-se pe efectul fotovoltaic.
Datorită condițiilor atmosferice și climatice puterea generată de panourile fotovoltaice este variabilă, depinzând de iradianță, temperatură, poziția soarelui pe bolta cerească, etc. Parametri celulelor fotovoltaice variind mult este nevoie de un convertor pentru a putea stoca energia sau surplusul de energie electrică în acumulatori.
Panoul fotovoltaic, în general, este alcătuit dintr-un număr de 36 sau la 72 de celule fotovoltaice. Celulele sunt dispuse în șiruri de câte 9 sau 12 celule pe sir care transformă radiația solară în energie electrică. Randamentul panourilor fotovoltaice este cuprins între 8-20%, în funcție de gradul de absorbție a radiației solare și tipul celulei fotovoltaice.
Deoarece celulele solare generează o putere maximă de 5W este necesar ca acestea să fie legate în serie sau paralel pentru a putea genera puterea electrică dorită. Legarea în serie a celulelor fotovoltaice este reprezentată in fig.16, iar rezultatul va fi creșterea tensiunii direct proporțional cu numărul celulelor, curentul fiind egal cu cel generat de o singură celulă.
Pentru evitarea scurgerii de curent se vor folosi diode bypass pe fiecare șir pentru protectia împotriva efectelor produse de umbririle parțiale și/sau defectarea panoului fotovoltaic.
Fig. 16 Legarea în serie a celulelor solare [16]
Conectare în paralel a sirurilor de celule, urmăreste de fapt creșterea curentului debitat de ansamblul respectiv. La rândul lor panourile solare pot fi conectate în serie și paralel cu scopul de a obține o tensiune, respectiv curentul necesar aplicației pentru care a fost proiectat.
Cele mai utilizate celule fotovoltaice sunt fabricate din siliciu. Siliciul este al doilea element chimic din compoziția scoarței terestre ceea ce înseamnă cantități aproape nelimitate. Siliciul pur folosit la fabricarea celulelor fotovoltaice și componentelor electronice se obține din siliciul brut, obținut din cuarț, care se topește.
Panoul utilizat pentru alimentarea sistemului este reprezentat în fig.17 acesta este prevăzut cu 12 celule conectate în serie care produc o tensiune de 7,2V (open circuit voltage) și un curent de scurt cuircuit de 540mA.
Fig. 17 Panoul fotovoltaic
Circuitul de alimentare este proiectat astfel încât integratul LT3652 să încarce acumulatorul de 7,2V cu un curent de până la 2A. În fig. 18 se poate observa circuitul de alimentare proiectat și aprinderea LED-ului, acesta este rezultatul faptului că acumulatorul folosit este încărcat. Led-urile sunt utilizate ca și indicatorii pentru a evidenția încărcarea acumulatorului respectiv a semnala o eroare apărută în timpul procesului de încărcare.
Fig. 18 Circuitul de încărcare al acumulatorului
REȚELE DE COMUNICARE
Interfața 1-Wire
1-Wire este un dispozitiv pentru comunicarea digitală proiectat de Dallas Semiconductor. Produsele 1-Wire oferă combinații de memorie, semnale amestecate și funcții de autentificare a securități printr-un singur contact cu interfața serială. Cu atât puterea și cât și comunicările livrate pe protocolul serial, dispozitivul 1-Wire sunt de neegalat în abilitățile lor de a prevede chei funcționale sistemului unde interconectarea trebuie minimizată.
Rețeaua este definită ca o arhitectură cu canal deschis master/slave, aplicat printr-un rezistor la master cu o tensiune nominală de 5V.
Fiecare slave al 1-Wire-ului poate stoca în ROM un număr serial unic de 64 biți care lucrează ca nod adresă. Dispozitivul pentru a putea fi selectat individual trebuie conectat la aceeași magistrală.
Adresa este compusă din 8 bytes divizați în trei secțiuni principale. Începe cu LSB-ul, primul byte stochează codul familiei pe 8 biți care identifică tipul dispozitivului. Următorii șase bytes stochează adresa individuală pe 48 biți. Ultimul byte este MSB, care conține CRC cu o valoare bazată pe datele conținute în primi șapte bytes. Masterul poate determina dacă o adresă a fost citită fără eroare. [17]
Se folosește un singur fir pentru a realiza comunicarea și transmisia puterii. Proiectarea simplificată a protocolul de interfață care furnizează un control, o semnalizare și o alimentare printr-o conexiune printr-un singur fir.
Protocolul 1-Wire folosește nivelele logice CMOS/TTL cu funcționările specifice în gama tensiuni de alimentare 2.8V și 6V.
Atât master-ul cât și slave-ul sunt configurați de transmițătoarele care permite bitului de date secvențial să curgă în ambele direcții, dar într-o singură direcție la un moment dat. Masterul inițiază și controlează toate dispozitivele.
Datele secventei de byte și secvenței de biți cu datele de citit și scris sunt transferate în sloturi de timp. Fiecare 1-wire se auto-setează de către sincronizarea oscilatorului intern, acest lucru este reprezentat in tab.2.
Tab. 2 – Operațiile 1-Wire[17]
Fluxul de comunicatii 1-Wire
Prima parte în orice comunicație implică emiterea pe magistrala master unui “reset” care sincronizează întrega magistrală. Dispozitivul slave este apoi selectat pentru comunicările anterioare. Acest lucru poate fi realizat prin selectarea tuturor slave-urilor, selectând un slave specific, sau după descoperirea următorului slave de pe magistrală folosind un algoritm de căutare binară. După ce un dispozitiv specific a fost selectat, toate celălalte dispozitive renunță și ignoră comunicările anterioare până la următoarea repornire este eliberat. Chiar dacă fiecare dispozitiv poate avea protocoale și caracteristici diferite, toate au același proces de selecție și urmărește fluxul de comandă reprezentat în fig. 19.
Fig. 19 – Fluxul de comunicații 1-Wire
Transmiterea temperaturii
Senzorul DS1820 este digital ceea ce înseamnă că temperatura ambientală va fi convertită de senzor într-o valoare digitală și va fi transmisă în format digital. Pentru pornirea senzorului, începerea conversiei și transmisia temperaturii sunt necesare o serie de comenzi pe care senzorul l wire le recunoaște. Transmisia acestor comenzi se face printr-un singur fir (1 wire communication) în mod bidirecțional.
Comunicarea se bazează pe o legatură de tipul, master-slave reprezentă în fig. 20. În cadrul acestui proiect, masterul este reprezentat de microcontroller-ul ATmega8, iar slaveul îl reprezintă senzorul de temperatură DS1820.
Fig. 20 Legatura Master-Slave
Acest lucru semnifică faptul că comunicarea va fi întotdeauna inițiată de catre Master, indiferent dacă masterul vrea să transmită ceva sau dacă slave-ul vrea să transmită ceva.
“Transmiterea comenzilor se face printr-o înșiruire de biți, dar care vor avea o formă puțin diferită în cazul protocolului 1-Wire. Astfel, transmiterea unui bit de "0" se va face printr-un impuls negativ lung, iar transmiterea unui bit de "1" se va face printr-un impuls negativ scurt.” [18] Acest transfer este ilustrat în fig. 21.
Fig. 21 Transmiterea comenzilor prin inetrmediul DS1820[18]
“ In cazul in care masterul vrea să transmită "0" atunci el va iniția transmisia unui bit printr-un front căzător, de la "1" la "0", după care va aștepta o durată aproximativ egală cu durata maximă de transmisie a unui bit. Slaveul va citi valoarea aproximativ la mijlocul duratei de transmisie a unui bit, atunci când aceasta va fi "0". În cazul în care masterul transmite "1", după inițierea comunicării, prin frontul căzător, masterul va trece imediat în starea "1". Astfel, în momentul în care slaveul citește valoarea, aceasta va fi "1".
Pentru recepția datelor,reprezentat în fig. 22, masterul trebuie să inițieze comunicarea printr-un front căzător, după care trebuie să treacă imediat în modul de înaltă impedanță, adică trebuie să configureze portul legat la senzor ca și intrare. Făcând acest lucru controlul asupra valorii bitului care se transmite rămâne la Slave.” [18]
Fig. 22 Receptia datelor[A]
Astfel, masterul va citi "0" atunci când slave-ul ține linia de date în "0" pe toată durata transmiterea unui bit.
În cazul în care masterul citște "1", dacă slave-ul lasă linia de date să ajungă în "1", imediat după ce comunicarea a fost inițiată.
Comunicarea serială RS232
Magistralele seriale se utilizează ca suport pentru transferul de informații între calculatoare sau între componentele autonome ale unui sistem de calcul. Caracteristica principală a oricarei magistrale seriale este transmisia secvențială, bit cu bit, a informațiilor, folosindu-se un număr redus de semnale.[13]
Transferul serial se realizează pe baza unui set de reguli care alcătuiesc protocolul de comunicație. Două echipamente care comunică pe o magistrală serială trebuie să respecte același protocol și aceeași parametri de transmisie. [13]
Modul în care un octet furnizat de către utilizator este serializat și trimis pe linia TxD, respectiv receprecetionat pe linia RxD este invizibil utilizatorului. Aceste operațiuni sunt executate la nivel hardware de portul serial. Este foarte important ca un mecanism să permită citirea corectă a biților de intrare, la fel de important este și faptul ca receptorul trebuie să cunoască durata unui bit, fercvența și faza secvenței de date. Cazul ideal este atunci cand emițăorul și receptorul au același semnal de tact adică emitatorul scrie bitul pe frontul crescator al tactului, iar receptorul citește bitul pe frontul coborător al tactului.
În standardul RS232 datele se transmit conform fig.23.
Fig. 23 – Standardul RS232 [18]
Acest tip de comunicație este folosit pentru a transmite un semnal digital de la un calculator la un modem. Toate calculatoarele oferă porturi seriale pentru conectare de modem sau alte echipamente UART. Acest circuit face legătura între magistrala de date paralelă, din interiorul calculatorului, și linia serială din exterior. Cupla seriala cu 9 pini (partea de la calculator) este reprezentată în fig. 24.
Fig. 24 – Configurația pinilor RS232 [18]
Computerul se numește DTE (Data Terminal Equipment), iar modem-ul DCE (Data Communications Equipment). Interfața permite comunicația serială bidirectională între două echipamente și este simetrică la cele două capete ale liniei.
Pentru a se realiza comunicarea serială între dispozitivul conceput și calculator am utilizat un integrat MAX 232, acesta este un circuit folosit pentru a converti nivelele de tensiune de pe linia serială a calculatorului, care sunt de +12V și -12V la niveluri logice de 0 – 5V . MAX232 are două receptoare care convertesc nivelele de tensiune de la RS232 la TTL și două drivere care convertesc nivelel de tensiune de TTL la RS232.
Un exemplu de configurație electrică cu MAX232 este rezentată în figura 25.
Fig. 25 Schema electrică a unui MAX232 conectat cu modulul wireless de recepție
Pentru a ajunge la rezultatele dorite circuitul reprezentat anterior va fi proiectat în programul Design Spark, acesta este reprezentat în fig. 26.
Fig. 26 Layout-ul modulului de recepție
Protocolul de comunicație NMEA
Pentru realizarea proiectului am utilizat protocolul NMEA (National Marine Electronics Association) utilizat pentru modulele GPS. Standardul NMEA este un protocul de comunicație serială, dezvoltat pe baza protocolui CAN. Conținutul mesajului este reprezentat în fig. 27.
Fig. 27 Formatul șirului de caractere
Rețeaua NMEA,permite mai multor echipamente să fie conectate între ele folosind o cale comună de comunicație, cu scopul de a facilita schimburile de date.
Dispozitivele NMEA 0183 utilizează o interfață serială asincronă care are următorii parametrii:
Viteza de modulație (buad rate): 4800;
Numărul de biti de date: 8;
Biți de stop: 1;
Fără paritate;
Fără hanshake.
Conținutul mesajului începe cu un caracter de start “$”,urmat de 4 bytes alocați pentru date format din informația utilă, un bit de CRC și caracterul de final “#” .
Formatul unui mesaj este puțin diferit de cel standard deoarece utilizează doar un singur câmp de date, în timp ce protocolul standard permite utilizarea mai multor câmpuri de date separate între ele prin “,”.
PROIECTAREA SISTEMULUI
Schema bloc
Pentru a putea începe proiectarea electrică am plecat de la o schemă bloc, reprezentată în fig. 28, care conține blocurile necesare pentru realizarea sistemului, aceasta este formată din două module:
• modulul transmițătorului format din microcontroller, cei trei senzori de identificare a condițiilor atmosferice, display-ul LCD, Dip Switch și dispozitivul AUREL de transmisie wireless.
• modulul receptorului format din calculatorul și dispozitivul AUREL de recepție wireless.
Fig. 28 Schema bloc a sistemului proiectat
S-a adoptat această configurație deoarece în urma evaluarilor s-a constatat că aceasta arhitectura are un randament maxim, atinge maximul de performanțe ,este în concordanță cu obictivele inițiale și are dimensiuni reduse ce sporesc mobilitatea de lucru care îl face adaptabil în functie de locație.
Modulul transmițător conține un dip switch pentru setarea adresei, pentru ca PC-ul să nu primească informații de la un alt modul diferit aflat în aceeași zonă de acoperire.
Pentru acest tip de aplicație s-a utilizat un microcontroller Atmega8 din familia AVR, bazat pe o arhitectură RISC pe 8 biți. Microcontroller-ul dispune de trei porturi de comunicații, dintre care un port serial, iar acestea sunt utilizate unul pentru interfața wireless si unul pentru conectarea senzorilor.
Tensiunea de alimenatre este asigurată de o baterie alimentata de la un panou fotovoltaic care generează o tensiune de aproximativ 7V, dar este redusă și stabilizată cu ajutorul unui stabilizator de tensiune LM317.
Implementare hardware
Pentru a putea începe proiectarea electrică am plecat de la o schemă bloc care conține blocurile necesare pentru realizarea sistemului. Proiectarea tuturor structurilor schematice au fost realizate în Design Spark PCB.
Deoarece s-a utilizat transmisia wireless, aplicația practică este împărțită în două părți: modulul transmițător și modulul receptor.
Modulul transmițător
Am ales să folosesc un Atmega8L din familia AVR deoarece din cele 3 porturi disponibile și îmi oferă posibilitatea de a utiliza portul USART. Microcontroller-ul este alimentat la o tensiune de 5V, având la intrare un regulator de tensiune ce împiedică alimentarea neadecvată. Conectarea microcontroller-ului este evidențiată în fig.29.
Fig. 29 Conectarea microcontroller-ului
Pentru programarea microcontroller-ului am utilizat programatorul AVR MKII reprezentat în fig. 30 acesta este compatibil cu trei interfețe de programare diferite, interfața ISP (in-system progammable), interfața TDI (transport data interface) și interfața PDI (program and debug interface), pentru a putea programa memoriile flash ale unui microcontroller.
AVR PROG MKII este un instrument de programare pentru microcontroller-ele care fac parte din familia AVR. Comunicația dintre dispozitiv și computer se face printr-un conector USB, astfel aceasta este o soluție ideală pentru computer-ele noi, ce nu dispun de o interfața serială RS232.
Fig. 30 Configurația pinilor programatorulului AVR MKII
Necesitatea conversiei de la tensiunea de 7,2V generată de panoul fotovoltatic la 5V respectiv 3,3 V este datorită faptului că modulul de comunicație și senzorul de umiditate funcționează la o tensiune de 3,3V respectiv la tensiunea de 5V necesară pentru alimentarea microcontroller-ul, senzorul de temperature și a LCD-ului.
Cea mai accesibilă metodă de realizare este folosirea unui regulator de tensiune, care poate asigura un curent de minim 2A, un astfel de regulator de tensiune este LM317 iar schema proiectată pentru sistem este reprezentată în fig. 31.
Fig. 31 Schema electrică a stabilizatoarelor de tensiune
Microcontroller-ul are legat la portul D un LCD alfanumeric cu configurația pe 4 biți de la DB4 la DB7 și la portul B o conexiune printr-un conector cu 6 pini, utilizați pentru încărcarea programului pe microcontroller. De asemenea la portul D este legat și modulul de transmisie wireless.
O etapă importantă după realizarea schemei electrice este cea de proiectare a cablajului imprimat, evidențiat în fig. 32. Pe baza schemei obținute am realizat layout-ul în Design Spark.
Fig. 32 Layout-ul modulului de transmisie
După cum se poate observa în fig. 32 cablajul este proiectat pe două nivele diferențiate prin trasee marcate cu roșu și albastru. Cel mai important nivel este marcat cu albastru, care uterior va fi imprimat pe PCB.
Pe celălalt nivel marcat cu roșu sunt reprezentate traseele dintre diverse componente ca simple legături prin fire conductoare.
Modulul receptor
Pentru recepționarea datelor am utilizat un convertor RS232, reprezentat în fig. 33, care ulterior va fi conectat la modul wireless de recepție.
Fig. 33 Convertor RS232
Datele recepționate de la modulul Aurel vor fi trimise mai departe pe un calculator printr-un adaptor USB-serial. Modulul receptor funcționează la o tensiune de 5V furnizată de la un port USB. Pentru conectarea modulului wireless și a modului RS232 am conceput o schemă electrică, reprezentată în fig. 34.
Fig. 34 Schema electrică pentru conectarea modulului wireless cu convertotul RS232
După realizarea schemei electrice am dezvoltat în programul Design Spark cablajul imprimat care este reprezentat în fig. 35. După cum se poate observa cablajul este conceput pe un singur layer deoarece sunt proiectate doar legaturile dintre modulul RX si covertorul RS232 cât și traseul necesar pentru alimentarea pe USB a curcuitului.
Fig. 35 Layout-ul modulului de recepție
Modulul de alimentare
Modulul de alimentare este unul de tipul stand alone sau sistem fotovoltaic independent deoarece are capacitatea de a produce energie electrică prin intermediul luminii solare, fără a fi conectat la o sursă externă de alimentare.
Schema electrică a modului de alimentare este reprezentată în fig.36
Fig. 36 Schema electrică a modulului de alimentare al bateriei
Realizarea cablajului imprimat, fig. 37, a fost conceput pe doua nivele prin trasee marcate cu roșu și albastru. Traseele marcate cu albastru, fiind cele ce vor fi imprimate pe PCB iar traseele marcate cu roșu reprezentând legaturile dintre diverse componente prin fire conductoare.
Fig. 37 Layout-ul modulului de alimentare al bateriei
Proiectarea cablajelor imprimate
Pentru proiectarea layout-urilor acestor cablaje am ținut cont de necesitatea unor dimensiunii reduse și de poziționarea conectorilor de alimentare. Conectorii au fost amplasați pe lateralul PCBA-urilor pentru a facilita accesul.
Cablajele imprimate au fost realizate urmând diagrama bloc reprezentă în fig.38.
Fig. 38 Etapele de realizare a unui cablaj imprimat
Proiectarea cablajelor am realizat-o în programul Design Spark PCB deoarece este un program disponibil oricărei persoane care are cont pe site-ul cu același nume. Acest program oferă o gama largă de funcții și caracteristicii unice pentru proiectarea gratuită a PCB-urilor.
Imprimarea cablajului am realizat-o pe o folie pess n peel, care reprezintă o metoda rapidă de realizare a prototipurilor de cablaje imprimante.
Fig. 39 Layout-ul transpus pe placa de cupru
După ce placa de cupru a fost curățata s-a impimat schema realizată anterior pe folia de transfer cu ajutorul unui fier de călcat. Apoi placa de cupru imprimată a fost introdusă în clorura ferică pentru aproximativ 20 de minute. Rezultatul imprimării circuitului este evidențiat în fig. 39.
O ultimă etapă în realizarea cablajelor a fost cea de prelucrări mecanice, pentru realizarea vias-urilor am utilizat o bormașină cu un burghiu de 0,9mm.
Implementare software
Microcontrollerul este partea centrală a sistemului, deoarece el controlează toate activitățile acestuia, printr-un program înscris în memoria acestuia. Pentru realizarea aplicației am utilizat programul Code Vision AVR. Limbajul de programare utilizat în procesul de scriere a codului este C. Interfața grafică este reprezentată în fig. 40.
Fig. 40 Interfața grafică Code Vision AVR
Înainte de scrierea programului, am realizat o organigramă de funcționare pentru a ușura procesul de programare. Structura proiectului se bazează pe reprezentarea grafică a unei organigrame Programul pe microcontroller realizează la început inițializarea LCD-ului, UART-ului, senzorilor și unui timer care generează o întrerupere la fiecare 500 de ms. Când apare o întrerupere din timer se generează secvențial o comandă de citire a unui senzor.
În programul principal, reprezentat în fig. 41, se verifică dacă întreruperea din timer a generat o comandă și aceasta este trată prin determinarea parametrului dorit (afișarea rezultatului pe LCD și transmisia către PC). Deoarece pentru realizarea acestui sistem am întâmpinat probleme legate de transmiterea datelor wireless organigrama realizată înaintea procesului de programare nu a mai fost respectată și mai precis timer-ul.
Fig. 41 Schema logică a sistemului
Pentru inițializarea LCD-ului am folosit funcția:
lcd_init() inițializează modulul LCD, ștergere afișajul și stabilește poziția caracterului pe LCD.
Pentru afișarea datelor pe LCD am utilizat următoarele funcții:
lcd_gotoxy(x,y) stabilește poziția curentă pe afișor pe coloana x și rândul y. Numărătoarea începe de la 0 pentru linii și coloane.
lcd_puts(str) afișează pe poziția curentă a afișorului stringul str, localizat în RAM.
Pentru utilizarea funcțiilor 1-Wire trebuie inclusă librăria senzorului one wire #include 1wire.h. Apoi magistrala 1-Wire trebuie conectată la portul microcontroller-ului la Portul B cu semnalul de date pe bitul 2, declararea în code vision AVR se realizează conform declarațiilor:
#asm
.equ_w1_port=0x0B
.equ_w1_bit=2
#endasm
#include <1wire.h>
Funcțiile protocolului 1 wire utilizate sunt urmtoarele:
w1_init() funcția inițializează dispozitivul 1-Wire pe magistrală.
w1_search() această funcție returnează numărul de dispozitive conectate la magistrală. Dacă nu este detectat niciun dispozitiv returnează 0.
w1_read această funcție citește un byte de pe magistrală.
Funcțiile utilizate pentru transmiterea datelor pe serilă sunt:
getchar() returnează un caracter recepționat de UART;
putchar() transmite caracterul folosind UART.
Pentru realizarea graficului pe PC am utilizat programul .NET Framework deoarece permite realizarea, distribuirea și rularea aplicațiilor-desktop Windows și aplicațiilor WEB.
Înainte de pornirea aplicației trebuie să se realizeze configurarea comunicației serial, bound rate-ul cât și locația unde se dorește sa fie salvată baza de date. După cum se poate observa în fig. 42 în momentul recepționari datei, aceasta este verificată, salvată în baza de date și afișată pe interfața grafică.
În programul principal se verifică corectitudine mesajului recepționat pe serială și în cazul în care informația este corectă, aceasta este salvată într-o bază de date de tipul xml și afișată pe interfața grafică.
Fig. 42 Schema logică a sistemului
Datele salvate anterior în fișierul de tip xml sunt transmise pe o pagina de internet. Aceasta este contruită în limbaj HTML – CSS (Hyper Text Mark-up Language – Cascading Style Sheets). În partea de HTML se realizează prin intermediul comenzii <div> structura de bază a interfeței. Pentru o interfața cu utilizatorul se va folosii CSS, cu ajutorul căruia se vor stiliza elementele de tip <div> din cadrul structurii HTML. În partea de CSS sunt formatate diferite stiluri pentru a avea o interfațare cât mai plăcută. Legătura dintre acestea (HTML și CSS) se realizează cu următoarea declarație de cod:
<link href="style.css" rel="stylesheet" type="text/css">
Interfața conține în principiu trei pagini iar acestea sunt următoarele:
• Pagina principală, fig. 43,unde sunt afișate două imagini care fac legatura cu urmatoarele pagini de internet:
Fig. 43 Pagina principală
• Pagina de temperatură, fig. 44, această pagină preia datele de la senzorul de temperatură;
Fig. 44 Pagina de temperatură
• Pagina de umiditate această pagină preia date de la senzorul de umiditate.
Cele trei pagini de internet conțin anumite părți care se regăsesc pe toate paginile, precum partea de antet, partea de conținut și linia de subsol care se află în partea de jos.
Rezultate experimantale
Pentru verificarea programării am realizat o serie de simulării în Proteus deoarece acesta este un program dedicat pentru simularea circuitelor analogice și digitale.
Proteus face posibilă interacțiunea cu circuitul simulat în timp real, utilizând modele ale echipamentelor periferice animate precum LCD-ul, terminal serial RS232 și senzorul de temperatură.
După cum se poate observa în fig. 45 am conectat microcontroller-ul atmega8L la un hiperterminal pentru realizarea si testarea comunicării pe serială.
Fig. 45 Schema electrică în Proteus
În figura reprezentată anterior se poate observa interconectarea senzorului și a afișorului la pinii microcontroller-ului. Schema nu conține modulul wireless, dar după cum se poate observa transmisia datelor am verificat-o într-un virtual terminal conectat la pinul Tx al microcontroller-ului.
Pentru încărcarcarea programului pe microcontroller am urmat următoarele etape:
În primul rând au fost setați biți de siguranță, conform fig. 46, care au un rol foarte important în programarea unui microcontroller. Deoarece biți de siguranță determină starea microcontroller-ului (activarea sau dezactivarea pinului reset, brown out detection, viteza și nivelul de tensiune la care rulează, activarea watchdog, etc.). Setarea biților de siguranța se realizează o singură dată, chiar dacă memoria microcontroller-ului va fi scrisă și ștearsă de mai multe ori. Pentru a verifica starea biților de siguranța am utilizat site-ul http://www.engbedded.com/fusecalc/ iar biții generați după introducerea informațiilor necesare, microcontroller-ul utilizat și frecventa utilizată, au fost pentru nivelul de High valoarea D9 iar pentru nivelul de Low valoarea C3.
Fig. 46 Setarea biților de siguranță
Etapa a doua fiind reprezentă de încărcarea programului cu extensia .hex sau .elf în memoria microcontroller-ului. Aceasta se realizează conform fig. 47.
Fig. 47 Încărcarea executabilului pe microcontroller
Pentru a se verifica că modulele wireless funcționează s-a realizat pe placa de testare breadboard configurația conform datasheet-urilor din care fac parte modulele. Verificarea s-a realizat cu un osciloscop, cu ajutorului căruia s-a verificat corectitudinea datelor transmise respectiv recepționate. Pentru a verifica corectitudinea datelor se cunoaște faptul ca orice cuvânt începe cu un bit de start care trebuie sa fie zero iar următorii biți sunt de date, care pot avea lungimea între 5 și 8 biți, de asemenea cuvântul va conține un bit de stop care este necesar să fie întotdeauna 1.
După testele efectuate anterior am încărcat programul pe microcontroller pentru măsurarea temperaturii wireless. În fig. 48 se poate observa mesajul afișat pe LCD.
Fig. 48 Afișarea pe LCD a temeraturii
Datorită unor întârzieri al semnalului recepționat, programul a trebuit modificat astfel încât informația transmisă să se regăsească la recepție. Datorită acestei probleme întâmpinate datele nu erau recepționate corect de către modulul wireless acest aspect este reprezentat pe osciloscop și evidențiat în fig. 49.
Fig. 49 Reprezentarea pe oscilosop a datelor transmise/ receptionate
În figura reprezentă anterior cu rosu este reprezentată informația ce este transmisă de modulul receptor către calculator iar cu albastru este reprezentată informația transmisă de microcontroller.
După cum se poate observa pe osciloscop o parte din informație (biți) este “pierdută”. Conform acestor date am decis transmiterea unui caracter oarecare cât și a unui delay de 4,4 ms astfel încât mesajul care este transmis să fie interpretat corect la recepție.
putchar('b');
delay_us(4400);
În fig. 50 este reprezentată informația ce este transmisă respectiv recepționată corect.
Fig. 50 Reprezentarea pe oscilosop a datelor transmise/ receptionate
Pentru vizualizarea datelor receptionate pe serială am utilizat programul Tera Term, aici fiind evidențiate datele citite de la senzorul de temperatură. În fig. 51 se poate observa cum datele sunt receptionate.
Fig. 51 Receptionarea datelor în Tera Term
Ulterior datele recepționate de la senzorul de temperatură, sunt interpretate sub forma unui grafic, reprezentat în fig. 52, valoarea modificându-se în momentul recepționări unei măsurători. În momentul transmiteri unei valori, aceasta este salvată într-o baza de date de tipul xml și apoi afișată pe interfața grafică.
Fig. 52 Interfața grafică pentru ineregistrarea datelor
După ce datele recepționate sunt salvate și înregistrate în fișier xml, acesta va fi încărcat pe o pagină de internet. Pagina de internet, reprezentată în fig. 53, este o parte importantă din cadrul acestui proiect, deoarece practic prin intermediul acesteia se poate face legătura dintre client (utilizator) și sistem, cu valorile preluate de la senzorul de temperatură.
Fig. 53 Transmiterea datelor pe pagina de internet
Concluzii și dezvoltări ulterioare
Proiectul de față a avut ca scop dezvoltarea unui sistem care poate fi utilizat în sere de legume, sau plante exotice, astfel încât utilizatorul să aibe posibilitatea să citească principalele mărimi măsurate la distanță, prin accesarea unei pagini de internet.
Realizarea practică a unei sistem de măsurare la distanță cu diferiții prametri, în particular, a unei stații meteo necesită studierea, proiectarea și descrierea implemetări. Acestea reprezintă un punct de plecare în privința dezvoltării unui sitem cât mai simplu, rezistent și fiabil pentru cercetarea condiților atmosferice. De-a lungul proiectului au fost prezentate noțiunile teoretice ale dispozitivelor utilizate si implementarea sistemului.
Pentru realizarea acestui sistem am implementat:
schema electrică a modului de recepție
schema electrică a modului de transmisie
schema electrică a modului de alimentare
proiectarea circuitelor imprimate
programarea microcontroller-ului
configurarea sistemului pe serială
prelucrarea datelor recepționate și afișarea acestora pe interfața grafică
proiectarea unei paginii de internet dedicate și conectarea rezultatelor obținute la pagina de internet.
Mărimile măsurate pentru temperatură au fost comparate cu cele furnizate de o stație meteo poratabilă de tipul HAMA.
Acest sistem de monitorizare poate fi îmbunătațit din mai multe puncte de vedere :
Se pot adauga diverși senzori pentru monitorizarea altor parametri.
Se poate adăuga un modul GSM – pentru a anunța utilizatorul printr-un mesaj atunci când temperatura este necorespunzatoare.
Bibliografie
http://www.slideshare.net/gelu2001/senzori-noi (accesat la data de 04.05.2016)
Petru Todos, Carmen Golovanov – Senzori și traductoare, Editura Tehnică-info, Chișinău, 1998
DS1820 Datasheet
https://shop.chipcad.hu/oldweb/tartalom.aspx?hir=808 (accesat la data de 04.05.2016)
http://tet.pub.ro/files/studenti/materiale/an_III/miclab/lab5%20mC.pdf (accesat la data de 10.06.2016)
LCD 16×2 Module Datasheet
http://www.craiovacenter.com/index.php?topic=1985.0 (accesat la data de 06.06.2016)
http://www.eleccircuit.com/lm338-lm350-lm317-voltage-regulator-calculator/ (accesat la data de 20.10.2015)
AUREL TX-FM-MID Datasheet
AUREL RX-4M50FM60SF Datasheet
Atmel Atmega8 Datasheet
BORZA, Paul, GERIGAN, Carmen, OGRUTAN, Petre, TOACSE, Gheorghe. Microcontrollere – Aplicatii. Bucuresti: Editura Tehnica, 2000, ISBN 973-31-1577-6
http://www.ecovolt.ro/ro/support/ce_este_un_controler_solar_mppt.htm (accesat la data de 02.06.2015)
LT3652 – Linear Technology Data Sheet
COTFAS Daniel, Managementul energetic al sistemelor electronice și de comunicații integrate, Notițe de curs
https://www.maximintegrated.com/en/app-notes/index.mvp/id/126 (accesat la data de 02.06.2015)
http://www.bobtech.ro/tutoriale/porturi-si-interfete/30-comunicatii-seriale (accesat la data de 02.06.2015)
Anexe
Anexa 1 – Schema electrică a modulului de transmisie
Anexa 2 – Schema electrică a modulului de recepție
Anexa 3 – Programul pe microcontroller
#include <io.h>
#include <delay.h>
// 1 Wire Bus interface functions
#include <1wire.h>
// DS1820 Temperature Sensor functions
#include <ds1820.h>
// Alphanumeric LCD functions
#include <alcd.h>
// Declare your global variables here
// Standard Input/Output functions
#include <stdio.h>
void main(void)
{
// Declare your local variables here
int temp;
unsigned char mas_cifra3;
unsigned char mas_cifra2;
unsigned char mas_cifra1;
unsigned char crc;
// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Port C initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 4800 (Double Speed Mode)
UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (1<<U2X) | (0<<MPCM);
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
UBRRH=0x00;
UBRRL=0x67;
// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);
// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
// 1 Wire Bus initialization
// 1 Wire Data port: PORTB
// 1 Wire Data bit: 2
// Note: 1 Wire port settings are specified in the
// Project|Configure|C Compiler|Libraries|1 Wire menu.
w1_init();
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS – PORTD Bit 7
// RD – PORTD Bit 0
// EN – PORTD Bit 6
// D4 – PORTD Bit 5
// D5 – PORTD Bit 4
// D6 – PORTD Bit 3
// D7 – PORTD Bit 2
// Characters/line: 16
lcd_init(16);
while (1)
{
// Place your code here
temp = ds1820_temperature_10(0);
//format measj: $c1c2.c3crc#
delay_us(650);
mas_cifra3 = temp%10+'0';
temp/=10;
mas_cifra2 = temp%10+'0';
temp/=10;
mas_cifra1 = temp%10+'0';
temp/=10;
crc = '#';
crc ^= mas_cifra1;
crc ^= mas_cifra2;
crc ^= '.';
crc ^= mas_cifra3;
putchar('b');
delay_us(4400);
putchar('$');
putchar(mas_cifra1);
putchar(mas_cifra2);
putchar('.');
putchar(mas_cifra3);
putchar(crc);
putchar('#');
lcd_gotoxy(1,0);
lcd_puts("Statie meteo");
lcd_gotoxy(2,1);
lcd_puts("Temp:");
delay_ms(100);
lcd_clear();
//lcd_putchar('#');
lcd_putchar(mas_cifra1);
lcd_putchar(mas_cifra2);
lcd_putchar('.');
lcd_putchar(mas_cifra3);
lcd_putchar(223);
lcd_puts("C");
//lcd_putchar(crc);
//lcd_putchar('$');
delay_ms(1000);
}
}
Anexa 4 – Programul pe PC
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConvertorSeriala
{
class SerialController
{
private bool stopCondition = false;
private SerialPort port;
private List<Double> measurementList = new List<double>();
public delegate void sendValue(double value);
public sendValue SendValueDelegate;
public SerialController()
{
string comPort = ConfigurationManager.AppSettings["ComPort"];
int baudRate = Int32.Parse(ConfigurationManager.AppSettings["baudRate"]);
port = new SerialPort(comPort, baudRate);
port.Open();
}
public void run()
{
string receivedMessage;
StringBuilder messageBuffer = new StringBuilder(30);
while (!stopCondition)
{
receivedMessage = port.ReadExisting();
for (int i = 0; i < receivedMessage.Length; i++)
{
messageBuffer.Append(receivedMessage[i]);
if (receivedMessage[i] == '#')
{
checkMessage(messageBuffer.ToString());
messageBuffer.Clear();
}
}
}
}
private void checkMessage(string msg)
{
if (msg.Length < 5)
return;
//if (msg[0] != '#')
// return;
//if (msg[3] != '.')
// return;
Double observation;
try
{
string value = msg.Substring(msg.Length-5, 4);
value = value.Remove(2, 1);
observation = Double.Parse(value) / 10;
}
catch (Exception c)
{
return;
}
measurementList.Add(observation);
if (SendValueDelegate != null)
SendValueDelegate(observation);
if (measurementList.Count == 20)
{
saveMeasurements();
measurementList.Clear();
}
}
private void saveMeasurements()
{
StringBuilder fileContent = new StringBuilder();
fileContent.Append("<?xml version='1.0' standalone='yes' ?>\n");
fileContent.Append("<LVData xmlns=\"http://www.ni.com/LVData\">\n");
fileContent.Append("<Version>8.6</Version>\n");
fileContent.Append("<Array>\n");
fileContent.Append("<Name>Temperatura</Name>\n");
fileContent.Append("<Dimsize>2</Dimsize>\n");
fileContent.Append("<Dimsize>20</Dimsize>\n");
foreach (double observation in measurementList)
{
fileContent.Append("<DBL>\n");
fileContent.Append("<Name>Numeric</Name>\n");
fileContent.Append("<Val>" + observation + "</Val>\n");
fileContent.Append("</DBL>\n");
}
fileContent.Append("</Array>\n");
fileContent.Append("</LVData>\n");
string path = ConfigurationManager.AppSettings["filePath"]; ;
File.WriteAllText(path, fileContent.ToString());
}
public void stop()
{
stopCondition = true;
}
}
}
Anexa 5 – Configurarea sistemului pe serială
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<appSettings>
<add key="ComPort" value="COM1"/>
<add key="baudRate" value="9600"/>
<add key="filePath" value="c:\\temp.xml"/>
</appSettings>
</configuration>
Anexa 6 – Reprezentarea grafică
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
namespace ConvertorSeriala
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private readonly int heightY = 290;
private readonly int widthX = 590;
private readonly int distanceBetweenBars = 5;
private readonly int startX = 55;
private readonly int stopY = 34;
SerialController serialController;
private List<double> values = new List<double>();
private List<UIElement> graphBoxes = new List<UIElement>();
private bool validComPort = true;
public MainWindow()
{
InitializeComponent();
try
{
serialController = new SerialController();
}
catch (IOException e)
{
MessageBox.Show("Unable to start. Please check the serial port configuration.");
validComPort = false;
}
if (validComPort)
{
serialController.SendValueDelegate += valueReceived;
Thread serialControllerThread = new Thread(serialController.run);
serialControllerThread.Start();
}
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (validComPort)
{
serialController.SendValueDelegate -= valueReceived;
serialController.stop();
}
}
private void valueReceived(double value)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
{
values.Add(value);
if (values.Count > 15)
values.RemoveAt(0);
drawChart();
}));
}
private void drawChart()
{
foreach (UIElement element in graphBoxes)
{
this.canvas.Children.Remove(element);
}
graphBoxes.Clear();
//double maximum = values[0];
//for (int i = 1; i < values.Count; i++)
// if (maximum < values[i])
// maximum = values[i];
double maximum = 50;
int totalDistanceBetweenBars = (values.Count) * distanceBetweenBars;
//se ajusteaza grosimea unei bare a.i sa incapa toate in width de x
double widthForBar = (widthX – totalDistanceBetweenBars) / values.Count;
double positionOnX = startX;
for (int i = 0; i < values.Count; i++)
{
double heightForBar = (values[i] * heightY) / maximum;
CreateBar(widthForBar, heightForBar, positionOnX, stopY, values[i]);
positionOnX += widthForBar + distanceBetweenBars;
}
}
private void CreateBar(double width, double height, double left, double bottom, double value)
{
Rectangle rectangle = new Rectangle();
rectangle.Height = height;
rectangle.Width = width;
SolidColorBrush brush = new SolidColorBrush();
brush.Color = Colors.BlueViolet;
rectangle.Stroke = brush;
rectangle.StrokeThickness = 2;
Canvas.SetLeft(rectangle, left);
Canvas.SetBottom(rectangle, bottom);
SolidColorBrush brush2 = new SolidColorBrush();
brush2.Color = Colors.CadetBlue;
rectangle.Fill = brush2;
this.canvas.Children.Add(rectangle);
graphBoxes.Add(rectangle);
TextBlock textBlock = new TextBlock();
textBlock.Text = value.ToString();
textBlock.Foreground = new SolidColorBrush(Colors.Black);
Canvas.SetLeft(textBlock, left + 5);
Canvas.SetTop(textBlock, 320);
this.canvas.Children.Add(textBlock);
graphBoxes.Add(textBlock);
}
}
}
DECLARAȚIE PRIVIND ORIGINALITATEA LUCRĂRII DE DISERTAȚIE
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: Indrumător: Conf. dr. ing. Daniel Tudor COTFAS Conf. dr. ing. Petru Adrian COTFAS BRAȘOV 2016 SISTEM DE MONITORIZARE WIRELESS PENTRU O SERĂ… [311319] (ID: 311319)
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.
