Differences

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

Link to this comparison view

pm:prj2025:mdinica:melisa.staicu [2025/05/12 00:49]
mihai.spirchez [Descriere generală]
pm:prj2025:mdinica:melisa.staicu [2025/06/04 16:32] (current)
mihai.spirchez [Elementul de noutate al proiectului]
Line 4: Line 4:
  
 **Despre ce este proiectul?​** \\ **Despre ce este proiectul?​** \\
-Acest proiect este un sistem autonom de curățare și monitorizare a unui panou fotovoltaic acoperit de o placă transparentă. Un senzor de lumină detectează gradul de murdărie, iar atunci când performanța sistemului scade sub un prag prestabilit,​ se activează un servomotor care mișcă un ștergător și o pompă cu apă pentru a spăla suprafața. În paralel, un microcontroler ​ESP32 înregistrează date de producție și nivelul apei, le afișează pe un panou LED și le salvează pe un card SD.  ​+Acest proiect este un sistem autonom de curățare și monitorizare a unui panou fotovoltaic acoperit de o placă transparentă. Un senzor de lumină detectează gradul de murdărie, iar atunci când performanța sistemului scade sub un prag prestabilit,​ se activează un servomotor care mișcă un ștergător și o pompă cu apă pentru a spăla suprafața. În paralel, un microcontroler ​Arduino Uno înregistrează date de producție și nivelul apei, le afișează pe un panou LED și le salvează pe un card SD.  ​
  
 **Care este scopul proiectului?​** \\  **Care este scopul proiectului?​** \\ 
Line 15: Line 15:
 Prin menținerea automată a suprafeței curate, utilajul maximizează producția de energie fără intervenție manuală și oferă date de mentenanță predictivă. În plus, stocarea istorică pe card SD permite optimizarea ciclurilor de curățare și dimensionarea viitoarelor instalații.  ​ Prin menținerea automată a suprafeței curate, utilajul maximizează producția de energie fără intervenție manuală și oferă date de mentenanță predictivă. În plus, stocarea istorică pe card SD permite optimizarea ciclurilor de curățare și dimensionarea viitoarelor instalații.  ​
  
-===== Descriere generală ===== +===== Schemă bloc ===== 
-{{:​pm:​prj2025:​atoader:schema_bl.png?800x450|}}+{{:​pm:​prj2025:​mdinica:schema_bloc.png?800x800|}}
  
 ==== Descrierarea componentelor ==== ==== Descrierarea componentelor ====
-**ESP32 DevKit (ESP-WROOM-32)**+ 
 +**Arduino UNO** 
     * Centralizează toate funcțiile de control și măsurare.     * Centralizează toate funcțiile de control și măsurare.
     * Citește semnalul analog de la senzorul de lumină (LDR) și nivelul apei (electrozi DIY) prin ADC.     * Citește semnalul analog de la senzorul de lumină (LDR) și nivelul apei (electrozi DIY) prin ADC.
Line 25: Line 27:
     * Comunică cu display-ul LED (I²C/SPI) și cu modulul SD (SPI).     * Comunică cu display-ul LED (I²C/SPI) și cu modulul SD (SPI).
     * Gestionează logica de decizie (când să pornească ciclu de curățare) și înregistrează date pe cardul SD.     * Gestionează logica de decizie (când să pornească ciclu de curățare) și înregistrează date pe cardul SD.
 +
 +
 **Panou fotovoltaic** **Panou fotovoltaic**
 +
     * Furnizează energie electrică în sistem – aproximativ 6 V / 5 W (sau conform specificațiilor alese).     * Furnizează energie electrică în sistem – aproximativ 6 V / 5 W (sau conform specificațiilor alese).
     * Încărcarea bateriei și alimentarea consumatorilor se face prin circuite auxiliare.     * Încărcarea bateriei și alimentarea consumatorilor se face prin circuite auxiliare.
