Differences

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

Link to this comparison view

pm:prj2025:avaduva:andrei_mirel.birtia [2025/05/19 23:31]
andrei_mirel.birtia [Hardware Design]
pm:prj2025:avaduva:andrei_mirel.birtia [2025/05/26 20:11] (current)
andrei_mirel.birtia [Software Design]
Line 11: Line 11:
 <note tip> <note tip>
 **Diagrama bloc** **Diagrama bloc**
-       ​+---------------+ ​           +----------------+ + 
-       |   ​Display ​    ​| ​           |   LED status ​  | +{{:​pm:​prj2025:​avaduva:​diagrama_mirel.png?600|}}
-       ​| ​  OLED 0.96"  ​           ​+--------+-------+ +
-       ​+-------+-------+ ​                    | +
-               ​| ​                            v +
-               ​v ​                    ​+-------+-------+ +
-       ​+-------+-------+ ​            ​| ​              | +
-       ​| ​              ​|<​------------+ ATmega328P ​   | +
-       ​| ​ Senzor umid. | I2C/​SPI ​    ​| ​   MCU        | +
-       ​| ​  sol (ADC)   ​| ​            ​+---+---+---+---+ +
-       ​+-------+-------+ ​                ​| ​  ​| ​  | +
-               ​| ​                        ​| ​  ​| ​  ​+--->​ PWM -> Servo + cremalieră +
-               ​| ​                        ​| ​  ​+------->​ GPIO -> Pompa apă +
-               ​| ​                        ​+---------->​ GPIO -> LED indicator +
-               | +
-               v +
-         ​Rezervor apă+
  
 ATmega328P preia măsurători ale umidității solului prin ADC, procesează valorile și le afișează pe ecranul LED. Când umiditatea scade sub prag, microcontroller-ul activează pompa pentru reumplerea seringii și apoi servo-motorul pentru administrarea precisă a apei pe un interval adaptat nevoilor plantei. ATmega328P preia măsurători ale umidității solului prin ADC, procesează valorile și le afișează pe ecranul LED. Când umiditatea scade sub prag, microcontroller-ul activează pompa pentru reumplerea seringii și apoi servo-motorul pentru administrarea precisă a apei pe un interval adaptat nevoilor plantei.
Line 49: Line 34:
   * Buzzer   * Buzzer
 **3.2 Tabela conexiuni piese** **3.2 Tabela conexiuni piese**
