text: bTemperatureb , [304553]
Cuprins
1. Introducere 6
2. Descrierea sistemului 8
2.1. Senzori pentru măsurarea parametrilor 8
2.1.1. Senzorul de temperatură și umiditate DHT11 8
2.1.2. Senzorul higrometru capacitiv 10
2.1.3. Senzorul de tensiune 12
2.2. Convertoare coborâtoare de tensiune 14
2.2.1. Convertorul coborâtor de tensiune LM2596 14
2.2.2. Convertorul coborâtor de tensiune LM317 15
2.3. [anonimizat]1115 17
2.4. NodeMCU v3 ESP8266 18
3. Realizarea practică 21
3.1. Tema aleasă 21
3.2. Schemele proiectului 21
3.2.1. Schema bloc a sistemului 21
3.2.2. Schema electrică a sistemului 22
3.2.3. Schema logică a sistemului 23
3.3. Unitatea de control NodeMCU v3 25
3.4. Blocurile de relee 26
3.5. Pompa de apă 28
3.6. Valvele electromagnetice 28
3.7. Convertoarele coborâtoare de tensiune 29
3.8. [anonimizat]115 30
3.9. Senzorul de tensiune 31
3.10. Senzorii de umiditate a solului 33
3.11. Sursa de alimentare 33
3.12. Interfața web 35
4. Rezultate și măsurători experimentale 38
5. Concluzii, avantaje și perspective 44
5.1. Concluzii 44
5.2. Avantaje 44
5.3. [anonimizat] 44
Bibliografie 45
Anexa 1. Codul proiectului 46
1. [anonimizat], [anonimizat] o evoluție fenomenală care tinde să accelereze exponențial cu trecerea timpului. [anonimizat], aparate, mașini, echipamente care să nu aibă cel puțin un mic circuit electronic. [anonimizat] .
Consumatorii de tehnologie ai secolului 21 manifestă o [anonimizat], [anonimizat], automatizările, automobilele,sistemele de irigații etc.
[anonimizat] a software-ului pentru a-și eficientiza produsele dezvoltate. [anonimizat], [anonimizat] a persoanelor din prima și a doua categorie de vârstă să fie de la un nivel mediu spre unul foarte ridicat rezultând o [anonimizat], telecomunicații și altele asemănătoare cu acestea.
Avansul tehnologic a [anonimizat]-le acestora oportunitatea de a-[anonimizat], medicală, [anonimizat].
[anonimizat], [anonimizat]-urilor, [anonimizat], roboți inteligenți etc.
[anonimizat] „Sistem autonom de irigații cu interfață web pentru monitorizarea parametrilor ” este realizat cu componente precum :
microcontroler
module coborâtoare de tensiune
bazin apă
pompă apă
întrerupător alimentare tensiune
valve electromagnetice
baterii
mufe de alimentare
senzor temperatură și umiditate atmosferică
senzori umiditate sol
senzor de tensiune
module relee
convertor analog-digital
Microcontrolerul este un dispozitiv de circuit integrat folosit pentru controlul altor părți ale unui sistem electronic, de obicei cu ajutorul unei unități microprocesor (MPU), memorie și câteva periferice. Aceste dispozitive sunt optimizate pentru aplicații încorporate care necesită atât funcționalitate de procesare cât și integrațiune bună, receptivă cu componentele digitale, analogice sau electromecanice.
Microcontrolerul a jucat un rol fundamental, chiar dominant, în revoluția tehnologică care a modelat viața modernă, fiind un dispozitiv mic, versatil, ieftin, care pot fi programate cu succes nu numai de ingineri electroniști cu experiență ci și de pasionați, studenți și profesioniști din alte discipline.
Lista posibilelor aplicații pentru microcontrolere este foarte lungă încât omit să amintesc toate exemplele. Fiind mobile , la un cost redus , regăsindu-se în dispozitive industriale rezistente , sisteme militare și aerospațiale de ultimă generație, electronică de consum, aceste componente adaptabile, accesibile, ușor de utilizat, sunt un element bun pentru aproape orice produs electronic.
Cel mai obișnuit mod de a face referire la această categorie de circuite integrate este „MCU” dar acetate abreviere este folosită în mod interschimbabil. „Microcontroler” este un nume bine ales deoarece subliniază caracteristicile definitorii ale acestei categorii de produse.
Prefixul “micro” implică mărime, iar termenul „controler” definește o capacitate sporită de a îndeplini funcții de control. Această funcționalitate este rezultatul combinării unui procesor digital și memorie digitală cu hardware suplimentar, special conceput pentru a ajuta microcontrolerul să interacționeze cu alte componente.
Utilizatorii vor folosi uneori termenul „microprocesor” sau „MPU” atunci când se referă la un microcontroler, dar aceste două dispozitive nu sunt neapărat aceleași. Atât microprocesoarele cât și microcontrolerele funcționează ca sisteme de calculatoare mici, integrate, care pot deservi scopuri diferite. Termenul „procesor” este utilizat pentru a identifica un sistem care este format dintr-o unitate centrală de procesare și o anumită memorie , microcontrolerul fiind un dispozitiv care implementează toate funcționalitățile procesorului într-un singur circuit integrat .
Prin comparație, microcontrolerele pun mai mult accent pe module hardware suplimentare care permit dispozitivului să controleze un sistem , mai degrabă decât să execute pur și simplu instrucțiuni și să stocheze date.
Pentru acest proiect am ales NodeMCU v3 care are la bază chip-ul ESP8266, acesta dispunând de 4Mb de memorie flash, frecvență de ceas al sistemului de 80 sau 160 MHz, aproximativ 64Kb memorie RAM utilizabilă și un consum redus de energie, fiind responsabil de funcționarea întregului proiect .
Cele două convertoare coborâtoare de tensiune (LM2596) furnizează tensiunea de5V necesară alimentării ESP8266, module relee și pompa de apă iar tensiunea de 12V necesară pentru funcționarea valvelor electromagnetice este asigurată de un convertor coborâtor de tensiune (LM317).
Bazinul de apă utilizat este destinat pentru alimentarea pompei iar valvele electromagnetice au rolul de a gestiona alimentarea cu apă a magistralei de transport către compartimentele cu sol iar modulele de relee asigură comanda alimentării cu tensiune a valvelor și a pompei de apă.
Senzorul DHT11 asigură monitorizarea temperaturii și umidității ambientale în timp ce senzorii higrometrii măsoară umiditatea solului din cele două compartimente.
Monitorizarea stării acumulatorilor îi revine senzorului voltmetru amplasat pe macheta proiectului.
Interfața web creată afișează parametrii specifici proiectului, cum ar fi temperatura și umiditatea ambientală , umiditatea solului pentru fiecare senzor capacitiv în parte și tensiunea sursei de alimentare.
2. DESCRIEREA SISTEMULUI
2.1 Senzori pentru măsurarea parametrilor
Un senzor este un dispozitiv care răspunde la orice schimbare a fenomenelor fizice sau variabilelor de mediu, cum ar fi căldura, presiunea, umiditatea, mișcarea etc. Această modificare afectează proprietățile fizice, chimice sau electromagnetice ale senzorilor, care sunt procesate în continuare într-o formă mai utilizabilă și mai lizibilă.
Senzorul face parte dintr-un sistem de măsurare, fiind una dintre cele mai importante componente ale acestuia. Este primul element care vine în contact cu variabilele de mediu pentru a genera anumite date.
Senzorii sunt folosiți pentru a măsura o anumită caracteristică a oricărui obiect sau dispozitiv, aceștia trebuind calibrați în raport cu o anumită valoare de referință sau standard pentru o măsurare exactă .
2.1.1. Senzorul de temperatură și umiditate DHT11
Conform [2] , acest senzor caracterizează un complex de doi senzori (umiditate și temperatură) cu o ieșire de semnal digital calibrată. Utilizând achiziția exclusivă a acestui semnal împreună cu tehnica de măsurare a temperaturii și umidității, senzorul este unul fiabil și stabil în timp.
DHT11 folosește o măsurare a umidității de tip rezistiv[2] și un termistor NTC pentru a măsura temperatura iar conectând acest senzor la un microcontroler se obține o calitate bună a măsurării, răspuns rapid, calitate excelentă și rentabilitate. În figura 2.1 este prezentat senzorul de umiditate și temperatură DHT11.
Fig.2.1. Senzorul de umiditate și temperatură DHT11 [3]
Există, de asemenea, un cip foarte simplu în interior, care face o conversie analogică la digitală și se obține un semnal digital cu temperatura și umiditatea. Semnalul digital este destul de ușor de citit folosind orice microcontroler.
Conform [2], DHT11 măsoară umiditatea relativă ,care reprezintă cantitatea de vapori de apă din atmosferă în raport cu punctul de saturație al vaporilor de apă din atmosferă.
Punctul de saturație[2] reprezintă transformarea vaporilor de apă în condens, acești vapori transformându-se în condens.
Schimbarea temperaturii aerului implică și schimbarea punctului de saturație[2]. Aerul la temperaturi scăzute colectează mai puțini vapori înainte de saturație, pe când aerul cald este contrar acestui caz.
Umiditatea relativă[2] se calculează cu formula :
(2.1) [2]
unde ,conform [3], RH : Umiditatea relativă
: Densitatea vaporilor de apă
: Densitatea vaporilor de apă la saturație
Umiditatea relativă[3] se exprimă în procente . Când aceasta are un procent de 100%, are loc condensarea, iar la 0%, aerul este uscat. În figura 2.2 este prezentată structura internă a senzorului de umiditate.
Fig.2.2. Structura senzorului de umiditate [4]
Figura 2.3 prezintă curba caracteristică a termistorului NTC.
Fig.2.3. Curba caracteristică a termistorului NTC [4]
Componenta de detectare a umidității este utilizată, desigur, pentru a măsura umiditatea, care are doi electrozi cu substrat de menținere a umidității între ele care, de obicei find o sare sau un polimer din plastic conductiv. Ionii sunt eliberați de substrat, pentru că vaporii de apă sunt absorbiți de acesta, ceea ce duce la creșterea conductivității dintre cei doi electrozi.
Schimbarea rezistenței dintre aceștia este direct proporțională cu umiditatea relativă. Atunci când umiditatea relativă este mai mare, rezistența dintre cei doi electrozi devine mai mică, pe când umiditatea relativă mai mică produce creșterea rezistenței dintre electrozi.
Specificațiile senzorului DHT11 sunt :
Interval citire temperatură : 0 – 50 ℃
Interval umiditate : 20 -95 %
Acuratețe temperatură : ± 2 ℃
Acuratețe umiditate : ± 5%
Tensiune de funcționare : 3,3 – 5,5V
Curent maxim consumat : 2,5mA
Figura 2.4 prezintă modul de conectare al senzorului de umiditate și temperatură DHT11.
Fig.2.4. Modul de conectare al senzorului DHT11[3]
2.1.2. Senzorul higrometru capacitiv
Conform [5], acesta este un senzor analogic de umiditate a solului, care măsoară nivelul de umiditate a solului prin detectare capacitivă, adică capacitatea variază pe baza conținutului de apă prezent în sol.
Componenta electrică cunoscută sub numele de condensator este formată din trei piese. O placă pozitivă, o placă negativă și spațiul dintre plăci, cunoscut sub numele de dielectric. Forma fizică și construcția condensatoarelor practice variază foarte mult și multe tipuri de condensatoare sunt în uz comun. Majoritatea condensatoarelor conțin cel puțin doi conductori electrici adesea sub formă de plăci metalice sau suprafețe separate printr-un mediu dielectric .
Un senzor de umiditate capacitiv funcționează prin măsurarea schimbărilor de capacitate cauzate de modificările dielectricului. Nu măsoară direct umezeala (apa pură nu conduce bine electricitatea), ci măsoară ionii dizolvați în mediul umed.
Acești ioni și concentrația lor, conform [5], pot fi afectați de o serie de factori, de exemplu, adăugarea de îngrășăminte, în acest caz , va scădea rezistența solului. Măsurarea capacitivă măsoară practic dielectricul format în sol și apa este cel mai important factor care afectează dielectricul.
Măsurarea capacitivă are unele avantaje, nu numai că evită coroziunea sondei senzorului, dar oferă și o citire mai bună a conținutului de umiditate a solului, spre deosebire de utilizarea unui senzor de umiditate rezistent al solului. Atâta timp cât contactele (placa în plus și placa minus a condensatorului) nu sunt expuse la sol, nu există coroziunea senzorului în sine.
Singurul dezavantaj al acestui senzor este viteza de citire puțin mai mică decât cea a senzorilor convenționali de tip rezistiv care oferă citiri aproape instantaneu dar fiabilitatea este scăzută iar substanțele rezultate în urma coroziunii care se dizolvă ulterior în sol împreună cu apa, pot afecta în mod direct plantele aflate în aproprierea senzorilor, dacă este vorba despre gradină, flori sau arbuști.
În figura 2.5 este prezentat senzorul de umiditate capacitiv .
Fig.2.5. Senzorul de umiditate capacitiv [6]
Schema electrică a senzorului de umiditate a solului capacitiv este prezentată în figura 2.6 .
Fig.2.6. Schema electrică a senzorului de umiditatea solului [7]
În figura 2.6 prezentată anterior apare un oscilator de frecvență fixă care este construit folosind un Timer 555. Cu cât umiditatea solului este mai mare, cu atât capacitatea senzorului este mai mare.
Acest senzor are următoarele specificații tehnice :
Ieșire analogică
Tensiune de lucru : 3,3-5,5V
Tensiune de ieșire : 0-3V
În figura 2.7 este prezentat modul de conectare al acestui senzor .
Fig.2.7. Modul de conectare al senzorului de umiditate capacitiv [8]
Desigur, acest senzor are componentele electronice montată exact pe corpul senzorului, ceea ce reprezintă un risc de defectare a circuitului dacă acesta intră în contact cu apa sau solul umed. În figura 2.8 sunt prezentate limitele de utilizare a senzorului de umiditate capacitiv pentru o funcționare și citire corectă.
Fig.2.8. Limitele de utilizare ale senzorului de umiditate capacitiv [9]
2.1.3. Senzorul de tensiune
Acest senzor este unul precis folosit pentru măsurarea tensiunii , având un preț redus. Este construit pe principiul divizorului de tensiune . În figura 2.9 este prezentat senzorul de tensiune .
Fig.2.9. Senzorul de tensiune [10]
Circuitul divizorului de tensiune este foarte cunoscut pentru capacitatea sa de a transforma o tensiune mare într-o tensiune mai mică folosind doar o pereche de rezistențe. Formula de calcul a tensiunii de ieșire este următoarea :
(2.2) [11]
unde : este tensiunea sursei măsurată în volți (V)
este prima rezistență și are , de obicei , valoarea cea mai mare
este a doua rezistență
este tensiunea de ieșire , măsurată în volți (V)
Cu ajutorul formulei (2.2) se pot calcula valorile tensiunilor și rezistențelor necesare pentru dimensionarea oricărui divizor de tensiune. Schema de principiu a acestui divizorului de tensiune este prezentată în figura 2.10.
Fig.2.10. Schema de principiu a divizorului de tensiune [11]
Specificațiile senzorului de tensiune sunt următoarele :
Tensiune de intrare : 0 – 25V
Intervalul de detectare a tensiunii : 0.02445 – 25 V
Nu necesită componente externe
Ușor de folosit cu microcontrolere
Mic , ieftin , ușor de folosit
Dimensiuni : 4 x 3 x 2 cm
Acest senzor este unul simplu și foarte util pentru că folosește, cum am menționat anterior, un divizor de tensiune pentru a reduce tensiunea de intrare la 5V. Asta permite utilizarea pinului analog al unui microcontroler ca să monitorizeze tensiuni mai mari decât poate el să măsoare.
De exemplu , cu 0V- 5V ca interval de măsură pe pinul analog , se poate măsura o tensiune de până la 25V. Acest modul include și conectori terminali cu șurub, utili pentru o conexiune ușoară și sigură a sursei de alimentare la senzor. În figura 2.10 este prezentată schema electrică a senzorului de tensiune.
Fig.2.10. Schema electrică a senzorului de tensiune [12]
Divizorul de tensiune poate fi folosit foarte ușor cu o placă de dezvoltare care dispune de un pin analogic. Conexiunea este una simplă de realizat și este prezentată în figura 2.11.
Fig.2.11. Modul de conectare al senzorului de tensiune [13]
2.2 Convertoare coborâtoare de tensiune (buck)
2.2.1. Convertorul coborâtor de tensiune LM2596
Conform [14], convertorul LM2596 este capabil să suporte un curent maxim de 3A. Acest dispozitiv este disponibil în versiune de ieșire reglabilă și este compensat intern pentru a minimiza numărul de componente externe pentru a simplifica proiectarea sursei de alimentare.
Deoarece convertorul LM2596 este o sursă de alimentare în modul comutator, eficiența sa este semnificativ mai mare în comparație cu convertoarele liniare cu trei terminale, în special cu tensiuni de intrare mai mari.
Conform [14], LM2596 are o frecvență de lucru de 150kHz, astfel sunt permise componente de filtru de dimensiuni mai mici decât ceea ce ar fi necesar cu regulatoarele de comutare cu frecvență mai mică.
Celelalte caracteristici includ o toleranță garantată de 4% la tensiunea de ieșire în cadrul tensiunilor de intrare specificate și a condițiilor de încărcare a ieșirii și 15% la frecvența oscilatorului. Oprirea externă este inclusă, prezentând un curent de veghe de 80 μA.
Caracteristicile de autoprotecție includ limita de curent a comutatorului cu ciclu întrerupător pentru comutatorul de ieșire, precum și închiderea termică pentru o protecție completă în condiții de defecțiune.
În figura 2.12 este prezentat convertorul coborâtor de tensiune LM2596.
Fig.2.12. Convertorul coborâtor de tensiune LM2596 [15]
Caracteristici :
Tensiune de intrare : 4,5V – 35V
Tensiune de ieșire : 1.3 – 30V
Temperatură de funcționare : -40 + 85 ℃
Frecvența de funcționare : 150MHz
Eficiență : maxim 92%
Tensiune de ieșire reglabilă
Figura 2.13 prezintă schema electrică a acestui convertor .
Fig.2.13. Schema electrică a convertorului coborâtor LM2596 [16]
2.2.2. Convertorul coborâtor de tensiune LM317
Conform [17], dispozitivul LM317 este un convertor reglabil de tensiune pozitivă , capabil să furnizeze până la 1,5A pe un interval de tensiune de ieșire cuprinsă între 1,25 V și 37 V. Este nevoie de doar două rezistențe externe pentru a seta tensiunea de ieșire.
Dispozitivul dispune de o reglare tipică a liniei de 0,01% și o reglare tipică a sarcinii de 0,1%. Acesta include limitarea curentului, protecția la suprasarcină termică și protecția în condiții de siguranță a zonei de operare. Figura 2.14 prezintă modulul convertor coborâtor de tensiune LM317.
Fig.2.14. Modulul convertor coborâtor de tensiune LM317 [18]
Protecția la suprasarcină rămâne funcțională chiar dacă terminalul ADJ este deconectat. Schema electrică a convertorului coborâtor de tensiune LM317 este prezentată în figura 2.15.
Fig.2.15. schema electrică a modulului LM317 [19]
Configurația pinilor dar și modul de conectare al acestui modul sunt date de figura 2.16 .
Fig.2.16. Modul de conectare al modulului LM317 [20]
LM317 are următoarele caracteristici :
Curent de ieșire : 1.5 A
Tensiune de intrare: 4.2 – 40V
Tensiune de ieșire : 1.2 – 37V
Temperatură de lucru: -55 ℃ – 150 ℃
Protecție la supraîncălzire
2.3 Convertorul analog-digital ADS1115
Conform [21], ADS1115 este un convertor analog-digital de precizie, putere mică, pe 16 biți, compatibil cu standardul I2C. Acest convertor încorporează o tensiune joasă de referință și un oscilator împreună cu un amplificator cu câștig programabil și un comparator digital. Aceste caracteristici împreună cu un interval larg de alimentare fac ca ADS1115 să fie potrivit pentru aplicațiile de măsurare a senzorilor , cu spațiu și putere limitată. Acest convertor execută conversiile cu o rată de până la 860 eșantioane pe secundă (SPS). PGA oferă un interval de tensiune de intrare de la ± 256mV până la ± 6.144V, permițând măsurători de semnale precis, mari și mici.
ADS1115 prezintă un multiplexor de intrare (MUX) care permite măsurarea „single end ” adică tensiunea de intrare se calculează între pinul de intrare și GND și diferențială adică diferența de tensiune între doi pini de intrare.
În figura 2.17 este prezentat convertorul analog-digital ADS1115 .
Fig.2.17. Convertorul analog-digital ADS1115 [22]
Schema bloc a acestui convertor este prezentată în figura 2.18.
Fig.2.18. Schema bloc a convertorului analog-digital ADS1115 [21]
Dispunerea pinilor și modul de conectare al acestui convertor sunt prezentate în figura 2.19.
Fig.2.19. Modul de conectare a convertorului analog-digital ADS1115 [22]
Specificații tehnice :
Temperatură de lucru : între -40℃ și 125℃
Tensiune de alimentare : 2 – 5.5 V
Curent consumat : 150 μA
2.4 Node MCU v3 ESP8266
Conform [1] ,chip-ul ESP8266 este un microcontroler puternic și ieftin, pe 32 de biți cu o conexiune Wi-Fi la bord. De asemenea, este foarte ușor de utilizat, datorită compatibilității cu Arduino IDE. Modulul ESP8266 este un sistem autonom on chip (SOC), care dispune de o stivă integrată de protocoale TCP/IP care permite adăugarea capacității Wi-Fi unui proiect . Modulul este de obicei montat pe plăci de circuite facilitând programarea cipului și interfața cu dispozitivele de intrare și ieșire.
ESP8266 , având o conexiune Wi-Fi, poate permite fie descărcarea tuturor funcțiilor de rețea Wi-Fi dintr-o altă aplicație procesor fie să încorporeze aplicația respectivă.
Conform [1] ,atunci când ESP8266 găzduiește aplicația , și este singura aplicație în dispozitiv , acesta este capabilă să boot-eze direct dintr-o memorie flash externă. Are integrată și memorie cache pentru a îmbunătăți performanța sistemului în aceste cazuri și să minimizeze cerințele privind memoria.
Capacitățile interne de stocare și procesare ale ESP8266 conform [1], oferă posibilitatea acestuia de a fi utilizat împreună cu senzori și dispozitive ale unor aplicații care pot să folosească conexiunea la pinii plăcii de dezvoltare.
În figura 2.20 este prezentată platforma de dezvoltare NodeMCU v3 ESP8266 cu pinii prezenți pe placă.
Fig.2.20. Platforma de dezvoltare NodeMCU v3 ESP8266 [23]
ESP8266 a fost proiectat pentru aplicații electronice mobile, portabile și IoT (Internet of Things) cu scopul de a obține cel mai mic consum de energie cu o combinație de mai multe tehnici.
Arhitectura de economisire a energiei funcționează în 3 moduri: modul activ, modul de repaus și modul de repaus profund.
Specificațiile tehnice sunt următoarele :
Microcontroler : Tensilica 32-bit RISC CPU Xtensa LX106
Tensiune de operare : 3.3 V
Tensiune de intrare : 7 -12 V
Pini digitali I/O ( GPIO) : 16
Pini analogici (ADC) : 1
UART : 2
SPI : 1
I2C : 1
Memorie flash : 4MB
SRAM : 64 Kb
Viteză procesor : 80 MHz
USB-TTL bazat pe CP2102 este inclus pe platforma de dezvoltare , permițând Plug&Play
Antena PCB
Dimensiune mică
Prin utilizarea tehnicilor avansate de gestionare a energiei și a logicii pentru a opri funcțiile de oprire a alimentării între modurile de repaus și cele active, ESP8266 consumă mai puțin de 12μA în modul de repaus și mai puțin de 1,0 mW sau mai puțin de 0,5 mW pentru a rămâne conectat la punctul de acces.
Când este în modul de repaus, numai “calibrated real-time clock “și modul de veghe rămân active. Real-time clock-ul poate fi programat să trezească ESP8266 la orice interval necesar.
ESP8266 poate fi programat să se trezească atunci când este detectată o anumită condiție.
Această caracteristică minimă de timp de trezire a ESP8266 poate fi utilizată de SOC-urile dispozitivelor mobile, permițându-le să rămână în modul de așteptare de putere redusă până când este nevoie de Wi-Fi. În tabelul 2.1 este prezentată configurția pinilor platformei de dezvoltare NodeMCU v3 ESP 8266.
Tabelul 2.1. Configurația pinilor platformei de dezvoltare NodeMCU v3 ESP8266.
3. REALIZAREA PRACTICĂ
În continuarea aceste lucrări, voi aborda tema propusă din punctul de vedere al realizării practice. Pentru a scoate în evidență acest aspect, voi prezenta diferite componente hardware alese și partea software, ambele fiind de o importanță deosebită în ceea ce privește funcționalitatea corectă a proiectului ales .
3.1. Tema aleasă
Acest proiect sub denumirea de „Sistem autonom de irigații cu interfață web pentru monitorizarea parametrilor” prezintă realizarea unui sistem de irigații utilizabil în gradină , curte sau pentru diverse plante de interior sau exterior .
Principalele caracteristici ale acestui sistem sunt capabilitatea de a funcționa în mod automat asigurând solului sau plantelor nivelul de umiditate necesar, absența personalului pentru deservirea sistemului și posibilitatea de a supraveghea sistemul cu ajutorul unei pagini web special creată pentru monitorizarea parametrilor precum :
temperatura ambientală
umiditatea aerului
umiditatea solului
nivelul de tensiune al sursei de alimentare
Am vrut să realizez acest proiect din perspectiva potențialului și utilității pe care o are în utilizarea sa de zi cu zi, fiind ideal pentru a facilita o umiditate corectă a solului dar și eliminarea totală a activităților de irigare manuală .
3.2. Schemele proiectului
3.2.1. Schema bloc a sistemului
Pentru înțelegerea modului de funcționare al acestui proiect , am realizat o schemă cu blocurile funcționale în care sunt evidențiate și conexiunile dintre ele. Descrierea schemei bloc care este de fapt modul general de funcționare al proiectului este prezintată în felul următor:
microcontrolerul preia datele primite de la senzorii de umiditate a solului, le decodifică și apoi trimite comanda către blocurile de relele care , la rândul lor , comandă cele două valve electromagnetice și pompa de apă;
pompa de apă asigură debitul de apă pentru obținerea nivelului dorit de umiditate al solului;
valvele electromagnetice asigură distribuirea fluxului de apă către locul necesar;
datele obținute de la senzorul de tensiune și senzorul de temperatură și umiditate ( DHT11) sunt preluate tot de către microcontroler și distribuite către interfața web prin intermediul conexiunii Wi-FI.
Schema bloc menționată mai sus am prezentat-o în figura 3.1 , în care am evidențiat și conexiunea cu clientul.
Fig.3.1. Schema bloc a Sistemului autonom de irigații
3.2.2. Schema electrică a sistemului
De asemenea , am realizat și schema electrică a proiectului pentru a se înțelege modul de proiectare a montajului. Această schemă este prezentată în figura 3.2 și prezintă conexiunile din punct de vedere electric dintre:
microcontroler și senzorii de umiditate a solului;
microcontroler și senzorul de temperatură și umiditate;
microcontroler și senzorul de tensiune
microcontroler și convertorul analog-digital
microcontroler și blocurile de relee
convertorul analog-digital și senzorii de umiditate a solului
blocurile de relee și pompa de apă , valvele electromagnetice
Să nu uităm și menționarea rolului în proiect al releelor:
alimentarea pompei de apă
alimentarea bobinelor valvelor electromagnetice
În schema electrică mai apar niște conectori cu două terminale pe care i-am folosit pentru a simplifica conexiunile electrice de același fel cum ar fi cele de alimentare(marcate prin linie de culoare roșie) și masă(marcaj cu linii de culoare neagră), lucrul acesta ajutând la o mai bună organizare generală a scheme.
Fig.3.2. Schema electrică a sistemului
3.2.3. Schema logică a sistemului
Algoritmul de funcționare al acestui sistem este prezentat în figura 3.3, desfășurarea programului software efectuându-se în ordinea următoare:
Start:
Atunci când montajul proiectului este alimentat, sunt efectuate operații cu privire la atribuirea de pini ai microcontrolerului, în acest fel stabilindu-se rolul acestora ca fiind pini de ieșire și modul de scriere al acestora (LOW sau HIGH)
Achiziția de date:
Din momentul în care s-a efectual inițializarea programului și acesta a intrat în bucla care se menține atâta timp cât microcontrolerul este alimentat.
Datele primite de la senzori sunt trimise către pagina web pentru a fi afișate
Instrucțiuni, decizii:
În funcție de datele primite, pompa de apă poate fi acționată în urma comenzii unității de control, acest lucru find dependent de valorile senzorilor de umiditate a solului și limita de umiditate setată
Valvele electromagnetice pot fi acționate pentru închiderea sau deschiderea magistralei de alimentare cu apă
Fig.3.3. Schema logică a sistemului
Pentru ca să realizez acest proiect, am ales următoarele componente:
microcontroler
convertoare coborâtoare de tensiune (LM2596 și LM317)
bazin apă
pompă apă
comutator alimentare tensiune
valve electromagnetice
baterii
fire electrice
mufe de alimentare
senzor temperatură și umiditate atmosferică
senzori umiditate sol
senzor de tensiune
module relee
convertor analog-digital
plexiglas
3.3. Unitatea de control NodeMCU v3
Controlul acestui sistem de irigații este deținut de către platforma NodeMCU v3 pe care am ales-o pentru faptul că are antena Wi-Fi onboard și nu necesită alte componente pentru realizarea unei conexiuni la internet prin unde radio.
NodeMCU este o placă de dezvoltare bazată pe ESP8266, cu următoarele specificații :
Microcontroler : Tensilica 32-bit RISC CPU Xtensa LX106
Tensiune de operare : 3.3 V
Tensiune de intrare : 7 -12 V
Pini digitali I/O ( GPIO) : 16
Pini analogici (ADC) : 1
UART : 2
SPI : 1
I2C : 1
Memorie flash : 4MB
SRAM : 64 Kb
Viteză procesor : 80 MHz
USB-TTL bazat pe CP2102 este inclus pe platforma de dezvoltare, permițând Plug&Play
Antena PCB
Dimensiune mică
În figura 3.4 este prezentată această platformă de dezvoltare împreună cu configurația pinilor .
Fig.3.4. Platforma de dezvoltare NodeMCU v3 ESP8266 [23]
3.4. Blocurile de relee
Aceste componente sunt esențiale pentru funcționarea acestui montaj . Funcționează cu o tensiune de 5V DC , fiecare bloc având 2 relee în componență. Fiecare releu are nevoie de un curent de aproximativ 15-20mA pentru a permite alimentarea consumatorului, consumul mic de curent făcând aceste relee foarte potrivite pentru aplicațiile cu alimentare pe baterii.
Pot fi folosite pentru a controla și diverse aparate și echipamente care necesită un curent mare de funcționare , aceste blocuri de relee suportând 250V curent alternativ cu 10A sau 30V curent continuu cu 10A.
Au o interfață standard care poate fi controlată direct de către microcontroler și folosesc optocuploare pentru izolarea față de tensiunile mari pentru cerințele de siguranță și, de asemenea, previn bucla de masă când comunică cu microcontrolerul , modulul releu cu două canale fiind prezentate în figura 3.5.
Fig.3.5. Modulul releu cu două canale [24]
Câteva specificații ale acestui modul sunt următoarele:
Tensiunea maximă de ieșire: 30V DC c.c. sau 250V c.a.
Curent maxim de ieșire: 10A
Modul releu cu 2 canale cu optocuplor
Interfață standard controlată direct de către microcontroler
Releu de înaltă calitate, cu poluare fonică redusă .
Terminal comun, unul normal deschis și un terminal normal închis
Izolare galvanică cu optocuploare
Schema electrică a acestui modul am prezentat-o în figura 3.6 unde VCC și RY-VCC sunt, de asemenea, pinii pentru alimentarea modului. Pentru a obține o optoizolație completă, nu se conectează pinii GND la masa platformei de dezvoltare.
Fig.3.6. Schema electrică a modului releu cu 2 canale [24]
Deoarece NodeMCU furnizează 3.3V, a trebuit să folosesc alimentare externă pentru modul, asta pentru că tensiunea platformei de dezvoltare nu este suficientă pentru acționarea bobinelor K1 și K2 din schemă ci doar pentru partea de comandă. Așa că am deconectat jumperul J5 și am conectat pinul RY-VCC la 5V iar VCC la 3.3V.
Principiul de funcționare al acestui releu este relativ simplu fiind prezentat de figura 3.7 unde A este electromagnetul, B armătura, C arcul , D contactul mobil și E contactele fixe.
Fig.3.7. Schema principiului de funcționare al releului [24]
Conform schemei electrice din figura 3.6 pe care am prezentat-o mai sus, componentele modului releu sunt următoarele:
Tranzistori bipolari : Q1 și Q2 , pentru comanda bobinelor K1 și K2
Diode de protecție : D1 și D2
Rezistori : R1, R2, R3, R4
Optocuploare: U1 și U2
Diode LED: IN1 , IN2
3.5. Pompa de apă
Pompa pe care o folosesc pentru acest proiect este prezentată în figura 3.8. Este o pompă de apă submersibilă, acesta fiind motivul principal pentru care am ales-o, de a o pune în bazinul de alimentare cu apă, economisind spațiu. Aceasta distribuie cantitatea de apă necesară pentru menținerea nivelului de umiditate dorit pentru acest proiect.
Tensiunea de alimentare este între 3 și 5 volți iar consumul de curent pe care l-am măsurat este de aproximativ 400 – 450 mA în gol iar în sarcină am obținut un consum de până la 1.5 A.
Fig.3.8. Pompa de apă submersibilă
Această pompă are un debit de aproximativ 1,2 – 1,6 litri/minut și o adâncime recomandată pentru funcționare între 0,3 – 0,8 metri, în cazul acestui proiect , adâncimea este de aproximativ 10 cm ( înălțimea rezervorului de apă ), acest lucru neavând niciun impact negativ în ceea ce privește funcționarea în bune condiții a pompei, care are o durată de funcționare continuă de până la 500 de ore.
Având un diametru de aproximativ 24mm , o lungime de aproximativ 45mm și o înălțime de 33mm, este ideală pentru proiectul meu , folosind un rezervor pentru alimentarea cu apă de doar 750 ml, pompa încape perfect în acest rezervor.
Diametrul racordului pompei este de 6mm.
3.6. Valvele electromagnetice
Aceste componente au un rol foarte important în proiectul meu deoarece cu ajutorul lor am control asupra magistralei de apă și pot să deservesc în mod individual fiecare zonă unde se află un senzor de umiditate în funcție de datele citite de către senzori.
Valva electromagnetică pe care am utilizat-o la acest montaj este prezentată în figura 3.9, fiind alimentată la 12V curent continuu și în urma măsurătorii consumului de curent , am obținut 130mA,curent necesar pentru a menține valva închisă , aceasta fiind de tipul normal deschis.
Fig.3.9. Valva electromagnetică
Această valvă are un debit maxim de 11 litri/minut, un diametru exterior ștuțurilor de conectare al furtunurilor de 5,5 mm.
3.7. Convertoarele coborâtoare de tensiune
Ca să obțin două tensiuni diferite , necesare pentru funcționarea montajului , am folosit câte un convertor coborâtor de tensiune pentru a obține 5volți și respectiv 12 volți.
LM2596 este prezentat în figura 3.10, având tensiunea de ieșire setată la 5V.
Fig.3.10. Convertorul coborâtor de tensiune LM2596 [15]
LM2596 are următoarele caracteristici :
Tensiune de intrare : 4,5V – 35V
Tensiune de ieșire : 1.3 – 30V
Temperatură de funcționare : -40 + 85 ℃
Frecvența de funcționare : 150MHz
Eficiență : maxim 92%
Tensiune de ieșire reglabilă
Celălalt convertor coborâtor de tensiune pe care l-am folosit, LM317, are același principiu de funcționare ca și LM2596 diferența fiind modul de conectare al firelor electrice la modul.
LM317 are conectori speciali cu șurub în timp ce LM2596 are nevoie de lipirea firelor pentru a fi conectat, ceea ce este un dezavantaj în ceea ce privește ușurința de conectare.
Convertorul coborâtor de tensiune LM317 este prezentat în figura 3.11, folosindu-l pentru alimentarea electrovalvelor cu 12 volți.
Fig.3.10. Convertorul coborâtor de tensiune LM317[18]
LM317 are următoarele caracteristici :
Curent de ieșire : 1.5 A
Tensiune de intrare: 4.2 – 40V
Tensiune de ieșire : 1.2 – 37V
Temperatură de lucru: -55 ℃ – 150 ℃
Protecție la supraîncălzire
3.8. Convertorul analogic-digital ADS1115
Platforma de dezvoltare NodeMCU v3 are doar un pin analogic , ceea ce a reprezentat un impediment pentru mine deoarece în acest proiect folosesc 3 senzori care utilizează pini analogici.Ca să rezolv această problemă , am folosit un convertor analog-digital ADS1115 care se conectează la NodeMCU prin comunicația I2C .
Acest modul are 4 intrări analogice, suficiente pentru cerințele proiectului și fiind pe 16 biți, oferă o citire mult mai precisă a senzorilor decât NodeMCU care are o rezoluție de 10 biți.
ADS1115 este prezentat în figura 3.11 și câteva caracteristici ale acestui modul sunt următoarele:
Temperatură de lucru : între -40℃ și 125℃
Tensiune de alimentare : 2 – 5.5 V
Curent consumat : 150 μA
Fig.3.11. Convertorul analog-digital ADS1115 [22]
3.9. Senzorul de tensiune
Datorită faptului că folosesc o sursă de tensiune formată din acumulatori Li-Ion , monitorizarea nivelului tensiunii bateriilor este foarte important .
Modulul divizor de tensiune pe care l-am folosit este prezentat in figura 3.12 având următoarele caracteristici:
Tensiune de intrare : 0 – 25V
Intervalul de detectare a tensiunii : 0.02445 – 25 V
Nu necesită componente externe
Ușor de folosit cu microcontrolere
Mic, ieftin, ușor de folosit
Dimensiuni : 4 x 3 x 2 cm
Fig.3.11. Senzorul de tensiune [10]
Acest modul a fost conceput pentru microcontrolerele care funcționează cu 5V . Așadar, pentru ca am vrut să folosesc modulul acesta pentru NodeMCU care funcționează cu 3.3V, putând măsura în condiții de siguranță maxim 16,5V iar sursa de alimentare când are bateriile încărcate ajunge la 16,6V , m-am decis să modific divizorul de tensiune al acestui modul pentru a-l putea folosi în siguranță fără ca să stric microcontrolerul .Am făcut câteva calcule folosind formula:
(2.2)[11]
unde : este tensiunea sursei măsurată în volți (V)
este prima rezistență și are , de obicei , valoarea cea mai mare
este a doua rezistență
este tensiunea de ieșire, măsurată în volți (V)
Rezultatele sunt următoarele după ce am folosit pentru = 30kΩ o rezistență de 47 kΩ iar = 7.5kΩ a rămas neschimbată :
= 3.3 V
= 23.98V
Neavând la îndemână o rezistență SMD de 47kΩ atunci când am făcut modificarea, am folosit una clasică, am dezlipit rezistența de 30kΩ de pe platforma modulului și am lipit rezistența de 47 kΩ . Noul modul modificat este prezentat în figura 3.12.
Fig.3.12. Senzorul de tensiune modificat
Ca urmare a acestor modificări, pot măsura fără probleme tensiunea sursei de alimentare iar informațiile despre tensiunea acumulatorilor le-am afișat în interfața web, după cum este prezentat în imaginea din figura 3.13, evidențiat cu dreptunghiul de culoare roșie.
Fig.3.14. Afișarea tensiunii bateriilor în pagina web
3.10. Senzorii de umiditate a solului
Atunci când sistemul de irigații este pornit , unitatea de comandă primește valoarea citită de către acești senzori. Dacă valoarea este mai mare de 70% , pompa de apă și valvele electromagnetice rămân inactive până când umiditatea scade sub 70% și atunci NodeMCU trimite către relee un semnal logic de tip LOW, acestea acționează pompa de apă și valvele în funcție de modul în care trebuie distribuită apa.
3.11. Sursa de alimentare
Pentru alimentarea acestui montaj, am folosit 4 celule Li-Ion Samsung INR18650-25R pe care le-am legat în serie folosind un suport de baterii cu 4 compartimente care este prezentat în figura 3.15 și tensiunea nominală este de 14,6 V.
Fig.3.15. Suportul de baterii
Celulele Li-Ion Samsung INR18650-25R au următoarele caracteristici :
Tensiune nominală : 3.64 V
Tensiune de încărcare : 4.2 ± 0.05V
Curent standard de încărcare: 1.25A
Curent maxim de încărcare : 4A
Tensiunea descărcare: 2.5V
Curent maxim de descărcare: 20A
Capacitate: 2500 mAh
Timp de încărcare : 180min (1.25A) sau 60min( 4A)
Pentru încărcarea acestor baterii , am proiectat un încărcător la care am folosit 4 module de încărcare TP4056 care sunt prezentate în figura 3.16.
Fig.3.16. Modulul de încărcare TP4056 [25]
TP4056 este un încărcător liniar curent-constant/tensiune-constantă pentru bateriile lithium-ion, poate fi folosit cu adaptoare USB sau adaptoare de perete. Schema electrică a acestui modul de încărcare este prezentată în figura 3.17.
Fig.3.17. Schema electrică a modulului de încărcare TP4056 [26]
Ca și specificații , acest modul are tensiunea de intrare 4 – 5V, curent de încărcare : 1A și tensiune de încărcare 4,2V. Tensiunea de încărcare este fixată la 4,2 volți iar curentul de încărcare poate fi modificat extern folosind o rezistență. Acest modul oprește automat încărcarea când curentul este la 1/10 din valoarea programată după ce tensiunea de încărcare a bateriilor este atinsă.
Încărcătorul pe care l-am realizat este prezentat în imaginea din figura 3.18 , unde se observă suporturile pentru baterii și modulele de încărcare TP4056 folosite.
Fig.3.18. Încărcătorul de celule Li-Ion 18650
Schema electrică a încărcătorului realizat de mine este prezentat în figura 3.19.
Fig.3.19. Schema electrică a încărcătorului de celule Li-Ion 18650
3.12. Interfața web
O pagină web este un document simplu afișat de un browser . Astfel de documente sunt scrise în limbajul HTML. O pagină web poate încorpora o varietate de tipuri diferite de resurse, cum ar fi:
informații de stil – controlul aspectului unei pagini
scripturi – care adaugă interactivitate paginii
media – imagini, sunete și videoclipuri.
HTML („Hypertext Markup Language”) este cel mai cunoscut limbaj de proiectare al Web-ului, definind felul în care este structurat conținutului web. Descrierea aspectului sau prezentarea paginii web și modul de funcționare revin altor limbaje pe care le menționez în continuarea acestei idei.
CSS (Cascading Style Sheets) este responsabil de felul în care arată o pagină web. CSS descrie cum elementele pot fi randate, aranjate, afișate elementele descrise de HTML .CSS este folosit pentru a personaliza stilul și aranjarea paginilor web, de exemplu, de a modifica fontul, culoarea, dimensiunea, spațierea conținutului, împărțirea în mai multe coloane sau adăugarea de animații sau elemente decorative , ceea ce am și făcut la interfața web a acestui proiect,
JavaScript (JS) este un limbaj de programare ușor, cunoscut drept limbajul de script pentru paginile Web, limbaj responsabil pentru funcționalitatea și comportamentul paginii. În imaginea din figura 3.20 este prezentată pagina web pe care am creat-o pentru acest proiect.
Fig.3.19. Interfața web a sistemului autonom de irigații
Pentru a monitoriza parametrii sistemului de irigații cum ar fi temperatura ambientală, umiditatea aerului și umiditatea solului, am creat 4 grafice care să prezinte valorile citite:
unul pentru temperatură
unul pentru umiditatea aerului
unul pentru primul senzor de umiditate al solului
unul pentru al doilea senzor de umiditate al solului
Scopul meu a fost ca întreaga pagină web să funcționeze în timp real , fără a reîmprospăta pagina pentru a putea vedea noile valori citite, lucru pe care l-am realizat cu succes. În imaginea din figura 3.20 am prezentat modelul graficului creat pentru interfața web.
Fig.3.20. Modelul graficului pentru interfața web
Fiecare grafic poate fi setat pentru a afișa un număr de valori dorite în grafic dar și intervalul de timp după care o valoare nouă poate fi adăugată. După cum se observă în figura 3.20, pentru fiecare valoare existentă, în momentul în care se selectează acea valoare, în cazul dispozitivelor de precum PC și laptopuri se aduce cursorul mouse-ului în proximitatea valorii afișate în grafic iar în cazul dispozitivelor precum smartphone-uri sau tablete, se atinge pe ecran valoarea dorită din grafic, se afișează un pop-up care prezintă data și ora exactă dar și valoarea citită de către senzorul corespunzător graficului.
Pe axa Y am pus o scală a valorilor, un interval a cărui valori se modifică în funcție de valoare maximă sau minimă atinsă în grafic. De asemenea, pe axa X am afișat ora în timp real, care este un punct de referință pentru utilizator, nefiind necesar ca să acceseze o valoare anume pentru a vedea datele exacte despre înregistrarea acesteia în grafic , decât doar dacă acest lucru este dorit.
Graficele funcționează în mod independent, în momentul în care există o întrerupere a comunicației senzorului cu platforma de dezvoltare, graficul va afișa valoarea 0 și revine la afișarea normală a parametrilor atunci când senzorii citesc în bune condiții , fără a afecta funcționarea celorlalte elemente ale interfeței web, același fiind valabil și pentru măsurarea tensiunii.
Interfața web mai afișează ora și data dar și tensiunea acumulatorilor , toate acestea fiind afișate în timp real.
Această interfață poate fi accesată de pe orice dispozitiv care suportă o conexiune Wi-Fi și are un browser. Se introduce adresa IP a ESP8266 în browser și va apărea interfața web a sistemului de irigații.
4. REZULTATE ȘI MĂSURĂTORI EXPERIMENTALE
Montajul pe care l-am realizat după ce am asamblat toate componentele sistemului de irigații este prezentat în imaginea din figura 4.1.
Fig.4.1. Realizarea practică a sistemului de irigații
Pentru suportul fizic al proiectului am folosit o bucată mare de plexiglas transparent cu o grosime de 4mm , pe care am debitat-o în mai multe bucăți mari și mici, pe care, după cum se observă în imaginea din figura 4.1, le-am folosit pentru platforma principală a montajului, suportul comutatorului de alimentare, suportul pentru NodeMCU și pentru compartimentele unde am pus pământul.
Pe panoul orizontal am montat cea mai mare parte din componentele proiectului, cum ar fi placa de dezvoltare, convertorul analog-digital, valvele electromagnetice, rezervorul de apă, modulele cu relee, convertoarele de tensiune și sursa de alimentare iar pe peretele compartimentelor cu sol am montat senzorul de temperatură și umiditate.Montajul conține, de asemenea, fire electrice izolate pe care le-am folosit pentru conexiunile dintre module și componente, pentru alimentarea principală până la intrarea fiecărui convertor am folosit fire conductoare electrice cu diametru de 0.5mm.
Pentru că am folosit un plexiglas transparent, am întâmpinat probleme deoarece componentele sistemului nu prea ieșeau în evidență, de aceea m-am decis să vopsesc platforma proiectului, astfel rezolvând definitive problema.
Porțiunea de panou care conține partea de control a sistemului este prezentată în imaginea din figura 4.2, partea de control fiind compusă din platforma de dezvoltare NodeMCU v3 ESP8266, blocurile de relee și cele trei convertoare coborâtoare de tensiune.
Fig.4.2. Partea de control a sistemului autonom de irigații
În imaginea din figura 4.3 este prezentată amplasarea pompei de apă submersibilă.
Fig.4.3. Amplasarea pompei de apă submersibilă
În imediata apropiere a bazinului de alimentare cu apă a sistemului se găsesc valvele electromagnetice, după cum este prezentat în imaginea din figura 4.4.
Fig.4.3. Valvele electromagnetice
Amplasarea senzorilor de umiditate a solului este prezentată în imaginea din figura 4.4.
Fig.4.4. Senzorii de umiditate a solului
În imaginile din figura 4.3 și figura 4.4 se observă magistrala de alimentare cu apă pentru compartimentele cu sol. Am folosit furtunuri siliconice cu diametru de 0,5mm și un conector de tip “Y” pentru ca ambele compartimente cu sol să primească apă de la aceeași magistrală prin intermediul valvelor electromagnetice.
Pentru încărcătorul de baterii am folosit tot plexiglas, pe care am montat modulele TP4056 și suporturile pentru acumulatori și am făcut conexiunile necesare dintre suporturile de baterii și modulele de încărcare dar și pentru conexiunea în paralel a modulelor TP4056.
În imaginea din figura 4.5 este prezentat încărcătorul de baterii pe care l-am construit.
Fig.4.5. Încărcătorul bateriilor
În urma măsurătorilor pe care le-am făcut pentru toate componentele consumatoare de energie, am obținut următoarele rezultate:
NodeMCU v3 = 72 mA
ADS1115 = 40 μA
DHT11 = 641 μA
Primul senzor umiditate sol = 5,27 mA
Al doilea sensor umiditate sol = 5,46 mA
Releu valvă 1 = 49,2 mA
Releu valvă 2 = 49,4 mA
Releu pompă = 49 mA
Led releu 1 = 442 μA
Led releu 2 = 442 μA
Led releu 3 = 444 μA
Pompă apă ( în sarcină ) = 2A
Valva 1 ( menținere închisă ) = 124,6 mA
Valva 2 ( menținere închisă ) = 122,4 mA
În cadrul funcționării acestui proiect, am trei cazuri posibile. Primul caz (standby) este compus din NodeMCU, DHT11, ADS1115 și senzorii de umiditate a solului, consumul total = 82,77 mA.
Cazul al doilea este momentul în care este nevoie de apă doar pentru un compartiment cu sol, deci, funcționează releul uneia dintre valve, releul pompei și pompa. Consumul total pentru un releul unei valve plus ledul aferent este de aproximativ 49,7 mA, releul pompei + led este de 49,4mA iar pompa de apă aproximativ 2A. Așadar, consumul total incluzând consumul primulul caz este de 2,18A și adăugând și menținerea unei valve închise pentru dirijarea fluxului de apă către zona dorită, rezultă un consum final de aproximativ 2,3A .
Cazul al treilea implică distribuirea apei pentru ambele compartimente, deci, valvele rămân deschise, funcționând doar componentele din primul caz (standby) împreună cu pompa de apă.Prin urmare, consumul total (standby + releu cu led pompă de apă + pompă) este de 2,13A.
Ca și concluzie a acestor măsurători, cazul al doilea indică consumul cel mai mare. Acest consum se datorează aproape în totalitate pompei de apă care, având un debit de aproximativ 1,6 litri/minut, are și un consum de curent pe măsură.
Sursa de alimentare având capacitatea nominală de 2500mAh, asigură funcționarea permanentă a montajului pentru cazul al doilea prezentat anterior, timp de o oră dar cum irigarea funcționează alternativ, 2 secunde ON, 5 secunde OFF până când nivelul de umiditate dorit este îndeplinit.
Tot la aici capitol menționez și celelalte măsurători pe care le-am realizat cu acest proiect. În imaginea din figura 4.6 este prezentată măsurarea temperaturii ambientale cu ajutorul senzorului de temperature și umiditate DHT11.
Fig.4.6. Măsurarea temperaturii ambientale
Imaginea din figura 4.7 prezintă măsurarea umidității aerului.
Fig.4.7. Măsurarea umidității aerului
Rezultatul măsurării umidității pentru primul senzor prezentată de imaginea din figura 4.8.
Fig.4.8. Măsurarea umidității solului pentru primul senzor
Imaginea din figura 4.9 prezintă măsurarea umidității solului pentru cel de-al doilea senzor.
Fig.4.8. Măsurarea umidității solului pentru al doilea senzor
Autonomia sursei de alimentare este de aproximativ o oră în cazul consumului maxim de 2,3A dar în modul standby, autonomia crește semnificativ până la 30 ore, dar autonomia medie a bateriilor depinde de câte ori sistemul de irigații este solicitat de către senzorii de umiditate a solului.
Deci, estimez o autonomie medie de aproximativ 20 -24 ore. Sistemul este setat să oprească funcționarea releelor, implicit a valvelor electromagnetice și a pompei de apă atunci când tensiunea de alimentare scade sub 11V, iar sistemul rămăne în standby pentru a încetini descărcarea bateriilor până la urmatoarea încărcare a acestora.
5. CONCLUZII, AVANTAJE ȘI PERSPECTIVE
5.1. Concluzii
În urma realizării montajului acestui sistem , a interfeței web și a codului , sistemul de irigații și pagina web funcționează la parametrii doriți. După executarea codului, interfața web afișează parametrii impuși prin construcția proiectului iar sistemul de irigații îndeplinește cerințele dorite.
5.2. Avantaje
Sistemul fiind autonom, nu are nevoie de deservire de către personal în timpul funcționării.
5.3. Perspective și update-uri
Acest proiect poate fi transpus la o scară normală pentru a putea fi utilizat pentru curte ( gazon) sau grădină, implicând schimbarea valvelor electromagnetice cu unele potrivite pentru dimensiunea unei rețele clasice de apă pentru locuință, ca să asigure un debit de apă suficient și eficient.
Pompa de apă poate fi înlocuită cu una de putere mai mare cu folosirea unui rezervor de apă mai mare sau renunțarea la pompa de apă pentru conectarea sistemului la rețea locală de apă.
Utilizarea sistemului în locuință pentru diverse plante se poate face la scara actuală. Se poate opta pentru alimentarea sistemului cu panouri fotovoltaice sau utilizarea rețelei casnice de electricitate.
Ca și update-uri posibile menționez următoarele:
Pornirea sau oprirea sistemului de irigații în mod inteligent
Adăugarea controlului manual asupra componentelor sistemului direct din interfața web
Posibiliatea monitorizării și controlului acestui sistem din afara ariei de acoperire a rețelei Wi-Fi locale
Primirea de notificări pe e-mail cu privire la funcționarea sistemului de irigații
BIBLIOGRAFIE
[1] M. Schwartz, ESP8266 Internet of Things Cookbook, Packt Publishing Ltd., Birmingham,2017
[2] https://www.circuitbasics.com/how-to-set-up-the-dht11-humidity-sensor-on-an-arduino/
[3] https://www.aliexpress.com/item/32819500546.html
[4] https://lastminuteengineers.com/dht11-dht22-arduino-tutorial/
[5] https://www.switchdoc.com/2020/06/tutorial-capacitive-moisture-sensor-grove/
[6] https://nettigo.eu/products/capacitive-analog-soil-moisture-sensor
[7] https://www.amazon.de/YouU-Bodenfeuchtesensor-Kapazitive-Hygrometer-Feuchtigkeitssensor/dp/B07YSBP81H
[8] https://www.amazon.ca/Capacitive-Moisture-Detection-Electronic-Raspberry/dp/B07C9TYT1X
[9] https://server4.eca.ir/eshop/000/soil%20sensor%20v1.2/sen0193-humedad-de-suelos.pdf
[10] https://www.amazon.in/REES52-Voltage-Sensor-Detection-Module/dp/B01KHVJFJI
[11] http://www.ohmslawcalculator.com/voltage-divider-calculator
[12] https://www.osepp.com/downloads/pdf/VoltageSensor.pdf
[13] https://components101.com/sensors/voltage-sensor-module
[14] https://www.onsemi.com/pub/Collateral/LM2596-D.PDF
[15] https://ardushop.ro/ro/electronica/339-modul-coborare-tensiune-lm2596-cu-display.html?search_query=lm2596&results=2
[16] https://protosupplies.com/product/lm2596s-adjustable-dc-dc-step-down-module/
[17] https://www.ti.com/lit/ds/symlink/lm317.pdf?ts=1593030366929&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FLM317%253Futm_source%253Dgoogle%2526utm_medium%253Dcpc%2526utm_campaign%253Dapp-null-null-GPN_EN-cpc-pf-google-wwe%2526utm_content%253DLM317%2526ds_k%253DLM317%2BDatasheet%2526DCM%253Dyes%2526gclid%253DEAIaIQobChMI8MLhuaSb6gIVyrHtCh01jg8aEAAYAiAAEgJ1LvD_BwE%2526gclsrc%253Daw.ds
[18] https://www.optimusdigital.ro/en/others/8183-lm317-adjustable-voltage-regulator-module.html?search_query=lm317&results=4
[19] https://protosupplies.com/product/lm317-adjustable-linear-regulator-module/
[20] http://www.energiazero.org/arduino_sensori/lm317_dc_dc_converter_step_down_circuit.pdf
[21]https://www.ti.com/lit/ds/symlink/ads1115.pdf?ts=1592842615765&ref_url=https%253A%252F%252Fwww.google.com%252F
[22] https://ardushop.ro/ro/home/668-modul-conversie-analog-digital-adc-4-canale-16-biti-i2c-ads1115.html?search_query=ADS1115&results=1
[23] https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/
[24] http://www.handsontec.com/dataspecs/2Ch-relay.pdf
[25] https://www.addicore.com/TP4056-Charger-and-Protection-Module-p/ad310.htm
[26] http://www.tp4056.com/d/tp4056.pdf
Anexa 1. Codul proiectului
#include <ESP8266WiFi.h>
#include <ESPAsyncWebServer.h>
#include <DHT.h>
#include <ESPAsyncTCP.h>
#include <Wire.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads;
#define DHTPIN 14
#define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
const char* ssid = "–––";
const char* password = "––-";
float t = 0.0;
float h = 0.0;
float a = 0.0;
float b = 0.0;
const float espVCC = 3.11;
unsigned long R1 = 7500;
unsigned long R2 = 47330;
const int analogPin = A0;
const int inputResolution =1023;
float v = 0.0 ;
const int relay1 = 12; // valva 1
const int relay2 = 13; // valva 2
const int relay3 = 15; // pompa apa
// Create AsyncWebServer object on port 80
AsyncWebServer server(80);
unsigned long previousMillis = 0;
const long interval = 1000; // actualizare citiri DHT
const char index_html[] PROGMEM = R"webpage(
<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://code.highcharts.com/highcharts.js"></script>
<style>
body {
min-width: 310px;
max-width: 1000px;
height: 400px;
margin: 0 auto;
}
h2 {
font-family:Arial, Helvetica, sans-serif;
font-size: 3rem;
text-align:center;
}
</style>
</head>
<h2> MyGarden </h2>
<br>
<body onload="startTime()" >
<img src="data:image/png;base64,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" width="20" height="20" align="middle" style="padding-bottom: 12px;">
<span style="font-size:1.3rem;"></span>
<b><span id="time" style="font-family:Arial, Helvetica, sans-serif; font-size:1.3rem;"></span></b>
<div id="time"></div>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA1ElEQVR4nO3bwQqCQBgA4TZ6Rh/Sl6y7QiIlX+nMUXEZhnUPPzpuGzyn+fnu/pinsbXGkXzqd/+uzv9RAC2gGVvv0Nm5/A4ogBbQFEALaAqgBTQF0AKaAmgBTQG0gKYAWkDzWF7QM76jWc4/Lr8DCqAFNKszYIu9M8TlmaKfX3L5HVAALaApgBbQFEALaAqgBTQF0AKa1fcBzQMuRgG0gKZ5wJ7FzkgBtICmAFpAUwAtoCmAFtAUQAtomgcokV+hAFpAUwAtoCmAFtD036AW0BRAC2heXrU4ekB4r6wAAAAASUVORK5CYII=" width="20" height="20" align="middle" style="padding-bottom: 12px;">
<span style="font-size:1.3rem;"></span>
<b><span id="date" style="font-family:Arial, Helvetica, sans-serif; font-size:1.3rem;"></span></b>
<div id="date"></div>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAzUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKMFRskAAAAQdFJOUwABEBwgJKOnq9TV4+vv8/5Ae276AAAACXBIWXMAAA7DAAAOwwHHb6hkAAABKUlEQVRoQ+3Y0WrCUBAE0LRJG63V9v+/1oQd3GvCCHdcoZQ5T+5cnH0oLNTBzMzMzBrj/P1b5PQ5orQxltWvzhNq04ynIjNq0xdeihxRm/BQBrUJeRnUJhILSBOJBaSJxALSRGIBaSKxgDSRWECaSCwgTSQWkCYSC0gTiQXRtLo72xFheEo0heZsR4Chy3n53js+r6IJ8mzHjKHLwwV5tmPG0OXhgmzcjB3+5IKfmOAN6d7anbAFE0S2uBu9oBHZYjN2UP7IXf75gpefiopjtxVN4fKB8DULTnP2ly/AkEgsIE0kFpAmEgtIE4kFpInEAtJEYgFpIrGANJFYQJoiroPahLwMatMRD0X2/4gf8FJk/1PCdMFTieZM30yHup9z2jNtZmZmZjAMVy4KZ8KNwtI2AAAAAElFTkSuQmCC" width="35" height="35" align="middle" style="padding-bottom: 12px;">
<span style="font-size:1.3rem;"></span>
<b><span id="voltage" style="font-family:Arial, Helvetica, sans-serif; font-size:1.3rem;"></span></b>
<b><span style="font-family:Arial, Helvetica, sans-serif; font-size:1.3rem;">V</span></b>
<div id="voltage"></div>
<br>
<br>
<div id="chart-temperature" class="container"></div>
<br>
<br>
<br>
<br>
<div id="chart-humidity" class="container"></div>
<br>
<br>
<br>
<br>
<div id="chart-firstsensor" class="container"></div>
<br>
<br>
<br>
<br>
<div id="chart-secondsensor" class="container"></div>
</body>
<script>
function startTime(){
var t = new Date();
var h = t.getHours();
var m = t.getMinutes();
var s = t.getSeconds();
m = checkTime(m);
s = checkTime(s);
document.getElementById('time').innerHTML = h + ":" + m + ":" + s;
var t = setTimeout(startTime,500);
}
function checkTime(i) {
if (i < 10) {i = "0" + i}; // add zero in front of numbers < 10
return i;
}
setInterval(function(){
var d = new Date();
var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday "];
var monthNames = ["January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November", "December"];
document.getElementById("date").innerHTML = dayNames[d.getDay()] + ", " + d.getDate() + " " + monthNames[d.getMonth()] + " " + d.getFullYear();
},200);
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("voltage").innerHTML = this.responseText;
}
};
xhttp.open("GET", "/voltage", true);
xhttp.send();
}, 200 ) ;
var chartT = new Highcharts.Chart({
chart:{ renderTo : 'chart-temperature' },
title: { text: '<b>Temperature</b>' },
series: [{
showInLegend: false,
data: []
}],
plotOptions: {
line: { animation: true,
dataLabels: { enabled: true }
},
series: { color: '#06444d' }
},
xAxis: { type: 'datetime',
dateTimeLabelFormats: { second: '%H:%M:%S' }
},
yAxis: {
title: {text: '<b>Temperature (*C)</b>' }
},
credits: { enabled: false }
});
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var x = (new Date()).getTime() + 1000 * 60 * 60 * 3,
y = parseFloat(this.responseText);
if(chartT.series[0].data.length > 12) {
chartT.series[0].addPoint([x, y], true, true, true);
} else {
chartT.series[0].addPoint([x, y], true, false, true);
}
}
};
xhttp.open("GET", "/temperature", true);
xhttp.send();
}, 3000 ) ;
var chartH = new Highcharts.Chart({
chart:{ renderTo:'chart-humidity' },
title: { text: '<b>Air humidity </b>' },
series: [{
showInLegend: false,
data: []
}],
plotOptions: {
line: { animation: false,
dataLabels: { enabled: true }
},
series: { color: '#3e255e' }
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: { second: '%H:%M:%S' }
},
yAxis: {
title: { text: '<b>Humidity (%)</b>' }
},
credits: { enabled: false }
});
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var x = (new Date()).getTime() + 1000 * 60 * 60 * 3,
y = parseFloat(this.responseText);
if(chartH.series[0].data.length > 12) {
chartH.series[0].addPoint([x, y], true, true, true);
} else {
chartH.series[0].addPoint([x, y], true, false, true);
}
}
};
xhttp.open("GET", "/humidity", true);
xhttp.send();
}, 3000 ) ;
var chartA = new Highcharts.Chart({
chart:{ renderTo : 'chart-firstsensor' },
title: { text: '<b>Soil humidity ( Sensor 1 )</b> ' },
series: [{
showInLegend: false,
data: []
}],
plotOptions: {
line: { animation: true,
dataLabels: { enabled: true }
},
series: { color: '#631023' }
},
xAxis: { type: 'datetime',
dateTimeLabelFormats: { second: '%H:%M:%S' }
},
yAxis: {
title: { text: '<b>Humidity (%)</b>' }
},
credits: { enabled: false }
});
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var x = (new Date()).getTime() + 1000 * 60 * 60 * 3,
y = parseFloat(this.responseText);
if(chartA.series[0].data.length > 12) {
chartA.series[0].addPoint([x, y], true, true, true);
} else {
chartA.series[0].addPoint([x, y], true, false, true);
}
}
};
xhttp.open("GET", "/firstsensor", true);
xhttp.send();
}, 3000 ) ;
var chartB = new Highcharts.Chart({
chart:{ renderTo:'chart-secondsensor' },
title: { text: '<b>Soil Humidity ( Sensor 2 )</b>' },
series: [{
showInLegend: false,
data: []
}],
plotOptions: {
line: { animation: false,
dataLabels: { enabled: true }
},
series: { color: '#124f32' }
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: { second: '%H:%M:%S' }
},
yAxis: {
title: { text: '<b>Humidity (%)</b>' }
},
credits: { enabled: false }
});
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var x = (new Date()).getTime() + 1000 * 60 * 60 * 3,
y = parseFloat(this.responseText);
if(chartB.series[0].data.length > 12) {
chartB.series[0].addPoint([x, y], true, true, true);
} else {
chartB.series[0].addPoint([x, y], true, false, true);
}
}
};
xhttp.open("GET", "/secondsensor", true);
xhttp.send();
}, 3000 ) ;
</script>
</html>)webpage";
void setup(){
Wire.begin(D2,D1);
Serial.begin(115200);
ads.setGain(GAIN_ONE); // 1x gain +/- 4.096V 1 bit = 2mV(ADS1015) 0.125mV (ADS1115)
pinMode(relay1,OUTPUT);
pinMode(relay2,OUTPUT);
pinMode(relay3,OUTPUT);
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
digitalWrite(relay3,HIGH);
// Connect to Wi-Fi
WiFi.begin(ssid, password);
Serial.println("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println(".");
}
// afisare ESP8266 Local IP Address
Serial.println(WiFi.localIP());
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/html", index_html);
});
server.on("/voltage", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", String(v).c_str());
});
server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", String(t).c_str());
});
server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", String(h).c_str());
});
server.on("/firstsensor", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", String(a).c_str());
});
server.on("/secondsensor", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", String(b).c_str());
});
server.begin();
ads.begin();
dht.begin();
}
void loop(){
int A0Value = analogRead(analogPin);
float voltage_sensed = A0Value * (espVCC / (float)inputResolution);
v = voltage_sensed * ( 1 + ( (float)R2 / (float)R1) );
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
digitalWrite(relay3,HIGH);
if (a < 70 ){
digitalWrite(relay2,LOW);
digitalWrite(relay3,LOW);
delay(2000);
digitalWrite(relay2,HIGH);
digitalWrite(relay3,HIGH);
delay(5000);
}
if (b < 70 ){
digitalWrite(relay1,LOW);
digitalWrite(relay3,LOW);
delay(2000);
digitalWrite(relay1,HIGH);
digitalWrite(relay3,HIGH);
delay(5000);
}
if (a < 70 && b < 70 ){
digitalWrite(relay3,LOW);
delay(2000);
digitalWrite(relay3,HIGH);
delay(5000);
}
if ( v < 11){
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
digitalWrite(relay3,HIGH);
}
int16_t adc0,adc1;
adc0 = ads.readADC_SingleEnded(0);
adc1 = ads.readADC_SingleEnded(1);
unsigned long currentMillis = millis();
if (currentMillis – previousMillis >= interval) {
previousMillis = currentMillis;
float newT = dht.readTemperature();
if(isnan(newT)){
Serial.println("Temperature reading error! ");
}
else{
t = newT;
Serial.println(t);
}
float newH = dht.readHumidity();
if(isnan(newH)){
Serial.println("Humidity reading error ! ");
}
else{
h = newH;
Serial.println(h);
}
float newA = map(adc0,23560,10135,0,100);
if (isnan(newA)) {
Serial.println("Sensor 1 reading error !");
}
else {
a = newA;
}
float newB = map(adc1,23560,9900,0,100);
if (isnan(newB)) {
Serial.println("Sensor 2 reading error !");
}
else {
b = newB;
}
}
Serial.print("V: ");
Serial.print(v);
Serial.println();
Serial.print("A0: ");
Serial.print(adc0);
Serial.print("\t");
Serial.print("Moisture S1: ");
Serial.print(a);
Serial.println("%");
Serial.print("A1: ");
Serial.print(adc1);
Serial.print("\t");
Serial.print("Moisture S2: ");
Serial.print(b);
Serial.println("%");
Serial.println();
delay(700);
}
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: text: bTemperatureb , [304553] (ID: 304553)
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.