-**Modul ridicător de tensiune (DC-DC Boost Converter)** +
-    * Primește tensiunea de la panoul solar (≈6 V) și o ridică la 5 V stabil pentru alimentarea ESP32 și a modulelor periferice. +
-**Modul încărcător Li-Ion (TP4056)** +
-    * Oferă încărcare inteligentă a acumulatorului Li-Ion/​Li-Po la 4.2 V, max. 1 A. +
-   * Protecție la suprasarcină și supratensiune pentru celula de baterie. +
-**Acumulator Li-Ion 18650 (sau pachet echivalent)** +
-    * Stochează energia produsă de panou pentru alimentarea contin uă a ESP32 și a actuatorilor în condiții de iluminare scăzută.+
 **Senzor de lumină (LDR + rezistor)** **Senzor de lumină (LDR + rezistor)**
 +
     * LDR montat pe placă transparentă măsoară intensitatea luminii incidente.     * LDR montat pe placă transparentă măsoară intensitatea luminii incidente.
-    * În divizor de tensiune cu rezistor fix (10 kΩ) pentru citire analogică cu ESP32.+    * În divizor de tensiune cu rezistor fix (10 kΩ) pentru citire analogică cu Arduino Uno.
     * Prag de murdărie: valoare scăzută a luminii declanșează ciclul de curățare.     * Prag de murdărie: valoare scăzută a luminii declanșează ciclul de curățare.
 +
 +
 **Senzor nivel apă (DIY cu electrozi)** **Senzor nivel apă (DIY cu electrozi)**
 +
     * Electrozi de inox plasați în rezervor detectează prezența apei la diferite înălțimi.     * Electrozi de inox plasați în rezervor detectează prezența apei la diferite înălțimi.
-    * Semnal digital (HIGH/LOW) sau semnal analog (prin rezistență pull-down) către ​ESP32.+    * Semnal digital (HIGH/LOW) către ​Arduino Uno.
     * Asigură oprirea pompei la nivel minim și avertizare pe display.     * Asigură oprirea pompei la nivel minim și avertizare pe display.
-**Buton schimbare afișaj** + 
-    * Push-button conectat la un pin GPIO cu rezistor de pull-up intern. + 
-    * La apăsare ciclică comută între afișarea nivelului de apă și a curentului produs. +**Display ​LCD** 
-**Display ​LED (matrice 8×8 sau modul 7-segmente)**+
     * Afișează valorile măsurate în timp real (nivel apă în %, curent produs în mA).     * Afișează valorile măsurate în timp real (nivel apă în %, curent produs în mA).
-    * Conectare I²C (2 fire) sau SPI (4 fire) către ​ESP32, în funcție de modul ales.+    * Conectare I²C (2 fire) sau SPI (4 fire) către ​Arduino Uno, în funcție de modul ales. 
 + 
 **Modul SD Card (SPI)** **Modul SD Card (SPI)**
 +
     * Memorează jurnalele de date (timestamp, nivel apă, curent generat) într-un fișier CSV.     * Memorează jurnalele de date (timestamp, nivel apă, curent generat) într-un fișier CSV.
-    * Interfață SPI la 3.3 V, conectat la ESP32 prin pini MOSI, MISO, SCK, CS.+    * Interfață SPI la 3.3 V, conectat la Arduino Uno prin pini MOSI, MISO, SCK, CS. 
 + 
 **Servomotor SG90** **Servomotor SG90**
 +
     * Acționează brațul ștergătorului cu cursă de aproximativ 90° pentru a curăța placa transparentă.     * Acționează brațul ștergătorului cu cursă de aproximativ 90° pentru a curăța placa transparentă.
-    * Alimentare 5 V și semnal de control PWM de la ESP32.+    * Alimentare 5 V și semnal de control PWM de la Arduino Uno. 
 + 
 **Pompă de apă 5 V** **Pompă de apă 5 V**
 +
     * Pompa submersibilă sau cu tub extern, debit ~100 L/h.     * Pompa submersibilă sau cu tub extern, debit ~100 L/h.
