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 17:16]
mihaela.dimovska [Hardware Design]
pm:prj2026:atoader:mihaela.dimovska [2026/05/24 16:00] (current)
mihaela.dimovska [Resurse / Bibliografie]
Line 31: Line 31:
   * opțional, datele pot fi salvate pe cardul microSD.   * opțional, datele pot fi salvate pe cardul microSD.
  
 +===== Hardware Design =====
  
 +Componentele folosite în proiect sunt:
 +
 +  * **ATmega328P-XMINI** - placa de dezvoltare folosită ca unitate centrală de control;
 +  * **senzor capacitiv de umiditate a solului** - folosit pentru măsurarea nivelului de umiditate din sol;
 +  * **senzor de temperatură analogic LM35** - folosit pentru măsurarea temperaturii mediului;
 +  * **display OLED 0.96 inch cu interfață I2C** - folosit pentru afișarea stării sistemului și a valorilor citite de senzori;
 +  * **mini pompă de apă DC** - folosită pentru udarea plantei;
 +  * **modul releu 5V** - folosit pentru controlul pompei de apă, deoarece pompa nu poate fi alimentată direct de la un pin al microcontrolerului;​
 +  * **LED roșu** - folosit pentru semnalizarea udării automate și pentru efectul de fade în timpul udării automate;
 +  * **LED verde** - folosit pentru indicarea stării normale a sistemului;
 +  * **LED albastru** - folosit pentru indicarea faptului că pompa este activă;
 +  * **buton manual** - folosit pentru pornirea manuală a udării;
 +  * **sursă de alimentare / alimentare USB** - folosită pentru alimentarea sistemului;
 +  * **breadboard și fire Dupont** - folosite pentru realizarea conexiunilor;​
 +  * **tub pentru pompă** - folosit pentru transportul apei din recipient către ghiveci.
 +
 +În stadiul actual, componentele principale ale sistemului sunt funcționale:​ senzorul de umiditate, senzorul de temperatură,​ display-ul OLED, LED-urile de stare, butonul manual, releul și pompa de apă.
 +
 +Conexiunile principale folosite sunt:
 +
 +^ Componentă ^ Interfață / pin folosit ^ Rol ^
 +| ATmega328P-XMINI | placă principală | Controlează întregul sistem |
 +| Senzor umiditate sol | A0 / PC0 / ADC0 | Măsoară umiditatea solului |
 +| Senzor temperatură LM35 | A1 / PC1 / ADC1 | Măsoară temperatura mediului |
 +| Display OLED | I2C: SDA = A4 / PC4, SCL = A5 / PC5 | Afișează valorile senzorilor și starea sistemului |
 +| Modul releu | D4 / PD4 | Controlează pornirea și oprirea pompei |
 +| Pompă apă DC | prin releu | Realizează udarea plantei |
 +| LED roșu | D5 / PD5 / PWM | Semnalizare udare automată și efect fade |
 +| LED verde | D6 / PD6 | Indică starea normală a sistemului |
 +| LED albastru | D7 / PD7 | Indică faptul că pompa este activă |
 +| Buton manual | D2 / PD2 / INT0 | Pornește udarea manuală |
 +| USART / USB serial | TX/RX | Debug și monitorizare în terminal |
 +
 +Descrierea detaliată a conexiunilor:​
 +
 +  * **Senzorul de umiditate a solului** este conectat la pinul **A0 / PC0 / ADC0**, deoarece oferă o ieșire analogică. Microcontrolerul citește această valoare prin convertorul ADC și o transformă într-un procent aproximativ de umiditate.
 +  * **Senzorul de temperatură LM35** este conectat la pinul **A1 / PC1 / ADC1**. Acesta oferă o tensiune proporțională cu temperatura,​ iar valoarea citită este convertită în grade Celsius.
 +  * **Display-ul OLED** folosește interfața **I2C**, fiind conectat la pinii hardware **SDA = A4 / PC4** și **SCL = A5 / PC5**. Această interfață permite comunicarea cu display-ul folosind doar două fire de semnal.
 +  * **Modulul releu** este comandat prin pinul **D4 / PD4**. Releul este folosit deoarece pompa consumă mai mult curent decât poate furniza direct un pin GPIO al microcontrolerului. Releul funcționează ca un comutator controlat electronic.
 +  * **Pompa de apă** este conectată prin contactele releului. În implementarea folosită, **COM** este conectat la alimentare, **NO** este conectat la firul roșu al pompei, iar firul negru al pompei este conectat la **GND**.
 +  * **Butonul manual** este conectat la **D2 / PD2** și folosește configurația **INPUT_PULLUP**. În stare normală pinul este HIGH, iar la apăsare devine LOW. Pinul D2 a fost ales deoarece poate fi folosit și ca întrerupere externă INT0.
 +  * **LED-ul roșu** este conectat la **D5 / PD5**, pin care permite PWM. Acesta este folosit pentru efectul de fade în timpul udării automate.
 +  * **LED-ul verde** este conectat la **D6 / PD6** și indică starea normală a sistemului sau perioada de așteptare după udare.
 +  * **LED-ul albastru** este conectat la **D7 / PD7** și indică faptul că pompa este activă.
 +
 +LED-urile sunt folosite pentru afișarea rapidă a stării sistemului:
 +
 +^ LED ^ Semnificație ^
 +| Verde | Sistemul este OK sau se află în perioada de așteptare după udare |
 +| Roșu | Planta necesită udare / udare automată în desfășurare |
 +| Albastru | Pompa este activă |
 +| Albastru + roșu cu fade | Udare automată |
 +| Albastru simplu | Udare manuală |
 +
 +În implementarea finală, LED-ul verde indică faptul că sistemul este în stare normală. LED-ul albastru indică activarea pompei. Pentru udarea manuală se aprinde doar LED-ul albastru, iar pentru udarea automată se aprinde LED-ul albastru împreună cu LED-ul roșu, care scade treptat în intensitate folosind PWM.
 +
 +==== Schema electrică ====
 +
 +Schema electrică a sistemului este prezentată în figura de mai jos. Aceasta evidențiază conexiunile dintre placa ATmega328P-XMINI și modulele externe: senzorul de umiditate, senzorul de temperatură,​ display-ul OLED, modulul releu, pompa de apă, LED-urile de stare și butonul manual.
 +
 +{{ :​pm:​prj2026:​atoader:​pm-electric_scheme.png?​700 |Schema electrică a sistemului}}
 +
 +Schema electrică urmărește conexiunile reale folosite în montajul pe breadboard. Senzorii analogici sunt conectați la intrările ADC A0 și A1, display-ul OLED este conectat prin magistrala I2C, iar pompa este comandată printr-un modul releu conectat la pinul D4. LED-ul roșu este conectat la un pin PWM pentru a permite variația intensității luminoase, iar LED-urile verde și albastru sunt conectate la pini digitali simpli.
 +
 +==== Imagini ale montajului hardware ====
 +
 +În continuare sunt prezentate imagini din timpul realizării și testării montajului hardware.
 +
 +{{ :​pm:​prj2026:​atoader:​montaj_general.jpeg?​700 |Montaj general pe breadboard}}
 +
 +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:​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.
 +
 +{{ :​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ă.
 +
 +
 +==== Dovezi de funcționare ====
 +
 +Funcționarea sistemului a fost verificată prin mai multe teste:
 +
 +  * testarea senzorului de umiditate prin scoaterea și introducerea acestuia în apă sau în sol;
 +  * testarea senzorului de temperatură prin afișarea valorilor în terminal și pe OLED;
 +  * testarea LED-urilor pentru cele trei stări principale: OK, udare automată și udare manuală;
 +  * testarea releului și a pompei prin pornirea automată și manuală a udării;
 +  * testarea display-ului OLED prin afișarea mesajelor de stare.
 +
 +În urma testelor, sistemul poate detecta o valoare de umiditate corespunzătoare solului uscat și poate porni automat pompa. De asemenea, utilizatorul poate porni manual udarea prin apăsarea butonului. După udare, sistemul intră într-o stare de așteptare, pentru ca apa să se distribuie în sol, apoi revine la monitorizarea normală.
 +
 +==== Stadiul actual al implementării ====
 +
 +În stadiul actual, sistemul hardware principal este funcțional. Au fost conectate și testate următoarele componente: senzorul de umiditate a solului, senzorul de temperatură,​ display-ul OLED, butonul manual, LED-urile de stare, modulul releu și pompa de apă.
 +
 +Senzorul de umiditate este citit periodic prin ADC, iar valorile sunt afișate atât în terminalul serial, cât și pe display-ul OLED. Senzorul de temperatură este citit printr-un al doilea canal ADC și valoarea este convertită în grade Celsius.
 +
 +Pompa de apă este controlată prin releu. Sistemul poate porni udarea automat atunci când valorile senzorului indică sol uscat, dar poate porni și manual prin apăsarea butonului. După udare, sistemul intră într-o stare de așteptare pentru ca apa să se distribuie în sol.
 +
 +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.1778940985.txt.gz · Last modified: 2026/05/16 17:16 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