Sistem autonom de irigare

Sistem autonom de irigare

Introducere

Proiectul constă într-un sistem de irigare autonomă capabil să monitorizeze starea solului și nivelul apei din rezervor, apoi să activeze automat o pompă pentru udarea plantelor. Sistemul este alimentat printr-un acumulator încărcat de un panou solar, ceea ce îi permite să funcționeze independent și eficient energetic, fără a necesita alimentare constantă de la priză. Utilizatorul poate urmări în timp real informații precum umiditatea solului, nivelul bateriei sau starea pompei pe un display OLED și poate controla sistemul direct de pe telefon prin conexiune Wi-Fi.

Descriere Generala

  • Panou Solar - sursa de energie regenerabilă
  • Modul Încărcare Solară - un controler între panou și baterie pentru reglarea tensiunii si a curentului de încărcare
  • Bateria - stocare de energie
  • ESP32 - colectează date de la senzori, procesează informațiile și trimite comenzi către pompă și afișaj
  • Senzor Umiditate Sol - măsoară nivelul de apă din pământ
  • Senzor Ultrasonic - utilizat pentru a măsura nivelul apei din rezervor
  • Pompa Apă - pentru irigarea propriu-zisă
  • Display OLED - feedback vizual local

Hardware Design

Schema electrică

Pini

Pin Componenta Rol
3V3/VCC/VDDSenzor ultrasonic, OLED, senzor umiditateAlimentează 3V3
GNDToate componenteleÎmpământarea
19OLEDSDA(date)
23OLEDSCL(clock)
32Senzor umiditateADC pentru citire umiditate sol
33Divizor de tensiuneADC pentru nivel baterie
25Senzor ultrasonicTRIG-declanșare semnal
26Senzor ultrasonicECHO-primire semnal
27MOSFETFolosit pentru comandarea pompei

Componente

  • ESP32 este microcontrolerul sistemului. Rulează logica de control, citește senzorii și comandă pompa prin MOSFET. Acesta va facilita controlul remote prin Wi-Fi. Este încărcat de către modulul solar.
  • Modulul CN3791 MPPT gestionează încărcarea bateriei de la panoul solar și alimentarea sistemului
  • Panoul solar convertește lumina solară în energie electrică pentru a încărca bateria
  • Bateria stochează energia de la panou pentru a alimenta sistemul
  • Pompa transmite apa către plante când ESP32-ul o comandă
  • Senzorul de umiditate al solului măsoară conductivitatea electrică a solului prin două sonde metalice. ESP32-ul citește această tensiune prin ADC și o convertește într-un procentaj de umiditate.
  • Senzorul ultrasonic măsoară distanța până la suprafața apei din rezervor. Trimite un puls ultrasonic prin pinul TRIG și măsoară timpul până când ecoul se întoarce pe pinul ECHO. Din acest timp se calculează distanța, care indică nivelul apei din rezervor
  • Display-ul I2C afișează în timp real informații despre starea sistemului
  • MOSFET-ul acționează ca un întrerupător electronic între baterie și pompă
  • Dioda flyback protejează MOSFET-ul și ESP32-ul de tensiunile inverse generate de pompă
  • Rezistorul R4 10k este pulldown. Ține gate-ul MOSFET-ului la GND când ESP32-ul nu a pornit încă sau este în reset. Fără acest rezistor, gate-ul ar fi flotant și ar putea primi zgomot electric care ar porni pompa accidental la pornirea sistemului
  • Rezistorul R3 220 pe gate limitează curentul de încărcare al capacității gate-ului MOSFET-ului la pornire și oprire
  • Rezistorii R1 si R2 100k creează un divizor de tensiune pentru a măsura nivelul bateriei. ESP-ul suportă maximum 3V3. Bateria poate ajunge la tensiuni mai ridicate

Consum

Panoul Solar: operează în jur de 12V (tensiunea de putere maximă)

Bateria Li-Ion 18650: are o tensiune nominală de 3.7V. Când este complet descărcată are în jur de 3.0V, iar când modulul CN3791 o încarcă la maximum, ajunge la 4.2V

ESP32: are un regulator intern. Îl poți alimenta direct din baterie pe pinul BAT sau 3.3V, deoarece placa acceptă tensiunea variabilă a bateriei (3.0V - 4.2V)

Pompa de apă: funcționează între 3V și 6V

Calcule încărcare(plin soare)

Putere panou: 4.2W

Curent maxim din modul spre baterie: 500mA la 4.2V (Putere necesară = 4.2V * 0.5A = 2.1W)

Timp de încărcare: T = Capacitate baterie/Curent încărcare = 2850mAh/500mAh = 5.7h ⇒ deci, în realitate, ar veni undeva la 6h.

Consum daca este ținut nonstop

ESP32: ~100mA(cu Wi-fi pornit)

Pompa de apă: ~200mA

Consum total ~= 300mA

Durata de viață: 2850mA/300mA ~= 9.5h

Deci, daca sistemul funcționează nonstop acesta are autonomie ~9.5h.

Stagiul curent

Dovadă funcționare componentă(senzor ultrasonic)

Aceasta este o captură de ecran din serial monitor. Am scris un program scurt care arată funcționalitatea senzorului ultrasonic.

Software Design

Mediul de dezvoltare

  • PlatformIO
  • limbajul C

Biblioteci si surse externe

Pentru acest proiect am implementat următoarele biblioteci proprii:

  • adc - pentru citirea și transformarea în procente a nivelului bateriei și a nivelului de umiditate din sol
  • wifi - pentru a transmite informații către pagina web și pentru a controla automat pompa
  • timers - pentru gestionarea timpului cu precizie de microsecunde și configurarea timerului hardware
  • display - pentru afișarea telemetriei pe ecranul OLED
  • ultrasonic_sensor - pentru a măsura distanța de la senzor la apă și a o transforma în procent de umplere a rezervorului

Biblioteci externe:

  • FreeRTOS - pentru crearea task-urilor și comunicarea directă cu schedulerul sistemului de operare
  • esp_adc - pentru calibrarea citirilor și asigurarea izolării hardware în procesul de citire a pinilor analogici
  • soc - pentru accesul direct la regiștrii interni ai microcontrolerului
  • esp_wifi - pentru inițializarea și configurarea driverului nativ Wi-Fi
  • esp_mac - pentru gestionarea adresei MAC în cadrul stivei de rețea
  • esp_http_server - pentru găzduirea serverului HTTP
  • nvs_flash - pentru gestionarea memoriei non-volatile, obligatorie pentru stocarea datelor de configurare ale stivei Wi-Fi
  • i2c_master - pentru configurarea magistralei I2C și gestionarea conexiunii cu ecranul

Functionalitati

Sistemul are următoarele funcționalități:

  • monitorizează nivelul apei din rezervor cu ajutorul unui senzor ultrasonic
  • monitorizează nivelul umidității din sol
  • monitorizează nivelul de alimentare al bateriei pentru a urmări autonomia sistemului
  • transmite prin Wi-Fi toate informațiile menționate mai sus către o pagină web locală, actualizată automat
  • transmite prin I2C telemetria către un ecran OLED pentru afișarea directă și locală a datelor
  • itmplementează protecție la funcționarea pe uscat, împiedicând activarea pompei dacă în rezervor nu se află suficientă apă
  • controlează automat pompa în funcție de umiditate: pornește udarea când nivelul scade sub un prag critic stabilit și o oprește automat în momentul în care solul atinge pragul țintă de umiditate

Funcționalitățile din laborator sunt:

  • GPIO
  • I2C
  • ADC
  • întreruperi
  • timere

Design

Citirea valorilor analogice

Am optat pentru utilizarea exclusivă a unității ADC1 evitând ADC2 deoarece acesta intră în conflict hardware cu modulul Wi-Fi. Pentru a asigura acuratețea, am implementat o fază de warm-up (primele 5 eșantioane de la boot sunt ignorate) și un filtru software pentru atenuarea zgomotului de citire.

Serverul HTTP

Serverul rulează asincron. Pentru a decupla rețeaua de citirea directă a senzorilor, modulele nu comunică direct; serverul citește datele dintr-o zonă de memorie cache, actualizată periodic de bucla principală. Pagina HTML are implementat un tag de auto-refresh la fiecare 2 secunde pentru actualizarea automată a metricilor în browser.

Automatizarea pompei

Logica de udare rulează într-un task independent, complet separat de serverul HTTP. Această decizie garantează că plantele sunt udate chiar și în absența unei conexiuni Wi-Fi sau a unui utilizator activ pe site. Algoritmul verifică starea la fiecare 200ms și pornește pompa doar dacă solul rămâne uscat(sub pragul critic) timp de minimum 2 secunde continuu, prevenind declanșările false.

Sistem manual

Pe lângă modul autonom, interfața web permite controlul manual. În momentul în care utilizatorul trimite o comandă manuală prin HTTP, automatizarea este dezactivată prin activarea unui flag, oferind control total utilizatorului până la oprirea manuală a acesteia.

Sistem de siguranta

Ca măsură critică de siguranță hardware, atât algoritmul automat, cât și comanda manuală sunt suprascrise și blocate instant dacă nivelul din rezervorul de apă scade sub 10%. Aceasta previne funcționarea pompei în gol și arderea ei.

Timer

Senzorul ultrasonic și funcțiile de delay necesită precizie mililitară. Am configurat direct din regiștri Timerul 0 cu un divizor hardware de 80. Astfel, frecvența de bază a procesorului este împărțită pentru a obține o rezoluție de fix 1MHz, ceea ce înseamnă exact o microsecundă per tick.

Main

În el se află bucla principală. La fiecare 2 secunde, aceasta apelează eșantionarea senzorilor, trimite datele către cache-ul HTTP și reîmprospătează ecranul OLED. La finalul fiecărui ciclu, task-ul cedează controlul schedulerului FreeRTOS prin vTaskDelay pentru a permite altor procese de fundal(precum Wi-Fi-ul) să ruleze stabil.

Github Repo

Video testare

pm/prj2026/alexandru.jipa2803/marius.dogeanu0509.txt · Last modified: 2026/05/23 20:20 by marius.dogeanu0509
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0