Differences

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

Link to this comparison view

pm:prj2022:avaduva:magicmusicbox [2022/05/27 15:30]
miruna_maria.fatu [Logica implementarii]
pm:prj2022:avaduva:magicmusicbox [2022/05/27 23:46] (current)
miruna_maria.fatu [Download]
Line 100: Line 100:
 In functia **loop()** se identifica modul de functionare al cutiei muzicale, dupa care urmeaza algormitmul specific fiecarui mod, asa cum este descris in continuare. In functia **loop()** se identifica modul de functionare al cutiei muzicale, dupa care urmeaza algormitmul specific fiecarui mod, asa cum este descris in continuare.
    
-  ​* //**Game Mode - Algoritmul jocului**//+   * //**Game Mode - Algoritmul jocului**// ​\\ 
 +      ​
 Atunci cand este selectat acest mod, toate datele jocului vor fi resetate.\\ Atunci cand este selectat acest mod, toate datele jocului vor fi resetate.\\
 Pentru inceput, se vor genera date aleatorii pentru cele 4 runde ale jocului - functia **startSequence()**. Pentru inceput, se vor genera date aleatorii pentru cele 4 runde ale jocului - functia **startSequence()**.
Line 111: Line 112:
       * In cazul in care este gresit, se afiseaza un mesaj "Try again ..." impreuna cu un sunet, intrerupand astfel continuarea jocului - functia **loseSequence()**. Jocul este resetat automat, iar progresul utilizatorului este anulat. Un nou joc va incepe, pornind de la runda 1.       * In cazul in care este gresit, se afiseaza un mesaj "Try again ..." impreuna cu un sunet, intrerupand astfel continuarea jocului - functia **loseSequence()**. Jocul este resetat automat, iar progresul utilizatorului este anulat. Un nou joc va incepe, pornind de la runda 1.
  
-      * Daca toate cele 4 secvente au fost redate cu succes, jocul se incheie cu succes, afisand mesajul "You did it! Congrats!"​ acompaniat de o melodie - functia winSequence(). De asemenea, jocul va fi resetat, urmand sa inceapa un nou joc. +Daca toate cele 4 secvente au fost redate cu succes, jocul se incheie cu succes, afisand mesajul "You did it! Congrats!"​ acompaniat de o melodie - functia ​**winSequence()**. De asemenea, jocul va fi resetat, urmand sa inceapa un nou joc. 
  
-  * //**Free mode**// +  * //**Free mode**// ​\\ 
- Se asteapta input de la utilizator - functia buttonCheck() - , acesta avand posibilitatea de a crea o melodie personalizata.+ 
 + Se asteapta input de la utilizator - functia ​**buttonCheck()** - , acesta avand posibilitatea de a crea o melodie personalizata.
   ​   ​
    
 === Implementarea tobelor - percutie === === Implementarea tobelor - percutie ===
-Pentru a oferi o simulare cat mai realista a senzatiei de a bate la tobe, acestea sunt implementate folosind doua accelerometre MPU6050. Intrucat acest model ofera functionalitatea de giroscop, pentru a determina momentul de timp la care va fi emis sunetul, va fi calculata distanta folosind toate cele 3 axe X, Y, Z - functia getStickValues(),​ iar apoi determinat timpul in care a fost parcursa aceasta distanta, obtinand in final valoarea acceleratiei. In cazul in care accelerometrul este miscat cu destula viteza, la finalul miscarii, va fi emis un sunet asemanator unei tobe - functia checkToSing().+ 
 +Pentru a oferi o simulare cat mai realista a senzatiei de a bate la tobe, acestea sunt implementate folosind doua **accelerometre MPU6050**, cu ajutorul protocolului I2C 
 + 
 +Intrucat acest model ofera functionalitatea de giroscop, pentru a determina momentul de timp la care va fi emis sunetul, va fi calculata distanta folosind toate cele 3 axe (X, Y, Z - functia ​**getStickValues()**), iar apoi determinat timpul in care a fost parcursa aceasta distanta, obtinand in final valoarea acceleratiei. ​ 
 + 
 +In cazul in care accelerometrul este miscat cu destula viteza, la finalul miscarii, va fi emis un sunet asemanator unei tobe - functia ​**checkToSing()**.
   ​   ​
 <code java> <code java>
Line 150: Line 157:
 === Implementarea pianului === === Implementarea pianului ===
  
-Implementarea pianului a constat in configurarea a 7 butoane ce corespund notelor muzicale DO, RE, MI, FA, SOL, LA, SI, DO. La apasarea unuia dintre ele va fi emis sunetul corespunzator acelei note muzicale - debounceButton(),​ iar pe LCD se va afisa denumirea notei. Citirea datelor este facuta cu functia digitalRead(). ​+Implementarea pianului a constat in configurarea a 7 butoane ce corespund notelor muzicale DO, RE, MI, FA, SOL, LA, SI, DO.  
 + 
 +La apasarea unuia dintre ele va fi emis sunetul corespunzator acelei note muzicale - functia **debounceButton()**, iar pe LCD se va afisa denumirea notei. Citirea datelor este facuta cu functia digitalRead(). ​
  
 <code java> <code java>
Line 182: Line 191:
 === Corelarea butoanelor === === Corelarea butoanelor ===
  
- ​Pentru a asigura o functionalitate corecta a tuturor instrumentelor alcatuite din butoane si accelerometre,​ a fost nevoie de implementarea unui debouncer. Astfel, acesta asigura ca datele nu vor fi citite repetitiv la un moment de timp, fara ca doua sau mai multe instrumente sa se intercaleze sau sa se altereze sunetul unuia dintre ele. + ​Pentru a asigura o functionalitate corecta a tuturor instrumentelor alcatuite din butoane si accelerometre,​ a fost nevoie de implementarea unui **debouncer**. Astfel, acesta asigura ​faptul ​ca datele nu vor fi citite repetitiv la un moment de timp, fara ca doua sau mai multe instrumente sa se intercaleze sau sa se altereze sunetul unuia dintre ele. 
  
  
 === Creare sunete === === Creare sunete ===
