Turinys:

Kampų matavimas naudojant giroskopą, akselerometrą ir „Arduino“: 5 žingsniai
Kampų matavimas naudojant giroskopą, akselerometrą ir „Arduino“: 5 žingsniai

Video: Kampų matavimas naudojant giroskopą, akselerometrą ir „Arduino“: 5 žingsniai

Video: Kampų matavimas naudojant giroskopą, akselerometrą ir „Arduino“: 5 žingsniai
Video: How to use MPU-9250 Gyroscope, Accelerometer, Magnetometer for Arduino 2024, Lapkritis
Anonim
Kampų matavimas naudojant giroskopą, akselerometrą ir „Arduino“
Kampų matavimas naudojant giroskopą, akselerometrą ir „Arduino“

Prietaisas yra apytikslis prototipas to, kas ilgainiui taps savaiminio balanso robotu, tai yra antroji skylės dalyko dalis (skaitykite akselerometrą ir valdykite variklį, kad subalansuotumėte). Pirmąją dalį, kurioje yra tik giroskopas, rasite čia. Pagal šią instrukciją mes išmatuosime kampą, naudodamiesi giroskopu ir akselerometru, ir naudodami metodą, skirtą sujungti abu jutiklius, kad gautumėte sklandų signalą. Technika vadinama „papildomu filtru“.ankstesnė

1 žingsnis: ko mums reikės:

Ko mums reikės
Ko mums reikės
Ko mums reikės
Ko mums reikės
Ko mums reikės
Ko mums reikės
Ko mums reikės
Ko mums reikės

Kai kuri dalis gali būti pakeista, o kai kurie kodo pakeitimai turi būti atlikti, kad atitiktų jūsų aparatinę įrangą. Šiame projekte mes naudosime: (akselerometrui)- „Nunchuck Wii“adapteris, skirtas „Arduino“

2 žingsnis: statykite…

Statomas…
Statomas…
Statomas…
Statomas…
Statomas…
Statomas…

Grandinę sudaro giroskopas, tiesiogiai prijungtas prie jūsų „arduino“prievado 0, ir „nunchuck wii“jungtis prie I2C prievado. Giroskopo surinkimas: 1. - prijunkite giroskopą prie duonos lentos2. - laido bet koks dalykas:- Vo gnybtas iš giroskopo prijungtas prie analoginio prievado 0 prie arduino (šviesiai oranžinė viela)- G kaištis iš giroskopo prijungtas prie žemės (balta viela)- V+ kaištis iš giroskopo prijungtas prie Vdd (3.3 V) (oranžinė viela) akselerometras: 1. - prijunkite adapterį prie nunchuck2. - naudodami adapterį prijunkite „nunchuck“prie „arduino“. - įdėkite „accel“jutiklį, kaip nurodyta aukščiau esančioje nuotraukoje

3 žingsnis: šiek tiek papildomos informacijos prieš tęsdami

Prieš tęsdami šiek tiek papildomos informacijos
Prieš tęsdami šiek tiek papildomos informacijos
Prieš tęsdami šiek tiek papildomos informacijos
Prieš tęsdami šiek tiek papildomos informacijos
Prieš tęsdami šiek tiek papildomos informacijos
Prieš tęsdami šiek tiek papildomos informacijos

Iš abiejų jutiklių galime išmatuoti kampą, tačiau naudojant dvi skirtingas technikas. Norėdami išmatuoti kampą naudodami giroskopą, turime integruoti signalą. Bet kodėl mes turime tai padaryti? Kadangi giroskopas suteikia mums kampinį greitį, paprastas kampo gavimo būdas yra kampinis dažnis padaugintas iš laiko [kampas = kampas + w * dt] Norėdami išmatuoti kampą naudodami akselerometrą, turime pajusti kiekvieno gravitaciją Akselerometro ašis, ką tai reiškia, gravitacijos pagreičio projekcija kiekvienoje jutiklio kryptyje suteikia mums idėją apie kampą. [angle_accel = arctg (Ay / sqrt (Ax^2 + Az^2))] Taigi kodėl mes naudosime du jutiklius, o ne vieną? Norėdami pasinaudoti abiejų jutiklių savybėmis. Jei pažvelgsite į grafiką, giroskopo duomenų nuolatinis padidėjimas, tai vadinama dreifu, o akselerometro duomenys per trumpą laiką labai pasikeičia. Ir kaip sujungti abu signalus? Mes naudosime metodą, vadinamą papildomu filtru. Nežinau tikslios teorijos, bet tai veikia gerai. Internete yra tam tikros informacijos, jei reikia daugiau informacijos, tiesiog google. Ši nuoroda turi daug informacijos ir gali būti naudinga.filtered_angle = HPF*(filtrated_angle + w*dt) + LPF*(kampinis_ženklas); kur HPF + LPF = 1 HPF ir LPF reikšmes rasite šioje nuorodoje, failo filter.pdf faile. Ačiū jums, vaikinai iš „The DIY Segway“. Tik bandymo tikslais mes nustatysime šias vertes, HPF = 0,98 ir LPF = 0,02.

4 žingsnis: kodas:

Kodas yra adaptacija iš kodo, kurį naudojau kitame projekte. Tikriausiai yra keletas nepanaudotų kintamųjų. Aš naudoju biblioteką, kad perskaityčiau nunchuck duomenis iš https://todbot.com/blog/. Dėkojame Todui E. Kurtui. Komentarai apie kodą yra portugalų kalba, kai tik turėsiu laisvo laiko, išversiu jį. Kodo išvestis iš eilės eilutės pateikia kai kuriuos šio modelio skaičius: dt: w: teta: pitch: filter_teta $ time: angular_velocity: gyro_angle: accel_angle: filtrated_angle $ Taigi galite išsaugoti šias vertes serijiniame terminale ir nubraižyti grafiką arba naudoti kampą kitiems dalykams. Jei reikia kokių nors paaiškinimų apie kodą, paklauskite. Kodas yra užtrauktuku. Tiesiog išpakuokite, atidarykite ir įkelkite jį į savo arduino.

5 žingsnis: bandymai ir išvados

Testavimas ir išvados
Testavimas ir išvados
Testavimas ir išvados
Testavimas ir išvados

Norėdami išbandyti sistemą, išsaugojau duomenis naudodami programą „Termite“, tada importuoju šiuos duomenis į „Excel“ir nubraižau grafiką, kad pamatyčiau, koks yra mano filtras. Rezultatai nuostabūs. Žinoma, galite naudoti signalą vairuoti variklį ar kitus dalykus. Bet kokios pastabos, bet kokios abejonės, bet kokios trūkstamos informacijos, tiesiog pasakykite man ir aš ją pataisysiu. Prašome, jei jums tai patinka, įvertinkite. Ačiū jums visiems.

Rekomenduojamas: