This is an old revision of the document!


Magic Music Box

Student: Fatu Miruna-Maria

Grupa: 331 CA

Introducere

Scopul proiectului

Obiectivul proiectului este implementarea unui joc de reconstituire a unor melodii standard, cu diferite grade de complexitate, prin intermediul unor instrumente muzicale simulate - pian si percutie.

Aspecte practice ale proiectului

Circuitul implementat poate avea aplicabilitate practica in proiectarea unei jucarii pentru copii sub forma unei cutii muzicale ce le va dezvolta atat creativitatea intrucat acestia isi pot crea propriile melodii, cat si memoria datorita jocului de reconstituire a melodiilor.

Cum?
 Magic Music Box cu pian si percutie.

Percutia va fi redata prin accelerometre ce emit sunete simuland lovirea unor tobe, iar pianul prin butoane. Afisarea notelor muzicale si a rezultatelor se va face pe un ecran LCD, iar volumul cutiutei muzicale va putea fi ajustat printr-un potentiometru.

Descriere generală

• Proiectul dispune de doua moduri:

  • Music Box
    • Utilizatorul isi poate antrena creativitatea prin generarea sunetelor corespunzatoare instrumentelor.
      Simularea tobelor se va activa prin crearea unor vibratii folosind accelerometrele. La apasarea butoanelor, vor fi generate sunetele adecvate notelor muzicale Do, Re, Mi, Fa, Sol, La, Si, Do, iar pe LCD se va afisa nota corespunzatoare sunetului care a fost emis.
  • Create that song!
    • La emiterea unei melodii standard, utilizatorul trebuie sa aleaga instrumentele potrivite si sa reconstituie
      melodia emisa. Daca melodia este identificata cu succes, se avanseaza la un nivel cu un grad mai mare
      de dificultate. Rezultatul va fi afisat pe un ecran LCD.

• Interfata cu utilizatorul este formata din:

  • Difuzor Arduino
  • Butoane - corespund notelor muzicale
  • Ecranul ECD - folosit pentru afisarea informatiilor
  • Potentiometru - divizor de tensiune variabil prin care se obtine intensitatea sonora dorita

• Pentru a comuta intre cele doua moduri disponibile, va fi folosit un comutator (switch button).



Schema bloc

Hardware Design

Componente

Nume Numar Piese
Arduino UNO 1
Breadboard 1
Ecran LCD 1
Accelerometru MPU6050 2
Tranzistor BC547 1
Push Button 7
Slideswitch button 1
Potentiometru 1
Arduino Speaker 1W1



Schema electrica

Software Design

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

Logica implementarii

Implementarea proiectului a fost facuta in mai multe etape:

  • implementarea functionalitatilor butoanelor (pian)
  • implementarea functionalitatii accelerometrelor (percutie)
  • corelarea instrumentelor cu ajutorul debouncere-lor
  • implementarea algoritmului de joc

Mod functionare

Music Box are doua moduri de functionare prin care utilizatorul poate naviga prin intermediul unui buton de tip slideswitch.

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

La selectarea acestui mod, toate datele jocului vor fi resetate. Pentru inceput, se vor genera date aleatorii pentru cele 4 runde ale jocului - functia startSequence(). La fiecare noua runda, initial, se vor genera sunetele corespunzatoare instrumentelor din secventa rundei respective, numele acestora fiind totodata afisate si pe LCD - playNote() & displayNotes(). Dupa ce intreaga secventa a fost redata, este asteptata interactiunea utilizatorului. Functia buttonCheck() va identifica instrumentul pe care utilizatorul l-a folosit si va verfica simultan daca sunetul emis corespunde cu cel asteptat conform secventei.

  • In cazul in care este corect, se asteapta in continuare input pana cand secventa a fost redata. Daca intreaga secventa a fost reprodusa corect, se avanseaza la urmatoarea runda, acestea fiind in total 4, incapsulate intr-o bucla for.
  • 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.
  • Free mode

Se asteapta input de la utilizator - functia buttonCheck() - , acesta avand posibilitatea de a crea o melodie personalizata.

////////////// COD

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, 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.

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().

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.

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un 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 Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

20.04.2022 - Alegere tema proiect
21.04.2022 - Publicare descriere proiect

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2022/avaduva/magicmusicbox.1653647652.txt.gz · Last modified: 2022/05/27 13:34 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