Differences

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

Link to this comparison view

pm:prj2026:atoader:mihaela.dimovska [2026/05/16 18:56]
mihaela.dimovska [Imagini ale montajului hardware]
pm:prj2026:atoader:mihaela.dimovska [2026/05/24 16:00] (current)
mihaela.dimovska [Resurse / Bibliografie]
Line 105: Line 105:
 Figura 1 prezintă montajul general al sistemului pe breadboard. Se pot observa placa ATmega328P-XMINI,​ senzorii, LED-urile, butonul, display-ul OLED, modulul releu și conexiunile realizate cu fire Dupont. Figura 1 prezintă montajul general al sistemului pe breadboard. Se pot observa placa ATmega328P-XMINI,​ senzorii, LED-urile, butonul, display-ul OLED, modulul releu și conexiunile realizate cu fire Dupont.
  
-{{ :​pm:​prj2026:​atoader:​placeholder_releu_pompa.jpg?700 |Modul releu și pompă de apă}}+{{ :​pm:​prj2026:​atoader:​releu_pompa.jpeg?700 |Modul releu și pompă de apă}}
  
 Figura 2 prezintă conexiunea dintre modulul releu și pompa de apă. Releul este comandat de microcontroler și permite pornirea sau oprirea pompei fără ca aceasta să fie alimentată direct dintr-un pin GPIO. Figura 2 prezintă conexiunea dintre modulul releu și pompa de apă. Releul este comandat de microcontroler și permite pornirea sau oprirea pompei fără ca aceasta să fie alimentată direct dintr-un pin GPIO.
  
-{{ :​pm:​prj2026:​atoader:​placeholder_oled_functionare.jpg?700 |Display OLED în funcționare}}+{{ :​pm:​prj2026:​atoader:​oled_functionare.jpeg?700 |Display OLED în funcționare}}
  
 Figura 3 prezintă display-ul OLED în timpul funcționării. Acesta afișează starea sistemului, valoarea umidității solului, valoarea ADC și temperatura măsurată. Figura 3 prezintă display-ul OLED în timpul funcționării. Acesta afișează starea sistemului, valoarea umidității solului, valoarea ADC și temperatura măsurată.
Line 135: Line 135:
  
 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 =====
 +
 +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.1778946989.txt.gz · Last modified: 2026/05/16 18:56 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