This shows you the differences between two versions of the page.
pm:prj2025:vstoica:aila.zeitouni [2025/05/26 16:52] aila.zeitouni [Software Design] |
pm:prj2025:vstoica:aila.zeitouni [2025/05/26 16:59] (current) aila.zeitouni [Milestone 3 - Raport asupra implementării software] |
||
---|---|---|---|
Line 236: | Line 236: | ||
</note> | </note> | ||
+ | |||
+ | |||
+ | |||
+ | ====== Milestone 3 - Raport asupra implementării software ====== | ||
+ | |||
+ | === Stadiul actual al implementării === | ||
+ | |||
+ | Software-ul pentru proiectul Smart Stash Can este funcțional și a fost testat cu succes pe hardware-ul final. Funcționalitățile implementate includ: | ||
+ | |||
+ | * Detectarea distanței utilizând senzorul ultrasonic HC-SR04 (TRIG pe PD6, ECHO pe PD7) | ||
+ | * Controlul capacului prin servomotor acționat PWM (OC1A - PB1) | ||
+ | * Feedback sonor cu ajutorul unui buzzer (PB0) | ||
+ | * Afișaj LCD I2C (cu PCF8574, adresă 0x27) pentru interfața cu utilizatorul | ||
+ | * Cod modular scris în C bare-metal cu acces direct la registrele perifericelor | ||
+ | * Demonstrație completă validată experimental în laborator | ||
+ | |||
+ | --- | ||
+ | |||
+ | === Biblioteci și drivere utilizate === | ||
+ | |||
+ | ^ Componentă ^ Bibliotecă / Driver ^ Justificare ^ | ||
+ | | Afișaj LCD | lcd_i2c.c / lcd_i2c.h (scris de noi) | Implementare ușoară și eficientă pentru PCF8574, fără dependențe de Arduino | | ||
+ | | Magistrală I2C | twi.c / twi.h (din laborator) | Permite control complet asupra comunicației TWI | | ||
+ | | UART (debug) | usart.c / usart.h | Folosit pentru mesaje de test și jurnalizare serială | | ||
+ | | Control servomotor | PWM cu Timer1 | Precizie ridicată folosind OCR1A și ICR1 fără delay-uri software | | ||
+ | |||
+ | Fiecare bibliotecă a fost selectată pentru simplitate, eficiență și integrare directă cu perifericele platformei ATmega328P. | ||
+ | |||
+ | --- | ||
+ | |||
+ | === Element de noutate al proiectului === | ||
+ | |||
+ | Acest proiect se diferențiază prin abordarea complet bare-metal, fără utilizarea bibliotecilor Arduino. Interacțiunea între senzor, servomotor, buzzer și afișaj este realizată exclusiv prin programare directă a registrelor. Se obține astfel un control total asupra funcționalității, temporizării și performanței sistemului, într-un format educativ și extensibil. | ||
+ | |||
+ | --- | ||
+ | |||
+ | === Justificarea utilizării funcționalităților din laborator === | ||
+ | |||
+ | ^ Laborator ^ Funcționalitate utilizată ^ Aplicare în proiect ^ | ||
+ | | Lab 0 | GPIO | TRIG și ECHO pentru senzor, ieșire pentru buzzer | | ||
+ | | Lab 1 | UART | Trimiterea mesajelor debug către terminal serial | | ||
+ | | Lab 3 | Timere și PWM | Control precis al servomotorului cu Timer1, canal OC1A | | ||
+ | | Lab 6 | I2C (TWI) | Comunicație cu afișajul LCD prin interfața I2C (PCF8574) | | ||
+ | |||
+ | Fiecare funcționalitate din laborator a fost integrată într-un mod practic pentru a forma un sistem embedded complet funcțional. | ||
+ | |||
+ | --- | ||
+ | |||
+ | === Structura proiectului și validare === | ||
+ | |||
+ | **Fișiere principale:** | ||
+ | |||
+ | * `main.c` – logica principală, secvența de control | ||
+ | * `servo.c/h` – control PWM pentru servomotor | ||
+ | * `twi.c/h` – comunicație I2C (TWI) | ||
+ | * `lcd_i2c.c/h` – afișare pe LCD prin PCF8574 | ||
+ | * `usart.c/h` – trimiterea mesajelor seriale | ||
+ | |||
+ | **Validare:** | ||
+ | * Testare modulară: fiecare componentă a fost verificată individual | ||
+ | * Testare integrată: comportamentul întregului sistem a fost observat în timp real | ||
+ | * Compararea distanțelor măsurate cu o riglă fizică | ||
+ | * Verificarea reacției servo în funcție de distanță | ||
+ | * Confirmarea clarității mesajelor LCD și a actualizării cursorului | ||
+ | |||
+ | --- | ||
+ | |||
+ | === Calibrarea senzorului de distanță === | ||
+ | |||
+ | Senzorul ultrasonic HC-SR04 a fost calibrat folosind măsurători directe: | ||
+ | |||
+ | * Formula de conversie: `(durata în µs × 0.0343) / 2` | ||
+ | * Pulsurile TRIG și ECHO au fost gestionate cu `_delay_us()` pentru precizie | ||
+ | * Praguri stabilite experimental: | ||
+ | * Deschiderea capacului la < 15 cm | ||
+ | * Mesaj de mulțumire la < 8 cm | ||
+ | * Zgomotul de măsurare a fost redus prin cicluri scurte și perioade de eșantionare stabile (300 ms) | ||
+ | |||
+ | --- | ||
+ | |||
+ | === Optimizări realizate === | ||
+ | |||
+ | * PWM hardware în loc de temporizări software pentru controlul servomotorului | ||
+ | * I2C implementat low-level fără librării externe, pentru control precis | ||
+ | * Suprimarea “ghosting”-ului pe LCD prin scriere completă a liniilor cu spații | ||
+ | * Utilizarea exclusivă a variabilelor statice, fără alocare dinamică | ||
+ | * Funcția de măsurare a distanței optimizată pentru precizie și timeout sigur | ||
+ | * Structura buclei principale minimizează întârzierile și optimizează reacția sistemului | ||
+ | |||
+ | --- | ||
+ | |||
+ | === Video demonstrativ === | ||
+ | |||
+ | O demonstrație video a întregului proiect, cu explicații și comportament funcțional, poate fi vizualizată la: | ||
+ | |||
+ | |||
+ | |||
+ | --- | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== |