Differences

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

Link to this comparison view

pm:prj2026:atoader:mihaela.dimovska [2026/05/22 11:42]
mihaela.dimovska [Software Design]
pm:prj2026:atoader:mihaela.dimovska [2026/05/24 16:00] (current)
mihaela.dimovska [Resurse / Bibliografie]
Line 138: Line 138:
 ===== Software Design ===== ===== Software Design =====
  
-Proiectul este implementat în C/C++ folosind framework-ul Arduino, în mediul Visual Studio Code cu PlatformIO. Codul rulează direct pe microcontroller și controlează senzorii, pompa, LED-ul RGB, butonul și display-ul OLED.+Proiectul este implementat în C/C++ folosind framework-ul Arduino, în mediul Visual Studio Code cu PlatformIO. Codul rulează direct pe microcontroller și controlează senzorii, pompa, LED-urile, butonul și display-ul OLED.
  
-=== Stadiul actual al implementării ===+==== Stadiul actual al implementării ​====
  
-În stadiul actual, proiectul poate citi umiditatea solului și temperatura,​ poate calcula automat cantitatea de apă necesară și poate porni pompa prin releu. Sistemul permite și udare manuală prin apăsarea unui butontratată cu întrerupere externă.+În stadiul actual, proiectul poate citi umiditatea solului și temperatura,​ poate calcula automat cantitatea de apă necesară și poate porni pompa prin releu. Sistemul permite și udare manuală prin apăsarea unui buton tratat cu întrerupere externă.
  
-=== Biblioteci folosite ===+==== Biblioteci folosite ​====
  
-`Arduino.h- utilizată pentru funcțiile de bază ale microcontrollerului, precum ​GPIO, ADC, PWM, temporizare și comunicație serială. +  * **Arduino.h** - utilizată pentru funcțiile de bază ale microcontrolleruluiGPIO, ADC, PWM, temporizare și comunicație serială; 
-`Wire.h- utilizată pentru comunicația I2C cu display-ul OLED. +  * **Wire.h** - utilizată pentru comunicația I2C cu display-ul OLED; 
-`Adafruit_GFX.h- utilizată pentru funcțiile grafice de bază ale display-ului. +  * **Adafruit_GFX.h** - utilizată pentru funcțiile grafice de bază ale display-ului; 
-`Adafruit_SSD1306.h- utilizată pentru controlul display-ului OLED SSD1306. +  * **Adafruit_SSD1306.h** - utilizată pentru controlul display-ului OLED SSD1306; 
-`avr/​interrupt.h- utilizată pentru configurarea și tratarea întreruperii externe a butonului.+  * **avr/​interrupt.h** - utilizată pentru configurarea și tratarea întreruperii externe a butonului.
  
-=== Funcționalități din laborator utilizate ===+==== Funcționalități din laborator utilizate ​====
  
-* GPIO - folosit pentru controlul releului, LED-ului RGB și citirea ​butonului. +  * **GPIO** - folosit pentru controlul releului, LED-urilor ​și butonului; 
-* ADC - folosit pentru citirea senzorului de umiditate a solului și a senzorului de temperatură. +  * **ADC** - folosit pentru citirea senzorului de umiditate a solului și a senzorului de temperatură; 
-* PWM - folosit pentru controlul intensității LED-ului roșu prin `analogWrite()`. +  * **PWM** - folosit pentru controlul intensității LED-ului roșu prin ''​analogWrite()'';​ 
-* I2C - folosit pentru comunicația cu display-ul OLED. +  * **I2C** - folosit pentru comunicația cu display-ul OLED; 
-* USART - folosit prin `Serialpentru ​afișarea mesajelor ​de debug și monitorizare. +  * **USART** - folosit prin ''​Serial'' ​pentru ​mesaje ​de debug și monitorizare; 
-* Întreruperi - folosite prin `INT0pentru detectarea apăsării butonului de udare manuală. +  * **Întreruperi** - folosite prin ''​INT0'' ​pentru detectarea apăsării butonului de udare manuală; 
-* Timere/​temporizare - folosite prin `millis()pentru debounce, stabilizare,​ durata udării și intervalele de afișare.+  * **Timere / temporizare** - folosite prin ''​millis()'' ​pentru debounce, stabilizare,​ durata udării și intervalele de afișare.
  
