Proiectarea Unei Aplicatii Privind Monitorizarea Si Evacuarea Apei In Cazul In Care Aceasta Atinge Un Anumit Prag

Lista figurilor

Figură 1: Schema bloc a unui microcontroller[22]

Figură 2: Diagrama bloc a microcontrollereului PIC16F887[5]

Figură 3: Configurația pinilor[6]

Figură 4: Diagrama bloc a arhitecturii PIC[5]

Figură 5: Configurații folosite în microcontrollere[5]

Figură 6: Registrul de stare[6]

Figură 7: Registrul PIE1

Figură 8: Diagrama bloc pentru Timer1[6]

Figură 9: Diagrama bloc a transmițătorului USART[5]

Figură 10: Schema bloc a receptorului USART[5]

Figură 11: Schema bloc a convertorului analog-digital[6]

Figură 12: Formatul rezultatului CAD[6]

Figură 13: Modulul bluetooth RN 42[9]

Figură 14: Schema bloc a modulului RN 42[9]

Figură 15: Configurația pinilor modulului bluetooth[9]

Figură 16: Pompă folosită pentru alimentarea cu apă[14]

Figură 17: Electropompă spălător parbriz[23]

Figură 18: Compilator MikroC[10]

Figură 19: Programatorul PICkit2[11]

Figură 20: Microcontrollerul PIC16F887 în Eagle

Figură 21: Schema bloc

Figură 22: Plăcuța sistemului

Figură 23: Circuitul electric al placuței cu microcontroller

Figură 24: Schemă LM7805( de la 12V la 5V)

Figură 25: Schemă LM317T( de la 5V la 3.4V)[19]

Figură 26: Schemă conectare oscilator extern la PIC16F887[6]

Figură 27: Dispozitiv mobil Samsung[23]

Figură 28: Electropompă spălător parbriz[23]

Figură 29: Schemă master/slave[23]

Figură 31: Schemă circuit PICkit2[23]

Figură 32: PICkit2 Programmer conectat

Figură 33: Crearea fișierelor HEX

Figură 34: Încarcarea programului cu PICkit2 Programmer

Figură 35: Mesaj 1 LCD

Figură 36: Mesaj 2 LCD

Figură 37: Mesaj 3 LCD

Figură 38: Mesaj 4 LCD

Figură 39: Sistem de monitorizare existent[18]

Figură 40: Sistem de monitorizare TruBlue[20]

INTRODUCERE

În ultimii ani numărul dezastrelor naturale a crescut considerabil, principala cauză fiind schimbările climatice. Oamenii de știință consideră că schimbările climatice din ultimii ani sunt cauzate adesea de oamenii care nu respectă natura și mediul înconjurător, afectând astfel clima. Planeta noastră se încălzește constant, astfel că mediul înconjurător este tot mai afectat. Creșterea temperaturii globale reprezintă sursa unor schimbări nedorite care se pot observa cu ușurință pe întreaga planetă. Printre acestea ar fi topirea ghețarilor, ceea ce duce la creșterea nivelului mărilor și oceanelor, dar și fenomene meteo extreme, precum seceta sau inundații.[1]

Inundația înseamnă acoperirea temporară cu apă a unui teren, au loc în diferite zone din cauza unor precipitații de o durată mai prelungită sau din cauza unor precipitații intense într-un timp relativ scurt. Cauza inundațiilor este revărsarea peste maluri a apelor din cauza cantității excesive de apă acumulată de-a lungul unei ape curgătoare sau a unui lac.[1]

Cauzele inundațiilor pot fi:

Cauze naturale: atunci când apariția inundațiilor se datorează în principal factorilor legați de condițiile climatice care pot genera cantități mari de precipitații; aceste cauze presupun o creștere a debitelor sau a nivelurilor peste valorile normale precum și revărsarea apelor.[2]

Cauze antropice: despăduririle efectuate de oameni pe parcursul anilor afectează de asemenea climatul și în plus au favorizat o scurgere importantă și puternică a apelor de pe versanții munților.[2]

Ca și efecte ale inundațiilor, primul lucru la care ne gândim îl reprezintă pagubele economice, deoarece pot fi afectate casele oamenilor, gospodăriile sau terenurile agricole. Pe lângă aceste pagube economice, inundațiile au un efect negativ și asupra vieții sociale, datorat pierderilor de vieți omenești, precum pot exista și consecințe de ordin ecologic prin alterarea mediului înconjurător.[2]

Pentru a lupta împotriva inundațiilor se construiesc diguri și baraje. Digurile protejează suprafețe mari de teren arabil, localități, precum și alte bunuri. Intenționat se provoacă inundații în amonte, pentru a construi lacurile de acumulare. În acest fel are loc o atenuare a viiturii și apele se pot folosi în alte domenii cum ar fi piscicultura sau în hidroenergie.[1]

Măsurile de prevedere a viiturilor reprezintă un alt mod de a ne apăra de inundații, în special în locurile unde nu există diguri sau baraje. O metodă o reprezintă măsurarea nivelurilor de apă și transmiterea acestora către un centru specializat și compararea acestora cu niște valori predefinite. De asemenea, prognoza evoluțiilor viiturilor se realizează cu ajutorul acestor măsurători de niveluri pentru a se cunoaște dimensiunea pericolului și pentru a putea acționa mai departe corespunzător către prevenirea sau evacuarea posibilei zone afectate.[2]

Soluția propusă în lucrarea de față reprezintă un ansamblu de monitorizare și de evacuare a apei în cazul în care aceasta atinge un anumit prag. Este un sistem cu dimensiuni destul de reduse, ce poate fi utilizat atât de oameni în cadrul locuințelor, dar poate fi folosit și în instalațiile industriale, în cazul defectării unei conducte sau a unei defecțiuni în sistem.

FUNDAMENTE TEORETICE

2.1 Microcontrollere

Un microcontroller este un microcircuit care incorporează o unitate centrală (CPU) și o memorie, împreună cu resurse care îi permit interacțiunea cu mediul exterior.[3]

Se folosesc în produse și dispozitive controlate automat, cum ar fi sisteme de control al motoarelor, al climatizării autoturismelor, sisteme electrocasnice moderne, în industria aerospațială, dispozitive medicale implantabile, sisteme de comandă de la distanță. Folosirea microcontroller-ului împreună cu un design care conține entități separate pentru microprocesor, memorie și dispozitive de input/output aduce multe avantaje, printre care cele de cost al producției și reducere a dimensiunilor, mai ales în aplicațiile unde volumul ocupat este o caracteristică critică.[3]

Printre multele domenii unde utilizarea lor este practic un standard industrial se pot menționa: în industria de automobile (controlul aprinderii/motorului, climatizare, diagnoză, sisteme de alarmă, etc.), în așa zisa electronică de consum (sisteme audio, televizoare, camere video și videocasetofoane, telefonie mobilă, GPS-uri, jocuri electronice etc.), în aparatura electrocasnică (mașini de spălat, frigidere, cuptoare cu microunde, aspiratoare), în controlul mediului și climatizare (locuințe, hale industriale), în industria aerospațială, în mijloacele moderne de măsurare – instrumentație (aparate de măsură), la realizarea perifericelor pentru calculatoare, în medicină.[3]

Arhitectura unui microcontroller este cea care definește atributele sistemului așa cum sunt văzute de către programatori. Există două mari tipuri de arhitecturi:

Arhitectura von Neumann: există un bus unic care este folosit pentru date și pentru instrucțiuni, adică datele și instrucțiunile sunt stocate în aceeași memorie principală. Accesul este lent, deoarece atunci când se accesează memoria mai întâi se transferă codul instrucțiunii, iar apoi se transferă și datele.

Arhitectura Harvard: există un bus separat pentru instrucțiuni și date. Accesul este mai rapid, însă structura microcontrollerului este mai complexă.[4]

Figură 1: Schema bloc a unui microcontroller[22]

Pentru aplicația de față am ales să folosesc microcontorllerul PIC16F887, din familia PIC de la Microchip. PIC (Peripheral Interface Controller) desemnează o familie de microcontrollere produse de Microchip Technology.

PIC16F887 este un microcontroller pe 8 biți ce oferă următoarele caracteristici:

arhitectură risc cu un set redus de instrucțiuni;

memorie ram internă;

256 octeți de memorie de date eeprom;

porturi i/o digitale;

circuite de reset;

timer de urmărire;

