This is an old revision of the document!
Proiectul constă în realizarea unui instrument muzical, realizat cu Arduino UNO, prin intermediul unui accelerometru cu giroscop pentru interactionare și interpretarea mișcării.
Rolul proiectului este familiarizarea atât cu Arduino, cât și cu interfațarea senzorilor de tip MPU6050.
Utilizatorul va mișca accelerometrul, iar prin intermediul senzorilor săi, datele caracteristice mișcării (accelerația și rotația) vor fi transmite pe seriale și interpretate de către program. Totodată, utilizatorul poate interactiona cu aplicația prin intermediul unei tastaturi, pe baza căreia poate alege o temă muzicala (gamă de note) sau poate modifica volumul.
Odată ce sunt interpretate datele, în funcție de gama aleasă, se vor reprezenta sunetele corespunzătoare mișcării efectuate prin difuzoarele atașate.
Detalii hardware:
Se conecteaza pinii corespunzători liniilor 1 și 2 (pinii D2 și D3) și pinii pentru cele 4 coloane (pinii D4, D5, D6 și D7). Astfel, se va vor mapa acești pini pe vectorul de keys ({{1, 2, 3, A}, {4, 5, 6, B}}), pe care îl utilizăm în crearea obiectului intermediar keypad.
Proiectul meu constă, la nivel de cod, în implementarea programului ce va fi încărcat în placa (folosind Arduino IDE) și în implementarea programului ce procesează datele share-uite de către Arduino prin terminalul serial (folosind Processing IDE).
În ceea ce privește bibliotecile necesare, am folosit:
Structurile auxiliare sunt, în mare parte, structuri standard C. Pe lângă acestea, am utilizat totuși o structură Grid, necesară compunerii obiectului LedController ce servește afișării pe matricea de leduri, și un obiect Keypad pentru abstractizarea logicii tastaturii folosite.
Detalii de implementare:
Am folosit o varietate de note muzicale, din game diferite, pe care le-am grupat cate 10 in 6 grupuri stocate în vectorul “melodies”. Astfel, avem 6 teme muzicale disponibile.
Pentru a realiza conexiunea cu senzorul MPU-6050, solicităm adresa corespunzătoare (0x68). După ce am preluăm adresa conexiunii de tip I2C, vom trezi senzorul setând 0 pe acea adresă. Pentru calibrare, am setat flaguri pe cele 3 adrese unde preluăm datele pentru cele 3 axe (X, Y, Z).
După cererea de receptionare de la adresa MPU, începe transmisia de la acea adresa pentru a prelua mărimile de acceleratie, rotație și timp. Fiindu-mi necesare aceste mărimi, folosesc în total 14 registre (2 pentru măsurarea timpului, câte 2 pentru datele de pe fiecare axă - deci în total 6 pentru acceleratie și două pentru rotație).
Stocăm datele în variabile ținute global în program, și începem procesarea acestora pentru a le putea reprezenta pe ieșirile noastre.
Legat de procesarea datelor in cadrul PC-ului, am implementat un program ce realizează design-ul accelerometrului (în mod simplist), și îi stimulează rotația cu datele preluate de pe portul de comunicație.