This shows you the differences between two versions of the page.
|
pm:prj2026:alexandru.predescu:robert.dieaconu [2026/05/16 15:33] robert.dieaconu [Imagini] |
pm:prj2026:alexandru.predescu:robert.dieaconu [2026/05/27 00:26] (current) robert.dieaconu [Explicarea scheletului, interacțiunii și validării sistemului] |
||
|---|---|---|---|
| Line 102: | Line 102: | ||
| <note tip> | <note tip> | ||
| - | Descrierea codului aplicaţiei (firmware): | + | ===== Stadiul actual al implementării software ===== |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | Proiectul se află în faza de achiziție și procesare primară a datelor. Momentan, s-a implementat logica de bază pentru interogarea secvențială a senzorilor, controlată manual printr-un buton (pe pinul PD5). Funcționează complet partea de citire digitală a senzorului inductiv (detectare metalelor) și citirea analogică a senzorului de umiditate (detectare resturi biodegradabile). |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
| - | * (etapa 3) surse şi funcţii implementate | + | ===== Biblioteci ====== |
| - | </note> | + | |
| + | Singurele headere folosite sunt cele standard din arhitectura AVR: <avr/io.h> pentru accesarea regiștrilor și <util/delay.h> pentru temporizări hardware. Această abordare garantează un control total asupra funcțiilor de nivel scăzut ale microcontrolerului, reduce masiv dimensiunea binarului compilat. | ||
| + | |||
| + | |||
| + | </note>. | ||
| + | |||
| + | ===== Noutati ===== | ||
| + | |||
| + | Noutatile sunt atat din categoria hardware cat si din cea software. In partea de hardware am reusit sa fizex burlanul prin care o sa cada gunoiul in ghenele respective si in mare parte toate modulele au fost puse in pozitia finala. La partea de software am facut achizitia de date pentru senzorul de metale si pentru senzorul de umiditate DIY. | ||
| + | |||
| + | ===== Laboratoare folosite ===== | ||
| + | |||
| + | Proiectul meu se bazează pe concepte învățate în primele 5 laboratoare, deoarece fiecare componentă are nevoie de un mod diferit de a comunica cu microcontrolerul: | ||
| + | |||
| + | Laboratorul 0: GPIO | ||
| + | Îl folosesc pentru componentele care trimit sau primesc semnale simple de tip "1 sau 0". Concret, prin GPIO citesc butonul de Start și senzorul de metal, și tot așa voi aprinde LED-ul Infraroșu. | ||
| + | |||
| + | Laboratorul 1: UART | ||
| + | Folosesc UART ca să trimit datele măsurate de senzori direct pe ecranul laptopului, așa pot verifica dacă totul merge bine. | ||
| + | |||
| + | Laboratorul 2: Întreruperi | ||
| + | Acestea sunt rezervate pentru cântar (modulul HX711). Folosind o întrerupere, cântarul trimite un semnal (întrerupe codul) doar în momentul în care un obiect a căzut pe trapă. | ||
| + | |||
| + | Laboratorul 3: Timere și PWM | ||
| + | Semnalul PWM, generat cu ajutorul Timerelor, este cel care îmi permite să controlez cu mare precizie unghiul la care se rotesc brațele de sortare și viteza lor de mișcare. | ||
| + | |||
| + | Laboratorul 4: ADC | ||
| + | Este esențial pentru senzorul de umiditate și cel de lumină (Receptorul IR). Acești senzori trimit tensiuni variabile. ADC-ul transformă aceste tensiuni în numere (de la 0 la 1023), ca să pot ști exact "cât de ud" este obiectul sau câtă lumină trece prin el. | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Explicarea scheletului, interacțiunii și validării sistemului ===== | ||
| + | 1. Scheletul Proiectului | ||
| + | Proiectul are o arhitectură secvențială, semi-automată. Scheletul logic este următorul: | ||
| + | |||
| + | Starea de repaus: Sistemul nu face nimic până când utilizatorul pune un obiect pe trapa de plexiglas și apasă butonul de Start. | ||
| + | |||
| + | Achiziția de date: Imediat după apăsarea butonului, microcontrolerul face un "tur" al tuturor senzorilor, într-o ordine strictă: | ||
| + | |||
| + | Verifică senzorul inductiv (este metal sau nu?). | ||
| + | |||
| + | Verifică senzorul de umiditate (este obiectul murdar/ud sau uscat?). | ||
| + | |||
| + | Verifică bariera IR (trece lumina prin el, adică e plastic/sticlă?). | ||
| + | |||
| + | Verifică senzorul de greutate (cântărește obiectul). | ||
| + | |||
| + | Decizia și Execuția: Microcontrolerul adună toate aceste 4 informații și le trece printr-un set de reguli (ex: dacă e ud, îl aruncă la biodegradabil; dacă e curat și e metal, îl aruncă în alta publema). La final, comandă servomotoarele să direcționeze obiectul în coșul potrivit. | ||
| + | |||
| + | |||
| + | 2. Interacțiunea dintre funcționalități | ||
| + | Toate modulele din laboratoare interacționează ca un lanț de comandă: | ||
| + | |||
| + | Intrarea: Totul pornește de la pinul digital (GPIO) al butonului. Când acesta este apăsat, deblochează restul codului. | ||
| + | |||
| + | Procesarea: Mai departe, funcționalitățile GPIO și ADC lucrează împreună. Senzorii digitali (metal) dau răspunsuri scurte de "Da/Nu", în timp ce ADC-ul (umiditate și lumină) dă valori exacte (0-1023) pentru a înțelege exact starea obiectului. Toate aceste date sunt combinate în algoritmul principal. | ||
| + | |||
| + | Ieșirea: Rezultatul deciziei finale interacționează direct cu Timerele microcontrolerului, generând semnalul PWM necesar pentru a roti mecanic | ||
| + | servomotoarele. | ||
| + | |||
| + | 3. Validarea | ||
| + | |||
| + | Am atasat un video care arata functionarea servomotorului care directioneaza gunoiul | ||
| + | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2026/alexandru.predescu/whatsapp_image_2026-05-23_at_21.38.05.jpeg?300}} | ||
| + | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2026/alexandru.predescu/whatsapp_image_2026-05-23_at_21.38.05_1_.jpeg?300}} | ||
| + | |||
| + | https://ctipub-my.sharepoint.com/:v:/g/personal/robert_dieaconu_stud_acs_upb_ro/IQDdgDvS2FwtTIG8TrkiyKWwAavmSyDf1jx-ZyMXZVk8yVU?nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJPbmVEcml2ZUZvckJ1c2luZXNzIiwicmVmZXJyYWxBcHBQbGF0Zm9ybSI6IldlYiIsInJlZmVycmFsTW9kZSI6InZpZXciLCJyZWZlcnJhbFZpZXciOiJNeUZpbGVzTGlua0NvcHkifX0&e=cHGsWq | ||
| + | |||
| + | Aici este un link catre repo-ul de github al proiectului -> https://github.com/RobertDieaconu/BinGenius | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||