mod de economisire a energiei.

Microcontrollerul este prezentat într-o capsulă PDIP (Plastic Dual In-Line Package) cu 40 de pini, cu configurația pinilor conform figurii următoare:

Principala funcție a nucleului CPU este de a asigura execuția corectă a programului și de aceea CPU-ul trebuie să fie capabil să acceseze memoriile, să execute instrucțiuni, să controleze funcțiile periferice și să trateze întreruperi. Pentru o performanță cât mai bună, PIC folosește arhitectura Harvard modificată, cu magistrala memoriei de date separată de magistrala memoriei pentru program.[5]

Cei 368 de regiștri pe 8 biți sunt cu acces rapid, fiind posibilă execuția unei operații ALU într-un singur ciclu de ceas. Fiecare registru este accesat direct sau indirect prin intermediul FSR (File Select Register). Microcontroller-ul are integrat un circuit cu rol de protecție care generează un RESET atunci când detectează o scădere a tensiunii de alimentare. De asemenea, este echipat cu o diversitate de interfețe: comparatoare, convertoare ADC și DAC, USART, I2C, SPI, PWM. [5]

PIC (MicroChip) sunt primele MC RISC apărute, cu un număr mic de instrucțiuni. Simplitatea arhitecturii (Harvard) duce la realizarea unui chip de mici dimensiuni, cu puțini pini, consum redus, viteză mare și preț mic. Aceste avantaje au impus microcontrollerele PIC pe piață. Exista 3 linii de microcontrollere PIC: low range, middle range și high range (care se disting prin dimensiunea cuvântului de program și prin facilități legate de structură).

Figură 4: Diagrama bloc a arhitecturii PIC[5]

Unitatea aritmetică și logică (ALU) este una dintre compenentele fundamentale ale unui microcontroller. ALU execută operațiile aritmetice și logice disponibile în setul de instrucțiuni. Există un registru asociat cu ALU care stochează temporar cel puțin un operand implicat în operație, precum și rezultatul operației. ALU are de asemenea biți care indică caracteristici specifice ale valorii rezultate, cum ar fi dacă rezultatul este zero, semnul valorii rezultate sau existența transportului. Acești biți fac parte din STATUS register. [5]

În majoritatea microprocesoarelor și microcontrollerelor registrul asociat cu ALU este numit acumulator (ACC). La microcontrollerele PIC registrul asociat cu ALU se numește registrul W. Acest registru efectuează sarcini similare cu ACC, dar este poziționat într-o poziție diferită.[5]

În arhitecturile tradiționale, ACC este plasat la ieșirea din ALU, așa că stochează întotdeauna rezultatul unei operații logice sau aritmetice. La microcontrollerele PIC, rezultatul unei operații poate fi stocat în registrul W sau în oricare registru din memoria de date. Acest lucru conferă microcontrollelor PIC o flexibilitate și putere ridicată.[5]

Figură 5: Configurații folosite în microcontrollere[5]

b)

În figura de mai sus este ilustrată legătura dintre ALU, registrul W și memoria pentru date.

Configurația folosită în majoritatea microprocesoarelor;

Configurația folosită în microcontrollerele PIC.[5]

Registrul de stare conține:

starea artimetică pentru ALU;

starea Reset;

banca de biți pentru memoria de date.[6]

Registrul de stare poate fi destinația oricărei instrucțiuni, ca oricare alt registru. Dacă registrul de stare este destinația unei intrucțiuni care modifică biții Z, DC, C, atunci opțiunea de scriere pentru acești trei biți este dezactivată. De asemenea și biții TO și PD nu au activată opțiunea de scriere. Prin urmare, rezultatul unei instrucțiuni cu registrul de stare ca destinație poate fi diferit de rezultatul așteptat.[6]

Figură 6: Registrul de stare[6]

Bitul 7- IRP:Register Bank Select bit (utilizat pentru adresarea indirectă)

1=Bank2, 3

0=Bank 0, 1

Biții 6-5-RP:Register Bank Select bits(utilizat pentru adresarea directă)

00=Bank 0

01=Bank 1

10=Bank 2

11=Bank 3

Bitul 4-TO:Time-out bit

1=dupa alimentare, instrucțiunea CLRWDT sau instrucțiunea SLEEP

0=are loc o depășire a WDT

Bitul 3-PD:Power-down bit

1=după alimentare sau după instrucțiunea CLRWDT

0=prin executarea instrucțiunii SLEEP

Bitul 2-Z:Zero bit

1=dacă rezultatul unei operații aritmetice sau logice este zero

0=dacă rezultatul unei operații aritmetice sau logice nu este zero

Bitul 1-DC:Digit Carry/Borrow bit

1=semnalează apariția transportului de la al patrulea cel mai nesemnificativ bit

0=semnalează ca nu a apărut transport de la al patrulea cel mai nesemnificativ bit

Bitul 0-C:Carry/Borrow bit

1=se realizează transport de la cel mai semnificativ bit al rezultatului

0=nu se realizează transport de la cel mai semnificativ bit al rezultatului.[6]

Registrul PIE1 conține biții de activare a întreruperii.

Figură 7: Registrul PIE1

Bitul 7-Neutilizat:este citit ca fiind 0

Bitul 6-ADIE:bitul de activare a întreruperii pe convertorul analog-digital(CAD)

1=activează întreruperea CAD

0=dezactivează întreruperea CAD

Bitul 5-RCIE:bitul de activare a întreruperii pe recepția EUSART

1=activează întreruperea pe recepția EUSART

0= dezactivează întreruperea pe recepția EUSART

Bitul 4-TXIE:bitul de activare a întreruperii pe transmisia EUSART

1= activează întreruperea pe transmisia EUSART

0= dezactivează întreruperea pe transmisia EUSART

Bitul 3-SSPIE:bitul de activare a întreruperii pe Portul Sincron Serial Master(MSSP)

1=activează întreruperea pe MSSP

0= dezactivează întreruperea pe MSSP

Bitul 2-CCP1IE:bitul de activare a întreruperii pe CCP1

1= activează întreruperea pe CCP1

0= dezactivează întreruperea pe CCP1

Bitul 1-TMR2IE:bitul de activare a întreruperii pe Timer2

1= activează întreruperea pe Timer2

0= dezactivează întreruperea pe Timer2

Bitul 0-TMR1IE:bitul de activare a întrerupeii pe Timer1

1= activează întreruperea pe Timer1

0= dezactivează întreruperea pe Timer1. [6]

Modulul Timer1 este un timer/numărător pe 16 biți cu următoarele caracteristici:

regiștri pereche pentru timer (TMR1H:TMR1L)

sursă de ceas programabilă intern sau extern

prescalare pe 3 biți

oscilator LP opțional

operații sincrone și asincrone

întrerupere în momentul în care are loc o depășire a registrului

bază de timp pentru funcția de comparare

ieșirea comparatorului sincronizată cu ceasul Timer1. [6]

Figură 8: Diagrama bloc pentru Timer1[6]

Întreruperea pe Timer1

Perechea de regiștri pentru Timer1(TMR1H:TMR1L) incrementează până la FFFFh și apoi revine la 0000h. Atunci când Timer1 revine, bitul de flag pentru întrerupere al registrului PIR1 este setat. Pentru a activa întreruperea în momentul revenirii, trebuie setați următorii biți:

bitul de activare al întreruperii al registrului PIE1

bitul PEIE al registrului INTCON

bitul GIE al registrului INTCON.[6]

Pentru a realiza comunicația modulului cu telefonul mobil este necesară setarea modulului USART. Acest modul reprezintă o comunicație serială, periferică I/O. Conține toate generatoarele de ceas, regiștrii de “shitf-are” și bufferele de date necesare pentru a realiza un transfer de date independent de execuția programului. USART poate fi configurat ca un sistem asincron full-duplex sau sistem sincron half-duplex. Modul full-duplex este folosit pentru comunicații cu sisteme periferice, cum ar fi un calculator personal. Modul sincron half-duplex este folosit pentru comunicații cu module periferice, cum ar fi un convertor analog-digital sau digital-analog, memorii EEPROM sau alte microcontrollere. Aceste module nu au de obicei ceasuri interne pentru generarea ratei de transfer, deci necesită semnal de ceas extern provenit de la un dispozitiv master sincron.[5]

Figură 9: Diagrama bloc a transmițătorului USART[5]