-=== Scheletul proiectului ===+==== Scheletul proiectului ​====
  
-Logica proiectului este organizată ca o mașină de stări cu stările`SYSTEM_STABILIZING`,​ `SYSTEM_OK`,​ `NEEDS_WATER`,​ `WATERING` și `WAIT_AFTER_WATERING`.+Logica proiectului este organizată ca o mașină de stări cu următoarele ​stări:
  
-În `loop()` se citesc senzorii, se calculează umiditatea și temperatura,​ se verifică starea sistemului, se pornește sau se oprește ​pompa și se actualizează LED-urile, OLED-ul și mesajele trimise prin Serial.+  * ''​SYSTEM_STABILIZING''​ - perioada inițială de stabilizare a senzorilor;​ 
 +  * ''​SYSTEM_OK''​ - starea normală de monitorizare;​ 
 +  * ''​NEEDS_WATER''​ - solul este detectat ca fiind uscat; 
 +  * ''​WATERING''​ - pompa este activă
 +  * ''​WAIT_AFTER_WATERING'' ​perioada de așteptare pentru absorbția apei.
  
-=== Validare ===+În ''​loop()''​ se citesc senzorii, se calculează umiditatea și temperatura,​ se verifică starea sistemului, se pornește sau se oprește pompa și se actualizează LED-urile, OLED-ul și mesajele transmise prin Serial. 
 + 
 +==== Validare ​====
  
 Funcționalitatea a fost validată prin verificarea valorilor ADC în Serial Monitor, testarea afișajului OLED, testarea releului și a pompei, verificarea LED-urilor și testarea butonului cu întrerupere. De asemenea, au fost testate tranzițiile dintre stările sistemului. Funcționalitatea a fost validată prin verificarea valorilor ADC în Serial Monitor, testarea afișajului OLED, testarea releului și a pompei, verificarea LED-urilor și testarea butonului cu întrerupere. De asemenea, au fost testate tranzițiile dintre stările sistemului.
  
-=== Calibrarea senzorilor ===+==== Calibrarea senzorilor ===
 + 
 +Senzorul de umiditate a fost calibrat experimental prin citirea valorilor ADC pentru sol uscat și sol umed. Valorile obținute au fost folosite ca praguri pentru ''​SOIL_DRY_ADC''​ și ''​SOIL_WET_ADC'',​ iar apoi au fost transformate în procent de umiditate folosind ''​map()''​. 
 + 
 +==== Optimizări ==== 
 + 
 +  * media mai multor citiri ADC pentru reducerea zgomotului;​ 
 +  * debounce pentru buton; 
 +  * confirmarea mai multor citiri consecutive înainte de pornirea sau oprirea udării; 
 +  * limitarea timpului maxim de funcționare al pompei pentru protecție;​ 
 +  * organizarea logicii într-o mașină de stări pentru claritate și control mai bun. 
 + 
 +==== Arhivă proiect === 
 + 
 +Fișierul atașat conține codul sursă, configurația proiectului și resursele folosite pentru implementarea sistemului automat de udare. 
 +{{:​pm:​prj2026:​atoader:​sistem_de_udare.zip|Arhivă proiect}}
  
-Senzorul de umiditate a fost calibrat experimental prin citirea valorilor ADC pentru sol uscat și sol umed. Valorile obținute au fost folosite ca praguri pentru `SOIL_DRY_ADC` și `SOIL_WET_ADC`,​ iar apoi au fost transformate în procent de umiditate folosind `map()`.+===== Resurse / Bibliografie =====
  
