Differences

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

Link to this comparison view

pm:prj2026:vlad.radulescu2901:amarinescu0804 [2026/05/23 14:12]
amarinescu0804 [Jurnal]
pm:prj2026:vlad.radulescu2901:amarinescu0804 [2026/05/24 21:34] (current)
amarinescu0804 [Hardware Design]
Line 40: Line 40:
  
 **Module hardware**: **Module hardware**:
 +
 +  * **Placă de dezvoltare (Microcontroler ATmega328P):​** „Creierul” sistemului. Preia datele analogice și digitale, procesează logica automatului finit (State Machine) folosind timere hardware interne și comandă atât interfața, cât și elementele de execuție.
  
   * **Senzor umiditate sol** – utilizat pentru a măsura în timp real nivelul de hidratare al substratului plantei și pentru a trimite datele către convertorul ADC.   * **Senzor umiditate sol** – utilizat pentru a măsura în timp real nivelul de hidratare al substratului plantei și pentru a trimite datele către convertorul ADC.
Line 51: Line 53:
   * **Butoane de control** – folosite pentru interacțiunea cu utilizatorul,​ permițând schimbarea regimului de funcționare (Automat/​Cronometrat/​Hibrid) și setarea pragurilor.   * **Butoane de control** – folosite pentru interacțiunea cu utilizatorul,​ permițând schimbarea regimului de funcționare (Automat/​Cronometrat/​Hibrid) și setarea pragurilor.
  
-{{ :​pm:​prj2026:​vlad.radulescu2901:​schema_electrica_aquabuddy.png?600 |}}+{{ :​pm:​prj2026:​vlad.radulescu2901:​aquabuddy_schema_electrica.png?600 |}}
  
 ==== Descrierea conexiunilor și a pinilor utilizați ==== ==== Descrierea conexiunilor și a pinilor utilizați ====
Line 76: Line 78:
   * **Conexiunea la masă:** Toate butoanele fac contact direct la **GND** atunci când sunt apăsate, eliminând necesitatea rezistențelor externe prin utilizarea modulelor de Pull-Up interne ale microcontrolerului.   * **Conexiunea la masă:** Toate butoanele fac contact direct la **GND** atunci când sunt apăsate, eliminând necesitatea rezistențelor externe prin utilizarea modulelor de Pull-Up interne ale microcontrolerului.
 ===== Software Design ===== ===== Software Design =====
- 
-==== Descrierea codului aplicației (firmware) ==== 
  
 **Mediul de dezvoltare:​** **Mediul de dezvoltare:​**
Line 84: Line 84:
  
 **Librării și surse 3rd-party:​** **Librării și surse 3rd-party:​**
-  * S-au folosit librăriile standard din ''​avr-libc'':​ ''<​avr/​io.h>''​ (pentru regiștri), ''<​util/​delay.h>''​ (pentru temporizări), ''<​avr/​interrupt.h>''​ (pentru vectorii de întreruperi) și ''<​stdlib.h>''​.+  * S-au folosit librăriile standard din ''​avr-libc'':​ ''<​avr/​io.h>''​ (pentru regiștri), ''<​avr/​interrupt.h>''​ (pentru vectorii de întreruperi) și ''<​stdlib.h>''​.
   * Comunicarea I2C (TWI) și protocolul de trimitere a pachetelor de 4 biți către display-ul LCD au fost implementate direct pe regiștri.   * Comunicarea I2C (TWI) și protocolul de trimitere a pachetelor de 4 biți către display-ul LCD au fost implementate direct pe regiștri.
 +  * S-a eliminat complet utilizarea funcțiilor blocante din ''<​util/​delay.h>'',​ trecându-se la o arhitectură 100% Non-Blocking bazată pe timere hardware.
  
 **Algoritmi și structuri implementate:​** **Algoritmi și structuri implementate:​**