-| **Componentă** ​                  ​| **Pin MCU (nume, nr.)** ​                                 | **Funcție** ​                             ​ +| **Componentă** ​               | **Pin MCU (nume, nr.)** ​              ​| **Funcție** ​                            ​
-| Senzor umiditate sol             ​| PC0 (ADC0, pin 23)                                       ​| ADC – măsurare umiditate sol           ​+----------------------------- | ------------------------------------- | --------------------------------------- | 
-| LCD 16×2 I2C (MCP23017) ​         | PC4 (SDA, pin 27)<>PC5 (SCL, pin 28)                     ​| I2C – comunicație display ​             ​+| **Senzor umiditate sol**      ​| PC0 (ADC0, pin 23)                    | ADC – măsurare umiditate sol            
-| Servo-motor cu cremalieră ​       | PB1 (OC1A PWM, pin 13)                                   ​| PWM – poziționare ​cremalieră ​          +**LCD 16×2 I2C (MCP23017)**   | PC4 (SDA, pin 27) ↔ PC5 (SCL, pin 28) | I2C – afișare umiditate + stare sol     
-| Pompă de apă (via 2N2222       | PB2 (pin 14)                                             ​| GPIO – ON/OFF pompă ​                   ​+**Servo-motor cu cremalieră** | PB1 (OC1A PWM, pin 13)                | PWM – poziționare ​piston (buton manual) ​
-Tranzistor 2N2222 (driver pompă) ​Bază ← PB2 (pin 14)<>​Colector → pompă<>​Emitter → GND     ​Driver ​pompa                           | +**Pompă de apă (prin releu)** | PB2 (pin 14)                          | GPIO – comutare releu                   
-| LED status ​                      PB0 (pin 12                                            ​| GPIO – indicator vizual ​               ​+**Releu pompa** ​              IN ← PB2 (pin 14), VCC 5V, GND        Activează ​pompa manual (cu buton) ​      | 
-| Buton Reset                      ​| PD2 (INT0, pin 32)                                       ​| Digital input cu întrerupere ​          +| **LED roșu (sol uscat)** ​     | PD5 (pin 9)                           ​| GPIO – aprins când solul e uscat        ​
-Buzzer ​                          PD6 (OC0A PWM, pin 10                                  ​PWM/GPIO – semnal sonor                |+**LED galben (sol mediu)** ​   ​PD6 (pin 10                         | GPIO – aprins când solul e moderat ​     ​
 +**LED verde (sol umed)** ​     | PD7 (pin 11)                          | GPIO – aprins când solul e umed         | 
 +| **Buton Servo – Înainte** ​    | PD2 (INT0, pin 32)                    | Digital input cu pull-up ​               ​
 +**Buton Servo – Înapoi** ​     ​PD3 (INT1, pin 1                    ​Digital input cu pull-up ​               | 
 +| **Buton Activare pompă** ​     | PD4 (pin 2)                           | Digital input cu pull-up ​               | 
 **3.3 Schematic** **3.3 Schematic**
 +
 +{{:​pm:​prj2025:​avaduva:​schematic_pm.png?​600|}}
  
 **3.4 Implementarea Hardware** **3.4 Implementarea Hardware**
Line 69: Line 61:
  
 <note tip> <note tip>
-Arduino ​IDE+**Stadiul actual al implementarii software** 
 +  * Toate functionalitatile de baza au fost implementate si testate: 
 +  * Citirea umiditatii solului cu un senzor analogic 
 +  * Afișarea valorii umiditatii si a starii solului (umed, mediu, uscat) pe un ecran LCD I2C 
 +  * Aprinderea automata a unui LED corespunzator starii solului (rosu, galben sau verde) 
 +  * Controlul manual al unui servo prin doua butoane (impinge/​trage pistonul) 
 +  * Activarea pompei de apa printr-un al treilea buton (pentru umplerea seringii) 
 +  * Pompa este controlata printr-un releu conectat la microcontroller 
 + 
 +**Structura modulara (C++)** 
 + 
 +Proiectul este implementat modular, folosind clase separate pentru fiecare componenta:​ 
 +  * SenzorUmiditate – gestioneaza citirea valorii de la senzorul de umiditate 
 +  * AfisajLCD – gestioneaza initializarea si afisarea pe LCD (valoare + stare sol) 
 +  * ControlServo – controleaza servo-motorul cu pozitii predefinite 
 +  * PompaApa – gestioneaza activarea pompei prin GPIO/​releu 
 +  * LeduriStareSol – gestioneaza cele 3 LED-uri in functie de umiditate 
 + 
 +**Motivatia alegerii bibliotecilor** 
 + 
 +//​LiquidCrystal_I2C//​ 
 +  * Justificare:​ Permite comunicarea cu LCD-ul prin doar 2 fire (SDA/SCL) în loc de 6+ fire 
 +  * Avantaj: Economisește pini digitali pentru alte componente 
 +  * Performanță:​ Protocol I2C stabil și rapid pentru actualizări frecvente 
 +//​Servo.h//​ 
 +  * Justificare:​ Biblioteca standard ​Arduino ​pentru controlul precis al servo-motorului 
 +  * Funcționalitate:​ Generează semnale PWM cu timing exact pentru poziționarea servo-ului 
 +  * Compatibilitate:​ Optimizată pentru ATmega328P 
 + 
 +**Elementul de noutate al proiectului** 
 + 
 +Sistemul permite controlul manual al unei irigari precise folosind o seringa actionata cu cremaliera. Proiectul combina logica manuala si indicatoare vizuale clare (LED-uri, LCD), fiind ideal pentru invatare si prototipare. 
 + 
 +**Utilizarea functionalitatilor din laborator** 
 + 
 +//ADC (Analog-to-Digital Converter)//​ 
 +  * Aplicație: Citirea senzorului de umiditate (pin A0) 
 +  * Implementare:​ analogRead() pentru conversia valorii analogice în digitală 
 +  * Rezoluție: 10-bit (0-1023) pentru precizie mare 
 +//PWM (Pulse Width Modulation)//​ 
 +  * Aplicație: Controlul servo-motorului (pin 9) 
 +  * Implementare:​ Biblioteca Servo generează semnale PWM de 50Hz 
 +  * Funcție: Poziționarea precisă a pistonului seringii 
 +//I2C (Inter-Integrated Circuit)//​ 
 +  * Aplicație: Comunicația cu LCD-ul (pini SDA/SCL) 
 +  * Avantaj: Comunicare serială cu doar 2 fire 
 +  * Eficiență:​ Libereazã pini pentru alte componente 
 +//GPIO (General Purpose Input/​Output)//​ 
 +  * Input: 3 butoane cu pull-up intern 
 +  * Output: Control pompă (releu) și 3 LED-uri indicator 
 +  * Debouncing: Implementat prin delay pentru stabilitate 
 + 
 +**Scheletul proiectului si interactiunea functionalitatilor** 
 + 
 +<​code>​ 
 +void loop() { 
 +  int umiditate = senzor.citeste();​ 
 +  lcd.afiseazaUmiditate(umiditate);​ 
 +  lcd.afiseazaStare(umiditate);​ 
 +  leduri.actualizeaza(umiditate);​ 
 +  if (digitalRead(BUTON_INAINTE) == LOW) { 
 +    servo.impinge();​ 
 +  } 
 +  if (digitalRead(BUTON_INAPOI) == LOW) { 
 +    servo.trage();​ 
 +  } 
 +  if (digitalRead(BUTON_POMPA) == LOW) { 
 +    pompa.porneste();​ 
 +  } else { 
 +    pompa.opreste();​ 
 +  } 
 +  delay(100);​ 
 +
 +</​code>​ 
 +Fluxul de date: 
 +  * Senzor → ADC → Procesare → LCD + LED-uri 
 +  * Butoane → GPIO → Logică control → Servo/​Pompă 
 +  * LCD ← I2C ← Microcontroller → PWM → Servo 
 + 
 +**Calibrarea senzorului de umiditate** 
 +  * Sol uscat: Măsurare în sol complet uscat → valoare ~800-1000 
 +  * Sol umed: Măsurare în sol saturat cu apă → valoare ~200-400 
 +  * Sol moderat: Măsurare în sol normal → valoare ~400-600 
 +//Valoarea citita este afisata si determinata textual + vizual prin LED-uri.//​ 
 + 
 +**Demo** 
 +  * Nu este implementat complet, lipseste mecanismul de impingere al apei cu ajutorul servomotorului si lipseste displayul 
 +  * Link: https://​www.youtube.com/​watch?​v=82IfjY7yO0Q
 </​note>​ </​note>​
  
pm/prj2025/avaduva/andrei_mirel.birtia.1747686713.txt.gz · Last modified: 2025/05/19 23:31 by andrei_mirel.birtia
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