SPECIALIZAREA: INFORMATICĂ APLICATĂ LUCRARE DE DIPLOMĂ PROIECTAREA ȘI REALIZAREA UNUI SISTEM DE MONITORIZARE ȘI MENTENANȚĂ A UNUI ACVARIU Coordanor… [628252]
UNIVERSITATEA TEHNICĂ „Gheorghe Asachi” IAȘI
FACULTATEA DE AUTOMATICĂ ȘI CALCULATOARE
DOMENIUL: INGINERIA SISTEMELOR
SPECIALIZAREA: INFORMATICĂ APLICATĂ
LUCRARE DE DIPLOMĂ
PROIECTAREA ȘI REALIZAREA UNUI SISTEM
DE MONITORIZARE ȘI MENTENANȚĂ A UNUI
ACVARIU
Coordanor științific Absolvent: [anonimizat], 2019
2 CUPRINS
Capitolul 1. Introducere ………………………………………………………………………………….. 3
Capitolul 2. Componente hardware utilizate ……………………………………………………… 6
2.1. Ceasul de timp real DS1307 ……………………………………………………………….. 6
2.1.1. Avantajele utilizării DS1307 -ului …………………………………………………….. 6
2.1.2. Descrierea pinilor DS1307 -ului ……………………………………………………….. 6
2.1.3. Regiștrii ceasului de timp real ………………………………………………………….. 8
2.1.4. Magistrala I2C ……………………………………………………………………………….. 9
2.2. Plăcile de forță POLOLU 2961 …………………………………………………………. 11
2.3. Modulul LCD cu Butoane ………………………………………………………………… 14
2.4. Senzororul de temperatură DS18B20 …………………………………………………. 16
2.5. Pompa cu motor de curent continuu …………………………………………………… 17
2.6. Sonda de pH …………………………………………………………………………………… 18
Capitolul 3. Proiectarea și realizarea plăcii sistemului ………………………………………. 20
3.1. Schema electrică a plăcii ………………………………………………………………….. 22
3.2. Proiectarea cablajului imprimat ………………………………………………………… 24
Capitolul 4. Arhitectura software ……………………………………………………………………. 26
4.1. Facilită țile sistemului de operare în timp real FreeRTOS ……………………… 26
4.2. Testări software realizate …………………………………………………………………. 28
Capitolul 5. Rezultate experimentale ………………………………………………………………. 35
Capitolul 6. Concluzii …………………………………………………………………………………… 39
Bibliografie ……………………………………………………………………………………………………. 40
ANEXE …………………………………………………………………………………………………………. 41
3 Capitolul 1. Introducere
Viețuitoarele acvatice dintr -un acvariu sunt foarte ușor afectate de schimbările
parametrilor acvariului, cum ar fi temperatura, nivelul pH -ului și iluminatul. Acești parametri
sunt foarte importanți pentru supraviețuirea vieții acvatice din acvariu. Mai mult, pentru
acvariile de mari dimensiuni, supravegherea umană este adesea ineficientă. Progresul
tehnologiei în domeniul microcontroller -elor, calculatoarelor dar și al conceptului de IoT
(“Internet of Things” – engl.) se reflectă din ce în ce mai mult asupra tuturor domeniilor,
inclusiv asupra acvaristicii. Informațiile privind parametrii importanți ai apei dintr- un acvariu
trebuie obținute rapid, prompt, eventual în timp real, altfel riscul ca viețuitoarele dintr -un
acvariu să fie afectate și să sufere crește foarte mult. Rolul unui sistem capabil să
monitorizeze și să controleze parametrii unui acvariu devine cu atât mai important atunci când intervalele de valori permise pentru aceștia sunt mici sau câ nd acvariul este nesuprav egheat
mult timp.
Dacă ne dorim să avem și plante corect crescute și frumoase în acvariu atunci avem
nevoie de iluminare, adiție de CO
2(dioxid de carbon) și administrarea de fertilizanți cu
micronutrienți și macronutrienți. Cel mai importnant rol în creșterea plantelor îl reprezintă
fertilizarea. Plantele din acvariu consumă foarte repede subsanțele nutritive din apă, iar dacă
nu primesc fertilizan ți acestea încep sa moară, de aceea ar trebui să intervenim pentru a nu
pierde plantele. Se poate spune că fertilizanții sunt hrana plantelor. Pentru creșterea și
înmulțirea plantelor din acvariu, pe l ângă fertilizare, trebuie să existe și o iluminare
corespunzătoare și o adiție de CO 2. Dacă CO 2-ul nu va fi suficient , plantele din acvariu nu vor
crește și vor apăr ea dezechilibrări deoarece nu vor consuma fertilizanții introduși. Adiția de
dioxid de carbon prezintă numeroase avantaje atât pentru plante cât și pentru pești: ajută la
reglarea valorii pH -ului, sărurile și mineralele se dizolvă mai rapid fiind mai ușor asimilate de
către plante și pești, multe specii de pești preferă apa ușor acidulată deoarece are un efect pozitiv asupra pielii lor, se inhibă dezvoltarea algelor și se evită depuneri le de calciu pe sticla
acvariului. Iluminatul este și el la rândul său important deoarece, dacă nu este efectuat
corespunzător , poate genera o creștere abundentă a algelor și mărirea duratei de întreținere a
acvariului. În medie lum ina trebuie aprinsă 8 -10 ore pe zi și dacă este posibil se împarte acest
interval în două cu o pauză de 2- 4 ore.
Au fost făcute eforturi de a se crea sisteme care să se ocupe cu controlul
temperaturii, al pH -ului apei, cu iluminatul acvariului și chiar și cu hrănitul peștilor. Aceste
sisteme sunt independente, iar unele dintre ele sunt destul de costisitoare. Mai mult, indiferent
de parametrii monitorizați și controlați, majoritatea dintre ele nu oferă conectivitate prin
Internet, lucru foarte necesar în anumite situații.
Un sistem ce se ocupă de controlul termic, hrănirea peștilor și tratarea apei este cel
realizat de [1]. În acest sistem este folosit calcul atorul personal ca și control ler pentru
gestionarea senzorilor. Toți s enzorii au fost conecta ți la sistemul de control al calculatorului
prin intermediul unui modul ADC(“Analog- to-Digital C onverter ”-engl. ), ce convertește
semnalul analogic de la senzori în semnal digital astfel încât calculatorul să poată citi și clasifica valorile. Apoi, prin int ermediul interfeței VB(“ Visual Basic” -engl. ), clientul
calculator poate comunica cu serverul calculator pentru a monitoriza și controla acvariul pe baza datelor primite de la senzori. Calaculatorul are o putere de procesare mai mare și poate manipula mai r apid informa țiile primite de la senzori comparativ cu un microcontroller care
are o putere de procesare mai limitată. Cu toate acestea, există și câ teva slăbiciuni. În primul
rând costul produsului este destul de ridicat având în vedere că produsu l este al cătuit și dintr –
un calculator ce controlează și gestionează întreg sistemul. În al doilea rând, utilizarea calculatorului face dificilă mutarea produsului.
4 O altă lucrare a constat în proiectarea și controlul unui sistem de gestionare a apei
dintr -un acv ariu folosind PLC -uri(“ Programmable Logic Controller ”-engl.)[2]. Acest proiect
constă în senzori ce sunt controlați cu PLC -uri. Folosind bluetooth -ul sau tehnologia wireless ,
acesta p oate conecta sau controla PLC -urile de la un calculator. În acest proiect PLC -ul este
creierul ce poate controla întreg sistemul.
Totodată a mai fost proiec tat un sistem responsabil cu hr ănirea autoamtă a
peștilor[3] . Acesta utilizează un hrănitor automat ce combină un sistem mecanic și unul
electr ic pentru a forma un dispozitiv ce scutește deținătorul acavriului de această
responsabilitate. Un astfel de dispozitiv este folositor pe ntru deținătorii de pești deoarece își
pot permite să părasescă domiciliul pentru o perioadă îndelungată. De asemenea, sistemul
monitorizeză și temperatura apei. Sistemul este compus dintr -un recipient pentru hrana
peștilor , un suport, un motor, un senzor de temperatu ră și GSM( “Global System for Mobile ”-
enfl). Dispozitivul va hrănii peștii prin eliberarea hranei din recipi ent, printr- un orificiu.
Dimensiunea orificiului este controlată de o piedică conec tată la motor. Pentru a controla
numărul de hrăniri la un interval de timp s -a folosit un cronometru. Dacă nivelul hranei din
recipient scade sub un anumit nivel, utilizator ul este notificat printr- un mesaj, astfel încât
acesta să asigure umplerea recipientului.
Sistem ul propus de [4] este unul pentru monitorizarea calității apei, nivelul apei din
interiorul acvariului, precum și hrănirea peștilor în mod automat. Scopul principal al
cercetărilor pentru acest proiect a fost crearea și menținerea unui sistem de management al
apei dintr -un ac variu. Și în acest proiect PLC -ul este creierul ce controlează sistemul.
Un sistem ce se ocupă cu monitorizarea și întreținere a apei este și cel prezentat de
[5]. Acest sistem este compus dintr -o placă cu un microcontroller , cu un modul ADC extern,
la care sunt conectați toți senzorii sistemului: senzorul de temperatură, senzorul de turbiditate și senzorul de conductivitate. Toat e informațiile despre calitatea apei vor fi colectate de către
placa microcontroller- ului și vor fi stocate în Cloud sau pe un card SD (“Secure Digital” –
engl.) . Un alt sistem ce monitorizează calitataea apei a fost dezvoltat folosind un sistem de
decizie fuzzy [6]. Avantajul acestui sistem este faptul că el poate lua o decizie adecvată bazată
pe datele primite de la senzori. Un sistem de acest timp este important deoarece omul nu poate monitoriza în permanență acvacultura, iar în cazul în care vor exista situații critice, omul ar putea lua decizii greșite. Acest sistem, în cazul în care vor exista modificări, va putea să le monitorizeze și să ia acțiunile adecvate. Dezavantajul acestui sistem este faptul că fermierii
de acvacultură primesc doar rezultatul de luare a deciziei, fără a fi informați de temperatura
apei sau despre pH -ul apei.
De asemenea, exist ă un sistem propus de [ 7] pentru monitorizarea acvariilor prin
utiliz area unui Raspberry Pi. Rolul acestui sistem este de a mo nitoriza acvariul prin
intermediul unui server de baze de date, sistem ce are incluse hrănirea peștilor, verificarea
temperatirii apei, nivelul apei și schimbarea automată a apei. Dacă vor exista situații de urgență, precum scăderea nivelului de apă sub limita stabilită, sistemu l va declanșa o alarmă
și va trimite un mesaj pentru a notif ica utilizatorul. Pentru a verifica starea acvariului a fost
folosit ă ca placă centrală un Raspberry Pi ce colectează date de la senzori, le încarcă în baza
de date, și apoi le afișează pe propriul site.
Un alt sistem este cel propus de [ 8] ce gestionează și întreține apa rece dintr -un
acvariu. S -au utilizat diferiți senzori pentru construirea unui sistem de gestionare a apei. Un
prim senzor ar fi cel destinat nivelului apei folosit pentru a iden tifica dacă apa introdusă de
către pompă a ajuns la nivelul dorit, iar în cazul afirmativ pompa se va opri. De asemnea, s -a
folosit și un senzor pentru turbiditate ce a fost conectat la pompa de apă. Senzorul va deschide pompa de apă dacă detectează o clar iate a apei mică. Un ultim senzor folosit este cel de
temperatură. Toți senzorii sunt integrați la un microcontroller. Pentru mo nitorizarea datelor
5 obținute de la senzori s -a folosit un server PHP (“Hypertext Preprocessor ”-engl.) , iar datele
sunt actualizate la fiecare oră.
Scopul lucrării este realizarea unui sistem de timp real destinat monitorizării și
mentenanței unui acvariu. Principalul obiectiv al acestui sistem este acela de a- i ajuta pe cei
ce au dificultăți în mentenanța acvariilor și care nu au timp suficient pentru a se ocupa de
această responsabilitate. Având în vedere ca lumea se îndreaptă spre automatizare, iar oamenii
alocă din ce în ce mai puțin timp pentru activitățile zilnice, sistemul propus va fi unul
automat, astfel încât să reducă semnificativ timpul alocat pentru mentenanța acvariilor. De
asemenea, utilizatorul va putea părăsi domiciliul pentru o perioadă mai mare de timp, fără să
își facă griji pentru peștișorii din acavriu și fără a fi necesar să găsească alte persoane pentru a
avea grijă de aceș tia. În același timp , utilizatorul va putea accesa pagina web pe care vor fi
afișate toate informațiile sisetmului pentru a se asigura că totul este în regulă cu acvariul. Sistemul va fi compus dintr -o placă principală cu un mic rocontroller dsPIC și un
modul NodeMCU de tip IoT ce comunică prin interfața serială. Placa principală va fi
proiectată și realizată astfel încât să ofere flexibilitate în d ezvoltarea modulară a sistemului .
Aplicația de pe microcontroller -ul dsPIC va fi bazată pe sistemul de operare de timp real
FreeRTOS (“Real Time Operating System” – engl) . Sistemul va oferi facilități privind
fertilizarea, hrănirea și iluminarea automată a acvariului, va furniza informații despre
temperatura apei , fără controlul acesteia deoarece există deja încălzitoare la un preț accesibil
pe piață , și va control a pH -ul apei prin adiție de CO
2.
Sistemul pentru monitorizarea și mentenanța acvariilor va funcționa cu ajutorul unui
ceas de timp real (R TC – “Real Time Clock” – engl.). Datorită RTC -ului, sistemul va căpăta o
flexibilitate suplimentară ce ajută la temporizarea lui. O facilitate ce va fi controlată în funcție
de RTC este iluminarea. Aceasta va funcționa pe baza a două intervale active de timp. O altă
facilitate va fi hrănire a, ce se va face automat la o oră după activarea primul interval de
iluminare , iar o ultimă facilitate ce va fi implementată cu ajutorul RTC -ului este fertilizarea cu
micronutrienți și macronutrienți. Utilizatorul va seta orele de funcționare și cantitatea de
fertilizanți prin intermediul unei interf ețe grafic e. Toate informațiile din sistem vor fi afișate
pe o pagină web, iar cu ajutorul tehnologiei IoT va exist a posibilitatea de a modifica de la
distanță setările sistemului.
Lucrarea este structurată pe 6 capitole. În capitolul următor s -au prezentat
componentele folosite în cadrul proiectului: ceas de timp real DS1307, două placi de forță
POLOLU 2961 , un modul LCD cu butoane, un senzor de temperatură DS18B20, o sondă de
pH și două pompe. Capitolul trei prezintă schema electrică și cablajul plăcii realizate pentru
sistemul de monitorizare și mentenanță a unui ac variu , urmând ca în capitolul patru să se
detalieze soft -ul folosit pentru aceasta. În capitolul cinci se va prezenta realizarea prototipului
și testarea finală în urma integrării proiectului, iar în ultimul capitol se vor prezenta
concl uziile în urma realizării acestei lucrări.
6 Capitolul 2. Componente hardware utilizate
2.1. Ceas ul de timp real DS1307
Ceasul de timp real DS1307 este un ceas/calendar în tot alitate codat în BCD(“ Binary –
Coded Decimal ” – engl.) , funcționând cu un voltaj scăzut (5V) . Adresa și data sunt transferate
serial printr -o interfață I2C (“Inter- Integrated Circuit” – engl. ). Acest a poate furniza informații
despre secunde, minute, ore, zile, dată, lună și an. La sfârșitul lunii data este automat
actualizată pentru lunile cu mai puțin de 31 de zile, incluzând anii bisecți. Ceasul funcționează în format de 24 de ore sau 12 ore cu indicator AM/PM. DS1307 are încorporat un circuit ce detectează întreruperile de curent și activează automat alimentarea suplimentară. În acest timp o parte din operații, precum și contorizarea timpului, funcționează cu ajutorul alimentării suplimentare.
2.1.1. Avantajele utilizării DS1307 -ului
Capsula DS1307 prezintă următoarele avantaje și caracteristici :
• Administrează în totalitate funcțiile de contorizat timpul.
o Ceasul de timp real contorizează secunde, minute, ore, ziua lunii, luna,
ziua din săptămână, anul ș i anul bisect, valid până in anul 2100
o 56-Byte, Baterie sup limentară, RAM cu scop general și număr
nelimitat de scrieri
o Semnal dreptunghiular pentru ieșire, programabil
• Port serial simplu ce interfațează majoritatea microcontroller- elor
o Interfață serială I
2C
• Operațiile de putere redusă extind durata de execuție
o Utilizează mai puțin de 500nA atunci când funcționează cu bateria suplimentară
o Detecție automată a căderii de tensiune
• 8 pini DIP(“Dual In -line P ackage” – engl.) sau 8 pini SOIC(“ Small Outline
Integrated Circuit” – engl.) ce minimizează spațiul necesar
• Temperatură industrială opț ională :
o Sunt suportate de la – 40
o C până la +85o C
2.1.2. Descrierea pinilor DS1307 -ului
Ceasul de timp real DS1307 este unul de putere scăzută, codat în binar, având 56 bytes
de NV SRAM(“ Non-Volatile Static Random -Access Memory ” – engl.) [9]. Ceasul/calendarul
oferă informații î n privința secundelor, minutelor, orelor, zilelor, lunilor și al anilor. Data de la
sfârșitul lunii este automat ajustată pentru lunile cu mai puțin de 31 de zile, incluzând anii bisecți. DS1307 operează ca un dispozitiv “slave ” pe seriala I
2C. Accesul este permis prin
implementarea unei condiții de START ce oferă un cod de identificare al dispozitivului urmat
de un registru de adrese. Registrele ulterioare pot fi accesate secvențial până ce condiția de
STOP este executată. În momentul în care alimentarea V CC scade sub 1.25 x V BAT,
dispozitivul întrerupe accesul în rulare și resetează adresa sa “counter”. Intr ările dispozitivului
nu sunt recunoscut e în acest timp pentru a preveni canti tăți eronate de scriere pe dispozitiv de
la sistemul de toleranță. Odată ce alimentarea V CC scade sub nivelul V BAT, dispozitivul
7 comută spre un mod de curent redus cu baterie de rezervă. Odată cu revenirea la starea
inițială, dispozitivul comută de la bate rie la alimentarea V CC în momentul în care V CC este
peste V BAT +0.2V și recunoaște intrările atunci când V CC este mai mare de 1.25 x V BAT.
În Tabelul 2 -2-1 este prezentată descrierea pinilor ceasului de timp real.
Pini Nume Descriere
1
X1 Conexiunile pentru Cristalul de Quartz standard 32.768 kHz.
Oscilatorul intern este proiectat pentru operațiuni c u un cristal de
capacitate 12.5 pF. X1 este intrare pentru oscilator și opțional poate fi
conectat la un oscilator extern de 32.768kHz. Ieșirea oscilatorului
intern, X2, este transferată dacă un oscilator extern este conectat la X1.
2
X2
3
V
BAT Intrarea alimentării suplimentare pentru orice celula cu Litiu 3V
Standard sau altă sursă de energie. Voltajul bateriei trebuie să fie ținut între limite de minim și maxim pentru o funcționare adecvată. Diodele în serie dintre baterie și pinul de V
BAT pot împiedica buna funcționare.
Dacă o alimentare suplimentară nu este necesară, V BAT trebuie legat la
masă. Voltajul punctului de pierdere a put erii nominale (V PF – „Power
Fail”- engl.) în momentul în care accesul la ceasul de timp real și user -ul
RAM este respins, este setat de circuitul intern ca 1.25 x V BAT nominal.
O baterie de litiu cu 48 mAh sau mai mare va suplimenta
DS1307 pentru o durată d e peste 10 an i, in absența puterii, la +25oC.
4 GND Masă
5
SDA Intrare/Ieșire pentru Datele Seriale. SDA este data ca
intrare/ieșire pentru interfața serială I2C. Pinul SDA este deschis și
necesită un rezistor de pull -up extern. Voltajul de pull -up poate fi de
până la 5.5V, indiferent de voltajul lui V CC.
6
SCL Intrarea serială pentru Ceas. SCL este intrarea ceasului pentru
interfața I2C și este folosită pentru a sincroniza "mișcarea" datelor pe
interfața serială. Voltajul de pull- up poate fi de pâ nă la 5.5V, indiferent
de voltajul lui V CC.
7
SQW/OUT Semnal dreptunghiular/ Driverul de ieșire. Când este activat,
bitul SQWE este setat pe 1, pinul SQW/OUT afișează la ieșire una din cele 4 semnale dreptuhnghiulare, la frecvențele 1Hz, 4kHz, 8kHz, 32kHz. Pinul SQW/OUT este deschis ș i necesită un rezistor de pull -up
extern. SQW/OUT funcționează cu oricare din V
CC sau V BAT aplicat.
Voltajul de pull- up poate fi de până la 5.5V, indiferent de voltajul lui
VCC. Dacă nu este folosit, acest pin poate fi lăsat neconectat.
8
VCC Sursa principală de alimentare. Când voltajul este aplic at în
limitele normale, dispozitivul este accesibil în totalitate, iar datele pot fi citite și scrise. Când este conectată o alimentare suplimentară la dispozitiv, și V
CC este mai mic decât VTP, citirile și scrierile sunt
împiedicate. În același timp conto rizarea timpului funcționează
neafectată de voltajul redus la intrare.
Tabel 2 -2-1 Pinii ceasului de timp real
8 2.1.3. Regiștrii ceasului de timp real
Regiștrii ceasului de timp real sunt amplasați în locațiile de adresă de la 00h pana la
07h. Regiștrii RAM sunt amplasați în locațiile de adresă de la 08h pana la 3Fh. Pe parcursul
accesului multi -octet, în momentul î n care pointer -ul adresei ajunge la adresa 3Fh, sfârșitul
spațiului RAM, revine la adresa 00h, începutul spațiului de ceas, conform [9].
Informațiile despre timp și calendar sunt obținute prin citirea adecvată a octeților
regiștrilor. În Tabelul 2-1-3-1 sunt specificați regiștrii ceasului de timp real.
Tabel 2 -1-3-1 Regiștrii ceasului de timp real
1. Regiștrii de ceas și calendar
Conținutul regiștrilor de timp și calendar sunt codați în format BCD. Timpul și
calendarul sunt setate sau inițializate prin scrierea adecvată a octeților regiștrilor. Regiștrii pentru zilele săptămânii se incrementează la miezul nopții. Valorile ce coresu nd zilelor
săptămânii sunt definite de către utilizator, însă trebuie sa fie secvențiale, mai precis dacă 1 este atribuit zilei de luni, atunci restul valorilor vor fi atribuite, în mod crescător, următoarelor zile continuând cu marți, miercuri, etc.. Înre gistrările de timp și dată ilogice vor rezulta într- o
operație nedefinită. Bitul 7 al registrului 0 reprezintă bitul pentru întreruperea ceasului(CH). În momentul setării acestui bit cu valoarea 1 oscilatorul devine inactiv. Atunci când valoarea revine la 0 oscilatorul se activează. La prima aplicare a alimentării dispozitivului, regiștrii de
timp și dată sunt resetați tipic la 01/01/00 01 00:00:00 (luna/zi/an ziua -saptămânii
ora:minut:secundă). Bitul CH, din registrul secundelor, este setat la valoarea 1. Ceasul poate fi întrerupt ori de câte ori funcțiile de ținere a timpului nu sunt necesare, fapt ce minimizeză curentul.
Ceasul de timp real DS1307 poate funcționa în mod de 12 ore sau 24 de ore. Bitul 6 al
registrului de ore este definit ca bitul de selec tare a modului de 12 sau 24 de ore. Când bitul
are valoarea 1 logic, modul de 12 ore devine selectat. În acest mod bitul 5 este cel pentru AM/PM, iar pentru valoarea 1 logic corespunde PM. În modul de 24 de ore, bitul 5 este utilizat pentru schimbul orei d e la cif ra zecilor(de la ora 20 la 23). Valorile orelor trebuie
reintroduse de fiecare dată când bitul de mod 12/24 ore este modificat.
La citirea și scrierea regiștrilor de timp și dată, buffere secundare sunt utilizate pentru
a preveni erori atunci când regiștrii interni se actualizează. La citirea regiștrilor de timp și dată Aderesa Bit 7 Bit 6 Bit 5 Bit 4 Bit
3 Bit
2 Bit
1 Bit
0 Funcționalitate Interval
00h CH 10 Secunde Secunde Secunde 00-59
01h 0 10 Minute Minute Minute 00-59
02h
0 12 10
Ore
10 Ore
Ore
Ore 1-12
+AM/PM
00-23 24 PM/
AM
03h 0 0 0 0 0 Ziua Ziua 01-07
04h 0 0 10 Data Data Data 01-31
05h 0 0 0 10
Luna Luna Luna 01-12
06h 10 An Anul Anul 00-99
07h OUT 0 0 SQWE 0 0 RS1 RS0 Control –
08h-3Fh RAM 56 x 8 00h-FFh
9 buffer -ele utilizatorului sunt sincronizate cu regiștrii interni la orice pornire a magistralei I2C.
Informația timpului este citită din acești regiștrii secundari, în timp ce ceasul își continuă
funcționarea. Acest lucru elimină nevoia de a reciti regiștrii în cazul unor actualizări ale
regiștrilor interni, pe parcursul unei citiri. Divizorul este resetat ori de câte ori registrul de secunde este scris. Transferul de scrieri are loc odată cu confirmarea magistralei I
2C de la
DS1307. Odată ce divizorul este resetat, pentru a evita probleme, regiștrii de timp și dată
rămași trebuie scriși într- o secundă.
2. Regiștrii de control
Regiștrii de control ai ceasului de timp real sunt utilizați pentru a controla operațiile
pinului SQW/OUT și sunt prezentați în Tabelul 2- 1-3-1, de mai sus, la adresa 07h.
Bitul 7: Controlul ieșirii(OUT). Acest bit controlează nivelul ieșirii pinului
SQW/OUT atunci când ieșirea semnalului dreptunghiular este dezactivată. Dacă SQWE = 0,
nivelul logic al pinului SQW/OUT este 1 dacă OUT este 1, în caz contrar este 0 dacă OUT este 0. La aplicarea inițială a alimentării dispozitivului, acest bit este setat ca 0 în mod
implicit.
Bitul 4: Semnal dreptunghiular activat(SQ WE). Acest bit, când este setat ca 1 logic,
activează ieșirea oscilatorului. Frecvența ieșirii semnalului dreptunghiular depinde de
valoarea biților RS0 și RS1. Cu ieșirea semnalului dreptunghiular setată la 1 Hz, regiștrii ceasului se actualizează la fron tul descrescător al semnalului dreptunghiular. La aplicarea
inițială a alimentării dispozitivului, acest bit este setat implicit ca 0.
Bitul 1 sau 0: Selectare rat ă(RS1/RS0). Acești biți controlează frecvența ieșirii
semnalului dreptunghiular, atunci când aceasta este activată. În Tabelul 2-1-3-2 sunt
prezentate frecvențele semnalului dreptunghiular ce pot fi selectate folosind biții RS . La
aplicarea inițială a alimentării dispozitivului, acești biți sunt setați implicit ca 1.
RS1 RS0 Ieșirea SQW/OUT SQWE OUT
0 0 1Hz 1 x
0 1 4.096kHz 1 x
1 0 8.192kHz 1 x
1 1 32.768Hz 1 x
x x 0 0 0
x x 1 0 1
Tabel 2 -1-3-2 Frecvențele ieșirii semnalului dreptunghiular
2.1.4. Magistrala I2C
Ceasul de timp real DS1307 suportă protocolul I
2C. Un dispozitiv ce trimite date pe
magistrală este definit ca un transmițător, iar un dispozitiv ce recepționează date este definit ca un receptor. Dispozitivul ce controlează mesajul se numește master. Dispozitivele ce sunt controlate de master sunt numite sl ave-uri. Magistrala trebuie controlată de un dispozitiv
master ce generează un SCL ( “Serial Clock ”-engl.), controlează accesul magistralei, precum
și generează condiții de START și STOP. DS1307 operează ca un slave pe magistrala I
2C.
Transferul de date poate fi inițiat doar în cazul în care magistrala nu este ocupată. În
timpul transferului de data, linia de date trebuie să rămână stabilă ori de câte ori linia ceasului este pe 1 logic. Modificările liniei de date, în timp ce linia ceasului este pe palier po zitiv, vor
10 fi interpretate ca fiind semnale de control. Ca urmare, au fost create următoarele condiții
pentru magistrală :
• Magistrala este liberă : Liniile de date și de ceas rămân pe palier pozitiv
• START transfer de date: o schimbare în starea liniei de dat e, de la palierul pozitiv la cel
negativ, în timp ce ceasul este pe palierul pozitiv, definește condiția de START
• STOP transfer de date : o schimbare în starea liniei de date, de la palierul negativ la cel
pozitiv, în timp ce ceasul este pe palierul pozitiv, definește condiția de STOP
• Date valide : Starea liniei de date reprezin tă date valide atunci când, după o condiție de
START, linia de d ate este stabilă pe durata perioadei palierului pozitiv al semnalului de
ceas. Datele de pe linie trebuiesc schimbate în timpul perioadei palierului negativ al semnalului de ceas. Există un puls de ceas pe fiecare bit de date.
Fiecare transfer de date este inițiat cu o condiție de START și finalizată cu o condiție de
STOP. Numărul de octeți de date transferați între condițiile de START și STOP este nelimitat, și este determinat de dispozitivul master. Informația este transferată pe octeți și fiecare recepto r confirmă cu un al 9 -lea bit. În specificațiile magistralei I2C sunt definite :
un mod standard, cu rată de ceas de 100kHz , și un mod rapid, cu rată de ceas de 400kHz. Ceasul de timp real operează numai în modul standard (100kHz).
• Confirmare : Fiecare receptor, atunci când este adresat, este obligat să genereze o
confirmare după recepționarea fiecărui octet. Dispozitivul master trebuie să genereze un puls de ceas suplimentar ce este asociat cu acest bit de confirmare.
Un dispozitiv ce confirmă trebuie să ai bă linia de SDA (“Signal Data” – engl.) “pull –
down” pe parcursul confirm ării pulsului de ceas în așa fel încât linia de SDA este stabilă
pe parcursul perioadei palierului pozitiv al pulsului de ceas confirmat. Totodată setările, precum și timpii de blocare trebuie luați în considerare. Un master trebuie să semnaleze
către slave sfârșitul unei date prin negenerarea unui bit de confirmare pe ultimul octet care a fost extras de slave. În acest caz, slave- ul trebuie să pună linia de date pe palier pozitiv
pentr u a permite master -ului să genereze condiția de STOP.
Depindzând de starea bitului R/W( “Read / Write” – engl.) , sunt posibile două tipuri de
transferuri de date :
1. Transfer de date de la transmițător master la receptor slave . Primul octet transmis de
către master este adresa slave -ului, urmând apoi numărul de octeți de date. Slave -ul
returnează un bit de confirmare după fiecare recepție de octet. Data este transferată
începând cu bitul cel mai semnificativ.
2. Transfer de date de la transmițător slave la recept or master . Primul octet, ce conține
adresa slave- ului, este transmis de către master. Slave -ul returnează apoi bitul de
confirmare. După aceasta, slave- ul transmite un număr de octeți de date. Master -ul
returnează un bit de confirmare după ce recepționează toți octeții, cu excepția ultimului.
La sfârșitul recepționării ultimului octet, se returnează un mesaj de ne -confirmare.
Dispozitivul master generează toate pulsurile seriale de ceas, precum și condițiile de START și STOP. Un stransfer este finalizat cu o condiție de STOP sau cu o condiție
repetată de START. Din moment ce o condiție repetată de START este în același timp începutul unui nou transfer serial, magistrala nu va fi eliberată. Se transferă data cu cel mai semnificativ bit.
Ceasul de timp real D S1307 poate funcționa în următoarele două moduri :
1. Modul de recepție al slave- ului ( modul de scriere): Data serială și de ceas sunt
recepționate prin SDA și SCL. După ce fiecare octet este recepționat, un bit de confirmare este transmis. Condițiile de START și STOP sunt recunoscute la începutul și sfârșitul unui
transfer serial. Hardware- ul execută recunoaștere de adrese după recepț ionarea unei adrese
11 a slave -ului și a bitului de direcție. Octetul de adresă al unui slave este primul octet
recepționat după ce master -ul generează condiția de START. Octetul de adresă a slave-
ului conține adresa ceasului de timp real DS1307 de 7 biți, care este 1101000, urmată de
bitul de R/W, iar pentru scriere îi corespunde valoarea 0. După recepționarea și decodarea octetului de adresă al slave- ului, DS1307 trimite la ieșire un bit de confirmare către SDA.
După ce ceasul de timp real confirmă adresa slave- ului și bitul de scriere, masterul
transmite un mesaj adresă către DS1307. Acest lucru setează registrul pointer de pe ceasu l
de timp real, acesta confirmând trnsferul. Masterul poate transmite atunci zero sau mai mulți octeți de date, în timp ce DS1307 conf irmă fiecare octet recepționat. Registrul
pointer se incrementează automat după ce fiecare octet de date este scris. Maste r-ul va
genera o condiție de STOP pentru a termina scrierea de date.
2. Modul de transmisie al slave -ului (modul de citire) : Primul octet este recepționat și
utilizat ca și în modul de recepție al slave- ului. Însă, în acest mod, bitul de direcție va
indica faptul că direcția de transfer este inversată. Ceasul de timp real DS1307 transmite data serială către SDA în timp ce ceasul serial este intrare pentru SCL. Condițiile de START și STOP sunt recunoscute ca fi ind începutul și sfârșitul transferului serial. Octetul
de adresă al slave- ului constituie primul octet recepționat după ce condiția de START a
fost generată de către master. Octetul de adresă al slave- ului conține adresa ceasului de
timp real DS1307, de 7 biți, care este 1101000, urmată de bitul R/W, iar pentru citire îi
corespunde valoarea 1. După recepționarea și decodarea adresei slave- ului, ceasul de timp
real scoate la ieșire o confirmare către SDA. Apoi DS1307 inițiază transmisia de date, începând cu registrul de adresă specificat de către registrul pointer. Dacă registrul pointer
nu a fost scris inainte de inițializarea modului de citire, atunci prima adresă ce va fi citită este ultima stocată în registrul pointer. Acesta se incrementează automat dup ă fiecare octet
citit. Ceasul de timp real DS1307 trebuie să primească un mesaj de n e-confirmare pentru a
finaliza citirea.
2.2. Plăci le de forță POLOLU 2961
Plăcuța MAX14870 de la “Maxim Integrated ” este un circuit integrat cu o punte -H și
driver motor, care poate fi folosită pentru controlul bidirecțional al unui motor de curent
continuu de la 4.5 V până la 36 V. Poate suplimenta până la 1.7 A (amperi) în continuu și
poate tolera curenți de până la 2.5A pentru câteva secunde, fiind astfel o bună alegere pentru
motoare mici ce funcționează pe o gamă mare de voltaje [10][11].
Plăcuța de forță MAX14870 este un circuit integrat (IC) viabil , dar suprafața sa de
dimensiune redusă poate aduce dificultăți în utilizare. PCB -ul plăcii este pop ulat cu
numeroase componente SMD, incluzând și un circuit de protecție.
Caracteristici:
• Un singur driver motor cu punte -H cu protec ție împotriva scurt- circuitului
• Voltajul motorului : [4.5 , 36] V
• Curent la ieșire de până la 1.7A î n continuu cu maximum de 2.5A
• Nu are nevoie de alimentare (logică) separată; intr ări 3V și 5V compatibile
• Interfață simplă DIR/PWM (“Direction/ Pulse Width M odulation” -engl. ) cu 2
pini (unul controlează direcția, altul viteza)
• Protejat împotriva voltajului scăzut, al scurt -circuitului ș i temperaturii ridicate
• Sunt adaugate protecții împotriva voltajului invers
• Sistem de protecție împotriva curentului ridicat sau a temperaturii ridicate
• Poate fi adăugat un rezistor pe suprafață p entru a activa automat limitarea
curentului
12 • Temperatură de funcționare: [ -40 , + 85] ℃
• Dimensiune compactă (0.6” x 0.5”) (inch)
Plăcuta conține 2 seturi de 1×5 pini, având capete “tată” ce sunt incluse pe
MAX14870. În Tabelul 2- 2-2, de mai jos, sunt prezentați pinii plăcuței de forță POLOLU
2961, și descrierea acestora.
Tabel 2 -2-2 Pinii plăcii Pololu 2961
În Figura 2- 2-1 poate fi urmărit modul în care se poate conecta o placă de forță, cu un
singur motor de curent continuu, la un microcontroller.
Fig. 2- 2-1 Diagrama minimalistă pentru conectarea unui MAX14870 la un
microcontroller
Conexiunile de motor și alimentare se află pe o parte a placuței, iar conexiunile pentru
control pe cealaltă. Motorul impune ca voltajul de operare sa fie cuprins între 4.5V și 36V, pentru a putea fi suplimentat de la alimentarea cu protecție inversată, V
IN. Pinul VM
furnizează un acces convenabil la alimentarea cu protecție inversată. PIN Stare Implicita Descriere
VIN Intrare alimentare între 4.5V – 36V, cu protecție inversată
GND Conexiune la masă pentru alimentare și semnalele de control
Sursa de control și motorul trebuie să împartă/folosească
aceeași masă
VM Acest pin permite accesul la alimentarea motorului dupa
protecția împotriva tensiunii inverse MOSFET.
Poate fi folosită pentru a alimenta cu energie inversă
protejată alte componente din sistem.
Această rețea se conectează la pinul VDD
M1 Ieșirea 1 a punții H
M2 Ieșirea 2 a punții H
PWM LOW Intrarea de control a vitezei;
Valoarea HIGH determină rularea motorului
DIR Intrarea controlului de direcție
FAULT
Floating Acest pin ia valoarea LOW odată cu temperatura și/sau
curentul ridicat. Trebuie folosit un rezistor pull- up extern
dacă se dorește setarea valorii HIGH implicite
EN LOW Intrare LOW activată; seta re HIGH pentru ie șiri cu 3 stări
13 MAX14870 prezintă o interfață simplă DIR/PWM cu 2 pini, unde pinul DIR
determină direcția motorului, iar pinul PWM poate fi suplimentat cu un semnal de control
PWM pentru viteza motorului. Controlul intrării este redus pe placă de o rezistență pull- down
the 100 K Ω. Când pinul PWM este setat ca LOW, ieșirile motorului sunt ambele legate la
masă, ceea ce rezultă într -o oprire dinamică a motorului contectat.
Pinul EN poate fi setat c a HIGH pent ru a opri ieșirile motorului, ceea ce poate fi
benefic în cazul în care se dorește mersul în gol . Pinul EN este re adus pe LOW cu ajutorul
unui rezistor pull -down de 100 K Ω astfel încât driverul este activat în mod implicit.
Tabelul 2 -2-1 evidenț iază modalitățile de operare ale motorului :
EN PWM DIR M1 M2 Mod de Operare
1 X X Impedanță mare Impedanță mare În gol
0 1 0 GND VIN Înapoi
0 1 1 VIN GND Înainte
0 0 X GND GND Scurt -Circuit
Tabel 2 -2-1 Modalități de operare
Plăcile de forță MAX14870 dispun de următoarele facilități:
Protecție î mpotriva curentului în exces
Plăcile de forță sunt protejate î mpotriva scurtcircuitelor la pinii M1/M2 pentru orice
voltaj dintre V DD și GND, incluzând și scurtcircuitele la GND, V DD și între M1 și M2 p rin
limitarea curentului în exces. Când un curent mai mare de 6A trece prin M1 sau M2 pentru o
perioadă mai mare de 1µs, o condiție de curent excesiv este detectată, iar driver -ele punții H
sunt automat dezactivate și ieșirea FAULT se activează.
Dacă cond iția de curent excesiv continuă mai mult de 2 ms, placa de forță intră în
modul de reîncercare automată. În acest mod, ieșirile M1 și M2 sunt reactivate pentru 1µs și
ieșirea FAULT trece pe impedanță înaltă. Drivere- le sunt dezactivate din nou, iar FAULT es te
reactivat în cazul în care condiția de curent excesiv persistă.
Controlul PWM -ului
Intrarea PWM este flosită pentru controlul vitezei sau a cuplului. Crescând sau
micșorând ciclul de funcționare(duty cycle) al PWM -ului se setează voltajul efectiv la bor nele
motorului și permite controlul vitezei. În momentul în care PWM -ul este pe palierul pozitiv,
motorul este comandat în direcția definită de pinul DIR. Atunci când PWM -ul este pe palier
negativ puntea este în modul de frânare. În acest mod, curentul mot orului își continuă fluxul și
recirculă prin tranzistoarele punții H.
Controlul punții
Plăcile de forță se pornesc și opresc prin controlul activ al punții pe par cursul duratelor
de tranziție a lui M1/M2.
Protecție î mpotriva supraîncălzirii
Plăcile de forță include o protecție integrată împotriva supraîncălzirii. Când
temperatura depășește 160 ℃, puntea H devine “ tri-stated”, M1 ș i M2 sunt dezactivate, iar
FAULT devine activat.
Dacă motorul se afla în mișcare, înainte de opritea din cauza supraîncălziri i,
inductanța motorului va împinge curentul prin diodele interne M1 și M2, forțând motorul într –
o decelerare rapidă cu voltajul peste bornele V DD.
M1 și M2 vor fi activate automat când temperatura va scădea sub 150℃.
14 2.3. Modul ul LCD cu Butoane
Modul LCD (“Liquid Crystal Display” -engl. ) cu butoane (LCD Keypad Shield) include
un display LCD cu 2 lini i x 16 coloane și 6 butoane de tip „push”. Pinii 4, 5, 6, 7, 8, 9 și 10
sunt fol osiți pentru interfața LCD -ului, iar p inul 0, cu funționalitate analogică , este fol osit
pentru a citi semnalele butoanelor de tip „push”. Modulul LCD permite reglarea contrastului
și luminii „backlit” cu ajutorul potențiometrului de pe placă . În același timp, se pot extinde
pinii analogici , cu excepția pinului 0 ce este ocupat de butoane , pentru o mai ușoară citire a
senzorilor și al display- ului.
Acest modul LCD a fost dezvoltat pentru plăcuțe Arduino compatibile , conform [ 12],
pentru a asigura o interfață ușor de folosit, ce permite utilizatorilor navigarea ușoara prin
meniu și selectar ea comenzilor. Conține 1602 caractere albe cu lumină „backlight” albastră.
Tastatura este compusă din 5 butoane:
• Selectare (Select)
• Sus (Up)
• Dreapta (Right)
• Jos (Down)
• Stânga (Left)
Pentru a salva pinii digitali I/O (“ Input / Output ”-engl.), interfața tastaturii folosește un
singur canal ADC . Fiecare buton având conectat ă câte o rezistență diferita astfel încât la
apăsarea unui buton să obținem o tensiune diferită pe pin . În funcție de tensiunea citită de pe
pinul A0 putem identifica ce buton a fost apăsat. Schema electrică a modulului este prezentată
în Figura 2 -3-1.
Fig. 2- 3-1 Schemă electrică a modulului LCD
15 Specificații le modulului LCD , din Figura 2- 3-2:
• Voltaj: 5V
• 5 butoane „push” pentru a ușura utilizarea meniului
• Buton RST (reset) pentru a reseta programul Arduino
• Potențiometru integrat pentru ajustarea luminii „backlight”
• Extinderea pinilor I/O disponibili
• Extinderea pinilor a nalogici cu DFRobot standard configurat pentru extinderea
rapidă a senzorilor
• Dimensiune: 80 x 58 mm
Fig. 2- 3-2 Modulul LCD cu butoane
În Tabelul 2 -3-1, de mai jos, sunt prezentați pinii modulului LCD și sunt evidențiați
pinii ce sunt necesari pentru afișarea informațiilor pe LCD, pentru controlul acestuia, precum și pinul utilizat pentru detecția butoanelor.
PIN Funcție Instrucțiune
Digital 4 (D4)
D4 ~ D7
sunt folosite ca și
DB4 ~ DB7
Utilizat pentru transferare și primire de date dintre MPU ș i LCD Digital 5 (D5)
Digital 6 (D6)
Digital 7 (D7)
Digital 8 (D8) RS Alege Data/ Semnalul Display -ului
Digital 9 (D9) Enable/Pornire Începe citirea/scrierea datelor
Digital 10 (D10) Control „backlight” LCD
Analog 0 (A4) Selectare buton Select, sus, dreapta, jos, stânga
Tabel 2 -3-1 Funcționalitățile pinilor modulului
16
2.4. Senzor orul de temperatură DS18B20
Senzorul de temperatură DS18B20, prezentat în Figura 2- 4-1, furnizeză măsurători de
temperatură în grade Celsius, de la 9 până la 12 biți, conform [13], și are o funcție de alarmă
cu puncte de declanșare nonvolatile, înalte sau joase, programabile de către utilizator. Senzorul comunică printr -o serială 1 -Wire care, prin definiție necesită o singură linie de date
și masă pentru a comunica cu un microprocesor central. Acesta poate funcționa cu temperaturi
cuprinse în intervalul [-55°C ; +125°C ] și are o acuratețe de ±0.5°C în intervalul [ -10°C ;
+85°C ]. În plus, DS18B20 poate obține alimentare direct de la linia de date, numită și
“alimentare parazită”, eli minând necesitatea unei alimentări externe.
Fig. 2- 4-1 Senzorul DS18B20
Fiecare senzor DS18B20 deține un cod serial unic, de 64 de biți, ce permit mai multor
senzori de acest tip să funcționeze pe aceeași serial ă 1-Wire. Astfel, este simplă utilizarea
unui singur microprocesor pentru a controla numeroși senzori DS18B20, distribuiți pe o suprafață întinsă. Aplicațiile ce pot beneficia de această caracteristică includ controale ambientale ale încălzirii, ventilări i și al aerului condiționat, sisteme de monitorizare a
temperaturii în interiorul clădirilor, echipamente sau mașinării, precum și sistemele de
monitorizare și control al proceselor.
Senzorul de temperatură DS18B20 dispune de următoarele caracteristici :
• Necesită un singur pin pentru comunicare datorită interfeței unice 1- Wire
• Fiecare dispozitiv are un cod serial unic, de 64 de biți, stocat în memoria ROM( „Read -Only Memory” -engl. )
• Simplifică aplicațiile de preluare a temperaturii
• Nu necesită componente ext erne
• Poate fi alimentată de la linia de date
• Voltaj : 3.0V – 5.5V
• Măsoară temperaturi de la -55°C până la +125°C
• Convertește temperatura într -o valoare digitală în maxim 750ms
• Posibilitatea setării unei alarme nonvolatile
• Comadă de alarmă ce identifică temperaturi în afara limitelor programate
• Disponibil în configurații de 8 pini SO („
Small -outline ”-engl. ), 8 pini µSOP( „micro –
Small -outline package ”-engl.) și 3 pini TO -92(Pachet încapsulat în plastic cu 3
ieșiri)
• Utilizat în aplicații pentru control termo static, sisteme industriale, termometre,
acvaristică sau alte sisteme sensibile la temperatură
Funcționalitatea principală a senzorului DS18B20 este capacitatea de a transmite
direct în digital informația recepționată. Rezoluția senzorului de temperatură s e poate
configura de către utilizator între 9 și 12 biți, corespunzând incrementărilor de câte 0.5°C,
17
0.25°C, 0.125°C și respectiv 0.0625°C. Rezoluția implicită la pornire este de 12 biți.
DS18B20 pornește într -o stare inactivă de puture redusă. Pentru a i niția măsurarea de
temperatură și converia AD, master -ul trebuie să emită o comandă. Urmărind conversia,
datele termice rezultate sunt stocate într -un registru de temperatură de 2 biți, apoi DS18B20
revine în starea inactivă. În cazul în care senzorul este alimentat exern, master -ul poate emite
spații de citire a timpului, după care DS18B20 va raspunde prin transmisia valorii 0 cât timp conversia tempeaturii este în progres, și 1 când conversia este finalizată. Dacă DS18B20 este alimentat de “energie parazi tă”, tehnica de notificare nu poate fi folosită pe întreaga durată a
conversiei.
Ieșirea senzorului de temperatură este calibrată în grade Celsius. Pentru aplicațiile ce
folosesc grade în Fahrenheit devine necesar un tabel specific sau o rutină de conversi e. Datele
privind temperatura sunt stocate ca un numar de 16 biți într -un registru de temperatură. Biții
de semn(S) indică dacă temperatura este pozitivă sau negativă. Pentru numere pozitive S ia valoarea 0, iar pentru numere negative ia valoarea 1. Dacă D S18B20 este configurat cu o
rezoluție de 12 biți, atunci toți biții registrului de temperatură vor conține date valide. Pentru rezoluția de 11 biți, bitul 0 este nedefinit. Pentru rezoluția de 10 biți, biții 1 și 0 sunt nedefiniți, iar pentru cea de 9 biț i, biții 2,1 și 0 sunt nedefiniți.
2.5. Pompa peristaltic ă
Pompa peristaltică din Figura 2- 4-1, ce a fost utilizată pentru fertilizarea de
micronutrinți și macronutrienți, are următoarele specificații:
• Motor de curent continuu
• Voltaj de alimentare: 12V
• Curent: 300mA
• Temperatura de funcționare: [0 , 40] ℃
• Umiditate relativă trebuie să fie mai mică de 80%
• Debitul: 5 -40ml/min
• Tubul pompei:
Diametru interior: 2mm
Diametru exterior: 4mm
Fig. 2- 5-1 Pompa peristaltică
18 2.6. Sonda de pH
Măsurarea pH -ului poate fi foarte folositoare dacă dezvoltăm un acvariu, cultivații
hidroponice sau acvaponice automate.
Modulul senzorului de pH, prezentat în Figura 2- 6-1, este unul de cost redus și ușor de
utilizat. Acesta a fost proiectat astfel încât să aibă caracteristicile unei conexiuni simple ,
practice și conveniente.
Fig. 2- 6-1 Modulul sondei de pH
PH-ul este unitatea de mă sura pentru aciditatea sau alcalinitatea unei soluții, iar el
poate lua valori între 0 și 14. PH -ul indică concentrația de hidrogen și de ioni prezenți într -o
anumită soluție. Poate fi cuantificat precis de un senzor ce măsoară potențialele diferențe
dintre doi electrozi, unul de clorură de argint, iar celălalt de sticlă ce este sensibil la ionii de hidrogen. Un circuit electric este necesar pentru a condiționa semnalul adecvat, iar acest senzor se poate folosi cu un microcontroller.
Modulul senzorului de pH di spune de următoarele caracteristici :
• Voltaj de alimentare: 5V
• Curent: 5 -10 mA
• Consum: ≤ 0.5W
• Dimensiune: 43mm x 32mm x 20mm
• Temperatură de funcționare: 10 -50 șC
• Led-ul verde simbolizează alimentarea
• Led-ul roșu simbolizează depășirea limitei de pH
• Interva l de măsurare: 0 -14 pH
• Timp de răspuns: ≤ 1minut
• Acuratețe de ± 0.1pH la temperatura de 25 șC
Schema electrică a modulului poate fi urmă rită în Figura 2 -6-2 de mai jos.
19
Fig. 2- 6-2 Schema logic ă a modulului sondei de pH
După cum se poate observa și din schema electrică, modulul senzorului de pH dispune
de următorii pini:
• To: Temperatura
• Do: Limita semnalului de pH
• Po: Valoarea analogică a pH -ului
• G : Masă
• G : Masă
• V+: Alimentarea de 5V
Calibrarea senzorului de pH
Circuitul conține două potențiometr e, cel mai apropiat de conectorul BNC(“ Bayonet
Neill–Concelman” -engl.) al sondei de pH face reglarea compensată, iar celălalt este folosit
pentru limitarea pH -ului.
Intervalul mediu al sondei de pH oscilează între valori negative și pozitive. Valoarea 0
reprezintă un pH de 7.0. Prin urmare, vom forța un pH de 7. 0 prin deconectarea sondei de la
circuit și scurtcircuitarea interiorului conectorului BNC cu exteriorul. Cu un multimetru se
poate măsura valoarea pinului Po și se poate ajusta potenți ometrul să fie de 2. 5V.
Potențiometrul pentru limita de pH poate seta valoarea pentru aprinderea led -ului roșu și
pornirea semnalului pe pinul Do.
De asemenea, trebuie calculată conversia de tensiune obtinută de la senzorul de pH.
Pentru aceasta vom avea nevoie de doua valori de referință pentru pH și trebuie măsurată
tensiunea returnată pe pinul Po.
Pentru o calibrare exactă ar fi nevoie de o soluție de calibrare, al cărei pH va fi
cunoscut. Pentru o soluție cu pH de 6.86 se va obține pe pinul Po 2.54V. Senzorul este liniar,
deci prin luarea a două puncte putem deduce ecuația de transformare a tensiunii măsurate în
pH. Formula generală ar fi de forma: y=m*x+b , unde x ar fi tensiunea de ieșire, iar y ar fi pH -ul.
20 Capitolul 3. Proiectarea și realizarea plăcii sistemului
Realizarea plăcii sistemului de monitorizare și mentenanță a unui acvariu a avut
următoarele cerințe de pr oiectare :
• utilizarea unui ceas de timp real
• controlul a două motoare de curent continuu pentru fertilizarea de
micronutrienți și macronutrienți
• controlul unui releu pentru iluminare
• monitorizarea temperaturii apei
• monitorizarea nivelului pH -ului
• controlul unui releu pentru adiția de CO 2
• afișarea informațiilor sistemului pe un modul LCD cu butoane
• comunicarea prin interfața serială
Pentru placa sistemului s -a ales un microcontrol ler dsPIC33FJ64MC802 produs de
Microchip. DsPIC33FJ64MC802 este un microcontrol ler de 16 biți cu un set îmbunătățit de
periferice, compatibil cu aplicațiile de procesare și control digital de semnal. Microcon troller-
ul dsPIC este capabil să se ocupe de toate task -urile, dacă cele mai rapide nu au cerințe pentru
o putere de procesare ridicată.
Prima etapă a proiectării plăcii a constat în alocarea pinilor în funție de necesitățile
sistemului . În urma celor pre zentate anterior s- au alocat următorii pini :
• 2 pini cu funcționalitate de PGES și PGEC pentru programarea micrononroller –
ului
• 2 pini cu funcționalitate de SDA și SCL pentru ceasul de timp real
• 6 pini de uz general pentru afișarea pe LCD, 2 pini fiind uti lizați pentru control, iar
ceilalți 4 su nt pini de date
• 1 pin cu funcționalitate analogi că pentru butoanele înglobate pe modulul LCD
• 2 pini cu funcționalitate de PWM pentru cele două pompe de curent continuu ce
sunt conectate la două plăci POLOLU 2961
• 2 pini de uz general pentru stabilirea direcției pompelor
• 2 pini cu funcționalitate de RP pentru FLT -ul celor două plăci de forță
• 1 pin de uz general pentru releul utilizat la adiția de CO
2
• 1 pin de uz general pentru temperatură
• 1 pin cu funcționalitate analogică pentru citirea valorii pH -ului
• 2 pini cu funcționalitate de RP pentru comunicarea prin interfața serială.
Întreaga alocare a pinilor sistemului poate fi urmărită în Tabelul 3- 1.
21
Tabel 3- 1 Alocarea pinilor
Număr
pini Funcționalități Utilizare Atribuire
1 MCLR
2 AN0/VREF+/CN2/RA0 AN 0 LCD – Butoane
3 AN1/VREF-/CN3/RA1 AN 1 Sondă de pH
4 PGED1/AN2/C2IN -/RP0 /CN4/RB0 PGED1 ICSP
5 PGEC1 / AN3/C2IN+/RP1/CN5/RB1 PGEC1 ICSP
6 AN4/C1IN -/RP2/CN6/RB2 RP2 Pompa 1 – FLT
7 AN5/C1IN+/RP3/CN7/RB3 RP3 Pompa 2 – FLT
8 VSS
9 OSC1/CLKI/CN30/RA2 RA2 Releu CO 2 / Led
10 OSC2/CLKO/CN29/PMA0/RA3 RA3 Senzor Temperatură
/ Pompa 1 – DIR
11 SOSCI/RP4/CN1/PMBE/RB4 RP4 Serial TX / Led
12 SOSCO/T1CK/CN0/PMA1/RA4 RA4 Releu Iluminare /
Pompa 2 – DIR
13 VDD
14 PGED3 /ASDA1/RP5/CN27/PMD7/RB5 ASDA1 RTC
15 PGEC3/ASCL1/RP6/CN24/PMD6/RB6 ASCL1 RTC
16 INT0/RP7/CN23/PMD5/RB7 RP7 Serial TX
17 TCK/PWM2H1/SCL1/RP8/CN22/PMD4/RB8 PWM2H1 Pompa 1 – PWM
18 TDO/PWM2L1/SDA1/RP9/CN21/PMD3/RB9 RB9 LCD – RS
19 VSS
20 VCAP/VDDCORE
21 PGED2/TDI/PWM1H3/RP10/CN16/PMD2/RB10 PWM1H3 Pompa 2 – PWM
22 PGEC2/TMS/PWM1L3/RP11/CN15/PMD1/RB11 RB11 LCD – E
23 PWM1H2/RP12/CN14/PMD0/RB12 RB12 LCD
24 PWM1L2/RP13/CN13/PMRD/RB13 RB13 LCD
25 PWM1H1/RTCC/RP14/CN12/PMWR/RB14 RB14 LCD
26 PWM1L1/RP15/CN11/PMCS1/RB15 RB15 LCD
27 AV SS
28 AV DD
22 3.1. Schema electrică a plăcii
A doua etapă a dezvoltării plăcii a constat în realizarea schemei electr ice ce poate fi
urmărită în ANEXA 1 . În aceast ă etapă s- a urmărit crearea unei scheme care să con țină toate
componentele necesare funcționării sistemului.
Componentele electrice folosite pot fi împărțite î n 4 blocuri:
1. Blocul de alimentare
2. Blocul celor două plăci de for ță
3. Blocul LCD- ului
4. Bloculul ceasului de timp real
Blocul de alimentare , prezentat în Figura 3 -1-1, este alcătuit dint r-o mufă de
alimentare jack conectată la 12V și GND. Alimentarea este compusă și din două regulatoare
de tensiune: 7805DT și LM3904 care au rolul de a reduce tensiunea și de a o stabiliza de la 12
V la 5V, respectiv de la 5V la 3.3V.
Fig. 3- 1-1 Blocul de alimentare
Blocul celor două pl ăci de forță , din Figura 3 -1-2, constă în 2 barete de 5 pini de tip
mamă, pentru fiecare placă în parte. Cele două plăci sunt conectate la pinii RB8 și RB10 ai microcontroll er-ului pentru generarea semnalelor PWM, la pinii RA3 și RA4 prin intermediul
jumperilor pentru stabilirea direcției, la pinii RB2 și RB3 pentru FLT și la pinii de masă ș i
alimentarea de 12V a plăcii.
Fig. 3- 1-2 Blocul plăcilor de forță
23
Blocul LCD- ului, prezenatat în Figura 3 -1-3, constă î n 4 barete de tip mamă: două
barete de 8 pini și două barete de 6 pini. LCD -ul este conectat la pinii RB15, RB14, RB13 și
RB12 folosiți pentru afișare, la pinul RB09 pentru reset, la pinul RB11 pentru enable, la pinul
RA0 pentru conversia analog- digital ă necesară utilizării celo r cinci butoane, la masă și la
alimentarea de 5V a plăcii.
Fig. 3- 1-3 Blocul LCD- ului
Blocul ceasului de timp real, din Figura 3 -1-4, este alcătuit dintr -un DS1307 care este
conectat la masă, alimentare a de 3.3V, la pinii de ASDA și ASCL ai microcontroll er-ului și
anume la pinii RB5 și RB6. După cum se poate observa din figură sunt conectate și două rezistențe de pull- up de 4k7 între cei doi pini ai microcontroller -ului și alimentarea de 3.3V .
De asemenea D S1307 are conectat și un cristal de quarț, un condensator de decuplare de
100nF și o baterie.
Fig. 3- 1-4 Blocul ceasului de timp real
24 3.2. Proiectarea cablajului imprimat
După ce schema electrică a fost finalizată, s- a trecut la partea de trasare a cablajului ,
prezentat în Figura 3 -2-1. PCB- ul(“Printed Circuit Board” – engl) plăcii a fost proiectat astfel
încât să ofere flexibilitate în dezvoltarea sistemului. S -a dorit proiectarea unei plăci de
dimensiuni reduse, astfel obținându- se una de 7.5cm x 10cm. Pentru a ajunge la această
dimensiune s -a urmărit ca majoritatea traseelor să fie pe ambele părți ale PCB -ului. De
asemenea s- a încercat minimizarea numărului de viasuri, cât și scurtarea traseelor.
Cablajul
plăcii poate fi urmărit și în ANEXA 2 .
Fig. 3- 2-1 PCB -ul plăcii
Următoarea etapă a constat în implementarea efectiv ă a plăcii. Imprimarea traseelor s-
a făcut la firma ELECTRA din Iași, unde a trecut printr -un proces de corodare, și unde s -au
dat găuri le necesare pentru componente și viasuri.
În Figura 3 -2-2, de mai jos, este prezentată placa sistemului în urma imprimării
cablajului.
25
Fig. 3- 2-2 Circuitul imprimat rezultat
Ultima etapă a constat în lipire a componentelor pe placă și ali mentarea acesteia.
În Figura 3- 2-3 este prezentată placa cu dsPIC, în stare a finală, aceasta a fost
proiectată astfel încât să aibă dimensiuni cât mai reduse. Pentru acestea, dupa ce s- au luat
măsurători, s -a stabilit ca microcontroller- ul, ceasul de timp real, bateria necesară ceasului, cât
și partea de alimentare să fie sub modulul LCD înglobat pe placă.
Fig. 3- 2-3 Proiectarea finală a plăcii
26 Capitolul 4. Arhitectura software
Sistemul de operare în timp real repre zintă un sistem de operare ce este proiect at
pentru a plicațiile în timp real. Aceste sisteme se folosesc în general pentru calculatoarele de
tip sistem înglobat, precum : roboți industriali, sisteme industriale de control, echipamente de
cercetare științifică, ș.a..
Aceste sisteme se folosesc în princ ipal datorită capacității de răspuns rapid, dar nu și
pentru volumul de muncă pe care îl pot efectua. Sistemul de operare în timp real nu este nevoit să dispună de o putere mare de calcul, deoarece vi teza lui de calcul este influenț ată de
viteza de calcul a procesorului pe care rulează, frecvența ridicată a întreruperii de ceas, precum și de algoritmul de “ scheduling”.
Caracteristicile sistemul de operare în timp real:
• Costuri scăzute de dezvoltare
• Asigură confidențialitatea datelor prelucrate
• Aplicații d ependente de procesor
• Funcționalitate complexă
• Programare a se face în limbaj de nivel înalt
• Multithreading – procesul poate fi format din unul sau mai multe fire de
execuție
• Multiproces are – execută procese multiple prin comutări succesive între
contextele proceselor
• Multitasking – poate lucra cu mai multe intrări/ieșiri, cu evenimente multiple
ce pot fi independente
Pentru aplicația plăcii sistemului de monitorizare și mentenanță a unui acvariu s -a ales
sistemul de operare în timp real FreeRTOS. S-a ales acest sistem de operare deoarece este
unul “open- source” ce oferă o multitudine de funcționalități predefinite .
4.1. Facilit ățile sistemului de operare în timp real FreeRTOS
FreeRTOS facilitează obținerea unei înțelegeri corecte a modului în care fu ncționează
un kernel de timp real, ce reprezintă provocările comune întâlnite în dezvoltarea aplicațiilor
de timp real și modul în care ar putea fi a plicate tehnicile de proiectare/ programare
recomandate[ 14]. Este de remarcat faptul că FreeRTOS ilustrează facilitățile comune pentru o
mare varietate de sisteme de operare în timp real, cum ar fi mecanismele specifice executării
multitasking -ului în combinație cu rutinele de servicii de întrerupere (ISR), comunicarea între
procese prin mesajele în coadă și partajarea resurselor pasive prin sincron izări bazate pe
mutex/ semafor .
Kernel -ul FreeRTOS permite programarea preemptivă sau non -preemptivă. În modul
preemptiv, punctele de planificare implicite sunt distribuite periodic. Algoritmul de
planificare este bazat pe "prioritatea cea mai mare". Punctele de planificare pot apărea în mod
asincron, de exemplu atunci când o activitate este blocată, suspendată sau setată cu o prioritate mai mare decât cea a sarcinii c e rulează, când se creează o sarcină cu prioritate mai
mare sau când se cere o reprogramare explicită.
Procesele concomitente ale aplicației integrate sunt definite ca sarcini, co -rutine sau
rutine de întrerupere a serviciului. O sarcină poate avea una dintre următoarele stări: în curs
de execuție( “running” ), pregătită pentru execuție (“ready”), suspendată (așteaptă un eveniment
27
temporal) și suspendată (nu este disponibilă pentru programare) , ce sunt prezentate în Figura
4-1-1.
Fig. 4- 1-1 Starile posibile ale unui task
Comparând cu sarcinile, procesele ISR (folosite pentru a oferi răspunsuri specifice la
întreruperi) acceptă doar o gamă limitată de servicii de interfață de programare a aplicațiilor
(API). Prioritățile lor (mai mari decât prioritățile oricărei sarcini) nu sunt gestionate de
FreeRTOS. Cu toate acestea, procesele ISR (care se numesc servicii API) trebuie să fie
atribuite cu o prioritate egală cu prioritatea întreruperii kernel -ului în timp real, pentru a
permite o execuție corespunzătoare a serviciilor necesare de operare a sistemului. Pe de altă
parte, executarea sarcinilor (preemptivă sau non -preemptivă) este supravegheată de un
planificator bazat pe timp, în funcție de prioritățile alocate. Sistemul de operare FreeRTOS de
timp real include servicii API c are permit controlul complet asupra priorităților și stărilor
sarcinilor în timpul executării aplicației, cum ar fi schimbarea priorităților sarcinilor, blocarea,
suspendarea sau chiar crearea sau ștergerea sarcinilor.
FreeRTOS oferă trei scheme diferite de alocare a memoriei care permit utilizarea
scalabilă a memoriei RAM în cadrul aplicației. [15] Aceste scheme suportă utilizarea de
memorie limitată la alocări statice, alocarea dinamică a blocurilor de dimensiuni predefinite sau alocarea memoriei cu utilizarea fără restricții a funcțiilor malloc() și free ().
Funcționalitățile kernel -ului și disponibilitatea serviciilor API sunt adaptate unei
anumite aplicații prin intermediul unui fișier de configurare F reeRTOSConfig.h. Definițiile
sale specifice indică tipul de nucleu (preemptiv sau cooperativ), frecvența microcontrolerului, facilitățile de urmărire permise, mecanismele de comunicare interconectate și mecanismele de sincronizare angajate etc.
28 4.2. Testări software realizate
Pentru obținerea unui mediu acvatic optim pentru totalitatea viețuitoarelor din acvariu,
precum și minimizarea efortului de mentenanță prin automatizarea proceselor, la placa cu dsPIC s -au conectat următoarele module : două motoare de curent continuu necesare
fertilizării, un senzor de temperatură, o sondă de pH, două relee necesare iluminării și adiției de CO
2 și o plăcuță NodeMCU ce are la rândul ei conectat un motor pas cu pas necesar
mecanismului de hrănire . Arhitectura hardw are poate fi urmărită în Figura 4- 3-1.
Fig. 4 -3-1 Module conectate la placa cu dsPIC
Aplicația plăcii se bazează pe sistemul de operare de timp real FreeRTOS , iar task –
urile din cadrul aplicației sunt prezentate în Figura 4- 3-2. S-a creat câte un task pentru fiecare
funcționalitate în parte, un task pentru citirea orei sistemului, un task pentru navigarea prin meniu și un task pentru trimiterea, prin interfața serială, a informațiilor sistemului către modulul NodeMCU.
Fig. 4 -3-2 Task -urile aplica ției
Meniu
Afișare_meniu_principal
CO2
Afișare_or ă_setări
Iluminare
Task_SerialTX
Pomp ă2
Citire_ DS1307
Hrănire
Pomp ă1
Planificato r
FreeRTOS
Releu
CO2
dsPIC
NodeMCU
Pompe
fertilizare
ESP826
Sondă de pH
Hrănitor (Motor
pas cu pas)
Senzor de
temperatură
Releu
Iluminare
Internet
WiFi –
LAN
29 Pe lângă task -uri am mai folosit și alte mecanisme oferite de FreeRTOS. Comunicația
dintre task -uri se face printr -o coadă de m esaje prin care se transmite ora sistemului. Pentru
aceasta a fost necesar ă crearea unei structuri, ce este prezentată î n Figura 4 -3-3, care să
conțină două va riabile de tip întreg folosite pentru trimiterea și recepția orei și m inutului
sistemului.
Fig. 4 -3-3 Definirea structurii Ora_ds1307
Coada de mesaje a fost creata astfel încât să transmită prin structura realizată anterior
ora sistemului . Pentru aceasta s -a inițializat coada oră_Queue , și s -a creat coada ce poate fi
vizualizată în Figura 4- 3-4. Aceasta are 2 elemente de tipul structurii create anterior.
Fig. 4 -3-4 Crerea cozii de mesaje
Task -urile ce necesită afișarea de mesaje pe LCD partajează resursa printr -un semafor
mutex . De asemenea există și două task- uri care trimit informații pe intefața serială, Hrănire
și Task_serialTX , resursă ce este partajată la rândul ei tot printr- un semafor mutex. În acest fel
toate mecanismele specifice FreeRTOS sunt folosite pentru a se asigura că nu există date corupte și că task-urile sunt sincronizate. Întreaga aplicație este prezentată în Figura 4 -3-5.
Fig. 4 -3-5 Arhitectura aplica ției bazate pe FreeRTOS
typedef struct
{
unsigned int ora_s ;
unsigned int minut_s;
}Ora_ds1307;
xQueueHandle ora_Queue;
ora_Queue = xQueueCreate ( 2, sizeof(Ora_ds1307));
Citire_DS1307
CO 2
Meniu
Afișare_meniu_principal
Afișare_oră_setări
Pompă1
Pompă2
Iluminare
Hrănire
Task_SerialTX
Oră_Queue
LCD_Mutex
Sem_serial
30
Task -ul Citire_DS1307, prezentat în Figura 4 -3-6, se ocupă cu citirea ceasului de timp
real ce stă la baza programării aplicației. RTC -ul a fost conectat la pinii microcontroller- ului
de ASDA și ASCL, iar pentru asta a fost nevoie de urmatoarea reconfigurare a pinilor :
“_FPOR(ALTI2C_ON) ”. Acest task citește din regiștrii ora și minutul ceasului de timp real.
Informația citită este salvată în structur a send_ora_minut ce este transmisă prin coada de
mesaje către task -urile ce au nevoie de ora sistemului pentru automatizarea funcționalităților.
Fig. 4 -3-6 Task -ul Citire_DS1307
Task -ul, prezentat în Figura 4- 3-8, se ocupă cu afișarea orei, temperaturii și pH -ului.
Acesta citește ora sistemului, iar apoi dacă poate prelua semaforul o afișează pe LCD împreună cu temperatura și pH -ul apei. În cazul în care task -ul nu reușește să citească ora din
coadă nu va avea loc preluarea semaforului, drept urmare, nu va avea loc nici scrierea pe LCD doarece nu s -a putut actualiza noua oră a sistemului .
Fig. 4 -3-8 Task -ul Afișare_meniu_principal
void Citire_DS1307(void *params) {
portTickType d;
d= xTaskGetTickCount();
for (;;)
{
DS1307_READ_DATAS();
send_ora_minut.ora_s = ora_rtc;
send_ora_minut.minut_s = minut_rtc;
xQueueSend(ora_Queue,&send_ora_minut, portMAX_DELAY );
vTaskDelayUntil(&d,1000);
}
}
void Afisare_meniu_princpal(void *params) {
portTickType d;
d= xTaskGetTickCount();
for (;;)
{
if (xQueueReceive (ora_Queue, &(read_ora_minut_ds1307), 300) );
{
ora_ds1307 = read_ora_minut_ds1307.ora_s;
minut_ds1307 = read_ora_minut_ds1307.minut_s;
if( xSemaphoreTake(LCD_Mutex, portMAX_DELAY) == pdTRUE )
{
afisare_ora_meniu_principal();
xSemaphoreGive( LCD_Mutex );
}
LCD_Goto(2,8);
}
vTaskDelayUntil(&d,800);
}
}
31 Task -ul Meniu permite nav igarea prin meniul aplicației, cu ajutorul căruia putem face
toate setările sistemului. Navigarea prin meniu o putem face cu ajutorul celor cinci butoane
(UP, DOWN, LEFT, RIGHT, SELECT) puse la dispoziție de modulul LCD. Toate butoanele
sunt conectate la pinul cu funcționalitate analogică RA0, iar în funcție de valoarea analogică
citită putem distinge ce buton a fost apăsat. Rutina de tratare a conversei AD, ce poate fi
urmărită în ANEXA 5, s-a ales să se execute la fiecare 0.2 secude după ce s -au făcut mai
multe teste pentru a reuși captarea fiecărei apăsări de buton. Navigarea prin meniu s -a
implementat cu ajutorul unui automat de stare prezentat în Figura 4 -3-7, unde sunt trecute
stările principale ale meniului . Întregul cod ce a fost scris pentru navigarea prin meniu poate fi
urmărit în ANEXA 4.
Fig. 4 -3-7 Automatul de stare pentru meniu
L
R
S
R/L
R/L
U/D
U/D
U/D
U/D
R/L
R/L
S
S
S/R/L/ U/ D
c + S
d + S
a + S
d + S
D
U
S
S
Meniu
principal
Meniul setări
Intervale
iluminare
Setare pH și
vizualizare oră
hrănire
Setare pompă
micronutrienți
Setare oră&dată
Setare pompă
macronutrienți
Vizualizare
oră&dată
Setare
dată
Setare
oră
Cantinate
ON/OFF
pompă
Oră
pornire
Cantinate
ON/OFF
pompă
Oră
pornire
Testare pompă
micronutrienți
Testare pompă
macronutrienți
32 Deoarece toate butoanele modulului LCD sunt conectat e la un singur pin cu
funționalitate analogică a fost nevoie de o serie de teste pentru a defini intervalele de valori
pentru fiecare buton în parte. Valorile finale obținute pot fi urmărite în Figura 4- 3-8.
void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt( void)
{
// Butoane LCD
if(ADC1BUF0>=3000)
{
test='N';
}
if(ADC1BUF0<3000 && ADC1BUF0>2000) //SELECT
{
buton='S';
}
if(ADC1BUF0<=2000 && ADC1BUF0>1300) //LEFT
{
buton='L';
test='L';
}
if(ADC1BUF0<=1300 && ADC1BUF0>700) //DOWN
{
buton='D';
}
if(ADC1BUF0<=700 && ADC1BUF0>150) //UP
{
buton = 'U';
}
if(ADC1BUF0<=150 && ADC1BUF0>=0) //RIGHT
{
buton = 'R';
test='R';
}
IFS0bits.AD1IF = 0; // Achita intreruperea convertorului AD
}
Fig. 4 -3-8 Conversia AD pentru butoanele LCD -ului
Task -ul Afișare_oră_setări afișează ora și data sistemului atunci când utilizatorul
accesează varianta c)View, din meniul în care se setează ora și data sistemului, pentru a verifica dacă datele setate de către acesta au fost salvate. La fel ca și task -ul
Afisare_meniu_princpal afișează informațiile pe LCD numai după ce a reușit să obțină acces
la resursă.
Task -ul ce se ocupă cu adiția de CO
2 verifică la fiecare minut dacă pH -ul citit de la
sonda de pH, cu ajutorul unei conversii AD prezentată în ANEXA 5, este mai mare decât pH –
ul introdus de utilizator, caz în care se pornește adiția de CO 2. Conversia AD necesară pentru
pH se execută la fiecare 0.2 secunde.
La prima sa execuție, t ask-ul Iluminare , intră în blocare pentru 300ms deoarece s -a
dorit decalarea task -urilor ce au aceași perioadă de rulare pentru a evita timpii mari de
așteptare și eventualele conflicte dintre task -uri. Acesta citește ora sistemului din coada de
mesaje, iar dacă a reușit citirea, verifică dacă la ora respectivă iluminarea ar trebui să
pornească/se oprească. În funcție de situația întâlnită se scrie 1 sau 0 logic pe pinul alocat iluminării. Dacă citirea din coadă nu a putut avea loc, task -ul intră în blocare pentru
33 implementarea perioadei sale. Dacă task -ul ar verifica intervalele și în cazul în care citirea nu
a putut avea loc sistemul ar putea deveni eronat deoarece el ar verifica daca trebuie
aprinsă/oprită iluminarea cu o oră citită anterior. De asemnea, pentru cazul în care utilizatorul
schimbă ora sistemului, s- a făcut o funcție de test ce este apelată în momentul în care se scrie
ora în regiștrii ceasului de timp real. Această funcție verifică în ce stare ar trebuie sa fie iluminarea în acel caz (oprită/pornită) și, dacă este cazul, comută starea pinului și poate fi
urmărită în ANEXA 7
.
Task -ul prezentat în Figura 4 -3-7 se ocupă cu fertilizarea de micronutrienți. La prima
sa execuție, task -ul Pompă1, intră în blocare pentru 100ms deoarece s- a dorit decalarea task –
urilor ce se execută la fiecare minut pentru a evita timpii mari de așteptare și eventualele conflicte dintre task -uri. Prima dată se citește ora sistemului din coada de mesaje. Dacă
aceasta a avut loc, se verifică dacă programul pentru pompa ce se ocupă cu fertilizarea de micronutrinți a fost pornită. În caz afirmativ, dacă ora sistemulu i corespunde cu ora setată de
utilizator pentru începerea fertilizării, se pornește pompa prin generarea semnalului PWM și
va fertiliza cantitatea de fertilizant setată. Codul scris pentru genearrea semnalelor PWM
poate fi urmărit în ANEXA 6.
Task -ul ce s e ocupă cu fertilizarea de macronutrienți este implementat asemănător cu
cel pentru fertilizarea de micronutrienți. Acesta a fost decalat la prima sa execuție cu 200ms.
Dacă reușește sa citească ora sistemului, și dacă programul pentru macronutrinți este pornit,
verifică dacă ora sistemului corespunde cu cea introdusă de utilizator, dupa care pornește fertilizarea prin generarea semnalului PWM respectând cantitatea de fertilizant setată.
Fig. 4 -3-7 Task -ul Pompă1
void Pompa1(void *params)
{
portTickType d;
vTaskDelay(100);
d= xTaskGetTickCount();
for (;;)
{
if (xQueueReceive(ora_Queue,&(read_ora_minut_ds1307),40000 ));
{
ora_ds1307 = read_ora_minut_ds1307.ora_s;
minut_ds1307 = read_ora_minut_ds1307.minut_s;
if(pompa1_on==1)
{
if(ora_p1==ora_ds1307 && minut_ds1307==minute_p1)
{
P2DC1 = 0x8000;
if(cant_p1==1)
{
vTaskDelay(5000);
}
else
{
vTaskDelay(5000+cant_p1*1000);
}
P2DC1 = 0x0000;
}
}
}
vTaskDelayUntil(&d,60000);
}
}
34 Task -ul Hrănir e, prezentat în Figura 4 -3-8, dacă reușește citirea orei sistemului din
coada de mesaje, compară ora sistemului cu ora setată pentru hrănire. În cazul în care task -ul
nu reușește să citească din coada de mesaje este dispus să aștepte timp de 40 de secunde
pentru citirea informașiei. Dacă cele două date , cea citită din coada de mesaje și cea setată
pentru hrănire, sunt idententice, iar resursa necesară trimiterii pe serială este liberă, se trimite
comanda către NodeMCU la care es te conectat motorul pas cu pas necesar mecanismului de
hrănire. La primirea comenzii de “start”, modulul NodeMCU porne ște motorul pas cu pas
pentru hrănirea peștilor. În cazul în care resursa este ocupată se așteaptă eliberarea acesteia.
Ora de hrănire est e setată automat la o oră după activarea primului interval de iluminare. Dacă
citirea din coada de mesaje nu a putut avea loc, task -ul intră în blocare pentru implementarea
perioadei sale. La prima execuție a task -ului Hrănir e, intră în blocare pentru 400m s deoarece
s-a dorit decalarea task -urilor ce se execută la fiecare minut pentru a evita timpii mari de
așteptare și eventualele conflicte dintre task -uri.
void Hranire (void *params)
{
portTickType d;
vTaskDelay(400);
d= xTaskGetTickCount();
for (;;)
{
if (xQueueReceive(ora_Queue,&(read_ora_minut_ds1307),40000 ));
{
ora_ds1307 = read_ora_minut_ds1307.ora_s;
minut_ds1307 = read_ora_minut_ds1307.minut_s;
if(ora_hranire==ora_ds1307&& minut_hranire==minut_ds1307)
{
if(xSemaphoreTake( Sem_seriala,portMAX_DELAY )==pdTRUE )
{
vSerialPutString(NULL,"START\ n",comNO_BLOCK);
vTaskDelay(100);
xSemaphoreGive( Sem_seriala );
}
}
}
vTaskDelayUntil(&d,60000);
}
}
Fig. 4 -3-8 Task -ul Hrănire
Task -ul care transmite toate informațiile sistemului către modulul NodeMCU intră în
blocare până când primește comanda de „update” de la acesta. În cazul în care dsPIC -ul
primește prin interfața serială comanda „u”, se fac calculele necesare pentru conversia datelor în string, după care task -ul cere accesul la resursa ce se ocupă cu sincronizarea pe serială.
După ocuparea semaforului, dsPIC -ul trimite toate informațiile sistemului către modulul
NodeMCU, informații ce vor fi afiș ate pe server -ul web.
Toate task -urile sistemului pot fi urmărite în ANEXA 3.
35
Capitolul 5. Rezultate experimentale
Realizarea sistemului final a implicat crearea unui suport din plexiglas transparent ce
are amplasate: placa cu dsPIC, un ceas de timp real, două relee necesare pentru iluminare și
adiția de CO 2, modulul pentru sonda de pH, modulul pentru motorul pas cu pas și un modul
NodeMCU. S -a ales, ca în afara machetei, să rămână cele două pompe necesare pentru
fertilizarea cu micronutrienți și macronutrienți, senzorul de temperatură, sonda de pH și hrănitorul ce funcționează cu ajutorul unui motor pas cu pas. Varianta curentă a sistemului
obținut este prezentată în Figura 5- 1.
Fig. 5 -1 Prototipul final
În prima etapă s- au realizat teste folosind doar componentele conectate la dsPIC, fară
a comunica prin interfața serială cu modulul NodeMCU. După ce s- a verificat dacă în meniul
principal sunt afișate informațiile corecte privind ora, temperatura și pH -ul apei, s-a trecut la
testarea fiecărei funcționalități în parte. Prima dată a fost testată scrierea și citirea ceasului de
timp real deoarece în funcție de ora sistemului se pot seta toate funcționalitățile de bază ale acestuia. Următorul pas a constat în testarea pompei ce se ocupă cu fertilizarea de
micronutrienți. S -a verificat dacă, atunci cand programul de fertilizare este pornit, pompa
pornește la ora setată de utilizator și dacă fertilizează cantitatea de micronutrienți setată. Același ansamblu de teste s -a făcut și pentru pompa ce se ocupă cu fertilizarea de
macronutrienți. În continuare am testat dacă iluminarea funcționează conform intervalelor introduse de utilizator și s -au făcut și teste pentru cazul în care se schimbă ora sistemului, iar
iluminarea ar trebui să își comute starea. De asemenea, s- a verificat și dacă adiția de CO
2
funcționeză corespunzător introducând sonda de pH în concentrații diferite.
A doua etapă a constat în utilizarea a cât mai multor funcționalități în același timp.
După ce s -a setat ora sistemului s -au programat cele două pompe și iluminarea să pornească în
același timp pentru a ne asigura că nu vor exista conflicte între ele. De asemenea a fost pornită și adiția de CO
2.
După ce s- au verificat dacă toate funcționalitățile conect ate la dsPIC funcționează în
parametrii normali, s -a trecut la următoarea etapă, și anume la comunicarea prin interfața
serială cu modulul NodeMCU. În primă fază s -a testat dacă, atunci când ora sistemului
36
corespunde cu ora setată pentru hrănire, dsPIC -ul trimite comanda de pornire a motorului pas
cu pas către NodeMCU. În continuare s -a verificat și dacă informațiile trimise de către dsPIC,
atunci cand primește cererea de “update” de la NodeMCU, corespund cu informațiile primite
și afișate pe server -ul web din Figura 5- 2.
Fig. 5-2 Server web
Perioadele și prioritățile sarcinilor c e rulează pe aplicația bazată pe FreeRTOS sunt
prezentate în Tabelul 5 -1. Task -ul Citire_DS1307 are prioritatea cea mai mare deoarece el
este responsabil cu programarea automată a facilităților sistemului, iar dacă acesta nu ar reuși să actualizeze ora sistemului la fiecare minut nu s -ar mai face fertilizarea și hrănirea automată
la ora stabilită de utilizator prin interfața grafică . Următorul ca prioritate este task -ul Meniu
întrucât acesta ajută la navigarea prin interfața grafică. De asemenea se poate observa că acesta are perioada cea mai mică deoarece s- a dorit captarea fiecărei apăsări de buto n. Task-
urile Afișare_meniu_principal și Afișare_oră_setări au prioritatea 5 fiindcă se ocupă cu
afișarea temperaturii, pH -ului, timpului și anume cu afișarea orei și datei sistemului. S -a ales
aceeași prioritate pentru ambele task -uri pentru că ele nu se vor executa în același timp
deoarece afișarea pe LCD este part ajată printr- un semafor mutex. Task -urile cu perioadă de 1
secundă au prioritățile în funcție de importanța acțiunilor în cadrul sistemului. Cel mai prioritar dintre acestea fiind task -ul care se ocupă cu hrănirea peștilor, urmat de task -ul ce se
ocupă de adiția de CO
2, task -urile ce se ocupă cu fertilizarea de micronutrienți și
macronutrienți, iar ultimul este task -ul ce se ocupă de iluminare. Pentru task -urile ce se ocupa
cu fertilizare de micronutrinți și macronutrienți s -a ales aceeași prioritate, dar s -a avut în
vedere ca la prima execuție a fiecarui task să fie o decalare între acestea. Task -ul
Task_SerialTX , ce are prioritatea 3, este periodic deoarece se dorește trimiterea informațiilor
atunci când serverul web îi transmite cerere de „update”. De asemenea, cand s- a ales
prioritataea acestui task, s- a avut în vedere să aibă o prioritate mai mică decât task -ul Hrănire
deoarece ambele task -uri comunică prin interfața serială și s- a considerat că este mai
importnat sa se execute prima dată task -ul ce se ocupă de hrănirea peștilor.
37 Denumire Task Prioritate
Tsask Perioada
(ms)
Citire_ DS1307 7 1000
Meniu 6 150
Afișare_meniu_princ ipal 5 800
Afișare_or ă_setări 5 1000
CO2 3 60000
Pomp ă1 2 60000
Pomp ă2 2 60000
Iluminare 1 60000
Hrănire 4 60000
Task_SerialTX 3 –
Tabel 5-1 – Caracteristicile task -urilor
Meniul principal, prezentat în Figura 5 -3, oferă posibilitatea de a vizualiza ora curentă,
valoarea pH -ului și temperatura apei. De asemenea oferă și posibilitățile : de a seta intervalele
de iluminare prin apăsarea butonului Up, de a seta nivelul PH -ului dorit al apei și de a
vizualiza ora de hrănire prin apăsarea butonului Down, de a testa pompele de fertilizare cu micronutrienți prin apăsarea butonului Left și macronutrienți prin apăsarea butonului Right,
precum și de a seta ora, data sistemului și programul pompelor prin apăsarea butonului Select.
Meniul pentru iluminare va afișa intervalele în care este activă iluminarea. C ursorul s e
va pozi ționa sub valorile ce se doresc a fi modificate folosind butoanele Left și Right , apoi se
vor ac ționa butoanele Up și Down pentru a incrementa și decrementa valorile acestora cu ±30
minute . Pentru a finaliza ș i salva datele introduse, se va acț iona butonul Select , ceea ce va
face ș i revenirea în meniul principal.
Meniul destinat hrănirii și pH -ului va afișa pH -ul dorit și ora de hrănire ce este setată
automat la o oră după activarea primului interval de iluminare . Nivelul pH -ului dorit poate f i
modificat prin incrementarea și decrementarea acestuia cu 0.1 folosind butoanele Up și Down. De asemenea pH -ul minim ce poate fi setat este 5.0, iar maximul este 9.9. După setarea pH –
ului dorit, se va apăsa butonul Select pentru a salva informațiile introduse și pentru a reveni în meniul principal.
Apăsarea butonului Select din meniul principal va accesa meniul setări, prezentat în
Figura 5- 4, ce permite accesul la următoarele funcții implementate:
a) Setarea Timpului și a Datei
b) Meniul Pompei 1 ce se ocupă cu fertilizarea de micronutrienți
c) Meniul Pompei 2 ce se ocupă cu fertilizarea de macronutrienți
d) Back (Revenire în meniul principal)
Folosind butoanele Left, Up, Right, Down se poate naviga prin meniul curent, iar
butonul Select se utilizează pe ntru a accesa opțiunea dorită.
38 Fig. 5 -3 Meniul principal Fig. 5 -4 Meniul setări
Meniul ce se ocupă cu setarea orei și datei sistemului este prezentat în Figura 5 -5 și va
permite folosirea urm ătoarelor f uncții:
a) Hour (Setarea orei)
b) Date (Setarea datei)
c) View (Vizualizarea Orei & Datei curente)
d) Back (Revenirea î n meniul anterior)
Folosind butoanele Left, Up, Right, Down se poate naviga prin meniul curent, iar
butonul Select se utilizează pentru a accesa opțiunea dorită.
Meniul „Hour” permite setarea orei sistemului. Butoanele Left și Right plasează
cursorul în dreptul valorii ce se dorește a fi modificată, în timp ce butoanele Up și Down sunt
folosite pentru a incrementa, respectiv decrem enta valorile. Butonul Select permite salvarea și
revenirea în meniul anterior.
Meniul „Date” permite setarea datei sistemului. Butoanele Left și Right plasează
cursorul în dreptul valorii ce se dorește a fi modificată, iar butoanele Up și Down modifică zilele, lunile și anul sisetmului prin incrementarea și decrementarea valorilor acestora.
Butonul Select permite salvarea și revenirea în meniul anterior.
În meniul „ View” se pot vizualiza informațiile privind data și ora curentă a sistemului.
Apăsarea oricărui buton permite revenirea în meniul anterior.
Meniul P1 ce este destinat fertiliză rii cu micronutrienți din Figura 5- 6 afișează
următoarele elemente: ON/OFF ce semnifică starea curentă a pompei, cantitatea de micronutrienți în ml ce poate lua valori între 1 și 15, ora la care să pornească fertilizarea zilnică, și „Back” pentru revenirea în meniul anterior. Butoanele Left , Up, Right, Down se folosesc pentru a naviga prin meniul curent, iar butonul Select se folosește pentru a modifica valorile parametrilo r acestui meniu.
Meniul P2 ce este destinat fertiliză rii cu macronutrienți afișează aceleași elemente ca
meniul destinat pompei 1 și are implementate aceleași funcționalități.
Fig. 5 -5 Meniul pentru setarea timpului Fig. 5 -6 Meniul pompei 1
39 Capitolul 6. Concluzii
Lucrarea prezintă prototipul unui sistem de timp real destinat monitorizării și
mentenanței unui acvariu. Prototipul are un design modular, fiind compus dintr -o placă
principală cu un microcontroller dsPIC și un modul NodeMCU de tip IoT ce comunică prin interfața serială. Placa cu dsPIC a fost proiectată astfel încât să poată fi conectați toți senzorii
și toate modulele necesare în vederea obținerii unui mediu acvatic optim pentru totalitatea viețuitoarelor din acvariu, precum și minimizarea efortului de me ntenanță prin automatizarea
acestor procese. Astfel, s- a avut în vedere ca plac a cu dsPIC să permită utilizarea unui ceas de
timp real, controlul a două motoare de curent continuu, controlul a două relee, utilizarea unui senzor de temperatură, utilizarea u nei sonde de pH , utilizarea unui modul LCD, precun și
comunicarea prin intefața serială. Aplicația de pe microcontroller -ul dsPIC este bazată pe
sistemul de operare de timp real FreeRTOS și folosește facilitățile acestuia privind controlul
task-urilor, dar și cele privind comunicația și sincronizarea între acestea. Sistemul oferă
facilități privind :
• Fertilizarea automată
• Hrănirea automată
• Iluminarea automată
• Monitorize rea temperatur ii apei
• Monitoriz area nivelul ui pH-ului
• Controlarea pH-ul prin adiție de CO
2
• Afișarea informați ilor sistemului pe un modul LCD
• Afișarea informațiilor sistemului pe un site web generat de către modulul
NodeMCU
• Controlarea de la distanță a hrănirii
Sistemul pentru monitorizarea și mentenanța acvariilor funcționează cu ajutorul unui
ceas de timp real c e este setat în prealabil de către utilizator. Datorită RTC -ului, sistemul a
capăt at o flexibilitate suplimentară ce a ajutat la temporizarea lui. O facilitate ce este
controlată în funcție de ceasul de timp real este iluminarea. Aceasta funcționează pe baza a
două intervale active de timp introduse de către utilizator cu ajutorul interfeței grafice afișate.
O altă facilitate este hrănirea, ce se face automat la o oră după activarea primului interval de
iluminare. Motorul pas cu pa s, ce a fost utilizat pentru mecanismul de hrănire, este conectat la
modulul NodeMCU. Pentru aceasta, placa cu dsPIC va trebui să trimită o camandă de start
catre NodeMCU atunci când ora sistemului corespunde cu ora de hrănire . O ultimă facilitate
implemen tată cu ajutorul RTC -ului este fertilizarea cu micronutrienți și macronutrie snți.
Utilizatorul poate seta dacă programul celor două pompe este pornit sau oprit, poate seta ora
la care să înceapă fertilizarea cu micronutrinți și macronutrienți și cantitatea de fertilizanți
folosind interfaț a grafic ă. Toate informațiile din sistem sunt afișate pe o pagină web, iar cu
ajutorul tehnologiei IoT se poate controla de la distanță hrănirea . Toate facilitățile sunt
controlate cu ajutorul pl ăcuței principale cu dsPIC, aceasta comunicând prin interfața seriala
cu modul ul NodeMCU de tip IoT .
Activitatea viitoare va include controlul și monitorizarea la distanță a tu turor
dispozitivelor din sistem, stocarea parametrilor înregistrați într -o bază de date, precum și
salvarea datele într -o memorie locală pentru c azul în care vor exista căderi de curent .
40 Bibliografie
[1] Chiu, M.C., A Multi -functional Aquarium Equipped with Automatic Thermal
Control/Fodder -Feeding/water Treatment using a Network Remote Control System.
Information Technology Journal, 9(7), pp.1458- 1466, 2010
[2] M.Z.A Rashid, S.K.S Nordin, Design and Control of Aquarium Water
Management System using Programmable Logic Controller (PLC) , 2012
[3] Md. NasirUddin, Mm Rashid, Mg Mostafa, Belayet H, Sm Salam, Na Nithe, Mw
Rahman& A Aziz, Development of Automatic Fish Feeder , International Islamic University
Malaysia, 2016
[4] Adarsh Kaimal, Smart Aquarium , IOSR Journal of Electrical and Elec tronics
Engineering (IOSR -JEEE), 2017
[5] Prasad, A.N., Mamun, K.A., Islam, F.R. and Haqva, H., 2015, December. Smart
water quality monitoring system . Asia-Pacific World Congress on Computer Science and
Engineering (APWC on CSE) (pp. 1- 6). IEEE, 2015
[6] Taotao Xu, Feng Chen, An Embedded Fuzzy Decision System for Aquaculture.
IEEE Workshop on Electronics, Computer and Applications. (pp.351- 353). IEEE Conference
Publications , August 2014
[7] Thiyraash A/L David, Aquarium Monitoring System , Universiti Tunku Abdul
Rahman, Faculty of Information and Communication Technology, 2017
[8] Carl Jasper L. Cruz, Ariane Jaira D. Fulla, Patrick Lawrence D. Sorezo, and Dr.
Neil P. Balba , Aquaculture maintenance and monitoring system for cold water aquarium ,
LPU –Laguna Journal of Engineering and Computer Studies , Vol. 4 No. 1, August 2018
[9] ***, DS1307, 64 x 8, Serial, I2C Real -Time Clock , Maxim Integrated , 2015
[10] ***, MAX14870/MAX14872, 64 x 8, Compact 4.5V to 36V Full -Bridge DC Motor
Drivers, Maxim Integrated , 2014
[11] https://www.pololu.com/product/2961
[12] ***, LCD Keypad Shield, D -Robotics UK , 2011
[13] ***, DS18B20, Programmable Resolution 1- Wire Digital Thermometer ,
Maxim/Dallas Semiconductor , 2008
[14] R. Barry , FreeRTOS – User Manual, 2007.
[15]R. Goyette, “ An Analysis and Description of the Inner Workings of the FreeRTOS
Kernel ”, 2007.
41 ANEXE
POZA SURSA
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: SPECIALIZAREA: INFORMATICĂ APLICATĂ LUCRARE DE DIPLOMĂ PROIECTAREA ȘI REALIZAREA UNUI SISTEM DE MONITORIZARE ȘI MENTENANȚĂ A UNUI ACVARIU Coordanor… [628252] (ID: 628252)
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.