Modulul USRAT include următoarele capabilități:

transmisie și recepție asincronă full-duplex

buffer de intrare de două caractere

buffer de ieșire de un caracter

lungime de caracter de 8 biți programabilă

detectarea adresei în modul 9 biți

buffer de intrare pentru detecția de erori

detecția erorilor la caracterele primite

master sincron half-duplex

slave sincron half-duplex

operația Sleep. [5]

Modulul USART implementează următoarele caracteristici, fiind ideal pentru utilizarea în Rețele Locale Interconectate:

detecția automată și calibrarea ratei de transfer

wake-up la recepționarea break-urilor

break transmis de 13 biți. [5]

Figură 10: Schema bloc a receptorului USART[5]

Operarea modului USART se realizează prin intermediul a trei regiștri:

starea și controlul transmisiei (TXSTA)

starea și controlul recepției (RCSTA)

controlul ratei de transfer (BAUDCTL). [5]

USART transmite și recepționează date utilizând formatul standard non-return-to-zero (NRZ). NRZ este implementat cu două nivele: VOH care reprezintă bitul 1 și VOL care reprezintă bitul 0. NRZ se referă la faptul că biți de aceeași valoare transmiși consecutivi rămân la același nivel la ieșire , fără a se mai întoarce la un nivel neutru între transmisia fiecărui bit. Fiecare transmisie de caracter constă într-un bit de Start urmat de opt sau nouă biți de date, și se termină întotdeauna cu un bit de Stop. Bitul de Start este întotdeauna un spațiu, iar bitul de Stop este întotdeauna un semn. Cel mai întâlnit format de date este cel de 8 biți. Fiecare bit transmis are o lungime de perioadă de 1/rata de transfer. USART-ul transmite și recepționează mai întai bitul cel mai puțin semnificativ. Transmițătorul și receptorul sunt independente funcțional, dar utilizează același format al datelor și aceeași rată de transfer. [5]

Convertorul Analog-Digital (CAD) permite convertirea unui semnal de intrare analogic într-o reprezentație pe 10 biți a acelui semnal. Blocul utilizează intrări analogice, care sunt multiplexate într-un circuit de eșantionare. Ieșirea circuitului de eșantionare este conectată la intrarea convertorului. Acesta generează un rezultat pe 10 biți prin aproximări succesive și memorează rezultatul conversiei în regiștrii CAD pentru rezultat (ARDESL și ADRESH).[5]

Tensiunea de referință a convertorului se poate selecta software pentru a putea fi generată intern sau alimentată extern. De asemenea, CAD-ul poate genera o întrerupere după realizarea unei conversii. Această întrerupere poate fi utilizată pentru a porni microcontroller-ul din starea de Sleep.[6]

Figură 11: Schema bloc a convertorului analog-digital[6]

Atunci când se configurează și se utilizează convertorul CAD trebuie avute în vedere următoarele funcții:

Configurarea porturilor: CAD-ul poate fi folosit pentru a converti semnale analogice și digitale. Când se convertesc semnale analogice, pinii de intrare/ieșire trebuieconfigurați pentru semnal analogic, prin setarea biților TRIS și ANSEL.

Selectarea canalului: biții CHS ai registrului ADCON0 determină care canal este conectat la circuitul de eșantionare. Atunci când se schimbă canalele, o întârziere este necesară înaintea începerii următoarei conversii.

Selectarea tensiunii de referință pentru CAD: biții VCFG ai registrului ADCON0 furnizează control independent pentru referințele pozitive și negative (VDD și VSS).

Ceasul conversiei CAD: sursa pentru ceasul necesar conversiei poate fi selectată software prin biții ADCS ai registrului ADCON0. Există trei ceasuri posibile: FOSC/2, FOSC/8, FOSC/32. Timpul necesar pentru realizarea conversiei unui bit este definit ca TAD, iar o conversie completă pe 10 biți necesită 11 periaode TAD.

Controlul întreruperii: modulul CAD permite generarea unei întreruperi după realizarea unei conversii Analogic-Digital. Flagul întreruperii CAD este bitul ADIF din registrul PIE1. Bitul ADIF trebuie inițializat cu zero în software. Întreruperea poate fi generată în timp ce modulul funcționează sau atunci când se află în starea Sleep. Dacă modulul este în starea Sleep, întreruperea va porni modulul. După pornirea modului din starea Sleep, următoarea instrucție care urmează dupa instrucția Sleep este întodeauna executată. Dacă programatorul încearcă să scoată modulul din starea Sleep și să rezume executarea , întreruperea trebuie dezactivată.

Formatarea rezultatelor: rezultatul convertorului Analog-Digital pe 10 biți poate fi furnizat în două formate, aliniere la stânga sau aliniere la dreapta. Bitul ADFM al registrului ADCON0 controlează formatul.[5]

Figură 12: Formatul rezultatului CAD[6]

2.2 Comunicația microcontroller – dispozitiv mobil

Comunicația dintre microcontroller și dispozitivul mobil am realizat-o cu ajutorul modulului bluetooth RN 32.

Figură 13: Modulul bluetooth RN 42[9]

Bluetooth este un standard de tehnologie wireless pentru schimbul de date pe distanțe scurte (folosind transmisii radio, pe lungimea de undă în banda ISM 2400 la 2480 MHz) de la dispozitive fixe și mobile, creând rețele personale, cu un nivel ridicat de securitate. Creat de furnizorul de telecomunicații Ericsson în 1994, a fost inițial conceput ca o alternativă wireless pentru cablurile de date RS-232. Se pot conecta mai multe dispozitive, depășind problemele de sincronizare. Bluetooth este condus de Bluetooth Special Interest Group(SIG).[7]

Tehnologia bluetooth este încorporată în milioane de produse, de la mașini și autoturisme până la dispozitive medicale și calculatoare. Această tehnologie permite împărtășirea de date, muzică, fotografii, clipuri video și alte informații, wireless între dispozitive împerecheate.[7]

Bluetooth funcționează în intervalul de 2400-2483,5 MHz (inclusiv benzi de gardă). Bluetooth utilizează o tehnologie radio, numită de salt în frecvență cu spectru împrăștiat. 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. Primul canal începe la 2402 MHz și continuă până la 2480 MHz, în trepte de 1 MHz. Se efectuează, de obicei 1600 de salturi pe secundă, cu Adaptive Frequency-Hopping (AFH) activat.[7]

Inițial, modulația GFSK era singura schemă de modulație disponibilă, iar ulterior, cu introducerea Bluetooth 2.0+EDR, modulația π/4-DQPSK și 8DPSK a fost disponibilă între aparatele compatibile.[8]

RN 42 este un dispozitiv Bluetooth folosit pentru comunicații wireless. Este un dispozitiv performant, suportă multiple protocoale de interfață, are o antenă on-chip , suport pentru bluetooth EDR și oferă o rată de transfer până la 3 Mbps pentru distanțe de până la 20 de metri.

Figură 14: Schema bloc a modulului RN 42[9]

Configurația pinilor:

Figură 15: Configurația pinilor modulului bluetooth[9]

Specificații:

Viteză ratei de transfer: 1200 bps până la 921 Kbps

Clasa radio 2, distanța de acoperire este de 20 de metri

Frecvența de lucru: 2402 MHz-2480 MHz

Modulație FHSS/GFSK, 79 de canale cu lățimea de bandă de 1 MHz

Comunicație sigură, criptare pe 128 de biți

Corecția erorilor pentru garantarea livrării pachetelor

Configurare cu ajutorul USART

Este mic (13.4 mm x 25.8 mm x 2 mm)

Temperatură de lucru: – 40 C › 80 C

Tensiunea de alimentare: 3.3 V.[9]

2.3 Electropompe

2.3.1 Funcționare și aplicații

O pompă este un dispozitiv care mișcă fluide (lichide sau gaze), prin acțiune mecanică. Aceasta transformă energia mecanică primită de la o sursă în energie hidraulică, care poate fi utilizată în scopul dorit, alimentarea cu apă sau circulația apei. Pompele operează cu un amunit mecanism (de obicei cu piston sau rotativ), și consumă energie pentru a realiza lucrul mecanic necasar deplasării fluidelor. Pompele pot fi alimentate cu mai multe surse de energie, inclusiv prin funcționare manuală, cu electricitate sau cu energie eoliană și pot avea o diversitate de mărimi, de la cele microscopice pentru utilizarea în aplicații medicale până la cele de dimensiuni mari utilizate în industrie.[13]

