This is an old revision of the document!
Autor: Adrian Mihalcea
Proiectul va folosi un modul cu giroscop conectat la un Arduino pentru a indeplini functia unui boloboc: verificarea inclinarii unei suprafete.
Culegerea datelor despre inclinare va fi realizata folosind un modul cu giroscop MPU-6150. Acesta va fi legat prin I2C la Arduino, iar masuratorile acestuia vor fi afisate pe un 7-segment display (unghiul curent in grade, in modul).
Se va folosi unghiul de referinta (ce inseamna o suprafata plana) ca fiind cel de la pornirea Arduino-ului, corectand pentru erorile giroscopului prin functia print_errors descrisa la software design.
Voi folosi, de asemenea, un buzzer care va indica printr-un baz cand suprafata pe care este plasat bolobocul este orizontala. Voi considera o suprafata ca fiind orizontala daca este in intervalul (-2, 2) grade.
Componente utilizate:
Schema electrica completa a proiectului a fost realizata in EAGLE. Singura non-conformitate cu realitatea este ca nu am gasit fix MPU6150 in niciun library asa ca am folosit un MPU6050 (o piesa identica in ceea ce priveste cablajul).
Am ales sa montez placuta cu giroscop pe propriul ei breadboard pentru a-i da cat mai multa liberatate de miscare. Un urmator pas pentru acest proiect ar fi montarea tuturor componentelor in interiorul unei carcase, dar pana atunci am mers pe ideea unor cabluri cat mai lungi pentru giroscop si a unor miscari nu foarte bruste.
Librarii folosite: Wire.h, SevSeg.h (linked mai jos)
Codul meu a fost dezvoltat folosind Arduino IDE. Integreaza Arduino-ul cu placuta cu giroscop, display-ul si buzzer-ul.
Functia setup trezeste placuta 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.
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.