Differences

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

Link to this comparison view

pm:prj2026:atoader:gabriel.draghici05 [2026/05/23 20:54]
gabriel.draghici05 [Software Design]
pm:prj2026:atoader:gabriel.draghici05 [2026/05/25 00:22] (current)
gabriel.draghici05 [Stadiul actual al implementării]
Line 14: Line 14:
 Ideea a pornit de la necesitatea de a avea o unealtă de măsură multifuncțională pentru proiecte de bricolaj (DIY), demonstrând totodată capacitatea de a prelucra date brute de la senzori diferiți și de a le transforma în mărimi fizice reale (centimetri și grade). Ideea a pornit de la necesitatea de a avea o unealtă de măsură multifuncțională pentru proiecte de bricolaj (DIY), demonstrând totodată capacitatea de a prelucra date brute de la senzori diferiți și de a le transforma în mărimi fizice reale (centimetri și grade).
  
-Laboratoare folosite: GPIO, Timere, PWM, I2C.+Laboratoare folosite: GPIO, Întreruperi, Timere, PWM, I2C.
  
 ===== Descriere generală ===== ===== Descriere generală =====
Line 82: Line 82:
   * **Buzzer pasiv** - generează bip-uri cu frecvență controlabilă prin semnal PWM software   * **Buzzer pasiv** - generează bip-uri cu frecvență controlabilă prin semnal PWM software
   * **Butoane (PD4, PD5)** - detectate corect prin polling cu pull-up intern   * **Butoane (PD4, PD5)** - detectate corect prin polling cu pull-up intern
-  * **HC-SR04** - conectat pe PD2 (Trig) ​și PD3 (Echo)urmează testare software+  * **HC-SR04** - testat ​și calibrateroare sub ±1cm între 0-60cm
  
 Toate componentele active sunt conectate simultan și funcționează fără conflicte pe același breadboard. Toate componentele active sunt conectate simultan și funcționează fără conflicte pe același breadboard.
Line 94: Line 94:
  
 ==== Mediu de dezvoltare ==== ==== Mediu de dezvoltare ====
-Proiectul este dezvoltat în **PlatformIO** ​cu extensia VS Code, folosind toolchain-ul **AVR-GCC**.+Proiectul este dezvoltat în VS Code cu extensia ​**PlatformIO**,​ folosind toolchain-ul **AVR-GCC**.
 Nu sunt folosite librării third-party — tot codul este implementat de la zero, direct pe registrele Nu sunt folosite librării third-party — tot codul este implementat de la zero, direct pe registrele
 hardware ale ATmega328P. Această alegere a fost făcută deliberat pentru a înțelege și controla hardware ale ATmega328P. Această alegere a fost făcută deliberat pentru a înțelege și controla
Line 150: Line 150:
  
 ==== Calibrarea HC-SR04 ==== ==== Calibrarea HC-SR04 ====
-Implementarea inițială folosea o buclă polling cu ''​_delay_us(1)''​ pentru a măsura durata +Implementarea inițială folosea o buclă polling cu ''​_delay_us(1)''​ pentru a măsura durata pulsului Echo. Această abordare introducea erori sistematice ​din cauza overhead-ului instrucțiunilor AVR-GCC în buclăcare făcea ca fiecare iterație să dureze în realitate mai mult de 1µs, distorsionând calculul distanței.
-pulsului Echo. Această abordare introducea erori sistematice ​semnificative:​ la 21cm reali, +
-senzorul raporta 13cm, iar la 23cm reali raporta 15cm — o eroare ​de ~38%.+
  
-Cauza: overhead-ul instrucțiunilor AVR-GCC în buclă făcea ca fiecare iterație să dureze +**Soluția implementată**: ​Calibrarea ​empirică ​a factorului de conversie la valoarea fixă ''/​ 36''​.
-~1.45µs în loc de 1µs, distorsionând calculul distanței. +
- +
-**Soluția implementată**: ​calibrare ​empirică ​cu factor ajustat și corecție liniară pentru +
-distanțe mari:+
  
 <code c> <code c>