Pompele mecanice deservesc o gamă largă de aplicații, cum ar fi pomparea apei din fântâni, filtrele acvariilor, iazuri de filtrare, în industria auto pentru sistemul de răcire cu apă, în industria energetică pentru pomparea petrolului și a gazelor naturale. În industria medicală sunt folosite în procesele biochimice, sau ca înlocuitori artificiali pentru părți ale corpului, în special pentru inimă.[13]

Sunt folosite adesea în industrie, în diverse procese tehnologice, sau pentru alimentări cu apă indrustrială și potabilă. Pompele mai sunt utilizate de asemenea, în agricultură pentru sistemele de irigații sau desecări, sau prin atașarea lor la diverse utilaje agricole, folosite pentru combaterea dăunătorilor.[13]

Pompa este un element indispensabil într-o instalație hidraulică, iar enegia pe care o transmite lichidului se manifestă prin circulația acestuia în conducte, la o anumită presiune. Astfel într-o instalație, pompa îndeplinește următoarele atribuții:

de transvazare, atunci când lichidul este deplasat de la sursa de alimentare până la consumator;

de recirculare, atunci când o cantitate limitată de lichid este vehiculată în circuit închis;

de acționare, în cazul în care energia de presiune a lichidului este folosită pentru producerea și amplificarea forțelor.[12]

2.3.2 Puterea de pompare

Puterea împrăștiată într-un fluid crește energia fluidului pe unitatea de volum. Astfel relația de putere este între conversia energiei mecanice a mecanismului pompei și a elementelor de fluid în interiorul pompei. În general aceasta este reglementată de o serie de ecuații diferențiale simultane, cunoscute sub numele de ecuațiile lui Navier-Stokes. Există totuși o ecuație mai simplă privind numai energiile diferite din fluid, cunoscută ca ecuația lui Bernoulli:

( 2.3.2.1)

Unde:

este diferența presiunii totale, dintre presiunea de intrare și presiunea de ieșire (exprimată în Pa) și Q este debitul de fluid (exprimat în kg/s). Presiunea totală poate avea o presiune statică, gravitațională și componente de energie cinetică.

este eficiența pompei, și poate fi oferită de specificațiile producătorului, și este de obicei aflată fie prin simularea dinamicii fluidelor, fie prin testare. Randamentul depinde de configurația pompei și de condițiile de funcționare (viteza de rotație, densitatea fluidului, vâscozitatea).[12]

2.3.3 Randamentul pompei

Randamentul pompei este definit ca raportul dintre puterea împărtășită asupra fluidului de către pompă și puterea furnizată pentru acționarea pompei, valoarea sa nu este fixă pentru o anumită pompă. Pentru pompe centrifuge, randamentul tinde să crească cu un debit până la un punct median din domeniul de funcționare (eficiență maximă) și apoi scade în timp ce debitele cresc în continuare. Datele de performanță ale pompei sunt de obicei furnizate de producător. Eficiența pompei tinde să scadă odată cu trecerea timpului din cauza uzurii. [14]

Când un sistem de proiectare include o pompă centrifugă, un aspect important îl reprezintă portivirea caracteristicii de scurgere cu pompa, astfel încât aceasta să funcționeze cât mai aproape de randamentul maxim. Randamentul pompei este un aspect important, așadar acestea ar trebui testate cu regularitate. [14]

Pentru aplicația de față am ales să folosesc o electropompă folosită și în industria auto.

Figură 17: Electropompă spălător parbriz[23]

MEDII DE PROGRAMARE

3.1 MikroC

MikroC este un puternic instrument de dezvoltare pentru microcontrollerele PIC. Este conceput pentru a oferi programatorilor cea mai simpla soluție pentru dezvoltarea de aplicații pentru sisteme integrate, fără a compromite performanța sau controlul.[10]

PIC și C se completează bine împreună: PIC este cel mai popular chip pe 8 biți din lume, utilizat într-o mare varietate de aplicații, și C, apreciat pentru eficiența sa, este alegerea naturală pentru dezvoltarea de sisteme integrate. MikroC oferă cu succes o potrivire între un IDE extrem de avansat, un compilator ANSI, un set larg de biblioteci largi, documentație corespunzătoare, precum și o mulțime de exemple gata pentru a rula.[10]

Figură 18: Compilator MikroC[10]

MikroC permite dezvoltarea și implementarea rapidă a aplicațiilor:

scrie codul sursă C folosind editorul de cod încorporat

folosește librăriile incluse pentru: achiziții de date, memorie, display-uri, conversii, comunicare

monitorizează structura programului, variabilele și funcțiile în code explorer

utilizează debugger-ul integrat pentru a monitoriza execuția la nivel hardware

livrează rapoarte detaliate și grafice: harta ram și rom, statistici de cod.[10]

3.2 Programatorul PICkit2

PICkit reprezintă o familie de programatoare pentru microcontrollerele PIC. Sunt utilizate pentru programarea și depanarea microcontrollerelor, precum și programarea EEPROM.[11]

Figură 19: Programatorul PICkit2[11]

LED-urile de stare (1) indică starea programatorului:

Power (verde) – programatorul este alimentat prin portul USB.

Target (galben) – programatorul alimentează dispozitivul dorit.

Busy (roșu) – programatorul este ocupat.

Push Button (2) este folosit pentru inițializarea unei funcții ce va fi implementată.

Lanyard Connection (3) este folosită pentru a preveni posibilele pierderi ale programatorului.

Conexiunea portului USB (4) este realizată cu un USB mini-B conector.

Programming Connector (5) reprezintă un header cu 6 pini ce se conectează la dispozitivul dorit.[11]

Eagle

Pentru realizarea schemei electronice am ales Eagle, care este un program flexibil produs de CadSoft Computer ce cuprinde editor schematic, editor layout PCB și auto-rutare.[15]

Figură 20: Microcontrollerul PIC16F887 în Eagle

Editorul schematic oferă următoarele posibilități:

copierea simplă a componentelor;

generarea automată a plăcuței;

generarea automată a semnalelor de alimentare;

verificarea traseului electric;

până la 999 de pagini pe schemă;

previzualizarea icon-urilor pentru pagini;

sortarea paginilor cu Drag&Drop;

suprafața maximă a schemei: 1600 x 1600 mm;

editare rapidă a librăriilor.[15]

DEZVOLTARE HARDWARE

Partea hardware a proiectului este formată dintr-un senzor de nivel, modulul specific aplicației, modulul bluetooth și telefonul mobil.

Schema bloc a proiectului:

Figură 21: Schema bloc

Modulul specific aplicației de față este format din următoarele componente:

Microcontroller PIC16F887 utilizat pentru citirea nivelului de apă și acționarea electropompei

Modul Bluetooth RN 42 pentru comunicația microcontroller-dispozitiv mobil

Electropompă utilizată pentru evacuarea apei.

Figură 22: Plăcuța sistemului

4.1 Descrierea circuitului electric al aplicației

Figură 23: Circuitul electric al placuței cu microcontroller

În figura prezentată anterior se poate observa schema electrică a aplicației. Alimentarea acestui modul se face cu un alimentator de 12 V, iar pentru a alimenta microcontrollerul cu o tensiune de 5V, este folosit un stabilizator de tensiune care preia tensiunea de intrare de la alimentator și furnizează la ieșire o tensiune de 5 V. Intrarea și ieșirea sunt protejate cu condensatori cu valori de 100 nF fiecare.

Figură 24: Schemă LM7805( de la 12V la 5V)

Piesa centrală a circuitului este microcontrollerul PIC16F887, în capsulă PDIP cu 40 de pini. Microcontrollerul este alimentat de la ieșirea de 5V a stabilizatorului LM7805 , care se leagă la pinul 32 (VCC). Pinul 31, care reprezintă pinul de masă al microcontrollerului se leagă la masa circuitului.

Pentru afișarea mesajelor pe LCD am folosit display-ul Raystar RC1602B, un display aflanumeric, 16×2 (5×8 pixeli pe caracter). Pe cele 8 fire de date conectate la microcontroller, de la D0 la D7 se transmit octeți, acești octeți reprezentând coduri interne ale LCD-ului (în modul de instrucțiuni) sau coduri ASCII ale caracterelor ce se doresc a fi afișate (în modul de date).

Descrierea funcționării pinilor:

Tabel 1: Funcționarea pinilor LCD[21]

LCD-ul prezintă următoarele caracteristici:

dimensiunea modulului: 80 x 36 x13 mm2

suprafața vizibilă: 66 x 16 mm2

numărul de caractere: 16 caractere x 2 linii

dimensiunea unui punct: 0.55 x 0.65 mm2

dimensiunea unui caracter: 2.95 x 5.55 mm2

tip lcd: stn negativ, albastru

tip iluminare fundal: led alb.[21]

Pentru realizarea comunicării microcontrollerului cu dispozitivul mobil am utilizat modulul Bluetooth RN42. Dispozitivul mobil comunică cu microcontrollerul prin intermediul unei aplicații care se numește Bluetooth Spp Pro, ce se găsește gratuit pentru utilizatorii telefoanelor mobile ce utilizează sistemul de operare Android în magazinul Play Store. Pentru alimentarea modulului este necesară o tensiune cuprinsă între 3V și 3.6V, pentru a obține această tensiune am folosit regulatorul reglabil de tensiune LM317T. Circuitul din figura următoare furnizează o tensiunea de 3.4V:

Figură 25: Schemă LM317T( de la 5V la 3.4V)[19]

LM317T este un regulator variabil de tensiune care dezvoltă și menține o valoare nominală de 1.25V între ieșire și terminalul de ajustare. Acest voltaj de ajustare este convertit într-un curent de programare de către R1 și acest curent constant curge prin R2 spre masă.[19]

(4.1.1)

Deoarece curentul de la terminalul de ajustare (IAdj) reprezintă un termen de eroare în ecuație, LM317T a fost proiectat pentru a controla IAdj la mai puțin de 100µA și să îl păstreze constant. Pentru a face acest lucru, tot curentul de operare pasiv este întors la terminalul de ieșire. Acest lucru impune un curent de sarcină minim. Dacă curentul de sarcină este mai mic decât această sumă minimă, tensiunea de ieșire va crește. Pe ieșire am legat un condensator de 10 µF pentru a asigura stabilitatea.[19]

Conexiunea dintre microcontroller și modulul bluetooth se realizează după următoarea configurație: pinul TX (pinul 25) al microcontrollerului se conectează la pinul RX al modulului bluetooth, iar pinul RX al microcontrollerului (pinul 26) se leagă la pinul TX al modulului bluetooth. De asemenea, pentru a putea realiza conexiunea microcontrollerului cu modulul bluetooth, a fost necesara mărirea frecvenței ceasului intern al microcontrollerului de la 1MHz la 8MHz. Acest lucru l-am realizat prin conectarea unui oscilator extern de 8MHz la pinii 13(OSC1), respectiv 14(OSC2). Acești doi pini sunt intrarea și respectiv ieșirea unui amplificator inversor care poate fi configurat să funcționeze ca un oscilator intern. La ieșirea din oscilatorul extern am legat câte un condensator ceramic de 22pF pe fiecare pin.

Figură 26: Schemă conectare oscilator extern la PIC16F887[6]

Datele sunt preluate de la microcontroller prin intermediul conexiunii bluetooth de telefonul mobil Samsung Galaxy Note 2. Dispozitivul are un procesor quad-core de 1.6 GHz și o memorie de 2 GB.

4.2 Senzorul de nivel și electropompa

Senzorul de nivel este reprezentat din două fire argintate parelele, care lucrează asemenea unui divizor rezistiv de tensiune. Atunci când nivelul apei crește, rezistența firelor scade, iar tensiunea de pe convertorul Analogic-Digital crește.

Atunci când tensiunea de pe CAD crește, este acționată electropompa care evacuează apa până când niveul acesteia va fi sub niveul senzorului. Aceasta este alimentată cu o tensiune de 12V, tensiune provenită de la acumulator.

Figură 28: Electropompă spălător parbriz[23]

Pentru alimentarea electropompei am utilizat stabilizatorul de tensiune KA7812A, ce prezintă următoarele caracteristici:

curent de ieșire de pâna la 1A

tensiuni de ieșire: 5, 6, 8, 9, 10, 12, 15, 18, 24V

protecție împotriva încălzirii

protecție împotriva scurt-circuitului.[19]

Proiectat inițial ca stabilizator de tensiune fixă, acest modul poate fi folosit împreună cu componente externe pentru a obține tensiuni și curenți reglabili.[19]

4.3 Implementare master-slave

O altă modalitate de implementare a acestui sistem poate fi implementarea unui sistem master- slave. Acest sistem este un model de comunicare în care un modul sau un proces are control unidirecțional asupra unuia sau a mai multor module. În unele sisteme master-ul este ales dintr-un grup de module, iar restul modulelor se comportă ca slave.

Figură 29: Schemă master/slave[23]

În acest caz de implementare, master-ul poate fi un centru de comunicații special creat pentru comunicația cu slave-urile. Slave-urile ar urma să fie reprezentate de către module și amplasate de către autorități în locuri unde sunt adesea probleme cu inundațiile, sau în locurile deficitare în evacuarea apei. Aceasta ar fi o soluție bună de implementat deoarece cu ajutorul master-ului se poate crea o bază de date cu nivelurile din zonele unde sunt slave-urile instalate și astel se poate urmări și controla evoluția nivelurilor.

Pentru a putea realiza acestă implementare este necesară schimbarea modului de comunicație, în locul tehnologiei bluetooth, care are o rază mică de acoperire, urmând a se folosi comunicația GSM/GPRS deoarece oferă o rază de acoperire mult mai mare, o stabilitate mai bună și de asemenea se îmbunătățește durata de viață a bateriei telefonului mobil, deoarece utilizând comunicația GSM nu este necesară activarea unei funcții speciale a telefonului mobil, așa cum era în cazul comunicației prin bluetooth.

Pentru programarea microcontrollerului PIC16F887 am folosit programatorul PICkit2.

Figură 31: Schemă circuit PICkit2[23]

Pentru a programa microcontrollerul am realizat o conexiune ICSP, cu 5 pini ai microcontrollerului după cum urmează: 1(MCLR/THV), 2(VDD), 3(VSS), 4(PGD), 5(PGC), această conexiune fiind conectată la ieșirea cu 6 pini a programatorului, cu următoarea distribuire a pinilor: 1(VPP/MCLR), 2(VDD Target), 3(VSS), 4(ICSPDAT/PGD), 5(ICSPCLK/PGC), 6(Auxiliar).

DEZVOLTARE SOFTWARE

Scopul acestei lucrări a fost de a construi o aplicație care citește o valoare de la un senzor de nivel pentru apă, iar apoi se poate acționa o pompă ce permite evacuarea apei în caz de inundație. Sistemul, bazat pe un microcontroller, o pompă și un senzor de nivel, citește valoarea trimisă de senzor, o compară cu o valoare tipică, stabilită software prin programarea microcontrollerului, iar dacă este depășită acea valoare atunci pompa este acționată pentru a evacua apa, și de asemenea este transmis un mesaj către un dispozitiv mobil prin intermediul unui modul bluetooth.

5.1 Schema logică

5.2 Programarea microcontroller-ului

Programarea microcontrollerului PIC16F887 se face cu ajutorul programatorului PICkit2 și a softului PICkit2 Programmer. După ce se realizează conexiunea programatorului atât cu calculatorul, cât și cu microcontrollerul, se va afișa următorul mesaj: “PICkit2 found and connected. PIC Device Found”.

Figură 32: PICkit2 Programmer conectat

Pentru a crea fișiereul hex, se compilează programul scris în MikroC, iar acesta este generat automat după compilare.

Dispozitivul fiind pregătit, se poate importa fișierul hex ce va fi scris în memoria microcontrollerului. Acest lucru se face prin comanda File-Import Hex. După ce programul este scris, va apărea mesajul “Programming Successful”.

Figură 34: Încarcarea programului cu PICkit2 Programmer

Pentru afișarea mesajelor pe LCD am legat pinii DB0-DB7, care reprezintă pinii de date ai ecranului LCD, la pinii RD0-RD7 de la microcontroller. Pinul 6 de la LCD, care reprezintă pinul de activare a semnalului, este conectat la pinul RC2 de la microcontroller, pinul 5 care reprezintă pinul de citire/scriere este conectat la RC1, iar pinul 4 care reprezintă ce tip de date sunt transmise, este conectat la RCO la microcontroller.