-    * Alimentare direct de la baterie/bus de 5 V și pornire/​oprire prin tranzistor MOSFET controlat de ESP32.+    * Alimentare direct de la baterie/bus de 5 V și pornire/​oprire prin tranzistor MOSFET controlat de Arduino Uno. 
 + 
 **Placă transparentă (policarbonat)** **Placă transparentă (policarbonat)**
 +
     * Panou de protecție peste panoul solar, pe care se montează senzorul LDR și brațul ștergător.     * Panou de protecție peste panoul solar, pe care se montează senzorul LDR și brațul ștergător.
 +
 +
 **Ștergător (braț + lamelă)** **Ștergător (braț + lamelă)**
 +
     * Fixat pe servomotor, realizează ștergerea mecanică a murdăriei de pe suprafața plăcii.     * Fixat pe servomotor, realizează ștergerea mecanică a murdăriei de pe suprafața plăcii.
 +
 +
 **Furtun PVC transparent** **Furtun PVC transparent**
 +
     * Transportă apa de la rezervor către zona de curățare.     * Transportă apa de la rezervor către zona de curățare.
     * Conectat la pompa de apă și fixat de brațul ștergător.     * Conectat la pompa de apă și fixat de brațul ștergător.
Line 74: Line 95:
 |-------------------------------|-----------|----------------------------------| |-------------------------------|-----------|----------------------------------|
 | Panou fotovoltaic ​            | 1         | poate varia în funcție de test   | | Panou fotovoltaic ​            | 1         | poate varia în funcție de test   |
-Modul DC-DC boost             | 1         | pentru alimentarea ESP32         | +Arduino Uno                   | 1         | model generic dev board          |
-| Modul încărcător Li-Ion TP4056| 1         | încărcare sigură baterie ​        | +
-| Acumulator Li-Ion 18650       | 1         | sau pachet echivalent ​           | +
-| ESP32 Dev Kit                 | 1         | model generic dev board          |+
 | Senzor de lumină (LDR + rez.) | 1         | divizor de tensiune analog ​      | | Senzor de lumină (LDR + rez.) | 1         | divizor de tensiune analog ​      |
 | Senzor nivel apă (DIY)        | 1         | limitare curent prin rezistor ​   | | Senzor nivel apă (DIY)        | 1         | limitare curent prin rezistor ​   |
 | Buton push-button ​            | 1         | cu rezistor de pull-up intern ​   | | Buton push-button ​            | 1         | cu rezistor de pull-up intern ​   |
-| Display LED                   | 1         | modul compatibil SPI/I²C         |+| Display LED                   | 1         | modul compatibil SPI.            ​|
 | Modul card SD                 | 1         | socket micro-SD ​                 | | Modul card SD                 | 1         | socket micro-SD ​                 |
 | Servomotor SG90               | 1         | deviere ~90° pentru ștergător ​   | | Servomotor SG90               | 1         | deviere ~90° pentru ștergător ​   |
 | Pompă de apă 5 V/​12 V ​        | 1         | submersibilă sau cu tuburi flex. | | Pompă de apă 5 V/​12 V ​        | 1         | submersibilă sau cu tuburi flex. |
-| Furtun PVC transparent ​       | 1 m       | pentru alimentarea pompei ​       |+| Furtun PVC transparent ​       | 1         ​| pentru alimentarea pompei ​       |
 | Placaj policarbonat (plastic) | 1         | montaj ștergător ​                | | Placaj policarbonat (plastic) | 1         | montaj ștergător ​                |
  
 ===== Software Design ===== ===== Software Design =====
  
 +===== Biblioteci și resurse utilizate =====
  
