This shows you the differences between two versions of the page.
pm:prj2021:cghenea:broloboc [2021/06/04 19:07] adrian.mihalcea2409 |
pm:prj2021:cghenea:broloboc [2021/06/04 19:16] (current) adrian.mihalcea2409 |
||
---|---|---|---|
Line 35: | Line 35: | ||
Setup: | Setup: | ||
- | Comunicatia cu modulul MPU-6150 este realizata pe I2C (folosind biblioteca Wire). Se trezeste acest modulul printr-un 0 trimis la registrul sau 0x6Blacuta cu giroscop si initializeaza setarile displayul cu 4 cifre. Optional, afiseaza erorile gasite pe giroscop ca medie intre 200 de masuratori (presupunand ca este pe o suprafata plana), folosind functia print_errors. | + | Comunicatia cu modulul MPU-6150 este realizata pe I2C (folosind biblioteca Wire). Se trezeste acest modulul printr-un 0 trimis la registrul sau 0x6B. Comunicatia cu 7-segment display se realizeaza folosind biblioteca SevSeg, in Setup setandu-se setarile acestuia (pinii pentru segmente si separatoare) si afisand 0000. Optional, se poate apela functia Print_error, descrisa mai jos. |
- | Print_errors: | + | Print_error: |
+ | Am descoperit ca giroscopul meu are niste erori vizibile din fabricatie, care il cauzau sa driftuiasca in timp cu ~0.5grade/secunda. Pentru a lua in calcul aceste erori, am facut o functie de one-time setup care realizeaza 200 de masuratori, presupunand ca giroscopul este pe o suprafata plana, face media acestora si printeaza eroarea gasita astfel. Scazand aceasta eroare din fiecare masuratoare, obtin niste rezultate mult mai precise si stabile. | ||
- | In loop, la fiecare iteratie improspatez display-ul, comunic prin I2C cu MPU 6150 si primesc cele 6 registre corespunzand masuratorilor pentru 3 axe. Folosind masuratorile pentru axa oX calculez, conform datasheet-ului, diferenta de unghi fata de ultima masuratoare si updatez unghiul curent. Acesta este afisat pe display folosind functia setNumber din library-ul pentru control de 7-segment display. Daca intervalul de toleranta este respectat, scoate zgomot si buzzer-ul. | + | Loop: |
+ | In loop, la fiecare iteratie improspatez display-ul si comunic prin I2C cu MPU-6150. Astfel ii cer 6 registre incepand cu adresa 0x43 (conform datasheetului_ si primesc cele 6 registre corespunzand masuratorilor pentru 3 axe, fiecare axa in cate 2 registre. Folosind masuratorile pentru axa oX calculez, conform datasheet-ului, diferenta de unghi fata de ultima masuratoare si updatez unghiul curent, tinand cont si de eroarea medie masurata cu print_error. | ||
+ | |||
+ | Acest rezultat este afisat pe display folosind functia setNumber din library-ul pentru control de 7-segment display. Daca intervalul de toleranta de (-2, +2) grade este respectat, scoate zgomot si buzzer-ul, controlat cu functiile Arduino Tone si noTone. | ||
====== Rezultate Obținute ====== | ====== Rezultate Obținute ====== |