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:41]
mihaela.dimovska
pm:prj2026:atoader:mihaela.dimovska [2026/05/24 16:00] (current)
mihaela.dimovska [Resurse / Bibliografie]
Line 136: Line 136:
 Display-ul OLED afișează starea sistemului: **ORCHID OK**, **AUTO WATERING**, **MANUAL WATER** sau **WAITING**. LED-urile oferă semnalizare vizuală rapidă: verde pentru stare normală, albastru pentru pompă activă și roșu pentru udare automată. Display-ul OLED afișează starea sistemului: **ORCHID OK**, **AUTO WATERING**, **MANUAL WATER** sau **WAITING**. LED-urile oferă semnalizare vizuală rapidă: verde pentru stare normală, albastru pentru pompă activă și roșu pentru udare automată.
  
-== 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-urile, butonul și display-ul OLED. 
 + 
 +==== 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 buton tratat cu întrerupere externă. 
 + 
 +==== Biblioteci folosite ==== 
 + 
 +  * **Arduino.h** - utilizată pentru funcțiile de bază ale microcontrollerului:​ GPIO, ADC, PWM, temporizare și comunicație serială; 
 +  * **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_SSD1306.h** - utilizată pentru controlul display-ului OLED SSD1306; 
 +  * **avr/​interrupt.h** - utilizată pentru configurarea și tratarea întreruperii externe a butonului. 
 + 
 +==== Funcționalități din laborator utilizate ==== 
 + 
 +  * **GPIO** - folosit pentru controlul releului, LED-urilor și butonului;​ 
 +  * **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()'';​ 
 +  * **I2C** - folosit pentru comunicația cu display-ul OLED; 
 +  * **USART** - folosit prin ''​Serial''​ pentru mesaje de debug și monitorizare;​ 
 +  * **Î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. 
 + 
 +==== Scheletul proiectului ==== 
 + 
 +Logica proiectului este organizată ca o mașină de stări cu următoarele stări: 
 + 
 +  * ''​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. 
 + 
 +Î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. 
 + 
 +==== 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}} 
 + 
 +===== Resurse / Bibliografie ===== 
 + 
 +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. 
 + 
 +  * **Microchip - ATmega328P Datasheet** - documentația microcontrolerului folosit pentru pini, ADC, GPIO ș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.1779439265.txt.gz · Last modified: 2026/05/22 11:41 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