-<note tip> + 
-Descrierea codului aplicaţiei ​(firmware): +  * Servo.h – pentru controlul servomotoarelor MG995 și SG90 
-  * mediu de dezvoltare ​(if any) (e.gAVR StudioCodeVisionAVR+  * SD.h – pentru salvarea datelor de monitorizare pe cardul SD 
-  * librării şsurse 3rd-party (e.gProcyon AVRlib+  * SPI.h – pentru comunicarea SPI cu SD cardul și TFT-ul 
-  * algoritmi şstructuri ​pe care plănuiţi să le implementaţ+  * Adafruit_GFX.h și Adafruit_ST7735.h – pentru afișarea grafică pe LCD TFT 1.8" 
-  * (etapa 3) surse şfuncţii implementate + 
-</​note>​+ 
 +===== Algoritmi și structuri ====== 
 + 
 + 
 +Software-ul este organizat într-o buclă principală loop(), care execută periodic următoarele acțiuni: 
 + 
 +  * Citirea valorilor analogice ​de la senzorul de curent ACS712, divizorul de tensiune și fotorezistori 
 +  * Calculul puterii electrice ​(P = U x I) 
 +  * Detectarea diferențelor de lumină între doi senzori de lumină ​(indicând posibila murdărie a panoului) 
 +  * Activarea releului și a servomotoarelor dacă diferența de lumină depășește un prag 
 +  * Afișarea în timp real a datelor pe un ecran TFT SPI 
 +  * Scrierea periodică a valorilor pe cardul SD, pentru arhivare și analiză ulterioară 
 + 
 +===== Utilizarea funcționalităților din laborator ===== 
 + 
 +  * **Laboratorul 0** - Serial.begin() pentru testare și debugging cu valori live de la senzori. 
 +  * **Laboratorul 1** - pinMode()digitalWrite(pentru controlul releului și inițializarea pinilor. 
 +  * **Laboratorul 2** - Controlul servomotoarelor cu Servo.write() pe canale PWM. 
 +  * **Laboratorul 3** - analogRead() pentru curent, tensiune șfotorezistori. 
 +  * **Laboratorul 4** Adafruit_ST7735 pentru afișarea datelor: curent, tensiune, putere, stare sistem. 
 +  * **Laboratorul 5** - Salvare pe SD cu SD.open(), file.print(), înregistrare periodică cu millis(). 
 +  * **Laboratorul 6** - Integrarea completă într-un sistem funcțional cu reacții automate. 
 + 
 +===== Funcții și fișiere sursă ===== 
 + 
 + 
 +Funcții principale:​ 
 + 
 +  * setup_display(– inițializează ecranul TFT, setează rotația, șterge ecranul și pregătește zona de afișare pentru actualizări periodice. 
 +  * setup_water_sensor() – configurează pini locali șde pe extenderul I2C (PCF8574) pentru citirea nivelului apei pe baza tranzistorilor conectați la diferite înălțimi. 
 +  * setup_curent_sensor() – face o calibrare inițială a senzorului ACS712, calculând offsetul de tensiune fără curent, pentru a putea oferi valori reale și precise ulterior. 
 +  * setup_lumina_sensor() – setează pinii senzorilor de lumină și pinul de control pentru releul pompei. Pompa este oprită la pornirea sistemului (LOW logic invers). 
 +  * water_senzor_get_procentage() – interpretează starea pinilor de la tranzistori (via PCF8574 și pini direcți) și returnează procentul estimat al nivelului de apă, între 0% și 100%. 
 +  * curent_sensor_get_value() – face medii multiple ale tensiunii pe pinul analogic, transformă rezultatul în amperi, aplică un filtru EMA (exponential moving average) și returnează curentul produs de panoul solar. 
 +  * display_water_level(procent,​ curent) – actualizează doar când este nevoie afișajul de pe TFT cu noul nivel de apă și curentul generat, pentru a evita artefacte vizuale sau erori. 
 +  * verifica_lumina_si_porneste_pompa() – citește lumină pe cei doi senzori șdecide când este nevoie ​să pornească pompa de apă (în cazul murdăririi senzorilor). Activează șun „flag” pentru a permite mișcarea ulterioară a servomotorului. 
 +  * loop() – bucla principală care execută toată logica periodic: verifică lumină, afișează nivelul apei și curentul, iar după oprirea pompei, execută de 6 ori o mișcare a servomotorului SG90. 
 + 
 +===== Interacțiunea dintre componente ===== 
 + 
 +  * Panoul solar furnizează energie, care este monitorizată prin senzorii de curent și tensiune 
 +  * Senzorii de lumină verifică diferența de iluminare pentru a determina dacă panoul este murdar 
 +  * Releul pornește pompa și servourile doar dacă diferența dintre senzorii de lumină este mare 
 +  * LCD-ul TFT afișează datele în timp real 
 +  * Cardul SD arhivează nivelul de apă și puterea panoului pentru analiză ulterioară 
 + 
 +===== Calibrarea și validarea ===== 
 + 
 +  * Curentul măsurat cu ACS712 a fost calibrat comparativ cu un multimetru, iar offset-ul a fost corectat în cod. 
 +  * Tensiunea divizorului a fost testată cu surse de 3V ș5V pentru a confirma scalarea corectă. 
 +  * Diferența de lumină între senzori a fost ajustată din software pentru a reacționa doar la diferențe semnificative (ex: murdărie reală, nu variații naturale). 
 + 
 + 
 +===== Optimizări ===== 
 +  * Curentul măsurat cu ACS712 a fost calibrat comparativ cu un multimetru, iar offset-ul a fost corectat în cod. 
 +  * Afișare optimizată pe ecran TFT – actualizăm conținutul de pe ecran doar când apar modificări ale nivelului apei sau ale curentului generat, evitând astfel apeluri repetate și costisitoare la funcțiile de desenare. 
 +  * Structurare modulară a codului – funcționalitățile majore (citire senzori, control servomotor, afișare pe TFT, control pompă etc.) sunt implementate ​în funcții separate, ușor de întreținut,​ testat și extins. 
 +  * Controlul acțiunilor prin stări logice – am folosit variabile precum pompaPornita și servoExecutatDupaPompa pentru a evita repetiții și suprapuneri ale comenzilor hardware (releu sau servo), permițând un flux de execuție clar și fiabil. 
 +  * Eliminarea delay-urilor inutile – în versiunile inițiale ale codului am folosit millis() pentru control temporizat non-blocant. În forma finală, logica a fost simplificată intenționat pentru a oferi claritate maximă, fără blocaje și fără afectarea celorlalte funcționalități. 
 +  * Comentarii clare și cod auto-explicativ – codul este documentat pas cu pas, fiecare funcție și secțiune fiind explicată pentru o înțelegere facilă. 
 + 
 +===== Mediu de Dezvoltare ===== 
 + 
 +Proiectul este dezvoltat în Arduino IDE, care oferă un mediu ușor de utilizat pentru programarea și încărcarea codului pe placa Arduino. Tot codul este scris în C++, folosind bibliotecile standard Arduino și logică personalizată pentru implementarea scopului proiectului. 
 + 
 +===== Elementul de noutate al proiectului ===== 
 + 
 +Am realizat propriul nostru senzor pentru detectarea volumului apei, alcătuit din mai mulți tranzistori,​ fiecare dintre aceștia ​ având conectat la colector câte un rezistor și un led, iar pe bază un fir care duce către un recipient. Fiecare fir către recipient are o lungime diferita, astfel incât să capteze curentul din puncte diferite din sticlă. Practic fiecare tranzistor va aprinde ledul în momentul în care este atins nivelul lui de apă. Totdată, la fiecare colector al tranzistorilor,​ este conectat și un fir care este dus către plăcuța de Arduino pentru a fi citit.  
 + 
 +{{:​pm:​prj2025:​mdinica:​senzor_apa.jpeg?​800x800|}}
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +Am realizat un proiect care integrează un sistem fotovoltaic inteligent și curățarea acestuia printr-un senzor care monitorizează nivelului apei, realizat de la 0 de către noi. Acesta folosește senzori de lumină pentru a detecta condițiile de iluminare, iar în funcție de acestea activează o pompă de apă printr-un releu. După fiecare activare a pompei, un servomotor execută automat o secvență de mișcări predefinite. Panoul solar conectat alimentează întregul sistem, iar un senzor de curent monitorizează producția de energie în timp real. Datele despre nivelul apei și curentul generat sunt afișate pe un ecran TFT. Proiectul reunește componente hardware diverse și un cod bine structurat, permițând control autonom și feedback vizual în timp real.
-Care au fost rezultatele obţinute ​în urma realizării proiectului vostru. +
-</​note>​+
  
 ===== Concluzii ===== ===== Concluzii =====
 +
 +Proiectul a fost o experiență practică valoroasă, care ne-a ajutat să înțelegem mai bine principiile de funcționare ale componentelor electronice și modul în care acestea pot fi integrate într-un sistem autonom. A fost interesant să lucrăm cu senzori, relee, servomotoare și un panou solar. Am întâmpinat dificultăți tehnice, mai ales în integrarea componentelor multiple, dar prin documentare,​ videouri explicative și testare am reușit să le depășim. A fost o activitate practică extrem de utilă, din care am învățat foarte multe și care a avut o finalitate reușită.
  
 ===== Download ===== ===== Download =====
  
-<note warning>​ +{{:pm:​prj2025:​mdinica:​media_proiect.zip?​800x800|}}
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul)**Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +===== Cod sursă ===== 
-</note>+https://github.com/​melisa204/pm_project
  
-===== Jurnal =====+===== Jurnal =====
 +06.05.2025 - Am decis tema proiectului și am realizat descrierea inițială a acestuia.
  
-<note tip> +09.05.2025 - Am realizat schema.
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +
-</​note>​+
  
-===== Bibliografie/​Resurse =====+10.05.2025 - Am comanda primele componente.
  
-<​note>​ +12.05.2025 - Am ridicat componentele și am observat dupa jumătate de zi că am primit senzori de temperatură în loc de tranzistoridupă ce nu funcționa testarea noastră pe breadboard. 
-Listă cu documentedatasheet-uri, resurse Internet folosite, eventual grupate ​pe **Resurse ​Software** şi **Resurse Hardware**. + 
-</note>+13.05.2025 ​Am dat comandă de tranzistori și de componentele care ne-am dat seama pe parcurs ca ne mai trebuiesc. 
 + 
 +15.05.2025 - Am ridicat restul componentelor. 
 + 
 +18.05.2025 - Am asamblat întregul proiect și am testat funcționalitatea componentelor. 
 + 
 +22.05.2025 - Am dezvoltat și am testat partea de software a proiectului. 
 + 
 +25.05.2025 - Am realizat testarea finală și videoclipurile pentru demo. 
 + 
 +30.05.2025 - Am realizat scheletul de lemn pentru susținerea si prezentarea proiectului. 
 + 
 +===== Bibliografie/​Resurse ​===== 
 +  ​[[https://​www.youtube.com/​watch?​v=OdXzCmFGztA&​t=92s]] 
 +  ​[[https://​www.youtube.com/​watch?​v=boagCpb6DgY&​t=106s]] 
 +  ​[[https://​www.youtube.com/​watch?​v=qHJAYjCqAok&​t=6s]] 
 +  ​[[https://​www.youtube.com/​watch?​v=58XWVDnB7Ss&​t=11s]] 
 +  ​[[https://​www.youtube.com/​watch?​v=7tUGUXyloXQ&​t=7s]] 
 +  * [[https://​www.youtube.com/watch?​v=dy9AWNs94Hs&​t=145s]]
  
-<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ 
pm/prj2025/mdinica/melisa.staicu.1747000156.txt.gz · Last modified: 2025/05/12 00:49 by mihai.spirchez
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