This shows you the differences between two versions of the page.
pm:prj2025:avaduva:andrei_mirel.birtia [2025/05/25 22:30] andrei_mirel.birtia [Hardware Design] |
pm:prj2025:avaduva:andrei_mirel.birtia [2025/05/26 20:11] (current) andrei_mirel.birtia [Software Design] |
||
---|---|---|---|
Line 61: | 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> | ||