-=== Optimizări ===+Pentru realizarea proiectului am folosit documentații tehnice și resurse online pentru componentele hardware și bibliotecile software utilizate. Documentația pentru microcontrolerul **ATmega328P** a fost folosită pentru înțelegerea pinilor disponibili,​ a intrărilor ADC, a pinilor digitali și a funcționării generale a microcontrolerului. Pentru senzorul de temperatură **LM35** am folosit fișa tehnică, deoarece aceasta explică faptul că senzorul are o ieșire analogică liniară de **10 mV/°C**, valoare folosită în conversia din ADC în grade Celsius. Pentru display-ul OLED cu controller **SSD1306** am folosit documentația bibliotecilor **Adafruit SSD1306** și **Adafruit GFX**, necesare pentru afișarea textului pe ecran prin interfața I2C. De asemenea, am folosit resurse Arduino pentru funcțiile de bază precum `pinMode()`,​ `digitalRead()`,​ `digitalWrite()`,​ `analogRead()`,​ `analogWrite()` și `millis()`, folosite în implementarea logicii de control, citirea senzorilor, PWM pentru LED-ul roșu și temporizarea fără blocare. Pentru controlul pompei am consultat resurse despre utilizarea unui modul releu cu Arduino, deoarece pompa nu poate fi alimentată direct dintr-un pin GPIO al microcontrolerului.
  
-Am folosit ​media mai multor citiri ADC pentru ​reducerea zgomotuluidebounce pentru butonconfirmarea mai multor citiri consecutive înainte ​de pornirea sau oprirea udării și limitarea timpului maxim de funcționare al pompei ​pentru ​protecție.+  * **Microchip - ATmega328P Datasheet** - documentația microcontrolerului ​folosit pentru ​piniADCGPIO și caracteristici electrice: https://​www.microchip.com/​en-us/​product/​atmega328p 
 +  * **ATmega328P Datasheet PDF** - fișă tehnică detaliată pentru microcontrolerul ATmega328P: https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf 
 +  * **Texas Instruments - LM35 Datasheet** - documentația senzorului ​de temperatură LM35 și relația ​de conversie 10 mV/°C: https://​www.ti.com/​lit/​ds/​symlink/​lm35.pdf 
 +  * **Arduino Documentation - Analog Input Pins** - informații despre citirea valorilor analogice folosind pinii ADC: https://​www.arduino.cc/​en/​Tutorial/​AnalogInputPins 
 +  * **Arduino Reference - pinMode(), digitalRead(),​ digitalWrite(),​ analogRead(),​ analogWrite(),​ millis()** - funcții folosite ​pentru ​configurarea pinilor, citirea senzorilor, controlul LED-urilor și temporizări:​ https://​docs.arduino.cc/​language-reference/​ 
 +  * **Adafruit SSD1306 Library** - bibliotecă folosită pentru controlul display-ului OLED SSD1306: https://​docs.arduino.cc/​libraries/​adafruit-ssd1306/​ 
 +  * **Adafruit GFX Library** - bibliotecă grafică folosită împreună cu Adafruit SSD1306 pentru afișarea textului și elementelor grafice: https://​github.com/​adafruit/​Adafruit-GFX-Library 
 +  * **Adafruit Monochrome OLED Guide** - ghid pentru utilizarea display-urilor OLED cu controller SSD1306: https://​learn.adafruit.com/​monochrome-oled-breakouts/​arduino-library-and-examples 
 +  * **Arduino / Relay Module Tutorials** - resurse generale pentru controlul unei pompe sau sarcini externe folosind un modul releu comandat de microcontroler:​ https://​docs.arduino.cc/​ 
 +  * **PlatformIO Documentation** - mediul folosit pentru compilarea, încărcarea și monitorizarea programului pe placa ATmega328P: https://​docs.platformio.org/
pm/prj2026/atoader/mihaela.dimovska.1779439358.txt.gz · Last modified: 2026/05/22 11:42 by mihaela.dimovska
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