-uint16_t dist = duration / 40+factor = 36; 
-if (dist > 15) dist += (dist / 15); // corectie ~6% la distante mari+ 
 +uint16_t dist = duration / factor
 return dist; return dist;
 </​code>​ </​code>​
  
-Factorul ''/​40''​ a fost determinat prin măsurători la distanțe cunoscute cu riglă. +Factorul ''/​36''​ a fost determinat prin măsurători ​experimentale succesive ​la distanțe cunoscute cu o ruletă reală. Această abordare oferă o precizie excelentă (eroare ​de maximum ±1 cm) în intervalul stabil de operare hardwarecuprins ​între ​**0 și 60 cm**.
-Rezultat după calibrare: ​eroare ​sub 1cm între 5-15cmsub 2cm între ​15-100cm.+
  
 +În urma testării pe plaje mai lungi, s-a observat că la distanțe ce depășesc 60-70 cm, din cauza unghiului de dispersie (conului acustic) al senzorului HC-SR04 și a comportamentului semnalului primit, încep să apară ecouri false (reflexii din podea sau masă). Din acest motiv, s-a preferat păstrarea unei funcții matematice curate și liniare, optimizată special pentru distanțe scurte și medii (specifice utilizării de zi cu zi), în detrimentul unor corecții software artificiale care ar fi mascat o instabilitate de natură strict fizică/​acustică a senzorului.
 ==== Optimizări realizate ==== ==== Optimizări realizate ====
  
Line 184: Line 180:
   * **Buzzer** — validat auditiv, tonuri distincte pentru fiecare interval de distanță și non-blocant confirmat prin răspuns imediat al butoanelor în timpul bipului   * **Buzzer** — validat auditiv, tonuri distincte pentru fiecare interval de distanță și non-blocant confirmat prin răspuns imediat al butoanelor în timpul bipului
   * **Butoane** — testate cu cod dedicat care afișează mesaj pe LCD la apăsare   * **Butoane** — testate cu cod dedicat care afișează mesaj pe LCD la apăsare
 +  * **Ansamblu** — componentele si interactiunea dintre ele au fost testate in mod repetat in timpul scrierii codului si al procesului de calibrare, dupa testarile individuale
  
 ==== Demo video ==== ==== Demo video ====
