This shows you the differences between two versions of the page.
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> |