Differences

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

Link to this comparison view

pm:prj2025:vstoica:dragos.dragan1403 [2025/05/30 02:15]
dragos.dragan1403 [Bibliografie/Resurse]
pm:prj2025:vstoica:dragos.dragan1403 [2025/06/02 12:05] (current)
dragos.dragan1403 [Software Design]
Line 46: Line 46:
  
  
-{{ :​pm:​prj2025:​vstoica:​schematic_baston.png?600 |}}+{{ :​pm:​prj2025:​vstoica:​schema_bloc_borseta.png?600 |}}
  
  
 ===== Software Design ===== ===== Software Design =====
  
-Aplicația a fost dezvoltată în Arduino IDE, folosind limbajul C/C++, pe microcontrolerul Arduino Uno. Comunicarea UART a fost implementată direct, fără utilizarea funcțiilor de nivel înalt precum Serial.begin(),​ ci prin accesul direct la registrele hardware ale microcontrolerului (USART0), oferind un control precis asupra transmisiei de date seriale.+== Mediu de dezvoltare: ​Arduino IDE ==
  
-Librării ​externe utilizate +== Librării ​și surse 3-rd party==
-  +
-• Wire.h – pentru comunicarea I2C cu senzorul VL53L0X+
  
-• VL53L0X.h ​– librărie oficială Adafruit ​pentru ​controlul senzorului de distanță ​VL53L0X+Wire – magistrală I²C pentru ​senzorul ​VL53L0X ​ 
  
 +VL53L0X – bibliotecă Pololu pentru senzorul ToF (Time-of-Flight)  ​
  
-**__Funcționalități implementate__**+tone() / noTone() – API Arduino pentru generarea semnalului pe buzzere - (Headere AVR standard folosite pentru control low-level: <​avr/​io.h>,​ <​avr/​interrupt.h>,​ <​util/​delay.h>​).
  
-Proiectul integrează doi senzori de distanță (VL53L0X și HC-SR04) și două buzzere pasive controlate în funcție de distanțele măsurate. De asemenea, este utilizat un buton fizic (cu întrerupere hardware) pentru a comuta între modurile de funcționare ale buzzerelor (navigare, alarmă, off).+== Algoritmi principali: ==
  
-Structura firmware-ului este modulară, împărțind clar:+Inițializare periferice – USART (115 200 baud), I²C, pinii HC-SR04, buzzere, buton și întrerupere externă.   
 +- Măsurare distanță VL53L0X – citire la 200 msfiltrare timeout, interpretare alarmă sub 500 mm.   
 +- Măsurare distanță HC-SR04 – puls triggerează senzorul, conversie durată → cm, filtrare timeout. ​  
 +- Gestionare alarme audio   
 +  - VL53L0Xsunet ciclic (4 pași) dacă distanța < 500 mm.   
 +  - HC-SR04: frecvență buzzer variabilă în funcție de distanță (≤ 20 cm → 3 kHz, … ≤ 100 cm → 800 Hz).   
 +- Comutare moduri buzzer prin buton (ISR) cu debounce 300 ms:   
 +  1. Dezactivează doar buzzerul HC-SR04. ​  
 +  2. Dezactivează ambele buzzere. ​  
 +  3. Reactivează ambele buzzere.  ​
  
-• Inițializarea perifericelor (USART, I2C, pini)+== Funcții implementate:​ ==
  
-• Rutine de tratare a întreruperilor ​(ISR pentru buton)+| Funcție ​                             | Rol                                                                                | Fragmente cheie                                    | 
 +| **USART_Init()** ​                    | Configurează USART0 @ 115 200 baud, 8N1, doar TX                                   | setează UBRR0x, UCSRx                              | 
 +| **USART_SendChar/​String/​Unsigned/​Int()** | Rutine de transmitere serială ​                                                    | conversie manuală zecimală pentru `unsigned long`  | 
 +| **toggleBuzzer()** *(ISR INT0)* ​     | Rulează la apăsarea butonului; comută logica `buzzerEnabled` / `ultrasonicBuzzerEnabled` | verifică `millis()` ​pentru ​debounce ​               | 
 +| **playAlarmSound()** ​                | Generează secvența de 4 note (2 500 Hz ↔ 1 200 Hz) la 200 ms                       | folosește `tone(BUZZER_PIN1,​ f)`                   | 
 +| **readUltrasonicDistance()** ​        | Trimite puls către HC-SR04 și calculează distanța în cm                            | timeout 30 000 µs; conversie `dur*0.034/​2` ​        | 
 +| **handleUltrasonicBuzzer(d)** ​       | Selectează frecvența buzzerului 2 în funcție de `d`                                | tabele prag ≤ 20/50/100 cm                         | 
 +| **setup()** ​                         | Inițializează toate modulele, setează ISR buton                                    | `attachInterrupt(FALLING)`                         | 
 +| **loop()** ​                          | Ciclu principal: • citește VL53L0X → alarmă / semnal continuu • citește HC-SR04 → frecvență buzzer variabilă • transmite date prin UART | 100 ms delay |
  