-//Video demonstrativ — în curs de realizare//+Videoclipuri demonstrative:​ 
 +  * [[https://youtu.be/jjdeZFyVqso|Măsurare Distanță și Feedback Sonor Adaptiv]] 
 +  * [[https://​youtu.be/​JDpAgR6UWkI|Determinare Unghi și Ghidaj Audio + comutare între moduri]]
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +În urma implementării și calibrării componentelor,​ s-a realizat un dispozitiv portabil, compact și complet funcțional,​ care îndeplinește cu succes specificațiile inițiale ale ambelor moduri de funcționare:​
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
 +  * **Modul Ruletă Digitală**:​ Sistemul măsoară distanța până la obstacole cu o precizie excelentă (eroare de maximum ±1 cm) în intervalul optim de **0 - 60 cm**, datorită calibrării empirice a factorului de conversie direct pe bucla de polling hardware. Datele sunt afișate clar pe ecranul LCD, iar buzzerul pasiv emite bip-uri adaptive, devenind mai ascuțite și mai rapide pe măsură ce distanța scade sub pragul de 20 cm.
 +  * **Modul Nivelă Electronică**:​ Senzorul MPU-6050 transmite stabil unghiul de înclinație în timp real pe bus-ul I2C. Datorită optimizării software prin algoritmul de medie mobilă pe 8 eșantioane,​ tremurul valorilor brute a fost complet eliminat, oferind o precizie stabilă de sub ±1°. Când dispozitivul este adus la orizontală (0° cu o toleranță de ±3°), buzzerul emite un ton continuu la 2000Hz, permițând alinierea perfectă fără a fi necesară privirea ecranului.
 +  * **Interfața și Controlul**:​ Trecerea de la un mod la altul se realizează instantaneu prin apăsarea butonului 1, iar debounce-ul software elimină orice declanșare falsă. Deoarece managementul duratei buzzerului este gestionat non-blocant prin întreruperile Timerului 2, ecranul își face refresh parțial fără flickering, iar procesorul rămâne liber pentru citirea butoanelor.
 ===== Concluzii ===== ===== Concluzii =====
  
 +Realizarea acestui proiect a reprezentat o oportunitate excelentă de a aprofunda programarea sistemelor embedded la nivel de registru, fără utilizarea unor biblioteci abstracte (third-party),​ oferind un control direct și total asupra resurselor microcontrolerului ATmega328P.
 +
 +Implementarea manuală a protocolului I2C (modulul TWI hardware) pentru partajarea bus-ului între ecranul LCD și giroscop a evidențiat avantajele flexibilității protocoalelor seriale industriale. De asemenea, lucrul în paralel cu două timere hardware distincte (Timer1 pentru generarea frecvenței PWM a sunetului și Timer2 pentru întreruperile de durată) a demonstrat importanța sincronizării non-blocante în aplicații în timp real.
 +
 +Deși senzorul ultrasonic HC-SR04 a prezentat limitări fizice clare cauzate de conul mare de reflexie acustică la distanțe de peste 60 cm în condiții de alimentare portabilă, calibrarea riguroasă a codului a demonstrat cum constrângerile de natură fizică pot fi gestionate corect printr-o abordare software inteligentă. În final, proiectul și-a atins toate obiectivele,​ transformându-se dintr-o rețea complexă de fire într-un instrument de măsură fiabil și util pentru scenarii practice.
 ===== Download ===== ===== Download =====
  
-<note warning>​ +Codul sursa complet ​este disponibil ​pe GitHub:
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată ​pe uC crează întotdeauna o impresie bună ;-).+
  
-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 Alin, 331CC -**:​pm:​prj2009:​cc:​dumitru_alin**. +**[[https://github.com/​gabrieldraghici05/​Proiect-PM |Repository GitHub]]**
-</​note>​+
  
-===== Jurnal =====+Structura proiectului este cea mentionata mai sus.
  
 +===== Jurnal =====
   * **20.04.2026** - alegerea temei și componentelor   * **20.04.2026** - alegerea temei și componentelor
   * **30.04.2026** - finalizarea listei de componente   * **30.04.2026** - finalizarea listei de componente
   * **09.05.2026** - realizarea diagramei bloc și documentației inițiale   * **09.05.2026** - realizarea diagramei bloc și documentației inițiale
   * **16.05.2026** - testarea componentelor,​ realizarea schemei electrice în Fusion360   * **16.05.2026** - testarea componentelor,​ realizarea schemei electrice în Fusion360
 +  * **22.05.2026** - finalizarea codului, calibrarea HC-SR04, documentarea Software Design 
 +  * **23.05.2026** - realizarea carcasei și integrarea componentelor în forma finală 
 +  * **24.05.2026** - finalizarea documentației și filmarea videoclipurilor demonstrative
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +  * [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf|Datasheet Microcontroller ATmega328P]] 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  * [[https://​invensense.tdk.com/​wp-content/​uploads/​2015/​02/​MPU-6000-Datasheet1.pdf|Datasheet Modul Giroscop/​Accelerometru MPU-6050]] 
-</note>+  ​[[https://​cdn.sparkfun.com/​datasheets/​Sensors/​Proximity/​HCSR04.pdf|Datasheet Senzor Ultrasonic HC-SR04]] 
 +  ​[[https://​www.ti.com/​lit/​ds/​symlink/​pcf8574.pdf|Datasheet Expander I2C PCF8574 (Modul adaptor LCD)]] 
 +  ​[[https://​www.sparkfun.com/​datasheets/​LCD/​HD44780.pdf|Datasheet Controller HD44780 (Display LCD 16x2)]] 
 +  * [[https://​www.st.com/​resource/​en/​datasheet/​l78.pdf|Datasheet Regulator Liniar L7805 (Echivalent HW-131)]]
  
 <​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/atoader/gabriel.draghici05.1779558840.txt.gz · Last modified: 2026/05/23 20:54 by gabriel.draghici05
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