5.3 Afișarea mesajelor și activarea electropompei

Codul folosit pentru inițializarea LCD:

sbit LCD_RS at RD7_bit;

sbit LCD_EN at RD5_bit;

sbit LCD_D4 at RC3_bit;

sbit LCD_D5 at RC2_bit;

sbit LCD_D6 at RC1_bit;

sbit LCD_D7 at RC0_bit;

sbit LCD_RS_Direction at TRISD7_bit;

sbit LCD_EN_Direction at TRISD5_bit;

sbit LCD_D4_Direction at TRISC3_bit;

sbit LCD_D5_Direction at TRISC2_bit;

sbit LCD_D6_Direction at TRISC1_bit;

sbit LCD_D7_Direction at TRISC0_bit;

Pentru a scrie pe LCD:

void Lcd8_data_write1 (int linie, int coloana, int valoare)

{ WordToStr(valoare, text);

Lcd_Out(linie, coloana , text);

}

Atunci când modulul este alimentat, se va afișa mesajul “MONITORIZARE NIVEL”.

Lcd_Init();

Lcd_Cmd(_LCD_CLEAR); // Curățare display

Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off

Lcd_Out(1,3,"Monitorizare"); // Scriere text în primul rând

Lcd_Out(2,1,"–-Nivel––");

Delay_ms(3400);

Figură 35: Mesaj 1 LCD

Apoi este necesară calibrarea senzorului:

Lcd_Init();

Lcd_Cmd(_LCD_CLEAR); // ștergere display

Lcd_Cmd(_LCD_CURSOR_OFF); // cursor off

Lcd_Out(1,4,"CALIBRARE");

Delay_ms(3400);

Figură 36: Mesaj 2 LCD

Pentru citirea valorii de pe senzor am realizat o mediere a 20 de valori citite de pe convertorul analog digital:

for(i = 0; i<20; i++) //realizare mediere a 20 de valori

{

adc_reading= ADC_Read(0);

sum = sum + adc_reading;

Delay_ms(200);

}

first_value = sum / 20 ;

Lcd_Cmd(_LCD_CLEAR);

După ce s-a realizat și calibrarea senzorului, acesta verifică nivelul apei. Daca nu depășește valoarea stabilită software, atunci se aprinde un led albastru. Acest led este conectat la portul B, bitul 2.

if (adc_reading < 500)

{

Lcd_Out(1,1,"–MONITORIZARE–");

PORTA.f1 = 0; //pompă oprită

PORTB.f2 = 1; //led albastru aprins

PORTB.f3 = 0; //led roșu stins

PORTB.f4 = 0;

}

Lcd_Out(2,1,"sensor ");

Lcd8_data_write1(2,11,adc_reading); //afișare valaore senzor

}

}

Figură 37: Mesaj 3 LCD

Dacă nivelul este peste limita stabilită prin programare software, atunci electropompa va porni iar apa va fi evacuată. De asemenea se va aprinde și un led roșu ce indică faptul că pompa este pornită.

if (adc_reading > 500)

