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/VDD | Senzor ultrasonic, OLED, senzor umiditate | Alimentează 3V3 |
| GND | Toate componentele | Împământarea |
| 19 | OLED | SDA(date) |
| 23 | OLED | SCL(clock) |
| 32 | Senzor umiditate | ADC pentru citire umiditate sol |
| 33 | Divizor de tensiune | ADC pentru nivel baterie |
| 25 | Senzor ultrasonic | TRIG-declanșare semnal |
| 26 | Senzor ultrasonic | ECHO-primire semnal |
| 27 | MOSFET | Folosit 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
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