Differences

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

Link to this comparison view

pm:prj2026:bianca.popa1106:stelian.tascu [2026/05/08 19:14]
stelian.tascu
pm:prj2026:bianca.popa1106:stelian.tascu [2026/05/21 22:40] (current)
stelian.tascu Adaugat poza 90% finalizat, rezultate si concluzii
Line 3: Line 3:
 **Autor:** Tascu Stelian-Andrei **Autor:** Tascu Stelian-Andrei
 **Grupa:** 331CA **Grupa:** 331CA
-**GitHub:** [[github.com/​steliantascu/​Proiect-PM]] ​+**GitHub:** [[https://github.com/​steliantascu/​Proiect-PM]]
  
 ===== 1. Introducere ===== ===== 1. Introducere =====
  
-Desktop Companion este un dispozitiv de birou bazat pe microcontrolerul ​**ATmega324P**, care imbina interactiunea om-masina cu un mic element de surpriza mecanica. Robotul detecteaza prezenta utilizatorului in fata sa, asculta mediul ambiental si reactioneaza la stimuli sonori printr-un gest de salut, iar la o secventa specifica de zgomote deschide un compartiment ascuns (sertar).+Desktop Companion este un dispozitiv de birou bazat pe microcontrolerul ​ATmega328P 
 +(placa Arduino Uno), care imbina interactiunea om-masina cu un mic element de surpriza 
 +mecanica. Robotul detecteaza prezenta utilizatorului in fata sa, asculta mediul ambiental 
 +si reactioneaza la stimuli sonori printr-un gest de salut, iar la o secventa specifica 
 +de zgomote deschide un compartiment ascuns (sertar).
  
-Scopul proiectului este de a construi un mic companion de birou care sa fie placut vizual, sa raspunda la prezenta utilizatorului si sa ofere o functionalitate practica reala: ascunderea unor obiecte mici (chei, USB stick, monezi) intr-un sertar care se deschide doar la o parola sonora (de exemplu trei batai din palme la interval scurt).+Scopul proiectului este de a construi un mic companion de birou care sa fie placut 
 +vizual, sa raspunda la prezenta utilizatorului si sa ofere o functionalitate practica 
 +reala: ascunderea unor obiecte mici (chei, USB stick, monezi) intr-un sertar care se 
 +deschide doar la o parola sonora (de exemplu trei batai din palme la interval scurt).
  
-Ideea a pornit de la observatia ca pe birourile de student se aduna mereu obiecte mici care se pierd, iar majoritatea sertarelor de birou sunt fie incuiate cu chei, fie complet deschise. M-am gandit ca un dispozitiv care sa imbine partea ludica (un robot care saluta) cu partea utila (un mini-seif acustic) ar fi un proiect interesant pentru laboratorul de PM, deoarece acopera o gama larga de tehnici invatate: ADC, PWM, intreruperi,​ I2C si o masinarie de stari complexa.+Ideea a pornit de la observatia ca pe birourile de student se aduna mereu obiecte mici 
 +care se pierd, iar majoritatea sertarelor de birou sunt fie incuiate cu chei, fie complet 
 +deschise. M-am gandit ca un dispozitiv care sa imbine partea ludica (un robot care 
 +saluta) cu partea utila (un mini-seif acustic) ar fi un proiect interesant pentru 
 +laboratorul de PM, deoarece acopera o gama larga de tehnici invatate: ADC, PWM, 
 +intreruperi,​ I2C si o masinarie de stari complexa.
  
-**Ipoteza de pornire:** Combinatia dintre detectia de prezenta (ultrasonic) si analiza spectrului audio (ADC pe microfon analogic) permite construirea unui sistem reactiv care nu consuma energie inutil cand nu este nimeni in fata lui, dar reactioneaza prompt cand utilizatorul interactioneaza cu el. In plus, folosirea unei parole sonore in locul unei chei fizice elimina problema clasica a cheilor pierdute.+**Ipoteza de pornire:** Combinatia dintre detectia de prezenta (ultrasonic) si analiza 
 +spectrului audio (ADC pe microfon analogic) permite construirea unui sistem reactiv care 
 +nu consuma energie inutil cand nu este nimeni in fata lui, dar reactioneaza prompt cand 
 +utilizatorul interactioneaza cu el. In plus, folosirea unei parole sonore in locul unei 
 +chei fizice elimina problema clasica a cheilor pierdute.
  
 ===== 2. Descriere Generala ===== ===== 2. Descriere Generala =====
  
-Sistemul are ATmega324P ​pe post de nod central. In jurul lui graviteaza patru periferice principale: doi servomotori (unul pentru bratul care saluta, unul pentru zavorul sertarului),​ un senzor ultrasonic HC-SR04 pentru detectia prezentei si un microfon analogic KY-037 pentru ascultarea mediului. Iesirea catre utilizator se face printr-un LCD 16x2 conectat prin I2C (cu adaptor PCF8574), care afiseaza starea curenta si nivelul de zgomot detectat.+Sistemul are Arduino Uno (ATmega328P) ​pe post de nod central. In jurul lui graviteaza 
 +patru periferice principale: doi servomotori (unul pentru bratul care saluta, unul pentru 
 +zavorul sertarului),​ un senzor ultrasonic HC-SR04 pentru detectia prezentei si un 
 +microfon analogic KY-037 pentru ascultarea mediului. Iesirea catre utilizator se face 
 +printr-un LCD 16x2 conectat prin I2C (cu adaptor PCF8574), care afiseaza starea curenta 
 +si nivelul de zgomot detectat.
  
 Logica este organizata ca un automat finit de stari (FSM) cu urmatoarele stari principale: Logica este organizata ca un automat finit de stari (FSM) cu urmatoarele stari principale:
  
-  * **SLEEP:** Niciun utilizator detectat in ultimele secunde; LCD-ul afiseaza un mesaj minim (zZz), ADC-ul este oprit, servomotoarele sunt in repaus. +  * **SLEEP:** Niciun utilizator detectat in ultimele secunde; LCD-ul afiseaza un mesaj 
-  * **IDLE_AWAKE:​** S-a detectat prezenta la mai putin de 50 cm; sistemul porneste ADC-ul pe microfon si monitorizeaza nivelul sonor. +    ​minim (zZz), ADC-ul este oprit, servomotoarele sunt in repaus. 
-  * **GREETING:​** S-a detectat un singur prag de zgomot; robotul executa gestul de salut prin servomotorul 1. +  * **IDLE_AWAKE:​** S-a detectat prezenta la mai putin de 50 cm; sistemul porneste 
-  * **LISTENING_FOR_PASSWORD:​** Dupa salut, sistemul intra intr-o fereastra de timp in care numara batai succesive. +    ​ADC-ul pe microfon si monitorizeaza nivelul sonor. 
-  * **DRAWER_OPEN:​** Daca secventa corecta a fost recunoscuta (trei batai rapid), servomotorul 2 deblocheaza sertarul.+  * **GREETING:​** S-a detectat un singur prag de zgomot; robotul executa gestul de 
 +    ​salut prin servomotorul 1. 
 +  * **LISTENING_FOR_PASSWORD:​** Dupa salut, sistemul intra intr-o fereastra de timp 
 +    ​in care numara batai succesive. 
 +  * **DRAWER_OPEN:​** Daca secventa corecta a fost recunoscuta (trei batai rapid), 
 +    ​servomotorul 2 deblocheaza sertarul.
   * **DRAWER_CLOSING:​** Dupa o pauza de 5 secunde, sertarul revine in pozitia inchis.   * **DRAWER_CLOSING:​** Dupa o pauza de 5 secunde, sertarul revine in pozitia inchis.
  
-Tranzitiile dintre stari sunt declansate de intreruperi pe Timer (pentru ultrasonic), ​intreruperea de finalizare a conversiei ​ADC (pentru analiza audio) si temporizatoare interne pentru starea de SLEEP.+Tranzitiile dintre stari sunt declansate de intreruperi pe Timer (pentru ultrasonic),​ 
 +conversia ​ADC (pentru analiza audio) si temporizatoare interne pentru starea de SLEEP.
  
 **Schema Bloc:** **Schema Bloc:**
  
 {{:​pm:​prj2026:​bianca.popa1106:​schema_bloc_tsa.jpg?​nolink&​600|Schema bloc}} {{:​pm:​prj2026:​bianca.popa1106:​schema_bloc_tsa.jpg?​nolink&​600|Schema bloc}}
 +
 ===== 3. Hardware Design ===== ===== 3. Hardware Design =====
  
-Proiectul cuprinde componente care opereaza la 5V, partajand aceeasi masa (GND). Servomotoarele beneficiaza de o decuplare locala pentru a preveni fluctuatiile de tensiune pe microcontroller.+Proiectul cuprinde componente care opereaza la 5V, partajand aceeasi masa (GND). 
 +Servomotoarele beneficiaza de o decuplare locala ​prin condensatorul electrolitic ​pentru 
 +a preveni fluctuatiile de tensiune pe microcontroller
 + 
 +==== Stadiul actual al implementarii ==== 
 + 
 +Toate componentele au fost achizitionate,​ conectate fizic si integrate intr-o carcasa 
 +transparenta din plastic. Montajul a fost prezentat la laboratorul de PM, unde a fost 
 +demonstrata functionarea sistemului cu codul incarcat pe placa. Sursa de alimentare 
 +HW-131 functioneaza corect pe iesirea de 5V. Condensatorul electrolitic de 10000uF 
 +montat pe rail-ul de alimentare previne resetarea microcontrollerului la pornirea 
 +brusca a servomotoarelor. 
 + 
 +Carcasa proiectului este o cutie transparenta de plastic in care sunt integrate toate 
 +componentele:​ Arduino Uno si breadboard-ul pe fundul cutiei, LCD-ul 16x2 montat pe 
 +peretele frontal, HC-SR04 si microfonul KY-037 fixate pe marginile cutiei, iar 
 +servomotorul cu bratul de salut montat in exterior pe peretele din spate. 
 + 
 +Au fost conectate si verificate: cele doua servomotoare SG90, senzorul ultrasonic 
 +HC-SR04, microfonul analogic KY-037 si afisajul LCD 16x2 cu interfata I2C.
  
 ==== Lista de Componente ==== ==== Lista de Componente ====
  
-^ Componenta ^ Model ^ Interfata MCU +^ Componenta ^ Model ^ Pin Arduino Uno 
-| Microcontroler | ATmega324P ​Unitate Centrala ​+| Microcontroler | Arduino Uno (ATmega328P) ​— 
-| Senzor Ultrasonic | HC-SR04 | GPIO + Input Capture ​+| Senzor Ultrasonic | HC-SR04 | Trig=D8, Echo=D2 ​
-| Microfon Analogic | KY-037 | ADC (canal ADC0) +| Microfon Analogic | KY-037 | A0 
-| Servomotor Brat | SG90 (180 grade) | PWM hardware ​(OC1A) | +| Servomotor Brat | SG90 (180 grade) | D9 (OC1A) | 
-| Servomotor Sertar | SG90 (180 grade) | PWM hardware ​(OC1B) | +| Servomotor Sertar | SG90 (180 grade) | D10 (OC1B) | 
-| Afisaj | LCD 16x2 I2C | I2C (TWI) | +| Afisaj | LCD 16x2 I2C (PCF8574| A4=SDA, A5=SCL ​
-| Alimentare | Sursa breadboard | Baterie 9V | +| Alimentare | Sursa breadboard ​HW-131 ​| Baterie 9V | 
-| Filtrare | Condensator ​1000uF ​| Rail-ul servo |+| Filtrare | Condensator ​10000uF 25V | Rail 5V |
  
 ==== Descriere Detaliata a Modulelor ==== ==== Descriere Detaliata a Modulelor ====
  
 **Senzor ultrasonic HC-SR04** **Senzor ultrasonic HC-SR04**
-Masoara distanta prin trimiterea unui puls scurt pe pinul Trig si masurarea latimii pulsului intors pe Echo. Pentru o masurare precisa, ​Echo este conectat la pinul de Input Capture al unui timer pe 16 bitipermitand calcularea distantei ​fara delay-uri blocante. +Masoara distanta prin trimiterea unui puls scurt pe pinul Trig si masurarea latimii 
-  * **VCC:** 5V +pulsului intors pe Echo. Pinul Echo este conectat la D2 (INT0), ceea ce permite 
-  * **GND:** GND +masurarea exacta a timpului ​de zbor prin intrerupere externa, fara delay-uri blocante. 
-  * **Trig:** PB0 + 
-  * **Echo:** PD6 (ICP1)+^ Pin HC-SR04 ^ Pin Arduino Uno ^ Motiv ^ 
 +VCC 5V | alimentare modul | 
 +GND GND | masa comuna | 
 +Trig | D8 (PB0) | iesire digitala, puls 10us | 
 +Echo | D2 (PD2/INT0| intrerupere externa pentru masurare |
  
 **Microfon analogic KY-037** **Microfon analogic KY-037**
-Folosesc iesirea analogica pentru a distinge intensitatea zgomotului. Semnalul intra in canalul ADC0. Conversia se face in mod liber (free running) cu intrerupere ​la finalul fiecarei conversiiastfel incat CPU-ul sa fie liber pentru ​logica FSM+Folosesc iesirea analogica pentru a distinge intensitatea zgomotului. Semnalul intra 
-  * **A0 (analogic):​** PA0 (ADC0)+in canalul ADC0 (A0). Conversia se face la cereresuficient de rapida ​pentru 
 +frecventa de esantionare necesara detectiei batailor din palme
 + 
 +^ Pin KY-037 ^ Pin Arduino Uno ^ Motiv ^ 
 +| VCC | 5V | alimentare modul | 
 +| GND | GND | masa comuna | 
 +| A0 | A0 (ADC0) ​| canal ADC pentru intensitate sonora | 
 +| D0 | neconectat | nu este folosit |
  
 **Servomotoare SG90** **Servomotoare SG90**
-Sunt controlate ​prin semnal ​PWM la 50 Hz (perioada 20 ms), generat hardware de Timer 1 pe doua canalePe rail-ul de alimentare am montat un condensator de 1000uF ​pentru a evita resetarea microcontrollerului la pornirea motoarelor. +Controlate ​prin PWM la 50 Hz generat hardware de Timer 1. D9 si D10 sunt singurii 
-  * **Servo Brat:** PD5 (OC1A) +pini legati la OC1A si OC1B pe ATmega328P, deci nu pot fi schimbati pentru PWM 
-  * **Servo Sertar:** PD4 (OC1B)+hardwareAlimentarea vine direct din breadboard ​pentru a nu suprasolicita regulatorul 
 +Arduino.
  
-**LCD 16x2 I2C** +^ Pin SG90 ^ Pin Arduino Uno ^ Motiv ^ 
-Afiseaza starea FSM si o bara grafica de nivel sonor. Folosirea adaptorului ​I2C reduce ​numarul ​de pini ocupati ​la doar 2 (SDA/SCL), lasand restul porturilor libere pentru senzori. +| Semnal (portocaliu) Brat | D9 (OC1A) | PWM hardware Timer 1 canal A | 
-  * **SDA:** PC1 +| Semnal (portocaliu) Sertar | D10 (OC1B) | PWM hardware Timer 1 canal B | 
-  * **SCL:** PC0+| VCC (rosu) | 5V breadboard | alimentare directa | 
 +| GND (maro) | GND breadboard | masa comuna | 
 + 
 +**LCD 16x2 cu interfata ​I2C (PCF8574)** 
 +Modulul ​I2C reduce ​conexiunile ​de la 6 la 2. A4 si A5 sunt pinii hardware dedicati 
 +I2C pe ATmega328P si nu pot fi inlocuiti pentru TWI hardware. Adresa implicita a 
 +modulului PCF8574 este 0x27 (7-bit) = 0x4E (8-bit write). 
 + 
 +^ Pin LCD I2C ^ Pin Arduino Uno ^ Motiv ^ 
 +| VCC | 5V | alimentare modul | 
 +| GND | GND | masa comuna | 
 +SDA | A4 (PC4) | linie date I2C hardware | 
 +SCL | A5 (PC5| linie ceas I2C hardware | 
 + 
 +**Condensator electrolitic 10000uF 25V** 
 +Montat pe sinele breadboard-ului langa servomotoare. Absoarbe varfurile de curent 
 +la pornirea motoarelor. Piciorul lung (+) la sina de 5V, piciorul scurt (-) la GND. 
 + 
 +==== Schema Electrica ==== 
 + 
 +{{:pm:​prj2026:​bianca.popa1106:​circuit_image_tascu.png?​nolink&​700|Schema electrica Desktop Companion}} 
 + 
 +Schema realizata in Cirkit Designer. Arduino Uno in centru, toate componentele 
 +impart masa comuna, servomotoarele au alimentarea decuplata prin condensatorul 
 +de 10000uF.
  
 ===== 4. Software Design ===== ===== 4. Software Design =====
  
-Codul este scris in C, dezvoltat in PlatformIO, fara framework-ul ​Arduino. Toate perifericele sunt configurate direct prin manipularea registrilor.+Codul este scris in C, dezvoltat in PlatformIO ​cu framework ​Arduino (necesar doar 
 +pentru toolchain-ul de upload). Toate perifericele sunt configurate direct prin 
 +manipularea registrilor ​ATmega328P, fara a folosi nicio functie din biblioteca Arduino.
  
-==== Organizarea Codului ​====+==== Stadiul actual al implementarii software ​====
  
-Codul este impartit pe module pentru o logica curata: +Codul este complet functional ​si a fost testat ​pe Arduino UnoLa prezentarea din 
-  * **main.c:** Bucla principala ​si automatul finit de stari. +laborator a fost demonstrata functionarea integraladetectia prezentei, gestul ​de 
-  * **adc.c:** Initializarea ADC in free running mode si rutina de tratare ​intreruperii ADC_vect. +salut, recunoasterea secventei de 3 batai din palme si deschiderea sertarului cu 
-  * **timer.c:​** Configurarea Timer 1 pentru PWM pe doua canale si Input Capture+numaratoare inversa.
-  * **ultrasonic.c:** Functii ​de generare a pulsului Trig si interpretarea valorilor Echo. +
-  * **i2c.c & lcd.c:** Driver minimal TWI si controlul LCD in mod 4-bit prin expanderul PCF8574. +
-  * **uart.c:** Rutina de print pe serial folosita exclusiv pentru debug.+
  
-==== Algoritmul Principal (FSM) ====+==== Organizarea codului ​====
  
-Logica ​de baza este implementata ​fara delay-uri blocantefolosind contoare incrementate in intreruperi ​de timer:+  * **main.c** — FSM cu 6 stari. Contine doar logica ​de tranzitie, nicio initializare 
 +    hardware directa. 
 +  * **hardware.c / hardware.h** — Initializarea Timer 1 (PWM), ADC, INT0 (ultrasonic). 
 +    Expune: set_servo_brat(unghi),​ set_servo_sertar(unghi),​ citeste_microfon(),​ 
 +    citeste_distanta(). 
 +  * **lcd_i2c.c / lcd_i2c.h** — Driver complet TWI manual + control LCD HD44780 
 +    in mod 4-bit prin expandorul PCF8574. 
 + 
 +==== Biblioteci folosite ==== 
 + 
 +Proiectul nu foloseste nicio biblioteca externa. Tot codul interactioneaza direct 
 +cu registrii hardware. Singurele includeri sunt din AVR-libc standard (avr/​io.h,​ 
 +avr/​interrupt.h,​ util/​delay.h). Framework-ul Arduino ​este prezent doar in 
 +platformio.ini pentru a permite upload-ul prin USB fara programator extern. 
 + 
 +Motivul acestei alegeri: manipularea directa a registrilor demonstreaza intelegerea 
 +arhitecturii microcontrollerului si este cerinta explicita a cursului de PM. 
 + 
 +==== Elementul de noutate ==== 
 + 
 +Elementul central care diferentiaza proiectul este recunoasterea parolei sonore 
 +secventiale. Sistemul nu reactioneaza la orice zgomot — prima bataie declanseaza 
 +salutul, iar urmatoarele 3 batai intr-o fereastra de 3 secunde deschid sertarul. 
 +Microfonul este folosit pe iesirea analogica (nu digitala)ceea ce permite detectia 
 +pragului ​de intensitate si un mecanism de debounce sonor (200ms cooldown dupa 
 +fiecare bataie detectata). 
 + 
 +==== Justificarea laboratoarelor ==== 
 + 
 +**Lab 2 — Intreruperi externe (INT0)** 
 +Masurarea duratei pulsului Echo de la HC-SR04 cu delay_us() ar bloca procesorul. 
 +INT0 pe D2 declanseaza la orice schimbare logicafront crescator reseteaza Timer0, 
 +front descrescator citeste TCNT0 si calculeaza distanta. CPU-ul e liber intre fronturi. 
 + 
 +**Lab 3 — Timere si PWM (Timer 1)** 
 +SG90 necesita 50Hz cu puls 1ms-2ms. Timer 1 Fast PWM cu TOP=ICR1=39999 genereaza 
 +hardware acest semnal pe D9 si D10 fara interventie CPU dupa initializare. 
 +Unghiul se schimba scriind in OCR1A sau OCR1B. 
 + 
 +**Lab 4 — ADC** 
 +KY-037 pe iesirea analogica produce ~510 ADC in liniste, ~700-900 la bataie din palme. 
 +ADC cu AVCC referinta si prescaler 128 converteste tensiunea in 0-1023. 
 +Pragul 600 a fost calibrat experimental. 
 + 
 +**Lab 6 — I2C/TWI** 
 +Driver TWI manual: TWBR=72 pentru 100kHz, secventa start/​adresa/​date/​stop,​ 
 +protocol HD44780 in mod 4-bit (fiecare byte in doua nibble-uri cu EN toggle 
 +prin expandorul PCF8574). 
 + 
 +==== Algoritmul Principal (FSM) ====
  
 <​code>​ <​code>​
-loop: +main() 
-    ​if ​(timp_inactiv > PRAG_SLEEPstate = SLEEP +  ​init_hardware()   Timer1 PWM + ADC + INT0 
-    ​switch ​(state): +  ​lcd_init()        TWI 100kHz + secventa init HD44780 
-        ​case ​SLEEP: + 
-            ​opreste ADC, LCD afiseaza ​"​zZz"​ +  loop
-            ​daca ​distanta < 50 cm => IDLE_AWAKE +    ​distanta = citeste_distanta() ​  puls Trig, asteapta ISR INT0 
-        ​case ​IDLE_AWAKE:​ + 
-            ​porneste ADC, LCD: bara nivel sonor +    ​SLEEP: 
-            daca detectat varf audio => GREETING +      afiseaza ​ZzZz 
-        ​case ​GREETING: +      distanta < 50cm => IDLE_AWAKE 
-            misca servo brat 0 -> 90 -> + 
-            ​state ​= LISTENING_FOR_PASSWORD +    ​IDLE_AWAKE:​ 
-        ​case ​LISTENING_FOR_PASSWORD:​ +      ​afiseaza "Sunt treaz!"​ 
-            numara varfuri ​audio in 2 s +      ​nivel = citeste_microfon() 
-            daca contor == 3 => DRAWER_OPEN +      nivel > 600 => GREETING 
-            daca timp expirat ​=> IDLE_AWAKE +      ​distanta > 50cm => SLEEP 
-        ​case ​DRAWER_OPEN:​ + 
-            servo sertar 0 -> 90 +    ​GREETING: 
-            ​asteapta 5 s => DRAWER_CLOSING +      ​servo_brat(90) delay(600ms) servo_brat(0) 
-        ​case ​DRAWER_CLOSING:​ +      =LISTENING_FOR_PASSWORD 
-            servo sertar 90 -> 0 => IDLE_AWAKE+ 
 +    ​LISTENING_FOR_PASSWORD:​ 
 +      bucla 3 secunde: 
 +        ​numara varfuri ​ADC > 600 
 +        ​debounce 200ms dupa fiecare bataie 
 +      ​batai => DRAWER_OPEN 
 +      ​altfel  ​=> IDLE_AWAKE 
 + 
 +    ​DRAWER_OPEN:​ 
 +      ​servo_sertar(90) 
 +      ​numaratoare inversa 5s pe LCD 
 +      ​=> DRAWER_CLOSING 
 + 
 +    ​DRAWER_CLOSING:​ 
 +      ​servo_sertar(0
 +      ​=> IDLE_AWAKE
 </​code>​ </​code>​
  
-==== Implementari Tehnice Specifice ​====+==== Calibrarea senzorilor ​====
  
-**Detectia varfurilor audio:** +**Microfon KY-037:** 
-ADC-ul ruleaza cu prescaler ​de 128In ISR-ul ADC mentin o medie mobila a ultimelor esantioane si compar valoarea curenta cu un prag adaptivCand depasesc pragul, marchez un varf si activez un cooldown ​de 100 ms pentru a evita citirile multiple ale aceleiasi ​batai din palme (debounce sonor).+In liniste ​ADC returneaza ~510 (tensiunea ​de offset a capsulei la jumatatea 
 +intervalului 0-5V)O bataie din palme la 50cm produce varfuri 700-900Procedura 
 +de calibrare: am citit valorile in liniste, am notat minimul la 10 batai din palme
 +am ales pragul cu 90 unitati marja fata de zgomotul de fond. Rezultat: PRAG=600.
  
-**Generare PWM pentru Servo:** +**HC-SR04:** 
-Timer 1 este configurat in Fast PWM cu TOP din ICR1 (39999 pentru 16 MHz, prescaler ​8), asigurand perioada de 20 msLatimea pulsului se controleaza scriind in OCR1A si OCR1B (valori intre 2000 si 4000 tick-uri).+Formula: distanta_cm = (TCNT0 * 109) / 100. Derivata ​din: 1 tick Timer0 = 64us 
 +(prescaler ​1024, 16MHz), viteza sunet 343m/s. Verificata cu rigla la 10, 20, 50cm. 
 + 
 +**Servomotoare SG90:** 
 +Teoretic: OCR=2000 => 1ms => 0 grade, OCR=4000 => 2ms => 180 grade. In practica 
 +valorile au fost ajustate experimental pana la miscarea corecta. 
 + 
 +==== Optimizari ==== 
 + 
 +  * **Timeout la citeste_distanta():** 300 iteratii x 100us = 30ms maxim de asteptare. 
 +    Fara timeout, lipsa obiectului in camp blocheaza procesorul la nesfarsit. 
 +  * **Debounce sonor 200ms:** O bataie din palme dureaza ~50ms si produce mai multe 
 +    varfuri ADC. Cooldown-ul de 200ms previne numararea multipla a aceluiasi sunet. 
 +  * **Starea DRAWER_CLOSING separata:** Permite extinderi ulterioare fara a complica 
 +    logica din DRAWER_OPEN.
  
 ===== 5. Rezultate Obtinute ===== ===== 5. Rezultate Obtinute =====
  
-De completat dupa asamblarea fizicaVoi include: +Proiectul a fost finalizat si testat in conditii realeToate cele 6 stari ale FSM 
-  * Fotografii ​cu montajul final pe breadboard+functioneaza conform specificatiilor. 
-  * Un scurt video demonstrativ ​pe YouTube+ 
-  * Detalii despre calibrarea pragului audio.+Sistemul detecteaza corect prezenta unei persoane la mai putin de 50cm prin senzorul 
 +HC-SR04 si trece din starea de repaus in starea activa. La detectia primului zgomot 
 +puternic, servomotorul executa gestul de salut ridicand bratul la 90 de grade si 
 +coborand inapoi. Dupa salut, sistemul asteapta 3 secunde in care numara batai din 
 +palme — la 3 batai corecte sertarul se deschide si se inchide automat dupa 5 secunde 
 +cu numaratoare inversa afisata ​pe LCD
 + 
 +Pragul ADC calibrat la 600 functioneaza stabil in mediu de birou. Timeout-ul de 30ms 
 +la citeste_distanta() previne blocarea sistemului cand nu este niciun obiect in fata 
 +senzorului. Debounce-ul de 200ms elimina detectia multipla a aceleiasi batai. 
 + 
 +Carcasa finala este o cutie transparenta de plastic in care sunt integrate toate 
 +componentele:​ electronics ​pe fundul cutiei, LCD montat pe peretele frontal, senzori 
 +pe margini, brat de salut in exterior. Sertarul al doilea urmeaza sa fie montat
 + 
 +{{:​pm:​prj2026:​bianca.popa1106:​IMG_6995.jpeg?​nolink&​700|Desktop Companion — vedere frontala cu LCD, HC-SR04 si brat de salut}}
  
 ===== 6. Concluzii ===== ===== 6. Concluzii =====
  
-De completat ​la finalul proiectului.+Proiectul Desktop Companion a fost realizat integral, de la alegerea componentelor 
 +pana la implementarea software completa si integrarea intr-o carcasa functionala. 
 + 
 +Din punct de vedere tehnic, cel mai valoros aspect a fost implementarea de la zero a 
 +tuturor driverelor hardware — TWI pentru LCD, PWM pe Timer 1 pentru servomotoare si 
 +intreruperea externa INT0 pentru senzorul ultrasonic — fara a folosi nicio functie 
 +din biblioteca Arduino. Aceasta abordare a necesitat intelegerea directa a registrilor 
 +ATmega328P si reprezinta principala valoare de invatare a acestui proiect in contextul 
 +cursului de PM. 
 + 
 +Dificultatea principala intalnita a fost calibrarea pragului audio al microfonului 
 +KY-037. Valoarea ADC in repaus variaza in functie de mediul ambiental, iar pragul 
 +fix de 600 ales experimental poate necesita ajustare in spatii foarte zgomotoase sau 
 +foarte silentioase. O imbunatatire naturala ar fi un prag adaptiv calculat automat 
 +la pornire. 
 + 
 +Carcasa transparenta din plastic s-a dovedit o solutie practica si vizuala — permite 
 +vizualizarea completa a electronicii in timp ce ofera o structura rigida pentru 
 +montarea componentelor mecanice. 
 + 
 +Ca directii viitoare de dezvoltare: adaugarea memoriei EEPROM pentru stocarea parolei 
 +(care sa poata fi schimbata), un indicator LED pentru starea FSM si o carcasa mai 
 +rigida cu sertarul integrat mecanic mai precis.
  
 ===== 7. Jurnal ===== ===== 7. Jurnal =====
  
   * **Saptamana 1:** Alegerea temei si documentarea componentelor necesare.   * **Saptamana 1:** Alegerea temei si documentarea componentelor necesare.
-  * **Saptamana 2:** Comanda pieselor (ATmega324P, SG90, HC-SR04, etc.).+  * **Saptamana 2:** Comanda pieselor (Arduino Uno, SG90, HC-SR04, etc.).
   * **Saptamana 3:** Redactarea Milestone 1 (Introducere,​ Schema Bloc, Hardware Design).   * **Saptamana 3:** Redactarea Milestone 1 (Introducere,​ Schema Bloc, Hardware Design).
-  * **Saptamana 4 (planificat):** Asamblarea pe breadboard si testarea individuala a modulelor.+  * **Saptamana 4:** Asamblarea pe breadboard si testarea individuala a modulelor
 +  * **11.05.2026:​** Prezentare Milestone 2 la laborator. Demonstrarea functionalitatii 
 +    hardware cu codul incarcat pe placa. 
 +  * **18.05.2026:​** Prezentare Milestone 3 la laborator. Demonstrarea FSM complet 
 +    functional cu toate modulele integrate. 
 +  * **21.05.2026:​** Finalizarea carcasei, integrarea tuturor componentelor,​ redactarea 
 +    documentatiei finale.
  
 ===== 8. Bibliografie / Resurse ===== ===== 8. Bibliografie / Resurse =====
  
   * **Resurse Hardware:**   * **Resurse Hardware:**
-    * Datasheet ​ATmega324P;+    * Datasheet ​ATmega328P (Microchip);
     * Datasheet HC-SR04 ultrasonic ranging module;     * Datasheet HC-SR04 ultrasonic ranging module;
-    * Datasheet KY-037 sound sensor module.+    * Datasheet KY-037 sound sensor module
 +    * Datasheet SG90 Micro Servo (Tower Pro).
   * **Resurse Software:**   * **Resurse Software:**
-    * Laboratoarele de PM (UPB, ACS) Lab 2, 3, 4, 6; +    * Laboratoarele de PM (UPB, ACS) — Lab 2, 3, 4, 6; 
-    * Documentatia AVR-libc.+    * Documentatia AVR-libc
 +    * PlatformIO (pentru compilare si upload); 
 +    * Cirkit Designer (pentru schema electrica).
pm/prj2026/bianca.popa1106/stelian.tascu.1778256854.txt.gz · Last modified: 2026/05/08 19:14 by stelian.tascu
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