Lekce 25 - Arduino a akcelerometr s MPU-6050

08.10.2013 09:15

Translate to English

Jak jsem sliboval dnes zvolíme lehčí a oddechové téma. Připravil jsem si pro Vás modul se senzorem zrychlení GY521 osazený čipem MPU6050. Na obrázku můžete vidět že modul má 8 vývodů avšak jeho zapojení není těžké, protože komunikuje přes rozhraní I2C, které jak jsme si dříve popsali obsahuje pouze 2 komunikační vodiče SDA a SLC. Ostatní vývody nás pro dnešek zajímat nebudou kromě pinu pro napájecí napětí. Modul je napájený napětím 5V a již nepotřebuje žádné externí součástky. Ke spojení s Arduinem budeme potřebovat pouze 4 vodiče. 

Obrázek čipu MPU-6050 máte nahoře. Jak vidíte v experimentálních podmínkách by se nám s čipem špatně pracovalo, protože je vyráběn pouze v technologii SMD. Využijeme proto hotový modul na obrázku níže.

Datasheet k čipu MPU-6050 si můžete stáhnout zde. Pro naše experimentování využijeme již napsanou a vyzkoušenou knihovnu. Stáhnete si jí z toho odkazu, kde vyberete po rozbalení adresář "Arduino" a poté "MPU6050", který překopírujete do adresáře "libraries" v místě kde je nainstalováno prostředí Arduino IDE. Tento postup jsme si již ukazovali mnohokrát.

Zapojíme si modul k Arduinu a po importu knihoven a resetování programu Arduino IDE (zavřít / otevřít program) se by Vám měl ukázat příklad zdrojového kódu v Examples.  (File --> Examples --> MPU6050 --> Examples --> MPU6050_raw). Program nahrajeme a spustíme SerialMonitor, kde si nastavíme rychlost 38400 !!!. Program vypisu aktuální hodnoty ve třech osách pro rotaci a akceleraci. V příkladovém programu od autora si můžete všimnout asi nejdůležitějšího řádku, který obsahuje 

accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

  ten uloží všech 6 hodnot do proměných, které dále v programu využíváme. 

Tak nějaké hodnoty sice máme ale moc nám toho neříkají a jak je vidět z výpisu na seriový port čísla se docela i rychle mění i když je senzor v klidu. Program si upravíme podle nás. Ukol, který jsem si stanovil bude měření náklonu a sklonu. Taková elektronická vodováha, která nám ovšem nemude říkat, zda je to v rovině nebo ne, ale ukáže přími náklon a sklon ve stupních (°). Jak na to?

Pátral jsem na internetu, abych našel našel postup při výpočtu sklonu nebo nákonu. Našel jsem tyto velmi zajímavé vzorce. 

Při použití techto vzorců bude výsledek v radiánech. Pro stupně musíme číslo vydělit podílem Ludulfova čísla a čísla 180 (PI/180). Tak teorii máme a teď k samotnému celému programu. Zatím si hodnoty necháme taktéž zapisovat na seriový port. Displej zapojíme poté. Ukázku programu máte zde:

 

Jsou tam nějaké změny oproti příkladu ke knihovně. Snažil jsem se celou věc hodně zjednodušit, aby jste to lépe pochopili. Základem všeho je vypočítat tedy z hodnot ax, ay a az sklon a náklon. V programovaní s Arduinem nám v tom pomůže knihovna Math.h. Ta obsahuje výpočty různých matematických funkcí, mocnin, odmocnin, logaritmů a pod. Bližší specifikaci knihovny poskytnou stránky Arduina zde. Z kódu programu jste si mohli všimnout toho abych odstranil chyby měření, různé drobné odchylky a šum, že výpočty program udělá po odběru 100 vzorků, které sečte a poté vydělí počtem vzorků. Tím dostaneme průměrnou hodnotu pro zpřesnění měření a odstranění záchvěvů.

Chceme-li získat, zařízení, které nebude závislé na počítači pro čtení hodnot ze sériového portu, připojíme si k Arduinu ještě LCD displej. Já jsem si vybral modul displeje z NOKIE 5110, aby jsme si práci s ním trošku zopakovali. Připojíme si ho tedy stejně jako v lekci 7 a do Arduina nahrajeme tento program:

Vy samozřejmě můžete použít i jiný typ displeje nebo zobrazovacího prvku. Můžete využít i také akustického upozornění, kdy je dosaženo roviny. Vzhledem ke skutečnosti, že displej zobrazuje data zadaní pouze ve "String" a převod float do String je věc obtížnější, zaokrouhlil jsem stupně na celá čísla, kdy je poté převedeno pomocí funkce sprintf. 

Zpět

Diskusní téma: Lekce 25 - Arduino a akcelerometr s MPU-6050

Datum
Vložil
Titulek

sds

Dobrý den, nevíte někdo proč při seriovém monituru mi pak program ukazvoal jen samé nuly ?

Datum
Vložil
Titulek

Jak vypočítám zrychlení

Zdravím, není mi jasné, jak mohu vypočítat zrychlení. Poradíte mi?

Datum
Vložil
Titulek

Dotaz

Cau, stavim si air gyromys k PC, docela slusne mi to funguje,jenze je problem ze nechci pouzivat osu x, ale potreboval bych misto ni osu Z . Zkousel jsem ruzny navody a pohledat indicie na netu, a bylo tam ze Zetko se pocita z x a y. Vyzkousel jsem to ale nejak to nemuzu rozchodit, je tu nejaka dobra duse co mi poradi , aby napr podle tohodle navodu se mi na displeji ukazal naklon (rotace) osy Z?

predem dekuji :)

Datum
Vložil
Titulek

DMP u 6050

Na MPU-6050 se nachází Digital Motion Processor (DMP). Ten dokáže provádět výpočty, které tak nezatěžují Arduino a zavoláním několika metod nám z DMP začnou padat úhly, ve kterých se senzory nachází a jediné, co musíme udělat, je, že je včas přečteme. Musíte mít propojený pin INT gyra. MPU-6050 přes něj říká Arduinu, že má k dispozici nové výsledky výpočtů a že si je máme vyzvednout.

Datum
Vložil
Titulek

Re: DMP u 6050

Zde je i zdroják s povídáním.
http://www.root.cz/clanky/stavime-kvadrokopteru-3-digital-motion-processor-na-mpu-6050/#ic=serial-box&icc=text-title

Datum
Vložil
Titulek

Senzor zrychlení ?

Ahoj, toto je senzor zrychlení ? To je spíše nějaký gyroskop ne ?

Datum
Vložil
Titulek

LCD 5110

i am tray your code ..but in display LCD only black area...
can do you help me

Datum
Vložil
Titulek

knihovna Math

Dobrý den, nedaří se mi najít knihovnu Math.h, respektive funkční knihovnu.
Děkuju za jakoukoli radu

Datum
Vložil
Titulek

Re: knihovna Math

Knihovna math.h je součástí vývojového prostředí Arduino.

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.