Differences

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

Link to this comparison view

pm:prj2026:ciprian.popescu0411:clarisse.braviceanu [2026/05/18 23:42]
clarisse.braviceanu [Hardware Design]
pm:prj2026:ciprian.popescu0411:clarisse.braviceanu [2026/05/25 04:23] (current)
clarisse.braviceanu [Rezultate Obţinute]
Line 15: Line 15:
 una dintre cele 3 tobe virtuale asociate fiecărei bețe (stânga, mijloc, dreapta) și una dintre cele 3 tobe virtuale asociate fiecărei bețe (stânga, mijloc, dreapta) și
 redă în timp real sunetul corespunzător printr-un amplificator de chitară. Simultan, un LED RGB se redă în timp real sunetul corespunzător printr-un amplificator de chitară. Simultan, un LED RGB se
-aprinde și o aplicație mobilă evidențiază vizual toba lovită sau chiar oferind ​un joc de tip wack-a-mole sau PianoTiles.+aprinde și o aplicație mobilă evidențiază vizual toba lovită sau chiar un visualiser.
  
 **Ce face:** **Ce face:**
Line 21: Line 21:
 Sistemul detectează lovitura, identifică toba vizată pe baza direcției de mișcare, Sistemul detectează lovitura, identifică toba vizată pe baza direcției de mișcare,
 redă sunetul corespunzător,​ aprinde LED-ul RGB și trimite informația către o aplicație redă sunetul corespunzător,​ aprinde LED-ul RGB și trimite informația către o aplicație
-mobilă care afișează vizual toba activată. Exista si un buton care schimba genul tobelor (jazz, rock etc.)+mobilă care afișează vizual toba activată. Exista si un buton care schimba genul tobelor (metal, rock etc.) si unu care pune pauza.
  
 **Scopul proiectului:​** **Scopul proiectului:​**
 Crearea unui instrument de percuție virtual care să ofere experiența cântatului la Crearea unui instrument de percuție virtual care să ofere experiența cântatului la
-tobe fără a necesita o baterie fizică ​— fără zgomot mecanic, fără spațiu ocupat și+tobe fără a necesita o baterie fizicăfără zgomot mecanic, fără spațiu ocupat și
 fără a deranja pe nimeni din jur. fără a deranja pe nimeni din jur.
  
Line 35: Line 35:
  
 **De ce este util:** **De ce este util:**
-  * Pentru muzicieni începători sau avansați care vor să exerseze fără investiție +  * Pentru muzicieni începători sau avansați care vor să exerseze fără investiție majoră în echipament și fără probleme de zgomot 
-    ​majoră în echipament și fără probleme de zgomot +  * Pentru persoanele care locuiesc la apartament sau în spații unde zgomotul este o problemă reală (copii mici, vecini, program de noapte)
-  * Pentru persoanele care locuiesc la apartament sau în spații unde zgomotul este +
-    ​o problemă reală (copii mici, vecini, program de noapte)+
     ​     ​
 ===== Descriere generală ===== ===== Descriere generală =====
Line 45: Line 43:
 Exemplu de schemă bloc: http://​www.robs-projects.com/​mp3proj/​newplayer.html Exemplu de schemă bloc: http://​www.robs-projects.com/​mp3proj/​newplayer.html
 </​note>​ </​note>​
