This is an old revision of the document!
Student: Fatu Miruna-Maria
Grupa: 331 CA
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.
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.
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.
• Proiectul dispune de doua moduri:
• Interfata cu utilizatorul este formata din:
• Pentru a comuta intre cele doua moduri disponibile, va fi folosit un comutator (switch button).
Schema bloc
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 1W | 1 |
Schema electrica
Implementarea proiectului a fost facuta in mai multe etape:
Functia setup() pregateste mediul de functionare al proiectului, initializand butoanele ca INPUT, configurand cele doua accelerometre si LCD-ul pentru interactiunea cu microcontroller-ul.
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.
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.
Se asteapta input de la utilizator - functia buttonCheck() - , acesta avand posibilitatea de a crea o melodie personalizata.
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 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().
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 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.
Proiectul a fost implementat in Arduino IDE.
Biblioteci utilizate:
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.
20.04.2022 - Alegere tema proiect
21.04.2022 - Publicare descriere proiect