This shows you the differences between two versions of the page.
pm:prj2025:vstoica:dragos.dragan1403 [2025/05/30 14:52] dragos.dragan1403 [Hardware Design] |
pm:prj2025:vstoica:dragos.dragan1403 [2025/06/02 12:05] (current) dragos.dragan1403 [Software Design] |
||
---|---|---|---|
Line 46: | Line 46: | ||
- | {{ :pm:prj2025:vstoica:schema_bloc_borseta.png |}} | + | {{ :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 ms, filtrare timeout, interpretare alarmă sub 500 mm. | ||
+ | - Măsurare distanță HC-SR04 – puls triggerează senzorul, conversie durată → cm, filtrare timeout. | ||
+ | - Gestionare alarme audio | ||
+ | - VL53L0X: sunet 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 ===== | ||
- | In curând si imagini/videoclipuri 🔜 | + | ===== Partea hardware care este integrată borseta ===== |
+ | |||
+ | |||
+ | |||
+ | {{ :pm:prj2025:vstoica:poze_borseta2.png?600 |}} | ||
+ | |||
+ | |||
+ | ===== Produsul final ===== | ||
+ | |||
+ | |||
+ | |||
+ | {{ :pm:prj2025:vstoica:poza_borseta1.png?600 |}} | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== |