-{{:​pm:​prj2026:​ciprian.popescu0411:​image_2026-05-09_042252584.png?600|}} +{{:​pm:​prj2026:​ciprian.popescu0411:​schemabloc.png?700|}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 68: Line 65:
   * 2 x bețe de tobă (suport fizic pentru senzori)   * 2 x bețe de tobă (suport fizic pentru senzori)
   * 2 x Modul de buton fara retinere ​   * 2 x Modul de buton fara retinere ​
-  * Rezistoare, fire, breadboard+  * Rezistoare, fire, breadboard, 2 carduri de memorie microSD
  
 **Schema electrica:​** **Schema electrica:​**
  
-{{:​pm:​prj2026:​ciprian.popescu0411:​sch_schematic1_1-p1_2026-05-18_2_.png?​500|}}+{{:​pm:​prj2026:​ciprian.popescu0411:​sch_schematic1_1-p1_2026-05-18_2_.png?​800|}}
  
  
Line 183: Line 180:
 **Descrierea Arhitecturii Hardware** **Descrierea Arhitecturii Hardware**
  
-Inima sistemului este placa de dezvoltare ​ATmega328P Xplained Mini, care face prelucrarea ​semnalelor ​pentru detectarea loviturilor și trimiterea comenzilor audio. Placa furnizează atât tensiunea ​de 5V pentru alimentarea principală a modulelorcât și tensiunea de 3.3V, folosită strict ca referință logică de adresare pentru unul dintre senzori.+Ne folosim ​de placa ATmega328P Xplained Mini ca microcontroller principalaceasta e responsabilă cu procesarea ​semnalelor de la senzori, controlul redării audiocomunicația Bluetooth ​și afișarea pe ecran.
  
-Pentru detectarea mișcărilor și a unghiurilor de înclinare ale bețelor, sistemul utilizează două module ​inerțiale ​MPU-6050 ​(giroscop ​și accelerometru). Deoarece ambele module folosesc protocolul ​I2C și împart aceleași linii fizice de date (SDA pe PC4 și SCL pe PC5), a fost necesară configurarea unor adrese hardware diferite: ​pinul AD0 al senzorului de pe bâta stângă este conectat ​la GND (setând adresa la 0x68), ​în timp ce pinul AD0 al senzorului de pe bâta dreaptă este conectat ​la 3.3V (setând adresa la 0x69). ​Acest procedeu permite microcontrolerului să comunice independent cu ambele bețe în timp realpe aceeași magistrală.+Detectarea loviturilor se realizează cu două module ​IMU MPU-6050 ​montate pe vârful bețelor, conectate pe același bus I2C (SDA/PC4SCL/PC5). Diferențierea lor se face prin pinul AD0: senzorul bâtei stângi are AD0 la GND (adresă ​0x68), ​cel al bâtei drepte ​la 3.3V (adresă ​0x69). ​Pe același bus I2C este conectat și ecranul LCD 16x2 (adresă 0x27)care afișează stilul curent ​și ultima lovitură detectată.
  
-Generarea și redarea ​sunetelor ​sunt realizate ​de un modul DFPlayer Mini cu card SD. Acesta comunică asincron prin interfața UART hardware cu ATmega328P (folosind pinii PD4 și PD5)Pentru a proteja pinul RX al DFPlayer-ului (care este conceput ​pentru ​niveluri logice ​de 3.3Vde semnalele logice ​de 5V emise de ATmega328P, ​fost introdus un rezistor de protecție ​de 1kΩ pe linia de transmisie (TX spre RX).+Redarea ​sunetelor ​este asigurată ​de două module ​DFPlayer Mini cu card SD, câte unul per bâtă, permițând redarea simultană ​și independentă a sunetelor. Comunicația se face prin SoftwareSerial:​ DF1 pe PD4/PD5, DF2 pe PD6/PD7Pe liniile TX ale microcontrolerului spre RX-ul DFPlayer-elor sunt plasate rezistoare de 1kΩ pentru ​protecția intrărilor ​de 3.3V față ​de logica ​de 5V a ATmega-ului. Ieșirile audio DAC_R și DAC_L ale ambelor module sunt mixate pasiv prin rezistoare ​de 1kΩ și dirijate ​spre jack-ul TRRS 3.5mm prin rezistoare de 100Ω.
  
-Ieșirea audio analogică este preluată de la pinii DAC_R și DAC_L ai DFPlayer-ului și dirijată către un modul Jack TRRS de 3.5mm prin intermediul ​două rezistoare de 100Ω. Aceste rezistoare au dublu rol: limitează curentul de ieșire și protejează convertorul digital-analog al modulului MP3. Pentru a elimina interferențele și a rezolva problema buclelor de masă (ground loops) la conectarea spre un amplificator ​de chitară extern, pinul GND (Sleeve) al jack-ului a fost rutat direct la pinul GND dedicat al DFPlayer-ului,​ izolând astfel masa de semnal audio de masa generală a microcontrolerului.+Transmiterea datelor despre loviturile detectate spre aplicația mobilă se realizează prin modulul Bluetooth HC-05, conectat pe PD2/PD3Linia RXD modulului este protejată printr-un divizor ​de tensiune 1kΩ+2kΩ.
  
-În cadrul testelora fost identificată o a doua sursă de ground loop: diferența de potențial dintre masa laptopului ​conectat la priză ​(prin care era alimentat ATmega328P via USB) și masa amplificatorului ​de chitară ​conectat la acelasi prelungitor. Simptomul era un zgomot continuu de tip bip-bip prezent chiar și în absența loviturilor,​ dispărând complet în căștiProblema a fost reprodusă și diagnosticată sistematic, iar soluția aplicată a fost alimentarea plăcii ​ATmega ​din telefon sau power bank în loc de laptopul conectat ​la prizăeliminând astfel bucla de masă parazită dintre cele două surse. Ca alternativă permanentă pentru o versiune viitoare a circuitului, se pot adăuga condensatoare de cuplaj de 10µF pe liniile DAC_R și DAC_L, care blochează componenta DC și elimină zgomotul indiferent de sursa de alimentare. +În cadrul testelor a fost identificată și rezolvată o problemă de ground loop audioalimentarea ATmega-ului din laptopul ​conectat la priză, simultan cu amplificatorul ​de chitară, genera ​un zgomot continuu ​cauzat ​de diferența de potențial dintre cele două maseSoluția aplicată a fost alimentarea plăcii din telefon sau power bank. GND-ul jack-ului audio este rutat direct ​la GND-ul DFPlayer-uluiizolând masa de semnal audio de restul ​circuitului.
- +
-Sistemul hardware este scalabil și include deja alocarea pinilor (PD6/PD7) pentru implementarea unui modul Bluetooth HC-05 și folosirea pinilor existenți I2C pentru adăugarea unui ecran LCD 1602.+
 ===== Software Design ===== ===== Software Design =====
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
-</​note>​ 
  
 **Mediu de dezvoltare:​** **Mediu de dezvoltare:​**
   * PlatformIO (VS Code) cu framework Arduino pentru ATmega328P   * PlatformIO (VS Code) cu framework Arduino pentru ATmega328P
   * Board: ATmega328P Xplained Mini, upload via xplainedmini programmer   * Board: ATmega328P Xplained Mini, upload via xplainedmini programmer
 +  * Monitor serial la 57600 baud pentru debug în timp real
  
 **Librării folosite:** **Librării folosite:**
-  * Wire.h — comunicație I2C cu MPU-6050 ​(Lab 6) +  * Wire.h — comunicație I2C nativă ​cu MPU-6050 ​#1, #2 și LCD 
-  * Arduino.h — framework ​de bază+  * SoftwareSerial.h — emulare UART pe pini digitali pentru DFPlayer #1, DFPlayer #2 și HC-05 Bluetooth 
 +  * DFRobotDFPlayerMini — librărie 3rd-party pentru controlul modulelor MP3 prin protocolul serial DFPlayer (comenzi play, stop, loop, volume, EQ) 
 +  * LiquidCrystal_I2C — librărie 3rd-party pentru controlul ecranului LCD 16x2 prin interfața I2C 
 + 
 +**Algoritmi și structuri de date:** 
 + 
 +Detectarea loviturilor se bazează pe o mașină de stări cu trei stări per bâtă (READY → DETECTING → COOLING), implementată în funcția process(). La fiecare iterație de 5ms, microcontrolerul citește accelerația brută de la MPU-6050 și calculează magnitudinea vectorului de accelerație (|dx| + |dy| + |dz|). Dacă aceasta depășește pragul HIT_THRESHOLD (6000 LSB, corespunzând la aproximativ 1.5g în modul ±8g), starea trece în DETECTING. În fereastra de detecție (6 samples × 5ms = 30ms), firmware-ul urmărește peak-ul pozitiv și negativ pe axa Y. Direcția loviturii (STANGA, MIJLOC, DREAPTA) se determină prin compararea celor două peak-uri la finalul ferestrei. Starea COOLING previne detectarea multiplă a aceleiași lovituri, cu un timeout de 250ms sau 2 samples calme consecutive. 
 + 
 +Fiecare bâtă este reprezentată printr-o structură Bat care grupează adresa I2C, un pointer la instanța DFPlayer corespunzătoare,​ offset-urile de calibrare, starea mașinii și valorile de peak. 
 + 
 +Sunetele redate depind de stilul activ (ROCK sau METAL), calculat dinamic ca offset față de numărul de fișier ​de bază: stilul ROCK folosește fișierele 1-3 pe ambele carduri, stilul METAL folosește fișierele 4-6 pe DF1 și 5-7 pe DF2. 
 + 
 +LED-ul RGB este controlat printr-un algoritm de fade non-blocant bazat pe funcția stepTo(), care interpolează liniar valorile curente spre valorile țintă cu 8 pași per iterație (aproximativ 160ms per tranziție completă). 
 + 
 +**Surse și funcții implementate:​** 
 + 
 +  * mpu_init(addr) — inițializează MPU-6050: dezactivare sleep, configurare ±8g, DLPF 44Hz 
 +  * calibrate(bat) — calculează offset-urile de repaus prin medierea a 200 de samples la pornire 
 +  * mpu_read(addr,​ ax, ay, az) — citește cei 6 bytes de accelerometru prin I2C 
 +  * process(bat) — rulează mașina de stări de detecție pentru o bâtă 
 +  * classify(bat) — determină direcția loviturii, redă sunetul corespunzător,​ actualizează LCD, trimite date pe Bluetooth și setează culoarea LED-ului 
 +  * setLedColor(r,​ g, b) / updateLed() — controlul non-blocant al LED-ului RGB cu fade smooth 
 +  * setup() — inițializare hardware: LED, butoane, I2C, LCD, ambele DFPlayer-e cu debug complet, Bluetooth, MPU-uri, calibrare 
 +  * loop() — buton pauză/​resume cu melodie pe loop, buton schimbare stil, procesare senzori, actualizare LED
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
-<note tip> 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. 
-</​note>​ 
  
 +Proiectul funcționează. Lovești în aer cu două bețe și se aude ca și cum ai fi un toboșar, doar că nu ești, și nici nu ai fi fără acest sistem.
 +
 +Concret:
 +  * Ambele bâte detectează corect direcția loviturii (stânga, mijloc, dreapta) în timp real
 +  * Sunetele celor două bâte se redau simultan fără interferențe
 +  * Schimbarea stilului între ROCK și METAL funcționează instantaneu
 +  * LED-ul RGB confirmă vizual fiecare lovitură cu tranziții de culoare smooth
 +  * Aplicația Android afișează în timp real toba lovită și vizualizatorul audio reacționează la fiecare impact
 +  * Ecranul LCD afișează stilul activ și ultima lovitură detectată
 +  * Butonul de pauză oprește detecția și pornește o melodie pe loop, util când vrei să te prefaci că știi să cânți la chitară
 +
 +
 +Scheletul produsului final:
 +
 +{{:​pm:​prj2026:​ciprian.popescu0411:​aerobeatfinal.jpeg?​800|}}
 ===== Concluzii ===== ===== Concluzii =====
  
 +Proiectul demonstrează că un instrument muzical de percuție virtual poate fi construit cu componente accesibile și un microcontroler de clasă entry-level. ATmega328P s-a dovedit suficient pentru a gestiona simultan două magistrale I2C, trei instanțe SoftwareSerial și un algoritm de detecție în timp real, fără întârzieri perceptibile.
 +
 +Principalele provocări tehnice întâlnite au fost gestionarea conflictelor dintre instanțele SoftwareSerial,​ eliminarea ground loop-ului audio și calibrarea pragurilor de detecție pentru a obține un echilibru între sensibilitate și rata de detecții false. Fiecare problemă a fost diagnosticată și rezolvată iterativ direct pe hardware.
 +
 +Ca direcții de dezvoltare ulterioară,​ sistemul poate fi extins cu un al doilea canal Bluetooth dedicat transmisiei audio wireless, înlocuirea SoftwareSerial cu hardware UART pentru o comunicație mai robustă și adăugarea unui mod de înregistrare a secvențelor de lovituri.
 +
 +În ansamblu, proiectul acoperă cu succes noțiunile din laboratoarele de GPIO, UART, Timere/PWM și I2C, integrându-le într-un sistem funcțional și, cel mai important, unul pe care îl poți folosi efectiv la o petrecere dacă oamenii sunt suficient de politicoși să nu comenteze.
 ===== Download ===== ===== Download =====
 <note warning> <note warning>
Line 224: Line 255:
 </​note>​ </​note>​
  
 +Link github: https://​github.com/​cclaryc/​Aero_Beat.git
 ===== Jurnal ===== ===== Jurnal =====
 <note tip> <note tip>
Line 231: Line 263:
   * Săptămâna 1: Alegerea componentelor,​ testare conectivitate I2C cu MPU-6050   * Săptămâna 1: Alegerea componentelor,​ testare conectivitate I2C cu MPU-6050
   * Săptămâna 2: Implementare algoritm de detecție lovitură, calibrare pe axa Y   * Săptămâna 2: Implementare algoritm de detecție lovitură, calibrare pe axa Y
-  * Săptămâna 4: Integrare DFPlayer Mini, LED RGB, aplicație mobilă ​(în progres, 50% done) +  * Săptămâna 4: Integrare DFPlayer Mini, LED RGB, aplicație mobilă 
-  * Săptămâna 5: Integrare Ecran LED, buton pentru schimbarea genului tobelor, modul Bluetooth pentru conectivitate mai usoara intre boxa sau telefon (în progres) +  * Săptămâna 5: Integrare Ecran LED, buton pentru schimbarea genului tobelor. 
 +  * Last 100m  : Buton pentru pause/​start,​ muzica de fundal pause
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
-<​note>​ 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. 
-</​note>​ 
  
 **Resurse Hardware:** **Resurse Hardware:**
   * MPU-6050 Product Specification — InvenSense   * MPU-6050 Product Specification — InvenSense
 +  * MPU-6050 Register Map and Descriptions — InvenSense (RM-MPU-6000A)
   * ATmega328P Xplained Mini User Guide — Microchip (DS50002659B)   * ATmega328P Xplained Mini User Guide — Microchip (DS50002659B)
 +  * ATmega328P Datasheet — Microchip
   * DFPlayer Mini Datasheet — DFRobot   * DFPlayer Mini Datasheet — DFRobot
   * GY-521 Module Schematic   * GY-521 Module Schematic
 +  * HC-05 Bluetooth Module AT Command Set 
 +  * LiquidCrystal I2C — HD44780 Controller Datasheet
  
 **Resurse Software:** **Resurse Software:**
   * Arduino Wire Library Documentation — https://​www.arduino.cc/​en/​reference/​wire   * Arduino Wire Library Documentation — https://​www.arduino.cc/​en/​reference/​wire
 +  * Arduino SoftwareSerial Library — https://​www.arduino.cc/​en/​Reference/​SoftwareSerial
   * PlatformIO Documentation — https://​docs.platformio.org   * PlatformIO Documentation — https://​docs.platformio.org
-  * MPU-6050 Register Map — InvenSense RM-MPU-6000A+  * DFRobotDFPlayerMini Library ​— https://​github.com/​DFRobot/​DFRobotDFPlayerMini 
 +  * LiquidCrystal_I2C Library — https://​github.com/​johnrickman/​LiquidCrystal_I2C 
 +  * Android Bluetooth SPP Development — https://​developer.android.com/​guide/​topics/​connectivity/​bluetooth 
 +  * ATmega328P PWM and Timer Registers — https://​www.arduino.cc/​en/​Reference/​AnalogWrite
  
 <​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/ciprian.popescu0411/clarisse.braviceanu.1779136971.txt.gz · Last modified: 2026/05/18 23:42 by clarisse.braviceanu
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