Differences

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

Link to this comparison view

pm:prj2021:amocanu:music-with-arduino-accelerometer [2021/06/01 15:14]
doina.chiroiu [Software Design]
pm:prj2021:amocanu:music-with-arduino-accelerometer [2021/06/01 20:34] (current)
doina.chiroiu
Line 18: Line 18:
 === Schema bloc === === Schema bloc ===
 {{:​pm:​prj2021:​amocanu:​schema_bloc_music_with_arduino_accelerometer.png?​600|}} {{:​pm:​prj2021:​amocanu:​schema_bloc_music_with_arduino_accelerometer.png?​600|}}
 +
 +{{:​pm:​prj2021:​amocanu:​schema_fizic_music_with_arduino_accelerometer.jpeg?​500|}}
 +
 +{{:​pm:​prj2021:​amocanu:​schema_fizic_wrapped_music_with_arduino_accelerometer.jpeg?​500|}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 30: Line 34:
 === Schema electrica === === Schema electrica ===
 {{:​pm:​prj2021:​amocanu:​schema_electrica_music_with_arduino_accelerometer.png?​600|}} {{:​pm:​prj2021:​amocanu:​schema_electrica_music_with_arduino_accelerometer.png?​600|}}
 +
 +Detalii hardware: ​
 +  * modul MPU-6050
 +Pentru conectarea accelerometrului,​ am conectat VCC-ul la 5V, GND la GND, și cele două seriale de date astfel: SCL la A5, SDA la A4. Astfel, se realizează comunicația I2C necesară.
 +  * 8x8 Leds Matrix
 +În vederea folosirii unui obiect ledController,​ a trebuit sa conectez pinii DIN, CLK și DS.
 +Am ales pentru acest element pinii D11, D13 si D12.
 +  * Keypad
 +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.
 +  * Speakers
 +Fiecare speaker este conectat la GND cu un fir, și cu celălalt la un pin aferent.
 +Am folosit pinii 8, 9 și 10 pentru cele 3 speakere.
 +
 +
 +
  
 ===== Software Design ===== ===== Software Design =====
Line 75: Line 96:
 Stocăm datele în variabile ținute global în program, și începem procesarea Stocăm datele în variabile ținute global în program, și începem procesarea
 acestora pentru a le putea reprezenta pe ieșirile noastre. acestora pentru a le putea reprezenta pe ieșirile noastre.
-  * Sunetele+  * Redarea sunetelor 
 +Am procesat valorile măsurate ale accelerației:​ AcX, AcY. AcZ astfel: 
 +Calculez offset-ul obținut pe fiecare axa, și mapăm acele valori 
 +în range-ul [0, 8] pentru a folosi rezultatul pentru afișarea pe 
 +matricea de leduri. 
 + 
 +Am procesat valorile măsurate ale rotației: GyX, GyY. GyZ astfel: 
 +Calculăm unghiurile de rotație: roll - axa X, pitch - axa Y, rbe - axa Z. 
 +Formulele utilizate sunt:  
 +    roll = atan(GyY / sqrt(pow(GyX,​ 2) + pow(GyZ, 2))) * 180 / PI; // rotation X-axis 
 +    pitch = atan(-1 * GyX / sqrt(pow(GyY,​ 2) + pow(GyZ, 2))) * 180 / PI; // rotation Y-axis 
 +    rbe = atan(GyZ / sqrt(pow(GyX,​ 2) + pow(GyY, 2))) * 180 / PI; // rotation Z-axis 
 + 
 +Datele roll, pitch și rbe sunt puse terminalul serial. 
 + 
 +Pentru a găsi sunetul corespondent din gama curentă, vom mapa aceste date la 
 +range-ul [0, 10], rezultatul reprezentand în final indexul din vectorul de sunete -> 
 +melodies[theme][index]. Acest sunet va fi invocat pe difuzoare.  
   * Leds Matrix   * Leds Matrix
 +După maparea datelor în range-ul [0, 8] (dimensiunea matricii), se va seta
 +ledul corespunzător acestei mapari, prin obiectul ledController.
 +Astfel, valorile recepționate de la accelerometrul cu giroscop se pot pune
 +în corespondență cu aprinderea unui led în spațiul matricii.
 +Obținem deci, o reprezentare vizuală a mișcării accelerometrului.
 +
   * Keypad   * Keypad
 +Pe lângă interacțiunea prin accelerometru și interpretarea mișcării acestuia,
 +instrumentul dispune de interacțiune printr-o tastatură. ​
 +Obiectul keypad este intermediarul în cod pentru citirea unei taste. Lucrăm cu 
 +primele doua linii de taste, incarcand semnăturile lor în vectorul keys[].
 +
 +La apăsarea unei taste cu semnătura unei cifre  de la 1 la 6, se va seta
 +o tema muzicala din cele 6 disponibile si va porni instrumentul.
 +La apăsarea tastei ‘A’, voi trezi încă un difuzor dintre cele 3 disponibile
 +pentru un plus de volum. Cand se apasa ‘A’ a treia oară, volumul revine
 +la stadiul inițial.
 +La apăsarea tastei ‘B’, voi invoca notele din gama curentă la rand, pentru
 +a reprezenta la nivel de sunet o melodie simplă. ​
  
  
-Legat de procesarea datelor in cadrul PC-ului, am implementat un program+<​note>​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 ce realizează design-ul accelerometrului (în mod simplist), și îi stimulează rotația
-cu datele preluate de pe portul de comunicație.+cu datele preluate de pe portul de comunicație.</​note>​
  
  
Line 96: Line 153:
  
 ===== Concluzie ===== ===== Concluzie =====
 +Proiectul m-a învățat foarte multe despre lumea Arduino și posibilitatile nenumărate pe care
 +le avem în implementarea prin plăcute. ​
 +Una dintre provocările majore a fost realizarea conexiunii I2C, între plăcuta Arduino UNO și
 +modulul de accelerometru cu giroscop MPU-6050. Pe langa studiul în ceea ce privește legarea serialelor de date, am implementat în totalitate sistemul de recepționare a datelor. ​
 +Ulterior, o alta etapa importanta a fost procesarea datelor cu formule matematice, pentru obținerea unor rezultate relevante: sunete și afișare în concordanță cu mișcarea efectuata.
 +
 +Acest proiect m-a familiarizat cu programarea plăcuțelor Arduino, dar și cu utilizarea perifericelor (tastatura, afișarea prin matrice de leduri) și cu modul de funcționare a unui
 +senzor MPU.
 +
 +Mi-a plăcut să lucrez la proiect și am învățat câte probleme poate pune hardware-ul într-o
 +astfel de aplicație, invatand sa mă adaptez.
 +
 +===== Download =====
 +{{:​pm:​prj2021:​amocanu:​music-with-arduino-accelerometer-master.zip|}}
  
 ===== Bibliografie / Resurse ===== ===== Bibliografie / Resurse =====
 +https://​www.instructables.com/​Accelerometer-MPU-6050-Communication-With-AVR-MCU/​
 +
 +https://​www.electronicwings.com/​arduino/​mpu6050-interfacing-with-arduino-uno
 +
 +
 +<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
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