SPECIALIZAREA: INFORMATICĂ APLICATĂ LUCRARE DE DIPLOMĂ PROIECTAREA ȘI REALIZAREA UNUI SISTEM DE MONITORIZARE ȘI MENTENANȚĂ A UNUI ACVARIU Coordanor… [309172]
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
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 peristaltică 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. Aplicația bazată pe FreeRTOS 28
Capitolul 5. Rezultate experimentale 35
Capitolul 6. Concluzii 39
Bibliografie 40
ANEXE 41
[anonimizat], [anonimizat]-ului și iluminatul. Acești parametri sunt foarte importanți pentru supraviețuirea vieții acvatice din acvariu. [anonimizat], supravegherea umană este adesea ineficientă. [anonimizat], calculatoarelor dar și al conceptului de IoT (“Internet of Things” – engl.) [anonimizat]. [anonimizat], prompt, [anonimizat]-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 nesupravegheat mult timp.
[anonimizat]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. [anonimizat], de aceea ar trebui să intervenim pentru a nu pierde plantele. Se poate spune că fertilizanții sunt hrana plantelor. [anonimizat], trebuie să existe și o iluminare corespunzătoare și o adiție de CO2. Dacă CO2-[anonimizat]. Adiția de dioxid de carbon prezintă numeroase avantaje atât pentru plante cât și pentru pești: [anonimizat], [anonimizat], se inhibă dezvoltarea algelor și se evită depunerile 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 lumina 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 calculatorul personal ca și controller pentru gestionarea senzorilor. Toți senzorii au fost conectați la sistemul de control al calculatorului prin intermediul unui modul ADC(“Analog-to-Digital Converter”-engl.), ce convertește semnalul analogic de la senzori în semnal digital astfel încât calculatorul să poată citi și clasifica valorile. Apoi, prin intermediul 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 rapid 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ă produsul este alcătuit și dintr-un calculator ce controlează și gestionează întreg sistemul. În al doilea rând, utilizarea calculatorului face dificilă mutarea produsului.
O altă lucrare a constat în proiectarea și controlul unui sistem de gestionare a apei dintr-un acvariu 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 poate 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 proiectat un sistem responsabil cu hrănirea autoamtă a peștilor[3]. Acesta utilizează un hrănitor automat ce combină un sistem mecanic și unul electric pentru a forma un dispozitiv ce scutește deținătorul acavriului de această responsabilitate. Un astfel de dispozitiv este folositor pentru 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 temperatură și GSM(“Global System for Mobile”-enfl). Dispozitivul va hrănii peștii prin eliberarea hranei din recipient, printr-un orificiu. Dimensiunea orificiului este controlată de o piedică conectată 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, utilizatorul este notificat printr-un mesaj, astfel încât acesta să asigure umplerea recipientului.
Sistemul 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 acvariu. Și în acest proiect PLC-ul este creierul ce controlează sistemul.
Un sistem ce se ocupă cu monitorizarea și întreținerea 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. Toate 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 utilizarea unui Raspberry Pi. Rolul acestui sistem este de a monitoriza 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ă, sistemul va declanșa o alarmă și va trimite un mesaj pentru a notifica 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 identifica 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 clariate a apei mică. Un ultim senzor folosit este cel de temperatură. Toți senzorii sunt integrați la un microcontroller. Pentru monitorizarea datelor 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 microcontroller 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 dezvoltarea 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 controla pH-ul apei prin adiție de CO2.
Sistemul pentru monitorizarea și mentenanța acvariilor va funcționa cu ajutorul unui ceas de timp real (RTC – “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ănirea, 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 interfețe grafice. Toate informațiile din sistem vor fi afișate pe o pagină web, iar cu ajutorul tehnologiei IoT va exista 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 acvariu, 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 concluziile în urma realizării acestei lucrări.
Componente hardware utilizate
Ceasul de timp real DS1307
Ceasul de timp real DS1307 este un ceas/calendar în totalitate codat în BCD(“Binary-Coded Decimal” – engl.), funcționând cu un voltaj scăzut(5V). Adresa și data sunt transferate printr-o interfață serială I2C (“Inter-Integrated Circuit” – engl.). Acesta 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.
Avantajele utilizării DS1307-ului
Capsula DS1307 prezintă următoarele avantaje și caracteristici:
Administrează în totalitate funcțiile de contorizat timpul.
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
56-Byte, Baterie suplimentară, RAM cu scop general și număr nelimitat de scrieri
Semnal dreptunghiular pentru ieșire, programabil
Port serial simplu ce interfațează majoritatea microcontroller-elor
Interfață serială I2C
Operațiile de putere redusă extind durata de execuție
Utilizează mai puțin de 500nA atunci când funcționează cu bateria suplimentară
Detecție automată a căderii de tensiune
8 pini DIP(“Dual In-line Package” – engl.) sau 8 pini SOIC(“Small Outline Integrated Circuit” – engl.) ce minimizează spațiul necesar
Temperatură industrială opțională:
Sunt suportate de la -40o C până la +85o C
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 I2C. 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 VCC scade sub 1.25 x VBAT, dispozitivul întrerupe accesul în rulare și resetează adresa sa “counter”. Intrările dispozitivului nu sunt recunoscute în acest timp pentru a preveni cantități eronate de scriere pe dispozitiv de la sistemul de toleranță. Odată ce alimentarea VCC scade sub nivelul VBAT, dispozitivul comută spre un mod de curent redus cu baterie de rezervă. Odată cu revenirea la starea inițială, dispozitivul comută de la baterie la alimentarea VCC în momentul în care VCC este peste VBAT +0.2V și recunoaște intrările atunci când VCC este mai mare de 1.25 x VBAT.
În Tabelul 2-1-2-1 este prezentată descrierea pinilor ceasului de timp real.
Tabel 2-1-2-1 Pinii ceasului de timp real
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
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 coresund 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.. Înregistră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 selectare 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 de la cifra 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ă 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 I2C 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ă.
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(SQWE). 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 frontul 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.
Tabel 2-1-3-2 Frecvențele ieșirii semnalului dreptunghiular
Magistrala I2C
Ceasul de timp real DS1307 suportă protocolul I2C. 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 slave-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 I2C.
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 pozitiv, vor 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 date, 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 reprezintă date valide atunci când, după o condiție de START, linia de date 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 receptor 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ă aibă 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 pentru 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:
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.
Transfer de date de la transmițător slave la receptor 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 DS1307 poate funcționa în următoarele două moduri:
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 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 ceasul de timp real, acesta confirmând trnsferul. Masterul poate transmite atunci zero sau mai mulți octeți de date, în timp ce DS1307 confirmă fiecare octet recepționat. Registrul pointer se incrementează automat după ce fiecare octet de date este scris. Master-ul va genera o condiție de STOP pentru a termina scrierea de date.
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 fiind î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 ne-confirmare pentru a finaliza citirea.
Plăcile 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 populat 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 Modulation”-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ță pentru a activa automat limitarea curentului
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-1, de mai jos, sunt prezentați pinii plăcuței de forță POLOLU 2961, și descrierea acestora.
Tabel 2-2-1 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ă, VIN. Pinul VM furnizează un acces convenabil la alimentarea cu protecție inversată.
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 ca HIGH pentru a opri ieșirile motorului, ceea ce poate fi benefic în cazul în care se dorește mersul în gol. Pinul EN este readus pe LOW cu ajutorul unui rezistor pull-down de 100 KΩ astfel încât driverul este activat în mod implicit.
Tabelul 2-2-2 evidențiază modalitățile de operare ale motorului:
Tabel 2-2-2 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 VDD și GND, incluzând și scurtcircuitele la GND, VDD și între M1 și M2 prin 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ă condiția de curent excesiv continuă mai mult de 2ms, 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 este 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 bornele 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 motorului îș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 parcursul 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ălzirii, inductanța motorului va împinge curentul prin diodele interne M1 și M2, forțând motorul într-o decelerare rapidă cu voltajul peste bornele VDD.
M1 și M2 vor fi activate automat când temperatura va scădea sub 150℃.
Modulul LCD cu Butoane
Modul LCD(“Liquid Crystal Display”-engl.) cu butoane(LCD Keypad Shield) include un display LCD cu 2 linii x 16 coloane și 6 butoane de tip „push”. Pinii 4, 5, 6, 7, 8, 9 și 10 sunt folosiți pentru interfața LCD-ului, iar pinul 0, cu funționalitate analogică, este folosit 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 selectarea 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
Specificațiile 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 analogici 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.
Tabel 2-3-1 Funcționalitățile pinilor modulului
Senzororul 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ă”, eliminâ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ării ș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 externe
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 termostatic, 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ă se poate configura de către utilizator între 9 și 12 biți, corespunzând incrementărilor de câte 0.5°C, 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 iniț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 parazită”, 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 conversie. 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ă DS18B20 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.
Pompa peristaltică
Pompa peristaltică din Figura 2-4-1, ce a fost utilizată pentru fertilizarea de micronutrienț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ă
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 dispune 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
Interval 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.
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țiometre, 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țiometrul 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.
Proiectarea și realizarea plăcii sistemului
Realizarea plăcii sistemului de monitorizare și mentenanță a unui acvariu a avut următoarele cerințe de proiectare:
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 CO2
afișarea informațiilor sistemului pe un modul LCD cu butoane
comunicarea prin interfața serială
Pentru placa sistemului s-a ales un microcontroller dsPIC33FJ64MC802 produs de Microchip. DsPIC33FJ64MC802 este un microcontroller de 16 biți cu un set îmbunătățit de periferice, compatibil cu aplicațiile de procesare și control digital de semnal. Microcontroller-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 prezentate 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 utilizați pentru control, iar ceilalți 4 sunt pini de date
1 pin cu funcționalitate analogică 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 CO2
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.
Tabel 3-1 Alocarea pinilor
Schema electrică a plăcii
A doua etapă a dezvoltării plăcii a constat în realizarea schemei electrice 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:
Blocul de alimentare
Blocul celor două plăci de forță
Blocul LCD-ului
Bloculul ceasului de timp real
Blocul de alimentare, prezentat în Figura 3-1-1, este alcătuit dintr-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 microcontroller-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ță
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 celor 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ă, alimentarea de 3.3V, la pinii de ASDA și ASCL ai microcontroller-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 DS1307 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
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ăurile necesare pentru componente și viasuri.
În Figura 3-2-2, de mai jos, este prezentată placa sistemului în urma imprimării cablajului.
Fig. 3-2-2 Circuitul imprimat rezultat
Ultima etapă a constat în lipirea componentelor pe placă și alimentarea acesteia.
În Figura 3-2-3 este prezentată placa cu dsPIC, în starea 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
Arhitectura software
Sistemul de operare în timp real reprezintă un sistem de operare ce este proiectat pentru aplicaț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 principal 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 viteza 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 dependente de procesor
Funcționalitate complexă
Programarea se face în limbaj de nivel înalt
Multithreading – procesul poate fi format din unul sau mai multe fire de execuție
Multiprocesare – 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.
Facilitățile sistemului de operare în timp real FreeRTOS
FreeRTOS facilitează obținerea unei înțelegeri corecte a modului în care funcț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 aplicate 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 sincroniză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 ce 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”), în așteptare(așteaptă un eveniment temporal – ”waiting”) și suspendată (nu este disponibilă pentru programare), ce sunt prezentate în Figura 4-1-1[15].
Fig. 4-1-1 Starile posibile ale unui task
Comparativ 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 ne-preemptivă) este supravegheată de un planificator, în funcție de prioritățile alocate. Sistemul de operare FreeRTOS de timp real include servicii API care 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.[16] 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 FreeRTOSConfig.h. Definițiile sale specifice indică tipul de nucleu (preemptiv sau cooperativ), frecvența microcontrollerului, facilitățile de urmărire permise, mecanismele de comunicare interconectate și mecanismele de sincronizare angajate etc.
Aplicația bazată pe FreeRTOS
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 CO2 și o plăcuță NodeMCU ce are la rândul ei conectat un motor pas cu pas necesar mecanismului de hrănire. Arhitectura hardware 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
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 mesaje 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ă variabile de tip întreg folosite pentru trimiterea și recepția orei și minutului sistemului.
Fig. 4-3-3 Definirea structurii Ora_ds1307
Coada de mesaje a fost creată astfel încât să transmită prin structura realizată anterior ora sistemului. Pentru aceasta s-a inițializat coadă 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 interfaț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 bazată pe FreeRTOS
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 următoarea 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 structura 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-7, 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 citirea orei 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-7 Task-ul Afișare_meniu_principal
Task-ul Meniu permite navigarea 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-8, 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-8 Automatul de stare pentru meniu
Deoarece toate butoanele modulului LCD sunt conectate 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. Intervalul final de valori obținut poat fi urmărit în Figura 4-3-9.
Fig. 4-3-9 Conversia AD necesară 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 CO2 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 CO2. Conversia AD necesară pentru pH se execută la fiecare 0.2 secunde.
La prima sa execuție, task-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ă/să 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 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ă/stinsă iluminarea cu o oră citită anterior. De asemnea, pentru cazul în care utilizatorul schimbă ora sistemului, s-a creat 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 trebui sa fie iluminarea în acel moment (oprită/pornită) și, dacă este cazul, comută starea pinului. Funcția de test poate fi urmărită în ANEXA 7.
Task-ul prezentat în Figura 4-3-10 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 micronutrienți a fost pornit. În caz afirmativ, dacă ora sistemului 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 generarea semnalelor PWM poate fi urmărit în ANEXA 6.
Task-ul ce se 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, după care pornește fertilizarea prin generarea semnalului PWM respectând cantitatea de fertilizant setată.
Fig. 4-3-10 Task-ul Pompă1
Task-ul Hrănire, prezentat în Figura 4-3-11, 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 comandă către NodeMCU la care este 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. Timpul de hrănire este 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 sa execuție, task-ul Hrănire, intră în blocare pentru 400ms 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.
Fig. 4-3-11 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.
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 CO2, 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 CO2 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 CO2.
După ce s-au verificat dacă toate funcționalitățile conectate 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 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 ce 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 buton. 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 partajată 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 CO2, 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.
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. Cursorul se 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 fi 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ă pentru a accesa opțiunea dorită.
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 funcț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 decrementa 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 parametrilor 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.
Toate meniurile și întreg ghidul de utilizare poate fi urmărit în ANEXA 8.
Fig. 5-5 Meniul pentru setarea timpului Fig. 5-6 Meniul pompei 1
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 mentenanță prin automatizarea acestor procese. Astfel, s-a avut în vedere ca placa 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 unei sonde de pH, utilizarea unui modul LCD, precum ș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ă
Monitorizerea temperaturii apei
Monitorizarea nivelului pH-ului
Controlarea pH-ul prin adiție de CO2
Afișarea informațiilor 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 ce este setat în prealabil de către utilizator. Datorită RTC-ului, sistemul a căpătat 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 pas, ce a fost utilizat pentru mecanismul de hrănire, este conectat la modulul NodeMCU. Pentru activarea hrănirii, placa cu dsPIC va trebui să trimită o comandă de start către NodeMCU atunci când ora sistemului corespunde cu ora de hrănire. O ultimă facilitate implementată cu ajutorul RTC-ului este fertilizarea cu micronutrienți și macronutrienți. Utilizatorul poate seta dacă programul celor două pompe este pornit sau oprit, poate seta ora la care să înceapă fertilizarea cu micronutrienț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 modulul NodeMCU de tip IoT.
Activitatea viitoare va include controlul și monitorizarea la distanță a tuturor dispozitivelor din sistem, stocarea parametrilor înregistrați într-o bază de date, precum și salvarea datele într-o memorie locală pentru cazul în care vor exista căderi de curent.
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 Electronics 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] http://patr.ac.tuiasi.ro/Doc/curs/Curs_01.pdf
[16]R. Goyette, “An Analysis and Description of the Inner Workings of the FreeRTOS Kernel”, 2007.
ANEXA 1 – Schema electrică a plăcii sistemului de monitorizare și mentenanță a unui acvariu
ANEXA 2 – Cablajul plăcii sistemului de monitorizare și mentenanță a unui acvariu
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… [309172] (ID: 309172)
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.
