This is an old revision of the document!


Music With Arduino Accelerometer

Autor

Introducere

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.

Descriere generala

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.

Schema bloc

Hardware Design

  • Arduino UNO
  • MPU6500 Accelerometer & Giroscope Module
  • 8×8 Leds Matrix
  • Keyboard
  • Speakers
  • Breadboard
  • Fire de legatura

Schema electrica

Software Design

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:

  • ItemI2Cdev.h
  • ItemMPU6050.h
  • LedControl.h
  • Keypad.h
  • Wire.h

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:

note & game muzicale

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.

setup()

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

loop()

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.

  • Sunetele
  • Leds Matrix
  • Keypad

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.

Rezultatul Final

Concluzie

Bibliografie / Resurse

pm/prj2021/amocanu/music-with-arduino-accelerometer.1622549666.txt.gz · Last modified: 2021/06/01 15:14 by doina.chiroiu
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