Differences

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

Link to this comparison view

pm:prj2026:alexandru.jipa2803:ema_ioana.banescu [2026/05/22 00:59]
ema_ioana.banescu [Software Design]
pm:prj2026:alexandru.jipa2803:ema_ioana.banescu [2026/05/25 03:15] (current)
ema_ioana.banescu [Bibliografie]
Line 81: Line 81:
  
 ===== Poză cu sistemul ===== ===== Poză cu sistemul =====
-{{https://​i.imgur.com/​8D1D1aN.jpeg?700| Fotografie cu sistemul}}+{{https://​i.imgur.com/​kdkKjA9.jpeg?700| Fotografie cu sistemul}}
  
 ===== Software Design ===== ===== Software Design =====
Line 88: Line 88:
   * Sistemul implementează un mecanism inteligent de monitorizare și irigare automată a plantelor, utilizând periferice hardware ale microcontrollerului ATmega328P și o arhitectură software modulară, bazată în principal pe task-uri periodice și întreruperi hardware.   * Sistemul implementează un mecanism inteligent de monitorizare și irigare automată a plantelor, utilizând periferice hardware ale microcontrollerului ATmega328P și o arhitectură software modulară, bazată în principal pe task-uri periodice și întreruperi hardware.
  
-Funcționalitățile principale pe care le-am implementat sunt: +Funcționalitățile principale pe care le-am implementat sunt: \\ 
-1) Monitorizarea umidității solului + 
-2) Monitorizarea temperaturii ambientale +1) Monitorizarea umidității solului ​\\ 
-3) Monitorizarea intensității luminii +2) Monitorizarea temperaturii ambientale ​\\  
-4) Control automat al pompei de apă +3) Monitorizarea intensității luminii ​\\ 
-5) Control inteligent al ventilatorului prin PWM hardware +4) Control automat al pompei de apă \\ 
-6) Sistem de profiluri pentru plante +5) Control inteligent al ventilatorului prin PWM hardware ​\\ 
-7) Mod ECO pentru reducerea consumului de apă +6) Sistem de profiluri pentru plante ​\\ 
-8) Afișarea informațiilor pe un ecran LCD I2C +7) Mod ECO pentru reducerea consumului de apă \\ 
-9) Comunicație Bluetooth UART cu aplicația Android realizată în Kotlin +8) Afișarea informațiilor pe un ecran LCD I2C \\ 
-10) Control prin buton folosind întreruperi hardware +9) Comunicație Bluetooth UART cu aplicația Android realizată în Kotlin ​\\ 
-11) Detectarea apăsărilor scurte și lungi (pentru a seta între modul clasic de funcționare și modul economic) +10) Control prin buton folosind întreruperi hardware ​\\ 
-11) Un sistem de feedback vizual, dar și audio în caz că rezervorul pompei rămâne fără apă, lucru care ar putea perturba funționarea motorului pompei.+11) Detectarea apăsărilor scurte și lungi (pentru a seta între modul clasic de funcționare și modul economic) ​\\ 
 +11) Un sistem de feedback vizual, dar și audio în caz că rezervorul pompei rămâne fără apă, lucru care ar putea perturba funționarea motorului pompei. ​\\ 
 +\\
  
 === Biblioteci utilizate === === Biblioteci utilizate ===
Line 112: Line 114:
 === Funcționalități implementate din laboratoare === === Funcționalități implementate din laboratoare ===
  
-=== Arhitectura software ===Sistemul utilizează concepte din mai multe laboratoare:​+Sistemul utilizează concepte din mai multe laboratoare:​
  
   - GPIO   - GPIO
Line 121: Line 123:
   - Întreruperi   - Întreruperi
   - I2C   - I2C
 +
 +=== Arhitectura software ===
  
   * Sistemul utilizează o arhitectură software modulară, construită în jurul unui scheduler, al unor task-uri periodice independente. Spre deosebire de o implementare clasică bazată pe delay(), aplicația folosește o abordare non-blocantă,​ în care fiecare funcționalitate rulează independent,​ la intervale regulate de timp, folosind un timer hardware și funcția uptime_ms().   * Sistemul utilizează o arhitectură software modulară, construită în jurul unui scheduler, al unor task-uri periodice independente. Spre deosebire de o implementare clasică bazată pe delay(), aplicația folosește o abordare non-blocantă,​ în care fiecare funcționalitate rulează independent,​ la intervale regulate de timp, folosind un timer hardware și funcția uptime_ms().