-  * **Arhitectură ​bazată pe Întreruperi și Steaguri ​(Flags):** Citirea butoanelor se face prin întreruperi externe (''​INT0'',​ ''​INT1'',​ ''​PCINT2''​). ​Pentru a nu bloca procesorulrutinele ​de tratare ​(ISRdoar setează variabile ​de tip ''​volatile''​acțiunile ​propriu-zise fiind executate asincron în bucla principală ''​while(1)''​+  * **Arhitectură ​Non-Blocking ​(10ms System Tick):** „Inima” sistemului este **Timer1**, configurat în modul CTC pentru a genera o întrerupere la exact 10 milisecunde. Această variabilă globală acționează ca un ceas al sistemului de operare, permițând rularea multitasking-ului cooperativ fără a opri procesorul. 
-  * **State Machine (Automat cu stări finite):** Logica principală este structurată pentru a comuta între ​cele 3 stări/moduri ​de operare ​(AutomatCronometratHibrid) și pentru ​actualiza ​interfața (meniul LCDîn funcție de modul curent.+  * **Debounce Software Asincron:** Citirea butoanelor se face prin întreruperi externe (''​INT0'',​ ''​INT1'',​ ''​PCINT2''​), care doar setează niște flaguriTratarea lor se face în bucla principală folosind un filtru de timp (20 de ticks = 200ms) raportat la ceasul sistemuluiignorând vibrațiile mecanice fără a utiliza funcții ​de delay. 
 +  * **Control Volumetric și Soft-Start ​(PWM):** Udarea nu se face pe bază de timp brutci volumetric (ex: 50 ml). S-a implementat o constantă a debitului pompei, iar sistemul calculează dinamic fracțiunile ​de 10ms necesare pentru cantitatea dorită. Suplimentar,​ s-a utilizat Timer0 pe pinul PD6 (Fast PWM) pentru a crea o rampă de accelerare a motorului ​(Soft-Start), eliminând presiunea bruscă de pe furtun
 +  * **State Machine (UI & Operare):** Logica principală este structurată pentru a comuta între ​4 ecrane de interfață (**Monitorizare Acasă**, **Setare Prag Sol**, **Setare Timp Udare**, **Setare Volum Apă**) și 3 moduri ​operaționale ​(**Auto****Timed****Hybrid**), garantând că display-ul este actualizat (refresh) doar atunci când apar modificări sau o dată pe secundă, economisind timp de procesare pe magistrala lentă I2C. 
 +  * **Monitorizare ​și Debugging (USART):** Pe parcursul dezvoltării,​ s-implementat comunicarea serială prin interfața ​USART. Aceasta a fost esențială pentru diagnosticarea în timp real a sistemului ​(monitorizarea valorilor brute citite de convertorul ADC de la senzorul de sol, verificarea stărilor din automatul finit și validarea calculelor matematice pentru dozajul volumetric), permițând o separare clară și rapidă a problemelor ​de tip hardware de cele software.
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +{{ :​pm:​prj2026:​vlad.radulescu2901:​aquabuddy_cutie.jpeg?​600 |}}
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
 +Rezultatul final este un sistem de irigații automatizat stabil și complet portabil, fiind alimentat independent de la o baterie externă. Sistemul monitorizează precis umiditatea solului, livrează volumetric cantitatea exactă de apă prin accelerarea treptată a pompei (Soft-Start),​ rulează o arhitectură non-blocking ce previne înghețarea codului și oferă utilizatorului o interfață fluidă, cu feedback instantaneu pe ecranul LCD.
 +
 +Un video demonstrativ se poate găsi în secțiunea de jurnal, unde este demonstrată întreaga funcționalitate a proiectului (în afara cutiei).
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+Dezvoltarea acestui proiect a reprezentat o oportunitate excelentă de a transpune conceptele teoretice de microprocesoare într-o aplicație practică de utilitate reală. Cea mai importantă reușită a proiectului a fost implementarea unei arhitecturi software complet non-blocking (multitasking cooperativ bazat pe timere hardware), care oferă sistemului un timp de răspuns instantaneu la interacțiunea cu utilizatorul.
  
-<note warning> +**Provocări întâmpinate și rezolvate:​** 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ sursescheme, etc. Un fişier README, un ChangeLog, un script ​de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+Pe parcursul dezvoltării, ​interfațarea motorului ​de curent continuu al pompei cu partea logică a ridicat două probleme majore, ambele rezolvate prin decizii tehnice specifice:
  
-Fişierele se încarcă pe wiki folosind facilitatea ​**Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin331CC -> **:pm:​prj2009:​cc:​dumitru_alin**+  ​* **Izolarea alimentării:** Inițial, alimentarea pompei direct din linia de 5V a microcontrolerului cauza deri bruște de tensiune la pornirea motorului (din cauza curentului mare de start), ceea ce destabiliza complet funcționarea sistemului. Soluția a fost separarea planurilor de putere: pompa este acum alimentată dintr-un pachet dedicat de baterii externe, păstrând doar masa (GNDcomună cu placa logică pentru referința semnalului PWM. 
-</​note>​+ 
 +  * **Gestionarea interferențelor:** La oprirea bruscă a pompei se genera tensiune de autoinducțieiar paraziții electromagnetici corupeau memoria RAM a ecranului. Problema a fost mascată din softwares-a implementat o rutină asincronă de Auto-Recovery care detectează oprirea pompei și forțează o reinițializare rapidă a ecranului (sub 60ms), restabilind interfața fără blocaje perceptibile
 +===== Download =====
  
 +[[https://​github.com/​andrei-48/​Aquabuddy-PM|Github Proiect]]
 ===== Jurnal ===== ===== Jurnal =====
  
-16.05.2026  +16.05.2026 
-  * Pentru etapa de hardware am facut un cod prvizoriu ​ca sa demonstrez ​ca toate componentele sunt functionale: Cele 3 butoane ​afiseaza ​pe LCD cand sunt apasate. Senzorul trimite o valoare ​citita ​la USART odata la 30 de secunde, iar pompa poate fi activata ​din USART prin comanda "​on"​.+ 
 +  * Pentru etapa de hardware am făcut ​un cod provizoriu ​ca să demonstrez ​că toate componentele sunt funcționale: Cele 3 butoane ​afișează ​pe LCD când sunt apăsate. Senzorul trimite o valoare ​citită ​la USART odată ​la 30 de secunde, iar pompa poate fi activată ​din USART prin comanda "​on"​.
  
 {{:​pm:​prj2026:​vlad.radulescu2901:​poza_jurnal_aquabuddy1.jpeg?​400|}} ​ {{:​pm:​prj2026:​vlad.radulescu2901:​poza_jurnal_aquabuddy2.jpeg?​400|}} {{:​pm:​prj2026:​vlad.radulescu2901:​poza_jurnal_aquabuddy1.jpeg?​400|}} ​ {{:​pm:​prj2026:​vlad.radulescu2901:​poza_jurnal_aquabuddy2.jpeg?​400|}}
- 
  
 https://​youtu.be/​5-j5lsSoZKQ https://​youtu.be/​5-j5lsSoZKQ
-Video pentru demonstrarea functionalitatii pompei si a senzorului (vizibil pe USART - 1022/1023 senzorul fiind lasat liber) 
  
 +Video pentru demonstrarea funcționalității pompei și a senzorului (vizibil pe USART - 1022/1023 senzorul fiind lăsat liber)
  
 +23.05.2026
 +
 +  * Pentru etapa software am implementat codul final (mai prezintă mici bug-uri ce vor fi rezolvate). Am schimbat alimentarea pompei trecând la o sursă separată de curent pe 4 baterii (6V). Am schimbat VCC-ul senzorului la pinul PD7 pentru a reduce consumul de curent și pentru a evita efectul de electroliză care poate degrada senzorul.
 +{{:​pm:​prj2026:​vlad.radulescu2901:​poza_jurnal_aquabuddy3.jpeg?​600|}}
 +
 +https://​youtu.be/​iVb_wFHDsnE
 +
 +Video care demonstrează toate funcționalitățile implementate în sistem. În clip sunt prezentate: navigarea prin interfață pentru selectarea modului de funcționare,​ configurarea pragurilor (timp și umiditate) și setarea volumului de apă dorit. De asemenea, este surprinsă declanșarea pompei (evidențiind efectul de accelerare treptată prin Soft-Start),​ inițiată atât pe baza temporizatorului,​ cât și a atingerii pragului critic de umiditate (pentru a simula un sol uscat și a forța declanșarea sistemului, senzorul a fost extras intenționat din pământ în timpul demonstrației).
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +1. Documentație Hardware (Datasheets):​ 
-Listă cu documentedatasheet-uriresurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. + 
-</note>+  * **Microchip ATmega328P Datasheet** – Pentru configurarea la nivel de regiștri a Timerelor (0 și 1)a convertorului analog-digital (ADC)a magistralei I2C (TWI) si pentru a utiliza pinii corecți. 
 + 
 +  ​* **Hitachi HD44780 LCD Controller** – Utilizat pentru a înțelege timpii de execuție (delay-urile necesare la inițializare) șsetul de comenzi pe 4-biți. 
 + 
 +  ​* **NXP PCF8574 I2C Expander** – Documentația modulului de pe LCD, necesară pentru implementarea protocolului de comunicare
 + 
 +  * **Vishay IRF520 MOSFET** – Specificațiile tranzistorului de putere folosit pentru controlul pompei de apă. 
 + 
 +2. Documentație Software și Mediu de Dezvoltare:​ 
 + 
 +  * **AVR C Runtime Library (avr-libc)** – Documentația oficială pentru bibliotecile folosite în proiect (<avr/io.h>, <​avr/​interrupt.h>,​ <​avr/​wdt.h>​). 
 + 
 +3. Resurse Academice:​ 
 + 
 +  * **OCW UPB** - Proiectare cu Microprocesoare – Suportul de curs și laboratoare (în special laboratoarele de Timere, ADC și I2C) care au stat la baza dezvoltării arhitecturii acestui proiect.
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2026/vlad.radulescu2901/amarinescu0804.1779534754.txt.gz · Last modified: 2026/05/23 14:12 by amarinescu0804
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