{

Lcd_Out(1,1,"–EVACUARE–");

PORTA.f1 = 1; //pompă pornită

PORTB.f2 = 0; //led albastru stins

PORTB.f3 = 1; //led roșu aprins

PORTB.f4 = 0;

Delay_ms(100);

Figură 38: Mesaj 4 LCD

Pentru comunicarea cu microcontrollerul este necesară setarea porturilor:

ANSEL = 0b00000001; //dezactivare intrări analogice

ANSELH = 0; //dezactivare intrări analogice

TRISA = 0b00000001;

TRISC = 0b10000000;

TRISB = 0b00000000;

TRISD = 0b00000000;

TRISE = 0b00000000;

De asemenea trebuiesc inițializați cu 0 biții folosiți pentru comanda pompei și pentru led-uri:

PORTA.f1 = 0; //port A, bit 1 pentru pompă

PORTB.f2 = 0; //port B, bit 2 pentru led albastru

PORTB.f3 = 0; //port B, bit 3 pentru led roșu

PORTB.f4 = 0; //port B, bit 4 pentru led alb

Setarea întreruperii pe timerul 1:

INTCON.GIE = 1; //activare întreruperi nemascate

INTCON.PEIE = 1; //setare PEIE

T1CON = 1; //activare Timer1

PIR1.TMR1IF = 0;

TMR1H = 0b11111111;

TMR1L = 0b10011011;

PIE1.TMR1IE = 0; // activare întrerupere pe Timer1

Pentru a realiza comunicația modulului cu telefonul mobil este necesară setarea modulului USART. Acest modul reprezintă o comunicație serială, periferică I/O. Conține toate generatoarele de ceas, regiștrii de “shitf-are” și bufferele de date necesare pentru a realiza un transfer de date independent de execuția programului. USART poate fi configurată ca un sistem asincron full-duplex sau sistem sincron half-duplex. Modul full-duplex este folosit pentru comunicații cu sisteme periferice, cum ar fi un calculator personal. Modul sincron half-duplex este folosit pentru comunicații cu module periferice, cum ar fi un convertor analog-digital sau digital-analog, memorii EEPROM sau alte microcontrollere. Aceste module nu au de obicei ceasuri interne pentru generarea ratei de eșantionare, deci necesită semnal de ceas extern provenit de la un dispozitiv master sincron.[5]

CONCLUZII

6.1 Studiu tehnico-economic. Oportunități de piață

Ca și consecință a degradării mediului, a efectelor de seră, a intervenției dăunătoare a omului asupra mediului au loc schimbări climatice tot mai bruște, topiri ale ghețarilor, ce duc la o creștere continuă a nivelului mărilor și oceanelor și automat la revărsarea apelor ce produc fenomenul de inundații. În urma acestui fenonem oamenii pot fi afectați din punct de vedere material, prin pagubele produse prin inundarea terenurilor și a caselor, din punct de vedere social prin posibilele pierderi de vieți omenești sau din punct de vedere ecologic, deoarece apele pot răspândi cu ele diverse boli.

Pentru lupta împotriva acestui fenomen se construiesc diguri și baraje pentru a proteja suprafețe de teren arabil sau localitățile de o posibilă viitură.

Soluția propusă în lucrarea de față reprezintă un ansamblu de monitorizare și de evacuare a apei în cazul în care este atins un anumit prag. Este un sistem cu dimensiuni destul de reduse, ce poate fi utilizat atât de oameni în cadrul locuințelor, dar poate fi folosit și în instalațiile industriale, în cazul defectătii unei conducte sau a unei defecțiuni în sistem.

Piesele necesare realizării acestui proiect au costat aproximativ 400 de RON, de aceea consider că acest sistem poate fi achiziționat de toate persoanele care doresc o siguranță, din punctul de vedere al producerii unei catastrofe, cauzată de apă. Cu anumite îmbunătățiri ce vor fi specificate în secțiunea Dezvoltări ulterioare, sistemul poate deveni unul foarte răspândit, atât la noi în țară, unde este cunoscută frecvență de apariție a fenomenului de inundație, cât și în strainătate.

O soluție deja existentă pe piață o reprezintă un sistem de monitorizare al nivelului, dar fără acționarea unei pompe.[18]

Sistemulul existent pe piață prezintă următoarele caracteristici:

tensiunea de ieșire este proporțională cu nivelul lichidului

nu se bazează pe conductivitate

design rezistent pentru o utilizare pe termen lung

formă compactă

măsurători precise

funcționează cu o multitudine de lichide

compatibil cu Arduino

consum redus de putere.[18]

O altă solție deja existentă pe piață o reprezintă un sistem de monitorizare de la distanță a nivelului de apă, produs de firma TruBlueTM.[20]

Figură 40: Sistem de monitorizare TruBlue[20]

Sistemul de monitorizare TruBlue este un sistem de colectare a datelor ce face monitorizarea nivelului de apă mai eficientă și mai puțin laborioasă decât metodele tradiționale de colectare a datelor pe baza telemetriei. Permite utilizatorilor să poată obțină valorile nivelului de la distanță, fără a mai necesita deplasarea individualizată la fiecare punct de colectare a datelor. Sistemul include componente ca: traductoare, senzori și stație de bază. Senzorii sunt instalați în partea superioară a puțurilor de apă sau pe o anumită suprafață ce se dorește a fi monitorizată. Cu până la 4 traductoare ce pot fi atașate, fiecare nod transmite datele colectate prin intermediul unui emițător de 900 MHz către o stație de bază, care poate colecta date de la mai mulți senzori. Acest sistem de monitorizare de la distanță oferă o abordare cuprinzătoare, sistematică de colectare și de gestionare a datelor.[20]

Caracteristici ale sistemului TruBlue:

măsurarea nivelului de apă la suprafață sau subteran și vizualizarea datelor pe un calculator sau un dispozitiv portabil

stația de bază comunică printr-un modem mobil cu aplicația TruTelTM

intervalele de extragere a datelor și de comunicare cu stația de bază pot fi alese prin programarea software.[20]

6.2 Dezvoltări ulterioare

Varianta finală a sistemului de monitorizare și evacuare a apei îndeplinește cerințele impuse la începutul proiectului. Cu ajutorul acestui sistem, ușor de instalat, se poate realiza prevenirea inundațiilor, fără a fi nevoie de cunoștințe în domeniu ale utilizatorului.

Dezvoltările ulterioare ce vor fi prezentate vor putea fi puse în aplicare într-o perioadă mai îndelungată de timp și de asemenea vor fi necesare resurse materiale mai mari.

Se pot face îmbunătățiri:

din punct de vedere hardware:

folosirea unei pompe de putere mai mare

înglobarea sistemului într-un sistem etanș, ce permite izolarea acestuia de mediul lichid

folosirea unui număr ridicat de senzori

crearea unei soluții de rezervă pentru alimentarea sistemului în cazul unei defecțiuni la rețeaua de energie electrică.

din punct de vedere software și al comunicației:

realizarea unei pagini web cu o bază de date ce conține utilizatorii sistemului

crearea unei comunicații cu un centru specializat în situații de urgență.

ANEXĂ

Aplicații folosite în realizarea proiectului de diplomă

MikroC

Eagle

Proteus 7 Professional

Adobe Photoshop 6

Microsoft Word

Codul sursă

unsigned int distanta=0;

float adc_reading;

char conversion[30];

char text[20];

void Lcd8_data_write1 (int , int , int );

––––––––––Inițializare LCD––––––––––

sbit LCD_RS at RD7_bit;

sbit LCD_EN at RD5_bit;

sbit LCD_D4 at RC3_bit;

sbit LCD_D5 at RC2_bit;

sbit LCD_D6 at RC1_bit;

sbit LCD_D7 at RC0_bit;

sbit LCD_RS_Direction at TRISD7_bit;

sbit LCD_EN_Direction at TRISD5_bit;

sbit LCD_D4_Direction at TRISC3_bit;

sbit LCD_D5_Direction at TRISC2_bit;

sbit LCD_D6_Direction at TRISC1_bit;

sbit LCD_D7_Direction at TRISC0_bit;

––––––––––-Scriere pe LCD––––––––––

void Lcd8_data_write1 (int linie, int coloana, int valoare)

{

WordToStr(valoare, text);

Lcd_Out(linie, coloana , text);

}

void main() {

––––––––––-Setarea Porturilor––––––––

ANSEL = 0b00000001; // dezactivez intrările analogice

ANSELH = 0; // dezactivez intrările analogice

TRISA = 0b00000001;

TRISC = 0b10000000;

TRISB = 0b00000000;

TRISD = 0b00000000;

TRISE = 0b00000000;

PORTD =0;

––––––––Inițilizare biți cu 0–––––––––-

PORTA.f1 =0;

PORTB.f2 = 0;

PORTB.f3 = 0;

PORTB.f4 = 0;

––––––––SETĂRI ÎNTRERUPERE TIMER1––––––––

INTCON.GIE = 1; //activare întreruperi nemascate

INTCON.PEIE = 1; //setare PEIE

T1CON = 1; //activare Timer1

PIR1.TMR1IF = 0;

TMR1H = 0b11111111;

TMR1L = 0b10011011;

PIE1.TMR1IE = 0; // activare întrerupere pe Timer1

PORTA.f1 =0;

Lcd_Init();

Lcd_Cmd(_LCD_CLEAR); // ștergere display

Lcd_Cmd(_LCD_CURSOR_OFF); // cursor off

Lcd_Out(1,3,"Monitorizare"); // scriere text în primul rând

Lcd_Out(2,1,"–-Nivel––");

Delay_ms(3400);

PORTB.f2 = 1;

PORTB.f3 = 1;

PORTB.f4 = 1;

Delay_ms(2400);

PORTB.f2 = 0;

PORTB.f3 = 0;

PORTB.f4 = 0;

PIE1.TMR1IE = 1;

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4,"CALIBRARE");

for(i = 0; i<20; i++)

{

adc_reading= ADC_Read(0);

sum = sum + adc_reading;

Delay_ms(200);

}

first_value = sum / 20 ;

Lcd_Cmd(_LCD_CLEAR);

while (1) {

adc_reading= ADC_Read(0);

if (adc_reading > 500) // depășirea nivelului stabilit

{

Lcd_Out(1,1,"–EVACUARE–");

PORTA.f1 =1;

PORTB.f2 = 0;

PORTB.f3 = 1;

PORTB.f4 = 0;

Delay_ms(100);

}

if (adc_reading == 500)

{

PORTA.f1 =1;

PORTB.f2 = 0;

PORTB.f3 = 1;

PORTB.f4 = 0;

Delay_ms(1000);

}

if (adc_reading < 500)

{

Lcd_Out(1,1,"–MONITORIZARE–");

PORTA.f1 =0;

PORTB.f2 = 1;

PORTB.f3 = 0;

PORTB.f4 = 0;

}

Lcd_Out(2,1,"senzor ");

Lcd8_data_write1(2,11,adc_reading);

}

}

–––––––Înrerupere generată pe TIMER1––––––––-

void interrupt ()

{

distanta++;

if (distanta <= 30800)

{

PORTB.f4 = 0;

}

if (distanta > 30800 && distanta <= 30890)

{

PORTB.f4 = 1;

}

if (distanta > 30890)

distanta =0;

PIR1.TMR1IF = 0;

TMR1H = 0b11111111;

TMR1L = 0b10011011;

}

BIBLIOGRAFIE:

[1] http://www.habitat.ro/files/resurse/inundatii_-_cauze,_sfaturi,_masuri.pdf

– Accesat în data de 12.11.2013

[2 ] http://www.isudb.ro/index.php?pagina=inundatii –Accesat în data de 12.11.2013

[3] P.N Borza, C. Gerigan, P. Ogruțan, Gh. Toacșe, Microcontrollere – Aplicații, Editura Tehnică, București, 2000

[4] Mihai Romanca, Suport de curs Microprocesoare și microcontrollere, 2013

[5]

Fernando E. Valdes, R. Pallas-Areny, Microcontrollers-Fundamentals and Applications with PIC

[6] http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf – Accesat în data de 10.12.2013

[7] http://www.bluetooth.com/Pages/Fast-Facts.aspx – Accesat în data de 12.03.2014

[8] http://www.radio-electronics.com/info/wireless/bluetooth/radio-interface-modulation.php – Accesat în data de 4.03.2014

[9] http://ww1.microchip.com/downloads/en/DeviceDoc/rn-42-ds-v2.32r.pdf – Accesat în data de 4.03.2014

[10] http://www.mikroe.com/pdf/mikroc/mikroc_manual.pdf – Accesat în data de 10.12.2013

[11] http://ww1.microchip.com/downloads/en/DeviceDoc/51553E.pdf – Accesat în data de 10.12.2013

[12] http://seagrant.uaf.edu/bookstore/boatkeeper/water-pumps.pdf – Accesat în data de 26.02.2014

[13] http://test.mrxl.ro/joomla/images/Cursuri/uem/Cap4_1.pdf – Accesat în data de 26.02.2014

[14]http://www.grundfos.com/content/dam/Global%20Site/Industries%20%26%20solutions/Industry/pdf/The_Centrifugal_Pump.pdf – Accesat în data de 12.03.2014

[15] http://www.cadsoft.de/wp-content/uploads/2011/05/tutorial_en.pdf – Accesat în data de 20.03.2014

[16] Dan Lozneanu, Suport de laborator

Sisteme cu calculator încorporat, 2013

[17] http://www.tme.eu/en/Document/2b46fe537a0f5e5dade492298d7862b6/RC1602D-GHY-ESX.pdf – Accesat în data de 4.03.2014

