This shows you the differences between two versions of the page.
pm:prj2021:avaduva:air-drums [2021/05/27 19:27] diana_ioana.tascan |
pm:prj2021:avaduva:air-drums [2021/05/27 20:09] (current) diana_ioana.tascan |
||
---|---|---|---|
Line 36: | Line 36: | ||
===== Software Design ===== | ===== Software Design ===== | ||
* Tot codul pentru placa Arduino se află în fișierul airdrums.ino, iar encodarea sunetelor se află în fișierul sounds.h. | * Tot codul pentru placa Arduino se află în fișierul airdrums.ino, iar encodarea sunetelor se află în fișierul sounds.h. | ||
- | * Pentru a știi pe ce adrese sunt accelerometrii, am folosit un program I2C scanner. După ce am găsit adresele, le-am salvat în 2 variabile globale. Pentru a detecta dacă un băț a fost mișcat, folosesc variabile globale pentru coordonatele lor în spațiu. O variabilă bool este folosită pentru a spune dacă bățul a fost mișcat destul de repede pentru a mima lovitura tobei. | + | * Pentru redarea sunetelor, am folosit biblioteca PCM.h. |
+ | * Pentru a știi pe ce adrese sunt accelerometrii, am folosit un program I2C scanner. După ce am găsit adresele, le-am salvat în 2 variabile globale. Pentru a detecta dacă un băț a fost mișcat, folosesc variabile globale pentru coordonatele lor în spațiu. O variabilă bool este folosită pentru a spune dacă bățul a fost mișcat destul de repede pentru a mima lovitura tobei. | ||
+ | * Pentru a obține coordonatele bățului, se citește de la accelerometrii în funcția getCoords. Pentru că se citesc doar câte 8 biți, dar valorile necesare sunt pe 16 biți, se face o shiftare a primilor 8 biți și se adaugă următorii 8. În funcție de care accelerometru este mișcat, se reactualizează coordonatele respective lui. | ||
+ | * Pentru a vedea dacă trebuie să se redea un sunet, în funcția checkToPlay se calculează distanța dintre coordonatele anterioare și noile coordonate, în funcție de care accelerometru a detectat mișcarea. Dacă mișcarea este detectată, se alege la întâmplare unul din două sunete encodate pentru acel accelerometru. | ||
+ | * În funcția setup(), se pornesc accelerometrele, iar pentru a schimba senzitivitatea lor, la 0x31 se scrie 3, care face senzitivitatea mai mică. Se apelează getCoords pentru a lua coordonatele inițiate. | ||
+ | * În funcția loop() doar se verifică dacă trebuie să se redea un sunet pe difuzor. | ||
+ | * Pentru encodarea sunetelor, am găsit un pachet de sunete online care avea câteva sunete de tobe. Am luat pachetul și am folosit Audacity pentru a converti la un sunet PCM, apoi am folosit un program EncodeAudio pentru a obține un vector ce reprezintă encodarea frecvenței sunetului. Fiecare băț are doar câte două sunete, deoarece ocupă mult spațiu și nu am putut adăuga astfel alte sunete. | ||
+ | |||
+ | ===== Rezultate Obținute ===== | ||
+ | ==== Modul fără bețe ==== | ||
+ | {{drums_without_sticks.jpeg?500|}} | ||
+ | ==== Modul cu bețe ==== | ||
+ | {{drums_with_sticks.jpeg?500|}} | ||
+ | ==== Video ==== | ||
+ | [[https://youtu.be/MfVGtItqarQ | Short Demo Video]] | ||
+ | |||
+ | ===== Concluzii ===== | ||
+ | * A fost destul de dificil să găsesc o metodă de encodare a sunetelor și dificil să aleg sunete care să fie scurte și reprezentative pentru tobe. | ||
+ | * A dat rateuri de câteva ori fără vreo explicație, a trebuit să închid și să redeschid aplicația ca să meargă... | ||
+ | * Un proiect plăcut, dar sunt dezamăgită că nu am putut adăuga mai multe sunete din cauza memoriei. | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
Line 46: | Line 65: | ||
[[https://ocw.cs.pub.ro/courses/pm/prj2021/avaduva/air-drums?do=export_pdf | Document PDF]] | [[https://ocw.cs.pub.ro/courses/pm/prj2021/avaduva/air-drums?do=export_pdf | Document PDF]] | ||
+ | <note important>{{:pm:prj2021:avaduva:tascan_diana_332cb_airdrums.zip|Codul și folder cu sunetele reproduse}}</note> |