-Pentru ca efectul de tobe nu poate fi reprodus explicit doar prin niste simple note muzicale, a fost nevoie sa convertesc secvente de melodii de tip MP3, codificand apoi sunetul cu aplicatia EncodeAudio,​ acesta fiind ulterior incarcat pe placuta Arduino. Pentru prelucrarea melodiilor cat si comprimarea dimensiunii acestora am folosit aplicatia Audacity. Datorita memoriei limitate a placutei, nu am avut posibilitatea de a incarca mai mult de doua astfel de efecte muzicale, ceea ce a fost putin neplacut. Pentru a reda aceste sunete am folosit functia startPlayback() din biblioteca PCM.h.+ 
 +Pentru ca efectul de tobe nu poate fi reprodus explicit doar prin niste simple note muzicale, a fost nevoie sa convertesc secvente de melodii de tip MP3, codificand apoi sunetul cu aplicatia EncodeAudio,​ acesta fiind ulterior incarcat pe placuta Arduino. ​ 
 + 
 +Pentru prelucrarea melodiilor cat si comprimarea dimensiunii acestora am folosit aplicatia Audacity. Datorita memoriei limitate a placutei, nu am avut posibilitatea de a incarca mai mult de doua astfel de efecte muzicale, ceea ce a fost putin neplacut. Pentru a reda aceste sunete am folosit functia startPlayback() din biblioteca PCM.h.
  
 <code java> <code java>
Line 206: Line 218:
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-POZEEEEEEEEEEEEEEEEEEEEEEEEEEEE ​VIDEO+Link drive (demo poze): https://​drive.google.com/​drive/​folders/​1UgzV9hHkORNomN6ilFcIYVc8YpFYCg6a?​usp=sharing 
 + 
 +{{ :​pm:​prj2022:​avaduva:​magic_box_miruna4.jpg?​600 |}} 
 + 
 +{{ :​pm:​prj2022:​avaduva:​magic_box_miruna1.jpg?​600 |}} 
 + 
 +{{ :​pm:​prj2022:​avaduva:​magic_box_miruna2.jpg?​600 |}} 
 + 
 +{{ :​pm:​prj2022:​avaduva:​magic_box_miruna3.jpg?​600 |}}
  
 ===== Concluzii ===== ===== Concluzii =====
  
-Proiectul a fost foarte placut de implementat,​ desi implementarea a fost mai complexa decat ma asteptam. ​Consider ca acum sunt mult mai sigura pe notiuni ce tin atat de electronica,​ cat si pe protocoalele invatate la laborator pe care le-am aprofundat prin prisma acestui proiect. De asemenea, acum nu imi mai este frica de o rezistenta sau un tranzistor si chiar am invatat sa lipesc fire si componente singura :).+Proiectul a fost foarte placut de implementat,​ desi implementarea a fost mai complexa decat ma asteptam. ​\\
  
-Pot spune ca dificultatile intalnite precum memoria limitata a placutei Arduino m-au pus sa regandesc putin intreaga implementarefiind nevoita sa limitez numarul de efecte de tip MP3 la doar doua. Din punct de vedere software, am avut de rezolvat cele mai multe bug-uri datorita algoritmului de joc care nu a fost atat de usor de implementat fata din cauza corelarii software-hardware.+Consider ​ca acum sunt mult mai sigura pe notiuni ce tin atat de electronicacat si pe protocoalele invatate ​la laborator pe care le-am aprofundat prin prisma acestui proiect\\
  
-Din punct de vedere al modului de functionare acesta functioneaza exact asa cum mi-am propussfarsind sa adaug mai multe functionalitati decat imi propusesem initial. Ca experienta, a fost modalitate ​chiar interesanta de a te desprinde de temele obisnuite de facultate prin faptul ca rezultatul este unul palpabil ​si poti sa te bucuri de ceva real. +De asemeneaacum nu imi mai este frica de rezistenta sau un tranzistor si chiar am invatat sa lipesc fire si componente singura ;-).
-===== Download =====+
  
-<note warning>​ +Pot spune ca dificultatile intalnite precum memoria limitata a placutei Arduino m-au pus sa regandesc putin intreaga implementarefiind nevoita sa limitez numarul de efecte de tip MP3 la doar douaDin punct de vedere softwaream avut de rezolvat cele mai multe bug-uri datorita algoritmului de joc care nu a fost atat de usor de implementat din cauza corelarii software-hardware.
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ sursescheme, etcUn fişier READMEun 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 Alin331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**+Din punct de vedere al modului de functionareacesta functioneaza exact asa cum mi-am propus, sfarsind sa adaug mai multe functionalitati decat imi propusesem initial.  
-</​note>​+ 
 +Ca experienta, a fost o modalitate chiar interesanta de a te desprinde de temele obisnuite de facultate prin faptul ca rezultatul este unul palpabil si poti sa te bucuri de ceva real
 +===== Download =====
  
 +Arhiva sursa + scheme (bloc si electrica): {{:​pm:​prj2022:​avaduva:​fatumirunamaria_331ca_proiectpm.zip|}}
 ===== Jurnal ===== ===== Jurnal =====
  
pm/prj2022/avaduva/magicmusicbox.1653654642.txt.gz · Last modified: 2022/05/27 15:30 by miruna_maria.fatu
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