Differences

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

Link to this comparison view

pm:prj2021:cghenea:broloboc [2021/06/02 17:45]
adrian.mihalcea2409
pm:prj2021:cghenea:broloboc [2021/06/04 19:16] (current)
adrian.mihalcea2409
Line 8: Line 8:
  
 ====== Descriere generală ====== ====== Descriere generală ======
-Culegerea datelor despre inclinare va fi realizata folosind un modul cu giroscop. Acesta va fi legat I2C la placuta, iar masuratorile acestuia vor fi afisate pe un display ​LCD (unghiul curent in grade). Se va folosi unghiul de referinta (ce inseamna o suprafata plana) ca fiind cel de la pornirea Arduino-ului ​si voi folosi ​si un buzzer care va indica cand suprafata pe care este plasat bolobocul este orizontala (0 +marja de eroare de grade).+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, 2grade.
  
 {{:​pm:​prj2021:​cghenea:​broloboc.png?​nolink |}} {{:​pm:​prj2021:​cghenea:​broloboc.png?​nolink |}}
Line 15: Line 19:
 Componente utilizate: Componente utilizate:
   * Arduino UNO Plusivo   * Arduino UNO Plusivo
-  * 2 x breadboard+  * 2 x breadboard: unul mic pentru display si buzzer si unul mare pentru giroscop
   * Modul Accelerometru si Giroscop MPU6150   * Modul Accelerometru si Giroscop MPU6150
   * Buzzer   * Buzzer
   * 7-segment 4 digit display   * 7-segment 4 digit display
  
 +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).
 {{:​pm:​prj2021:​cghenea:​broloboc_schema.png?​800|}} {{:​pm:​prj2021:​cghenea:​broloboc_schema.png?​800|}}
 +
 +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.
  
 ====== Software Design ====== ====== Software Design ======
-Librarii ​folosite: Wire.h, SevSeg.h (linked mai jos)+Biblioteci ​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. 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.+Setup: 
 +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_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 masuratoripresupunand 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. 
 + 
 +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.
  
-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.+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 ======
 +Proiectul isi indeplineste foarte bine sarcina si face niste masuratori destul de precise (un unghi de 90 de grade este afisat ca 88-92 de grade, in functie de cat de lina este miscarea). Singura mare dificultate pe care am intampinat-o a fost fix legata de faptul ca nu am lipit conexiunile la giroscop (ceea ce eu am crezut initial ca va fi mai usor), asa ca a trebuit sa am foarte multa grija cand miscam breadboard-ul cu giroscopul pentru a nu intrerupe conexiunea din greseala.
 {{:​pm:​prj2021:​cghenea:​broloboc_poza2.jpg?​800 |}} {{:​pm:​prj2021:​cghenea:​broloboc_poza2.jpg?​800 |}}
 [[https://​youtu.be/​0DHgdXZ900M | Link Youtube Demo]] [[https://​youtu.be/​0DHgdXZ900M | Link Youtube Demo]]
pm/prj2021/cghenea/broloboc.1622645127.txt.gz · Last modified: 2021/06/02 17:45 by adrian.mihalcea2409
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