-• Măsurători de distanță (atât I2C cât și ultrasonic)+== Diagrame / flux ==
  
-• Controlul buzzerelor în funcție de distanță+            +-----------+ ​          ​+-------------+ 
 +            |  VL53L0X ​ | I²C  ---> |  Dist(mm) ​  | 
 +            +-----------+ ​         /​+-------------+ 
 +                                   | <​500? ​       | 
 +                                   ​| ​  yes -> playAlarmSound() 
 +                                   ​| ​  ​no ​ -> freq = f(dist) 
 +                                   ​+-------------+
  
-• Alarme bazate pe pattern sonor gradual pentru senzorul IR (VL53L0X)+== Resurse hardware: ==
  
 +- **MCU:** ATmega328P (Arduino Uno/​Nano)  ​
 +
 +- **Senzori:​** VL53L0X (ToF), HC-SR04 (ultrasunete)  ​
 +
 +- **Actuatori:​** 2 buzzere pasive (pini 8, 9)  ​
 +
 +- **I/O:** buton push-button (pin 2, pull-up), LED opțional ​
 + 
 +- **Interfață:​** UART-USB pentru monitorizare la 115 200 baud  ​
 +
 +== Timpi critici și performanță:​ ==
 +
 +- Loop la ~10 Hz (100 ms) → suficient pentru feedback acustic. ​
 + 
 +- ISR buton + debounce software de 300 ms.  ​
 +
 +- Timeout citire VL53L0X: 500 ms; budget măsurare: 200 ms.  ​
 +
 +- Timeout puls HC-SR04: 30 ms → acoperă până la ~5 m.  ​
 +
 +== Codul sursa: ==
 +
 +{{:​pm:​prj2025:​vstoica:​proiect_pm.ino.zip|}}
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
Line 84: Line 129:
  
 Produsul final permite detectarea facilă a obiectelor din proximitate,​ oferind un feedback auditiv clar. Ca direcții de îmbunătățire,​ intenționez să adaug un motor cu vibrații, pentru a oferi un feedback tactil suplimentar în prezența obstacolelor. De asemenea, pot extinde aria de detecție prin integrarea a încă trei senzori de distanță, montați pe celelalte laturi ale dispozitivului,​ obținând astfel o acoperire de 360° în jurul utilizatorului. Produsul final permite detectarea facilă a obiectelor din proximitate,​ oferind un feedback auditiv clar. Ca direcții de îmbunătățire,​ intenționez să adaug un motor cu vibrații, pentru a oferi un feedback tactil suplimentar în prezența obstacolelor. De asemenea, pot extinde aria de detecție prin integrarea a încă trei senzori de distanță, montați pe celelalte laturi ale dispozitivului,​ obținând astfel o acoperire de 360° în jurul utilizatorului.
-===== Download ===== 
  
-<note warning>​ +===== Partea hardware care este integrată borseta ===== 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+ 
 + 
 + 
 +{{ :pm:​prj2025:​vstoica:​poze_borseta2.png?600 |}} 
 + 
 + 
 +===== Produsul final ===== 
  
-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**. 
-</​note>​ 
  
 +{{ :​pm:​prj2025:​vstoica:​poza_borseta1.png?​600 |}}
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
pm/prj2025/vstoica/dragos.dragan1403.1748560507.txt.gz · Last modified: 2025/05/30 02:15 by dragos.dragan1403
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