[18] http://www.vegetronix.com/Products/AquaPlumb/ – Accesat în data de 15.04.2014

[19] http://pdf1.alldatasheet.com/datasheet-pdf/view/99450/FAIRCHILD/KA7812.html – Accesat în data de 4.03.2014

[20] http://www.meas-spec.com/product/waterresources/TRMS.aspx# – Accesat în data de 15.04.2014

[21] http://www.tme.eu/en/Document/53481d6ef60900b7bb1011c164e7f0a0/rc1602b-biw-esx.pdf – Accesat în data de 11.04.2014

[22]http://www.robotics.ucv.ro/flexform/aplicatii_ser2/Mecatronica%20I/Lica%20Ionel%20Ovidiu-Microcontrolere.%20Microcontrolerul%20PIC%2016F84/pag2.html – Accesat în data de 27.02.2014

[23] http://images.google.com/imghp

BIBLIOGRAFIE:

[1] http://www.habitat.ro/files/resurse/inundatii_-_cauze,_sfaturi,_masuri.pdf

– Accesat în data de 12.11.2013

[2 ] http://www.isudb.ro/index.php?pagina=inundatii –Accesat în data de 12.11.2013

[3] P.N Borza, C. Gerigan, P. Ogruțan, Gh. Toacșe, Microcontrollere – Aplicații, Editura Tehnică, București, 2000

[4] Mihai Romanca, Suport de curs Microprocesoare și microcontrollere, 2013

[5]

Fernando E. Valdes, R. Pallas-Areny, Microcontrollers-Fundamentals and Applications with PIC

[6] http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf – Accesat în data de 10.12.2013

[7] http://www.bluetooth.com/Pages/Fast-Facts.aspx – Accesat în data de 12.03.2014

[8] http://www.radio-electronics.com/info/wireless/bluetooth/radio-interface-modulation.php – Accesat în data de 4.03.2014

[9] http://ww1.microchip.com/downloads/en/DeviceDoc/rn-42-ds-v2.32r.pdf – Accesat în data de 4.03.2014

[10] http://www.mikroe.com/pdf/mikroc/mikroc_manual.pdf – Accesat în data de 10.12.2013

[11] http://ww1.microchip.com/downloads/en/DeviceDoc/51553E.pdf – Accesat în data de 10.12.2013

[12] http://seagrant.uaf.edu/bookstore/boatkeeper/water-pumps.pdf – Accesat în data de 26.02.2014

[13] http://test.mrxl.ro/joomla/images/Cursuri/uem/Cap4_1.pdf – Accesat în data de 26.02.2014

[14]http://www.grundfos.com/content/dam/Global%20Site/Industries%20%26%20solutions/Industry/pdf/The_Centrifugal_Pump.pdf – Accesat în data de 12.03.2014

[15] http://www.cadsoft.de/wp-content/uploads/2011/05/tutorial_en.pdf – Accesat în data de 20.03.2014

[16] Dan Lozneanu, Suport de laborator

Sisteme cu calculator încorporat, 2013

[17] http://www.tme.eu/en/Document/2b46fe537a0f5e5dade492298d7862b6/RC1602D-GHY-ESX.pdf – Accesat în data de 4.03.2014

[18] http://www.vegetronix.com/Products/AquaPlumb/ – Accesat în data de 15.04.2014

[19] http://pdf1.alldatasheet.com/datasheet-pdf/view/99450/FAIRCHILD/KA7812.html – Accesat în data de 4.03.2014

[20] http://www.meas-spec.com/product/waterresources/TRMS.aspx# – Accesat în data de 15.04.2014

[21] http://www.tme.eu/en/Document/53481d6ef60900b7bb1011c164e7f0a0/rc1602b-biw-esx.pdf – Accesat în data de 11.04.2014

[22]http://www.robotics.ucv.ro/flexform/aplicatii_ser2/Mecatronica%20I/Lica%20Ionel%20Ovidiu-Microcontrolere.%20Microcontrolerul%20PIC%2016F84/pag2.html – Accesat în data de 27.02.2014

[23] http://images.google.com/imghp

ANEXĂ

Aplicații folosite în realizarea proiectului de diplomă

MikroC

Eagle

Proteus 7 Professional

Adobe Photoshop 6

Microsoft Word

Codul sursă

unsigned int distanta=0;

float adc_reading;

char conversion[30];

char text[20];

void Lcd8_data_write1 (int , int , int );

––––––––––Inițializare LCD––––––––––

sbit LCD_RS at RD7_bit;

sbit LCD_EN at RD5_bit;

sbit LCD_D4 at RC3_bit;

sbit LCD_D5 at RC2_bit;

sbit LCD_D6 at RC1_bit;

sbit LCD_D7 at RC0_bit;

sbit LCD_RS_Direction at TRISD7_bit;

sbit LCD_EN_Direction at TRISD5_bit;

sbit LCD_D4_Direction at TRISC3_bit;

sbit LCD_D5_Direction at TRISC2_bit;

sbit LCD_D6_Direction at TRISC1_bit;

sbit LCD_D7_Direction at TRISC0_bit;

––––––––––-Scriere pe LCD––––––––––

void Lcd8_data_write1 (int linie, int coloana, int valoare)

{

WordToStr(valoare, text);

Lcd_Out(linie, coloana , text);

}

void main() {

––––––––––-Setarea Porturilor––––––––

ANSEL = 0b00000001; // dezactivez intrările analogice

ANSELH = 0; // dezactivez intrările analogice

TRISA = 0b00000001;

TRISC = 0b10000000;

TRISB = 0b00000000;

TRISD = 0b00000000;

TRISE = 0b00000000;

PORTD =0;

––––––––Inițilizare biți cu 0–––––––––-

PORTA.f1 =0;

PORTB.f2 = 0;

PORTB.f3 = 0;

PORTB.f4 = 0;

––––––––SETĂRI ÎNTRERUPERE TIMER1––––––––

INTCON.GIE = 1; //activare întreruperi nemascate

INTCON.PEIE = 1; //setare PEIE

T1CON = 1; //activare Timer1

PIR1.TMR1IF = 0;

TMR1H = 0b11111111;

TMR1L = 0b10011011;

PIE1.TMR1IE = 0; // activare întrerupere pe Timer1

PORTA.f1 =0;

Lcd_Init();

Lcd_Cmd(_LCD_CLEAR); // ștergere display

Lcd_Cmd(_LCD_CURSOR_OFF); // cursor off

Lcd_Out(1,3,"Monitorizare"); // scriere text în primul rând

Lcd_Out(2,1,"–-Nivel––");

Delay_ms(3400);

PORTB.f2 = 1;

PORTB.f3 = 1;

PORTB.f4 = 1;

Delay_ms(2400);

PORTB.f2 = 0;

PORTB.f3 = 0;

PORTB.f4 = 0;

PIE1.TMR1IE = 1;

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4,"CALIBRARE");

for(i = 0; i<20; i++)

{

adc_reading= ADC_Read(0);

sum = sum + adc_reading;

Delay_ms(200);

}

first_value = sum / 20 ;

Lcd_Cmd(_LCD_CLEAR);

while (1) {

adc_reading= ADC_Read(0);

if (adc_reading > 500) // depășirea nivelului stabilit

{

Lcd_Out(1,1,"–EVACUARE–");

PORTA.f1 =1;

PORTB.f2 = 0;

PORTB.f3 = 1;

PORTB.f4 = 0;

Delay_ms(100);

}

if (adc_reading == 500)

{

PORTA.f1 =1;

PORTB.f2 = 0;

PORTB.f3 = 1;

PORTB.f4 = 0;

Delay_ms(1000);

}

if (adc_reading < 500)

{

Lcd_Out(1,1,"–MONITORIZARE–");

PORTA.f1 =0;

PORTB.f2 = 1;

PORTB.f3 = 0;

PORTB.f4 = 0;

}

Lcd_Out(2,1,"senzor ");

Lcd8_data_write1(2,11,adc_reading);

}

}

–––––––Înrerupere generată pe TIMER1––––––––-

void interrupt ()

{

distanta++;

if (distanta <= 30800)

{

PORTB.f4 = 0;

}

if (distanta > 30800 && distanta <= 30890)

{

PORTB.f4 = 1;

}

if (distanta > 30890)

distanta =0;

PIR1.TMR1IF = 0;

TMR1H = 0b11111111;

TMR1L = 0b10011011;

}

Similar Posts