Line 126: Line 130:
   * Această abordare mi-a permis să rulez simultan mai multor componente ale sistemului fără blocarea microcontrollerului. Astfel, sistemul poate:   * Această abordare mi-a permis să rulez simultan mai multor componente ale sistemului fără blocarea microcontrollerului. Astfel, sistemul poate:
  
-- citi periodic senzorii +   - citi periodic senzorii ​\\ 
-- actualiza afișajul LCD +   ​- actualiza afișajul LCD \\ 
-- controla pompa și ventilatorul +   ​- controla pompa și ventilatorul ​\\ 
-- procesa comenzile Bluetooth +   ​- procesa comenzile Bluetooth ​\\ 
-- detecta apăsările butonului +   ​- detecta apăsările butonului ​\\ 
-- trimite informații către aplicația Android.+   ​- trimite informații către aplicația Android. ​\\ 
 +\\
  
   * În centrul sistemului se află Timer0, configurat în modul CTC (Clear Timer on Compare Match), care generează întreruperi periodice și incrementează variabila globală g_millis. Această variabilă este utilizată pentru sincronizarea tuturor task-urilor sistemului.   * În centrul sistemului se află Timer0, configurat în modul CTC (Clear Timer on Compare Match), care generează întreruperi periodice și incrementează variabila globală g_millis. Această variabilă este utilizată pentru sincronizarea tuturor task-urilor sistemului.
Line 156: Line 161:
 Am împărțit fișierul main.c în mai multe secțiuni critice pentru sistemul meu, fiecare având un rol important în cadrul proiectului. Am împărțit fișierul main.c în mai multe secțiuni critice pentru sistemul meu, fiecare având un rol important în cadrul proiectului.
  
-== -> Configurări globale și maparea pinilor ==+==  Configurări globale și maparea pinilor ==
      * În această secțiune am definit:      * În această secțiune am definit:
        * constantele aplicației        * constantele aplicației
Line 187: Line 192:
 } SystemMode; ​ } SystemMode; ​
        * Astfel este mult mai clar și ușor de extins.        * Astfel este mult mai clar și ușor de extins.
-  == 2) Gestionarea timpului și Timer 0 ==+  == Gestionarea timpului și Timer 0 ==
       * Sistemul utilizează Timer0 pentru implementarea unei baze de timp software utilizate de întreg schedulerul aplicației.       * Sistemul utilizează Timer0 pentru implementarea unei baze de timp software utilizate de întreg schedulerul aplicației.
  
Line 265: Line 270:
 Comenzile implementate sunt: Comenzile implementate sunt:
  
-S → pornirea sau oprirea completă a sistemului +S → pornirea sau oprirea completă a sistemului ​\\ 
-E → activarea modului ECO +E → activarea modului ECO \\ 
-N → selectarea profilului pentru plantă normală +N → selectarea profilului pentru plantă normală ​\\ 
-C → selectarea profilului cactus +C → selectarea profilului cactus ​\\ 
-F → selectarea profilului tropical+F → selectarea profilului tropical ​\\
  
 Fiecare profil de plantă modifică automat parametrii utilizați de logica sistemului pentru irigare. De exemplu, pentru profilul „plantă normală” sunt setate: Fiecare profil de plantă modifică automat parametrii utilizați de logica sistemului pentru irigare. De exemplu, pentru profilul „plantă normală” sunt setate:
Line 302: Line 307:
  
  
-===== Rezultate obținute =====+
 ===== Concluzii ===== ===== Concluzii =====
 +În cadrul acestui proiect am realizat un sistem inteligent pentru monitorizare și irigarea automată a plantelor, lucru foarte util pentru mine și care în același timp a putut fi transformat într-un proiect destul de complex. Proiectul combină partea hardware cu partea software, integrează senzori, actuatoare, dar și o comunicație Bluetooth care face legătura dintre o aplicația mobile și sistem.
 +
 +Pe parcursul dezvoltării m-am distrat foarte mult experimentând cu partea hardware - partea care mi s-a părut și cea mai interesantă,​ întrucât a fost prima dată când am avut ocazia să implementez de la zero un sistem embedded complet și să văd efectiv cum toate componentele ajung să funcționeze împreună. Mi s-a părut foarte satisfăcător momentul în care am reușit să controlez pompa, ventilatorul și LCD-ul direct prin microcontroller și să observ cum sistemul reacționează în timp real la datele venite de la senzori. În același timp, proiectul m-a ajutat să înțeleg mult mai bine conceptele din cadrul laboratoarelor și să văd cum se leagă împreună într-un sistem unitar.
 +
 +Deși pe parcurs au existat și probleme legate de conexiunile hardware (în sepcial la partea bluetooth, dar și în ceea ce privește asigurarea unei funționări corecte d.p.d.v. hardware a pompei submersibile și a motorului DC) și de calibrarea senzorilor, tocmai aceste challenge-uri au făcut proiectul să fie interesant.
 +
 +Aș vrea să extind proiectul prin adăugarea unui modul Wi-Fi și a unui server web, care să vină ca alternativă la aplicația mobilă curentă.
 ===== Cod sursă - GitHub Repository ===== ===== Cod sursă - GitHub Repository =====
 {{https://​github.com/​banescuema101/​SmartPlantPM}} {{https://​github.com/​banescuema101/​SmartPlantPM}}
Line 311: Line 323:
 18 Mai - Primul prototip software, crearea repository-ului pe github. Am avut câteva probleme cu conexiunea bluetooth spre microcontroller și a trebuit să schimb niște legături \\ 18 Mai - Primul prototip software, crearea repository-ului pe github. Am avut câteva probleme cu conexiunea bluetooth spre microcontroller și a trebuit să schimb niște legături \\
 22 Mai - Finalizare software și integrare a aplicației Android \\ 22 Mai - Finalizare software și integrare a aplicației Android \\
-Documentarea ​software-ului pentru pagina ocw este acum in lucru+24 Mai - Am terminat documentarea ​software-ului pentru pagina ocw \\
 ===== Bibliografie ==== ===== Bibliografie ====
 Multe componente au fost comandate de pe website-ul Bitmi, unde la aproape fiecare componentă am găsit și instrucțiuni referitoare la modul în care le pot conecta la Arduino UNO, precum și specificațiile necesare.\\ Multe componente au fost comandate de pe website-ul Bitmi, unde la aproape fiecare componentă am găsit și instrucțiuni referitoare la modul în care le pot conecta la Arduino UNO, precum și specificațiile necesare.\\
Line 317: Line 329:
 [[https://​www.bitmi.ro/​module-electronice/​modul-wireless-esp8266-esp-01-compatibil-arduino-10433.html]] [[https://​www.bitmi.ro/​module-electronice/​modul-wireless-esp8266-esp-01-compatibil-arduino-10433.html]]
 [[https://​www.bitmi.ro/​senzori-electronici/​senzor-de-umiditate-a-solului-higrometru-10461.html]] [[https://​www.bitmi.ro/​senzori-electronici/​senzor-de-umiditate-a-solului-higrometru-10461.html]]
 +
 +Datasheet Arduino UNO R3 (pentru a vedea cum s-au mapat pinii la regiștrii:
 +[[https://​www.alldatasheet.com/​datasheet-pdf/​view/​1943445/​ARDUINO/​ARDUINO-UNO.html]]
 +
 +Si datasheet-urile componentelor:​ \\
 +Senzorul de temperatură:​ [[https://​www.alldatasheet.com/​html-pdf/​2193416/​OSEPP/​DHT11/​1246/​7/​DHT11.html]] \\
 +[[https://​github.com/​eshansurendra/​liquid_crystal_i2c_avr/​blob/​main/​src/​main.c]] \\
 +Modulul bluetooth HC-05: [[https://​components101.com/​sites/​default/​files/​component_datasheet/​HC-05%20Datasheet.pdf]]
 +
  
pm/prj2026/alexandru.jipa2803/ema_ioana.banescu.1779400787.txt.gz · Last modified: 2026/05/22 00:59 by ema_ioana.banescu
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