Lekce 25 – Arduino a akcelerometr s MPU-6050

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 sériový port čísla se docela i rychle mění i když je senzor v klidu. Program si upravíme podle nás. Úkol, který jsem si stanovil bude měření náklonu a sklonu. Taková elektronická vodováha, která nám ovšem nebude říkat, zda je to v rovině nebo ne, ale ukáže přímo 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í těchto 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. 

4 Komentářů

  1. Vitenuto

    Při zkoušení MPU6050.raw mi to vypíše chybu
    Arduino: 1.6.13 (Windows 10), Vývojová deska: “Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

    D:\Dokumenty\Arduino\MPU6050_raw\MPU6050_raw.ino:36:20: fatal error: I2Cdev.h: No such file or directory

    #include “I2Cdev.h”

    ^

    compilation terminated.

    exit status 1
    Nastala chyba při kompilaci u desky Arduino/Genuino Mega or Mega 2560.

    Táto zpráva by měla mít víc informacií v
    “Zobrazení podrobného výstupu při kompilaci”
    podle zapnuté volby v Soubor -> Nastavení.

    1. Vitenuto

      Ok problém vyřešen nahráním né jen MPU6050 ze složky Arduino, ale všechno – možná stačilo pouze I2Cdev, bo jak se to jmenuje, ale po nahrátí všeho už to prostě jede

      1. Vitenuto

        Tak mám zase jiný problém, ať dám cokoliv navíc do toho hlavního Loopu, tak tomu akcelerometru nevím proč, se sníží nehorázně frekvence, respektive to posílá data snad každých 10sc a když tam dám proměnlivé počty vzorků nastavitelné v tom Loopu potenciometrem tak to nejede vůbec…

        1. Vitenuto

          Tak nakonec jsem to vyřešil tak, že jsem místo pocet == pocet_vzorku dal pocet >= pocet_vzorku, ovšem teď mi to zase při určitém počtu vzorků (třeba i nula -> chápu je to blbost, ale proč to tam dává) dává 35/-35°

          Koukám, že jsem dobrej spammer 😀

Napsat komentář

Translate »