Vytvořil jsem autokalibrační program pro čip MPU-6050.
Je docela rychlý a zdá se být i dostatečně přesný.
Kromě knihovny pro I2C komunikaci (Wire.h) nepoužívá žádné jiné speciální knihovny.
Vyzkoušel jsem ho na dvou odlišných modulech.
Než ho ale zapracuji do mého zařízení a zveřejním postup kalibrace, potřeboval bych ho ověřit i na jiných modulech.
Když budu mít k dispozici víc výsledků, dalo by se na tom provést i nějaké statistické vyhodnocení a možná by to šlo ještě zrychlit.
Nebo naopak - pokud by se ukázalo, že to některé z čidel nezvládne, musel bych rozšířit oblast hledání offsetů a tím kalibraci o něco protáhnout.
A proto bych chtěl poprosit jestli byste mi s tím nepomohli.
Program pro Arduino přikládám níže.
Funguje na běžných Arduinech Uno, Nano ...
Je ale optimalizovaný tak, aby šel bez úprav použít i pro desky s 32-bitovými procesory STM32F103 (STMduino, BluePill ...).
Postup je velice jednoduchý:
1) Na nějakou krabičku nalepit modul se senzorem tak, aby nápis na čipu směřoval "tak nějak" vzhůru a krabičkou
se dalo otáčet tak, aby hlavní pohyb byl kolem osy Y.
POZOR! Různé moduly mohou mít tu osu Y jinak orientovanou (fotografie níže)
Umístění modulu nemusí být vůbec přesné (+/- 10 stupňů nehraje žádnou roli).
Právě kvůli tomu se dělá ta kalibrace, aby se modul nemusel umisťovat přesně vůči osám krabičky.
2) Propojení s Arduinem je jen klasické I2C přes 4 dráty (nepoužívá se ani žádný interrupt):
Vcc - 5V
GND - GND
SDA - A4
SCL - A5
Při připojení k deskám s STM, který používá 3V úrovně, je připojení následující:
3V3 - 3V3 (vývod 3V3 se nachází jen na některých modulech)
GND - GND
SDA - PB7
SCL - PB6
Sériová linka: "Serial - PA9, PA10" - (tady ale záleží na nastavení parametrů kompilace)
3) Zapnout USB a nahrát program.
Spustit sériový terminál.
Pokud by v terminálu zůstaly po nahrání programu nějaké nečitelné znaky, tak okno terminálu vymazat a Arduino zresetovat.
4) V sériovém terminálu se začnou zobrazovat instrukce a spousty čísel.
Když program na něco čeká, jsou v terminálu zobrazeny 2 šipky ">>".
Po provedení příslušné instrukce odešlete do terminálu libovolný znak a tím program dostane signál, že má pokračovat.
Z pohledu "testovacího pilota" jsou instrukce následující:
Položit krabičku tak, aby bylo čidlo horizontálně (nápis na čipu vzhůru) >> odklepnout, čekat.
Otočit krabičku kolem osy Y do vertikální polohy >> odklepnout
Podložit krabičku trojúhelníkem na 45° >> odklepnout, čekat na dokončení 10 testovacích měření.
Pak celý výpis terminálu zkopírovat a odeslat (buď sem do toho vlákna, nebo emailem)
5) Pokud proběhla kalibrace až do konce, mělo by čidlo po posledním odklepnutí ">>" začít měřit náklon
kolem osy Y jako obyčejná vodováha v rozsahu 0 až 90°.
Mělo by to fungovat i mírně pod 0 (namíření pod horizont) a mírně přes 90°. Tam už ale není zaručena přesnost.
Tohle už jen vyzkoušejte jestli ukazuje správné hodnoty ve sloupci "naklon", nebo jestli tam vypisuje nesmyslné hodnoty (NaN, inf ... ).
Tenhle výpis už nepotřebuju.
Během kalibrace se může stát, že program skončí chybovým hlášením:
"Chyba kalibrace naklonu"
I tato informace je pro mne dost důležitá a předchozí výpis hodnot může napovědět, co se nepovedlo a co mám kde rozšířit.
To je všechno.
O čidlo se nemusíte bát. Přenastavené hodnoty offsetových registrů si to pamatuje jen do vypnutí napájení.
Pak se natáhnou zpátky tovární hodnoty.
V tomto testovacím programu nepoužívám ani žádné zápisy do EEPROM.
EEPROM by se použila až ve finální verzi, kde by se do ní ukládaly hodnoty zjištěné při kalibraci.
Při zapnutí by se ty hodnoty načetly z EEPROM a odeslaly přímo do offsetových registrů MPU-6050 - kalibrace by pak nebyla nutná.
Když v programu zakomentujete řádku:
bude se místo výpisů čísel zobrazovat jen jednoduchý textový bargraf.
Takhle nějak bych si ve finále představoval kalibraci pro běžného uživatele.
Kód: Vybrat vše
Nastav cidlo horizontalne (napis na senzoru smeruje vzhuru)
>>
[ | | | ]
[********************|***|***|***]
Otoc cidlo kolem osy Y do svisle polohy (napis na senzoru miri do boku)
>>
Video je tady:
https://youtu.be/fw0c_Ucxx8A
Program tady:
http://www.astromik.org/forum/6050/kali ... pu6050.ino
První výsledky vypadají takto:
http://www.astromik.org/forum/6050/
A tady nějaké fotky: