Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:alexandru.jipa2803:marius.dogeanu0509 [2026/05/19 11:28]
marius.dogeanu0509
pm:prj2026:alexandru.jipa2803:marius.dogeanu0509 [2026/05/23 20:20] (current)
marius.dogeanu0509
Line 40: Line 40:
   * **Rezistorul R3 220** pe gate limitează curentul de încărcare al capacității gate-ului MOSFET-ului la pornire și oprire   * **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   * **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 ==== ==== Stagiul curent ====
Line 47: Line 77:
  
 Aceasta este o captură de ecran din serial monitor. Am scris un program scurt care arată funcționalitatea senzorului 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 ===
 +[[https://​github.com/​dogeanuMA28/​sistem_de_irigare_pm/​tree/​main]]
 +
 +=== Video testare ===
 +[[https://​www.youtube.com/​shorts/​QqSstJF_evk]]
pm/prj2026/alexandru.jipa2803/marius.dogeanu0509.1779179309.txt.gz · Last modified: 2026/05/19 11:28 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