Voltino TriSense Pro je kompaktní senzor obsahující 3 samostatné čipy. V tomto návodu se zaměříme na digitální 3osý magnetometr AK09918C od AKM, který slouží k měření síly a směru magnetického pole, a umožňuje tak vypočítat orientaci (kurz). Pro první testování jej zapojíme k Arduino Uno přes I2C rozhraní. Budeme používat specializovanou knihovnu AK09918C-library, která zjednodušuje komunikaci a umožňuje snadné čtení dat v mikroteslách ($\mu T$).
Voltino TriSense Pro senzor
Arduino Uno (nebo kompatibilní deska)
4 jumper kabely (samec-samice)
Počítač s nainstalovaným Arduino IDE
DŮLEŽITÉ UPOZORNĚNÍ K NAPÁJENÍ: Modul TriSense Pro je vybaven obvody pro posun logických úrovní (level shifters). Napětí na pinu VIN se musí rovnat logickému napětí, které používá vaše hlavní řídicí deska.
Pro Arduino Uno/Nano použijte 5V napájení (VIN → 5V)
Pro ESP32 nebo Raspberry Pi Pico použijte 3.3V napájení (VIN → 3.3V)
Knihovna AK09918C-library je k dispozici na GitHubu: https://github.com/Tomasraketak/AK09918C-library.
Stáhněte knihovnu jako ZIP soubor z výše uvedeného repozitáře (zelené tlačítko "Code" → "Download ZIP").
Otevřete Arduino IDE.
Přejděte do Sketch > Include Library > Add .ZIP Library a vyberte stažený ZIP soubor.
Restartujte Arduino IDE.
AK09918C komunikuje přes I2C, přičemž jeho standardní I2C adresa je 0x0C.
Zapojení (šipkové spojení):
VCC (senzor) → 5V (Arduino)
GND (senzor) → GND (Arduino)
SDA (senzor) → A4 (Arduino – SDA pin pro I²C)
SCL (senzor) → A5 (Arduino – SCL pin pro I²C)
Tento kód inicializuje magnetometr, nastaví jeho vzorkovací frekvenci na maximum (100 Hz) a průběžně čte a tiskne hrubé hodnoty magnetického pole a nekalibrovaný kurz.
C++
Pro získání přesného kurzu z magnetometru je nezbytná kalibrace, která eliminuje zkreslení dat způsobené okolními vlivy (Hard-Iron a Soft-Iron).
Získání kalibračních hodnot:
Knihovna obsahuje příklad AK09918C_motionCal.ino, který streamuje data do externího nástroje MotionCal pro automatický výpočet korekčních konstant.
MotionCal: Stáhněte aplikaci MotionCal (autor: Paul Stoffregen, PJRC), např. http://www.pjrc.com/store/prop_shield.html (soubor MotionCal.zip).
Kód: Otevřete a nahrajte na Arduino následující ukázkový kód AK09918C_motionCal.ino.
C++
Spusťte MotionCal: Otevřete aplikaci, vyberte správný COM port a stiskněte "Start".
VAROVÁNÍ:
Serial Port: Během používání MotionCal NESMÍ být otevřen Serial Monitor v Arduino IDE. Oba programy nemohou sdílet COM port.
Rušení: Kalibraci provádějte co nejdále od velkých magnetických a kovových předmětů (počítače, reproduktory, železné stoly).
Rotace: S deskou v ruce provádějte plynulé a pomalé rotace v úplné 3D sféře (jako malování koule). Cílem je, aby se v grafu vytvořila koule a hodnota "Gaps" v dolní části programu MotionCal klesla ideálně pod 2%.
Uložení: MotionCal vypočítá offsety Hard-Iron (3 hodnoty) a korekční matici Soft-Iron (matice 3x3). Tyto konstanty si poznamenejte.
Jakmile získáte kalibrační hodnoty z MotionCal, vložíte je do svého kódu, který bude provádět složitější výpočet kurzu. Následující příklad ukazuje, jak aplikovat Hard-Iron offset a Soft-Iron matici na surová data magnetometru.
Senzor nenalezen ("AK09918C not found!")
Zkontrolujte zapojení VCC a GND.
Ověřte, že napětí na VIN odpovídá logice vaší desky.
Zkontrolujte I2C adresu (0x0C).
Nestabilní/Nekonzistentní data:
Kalibrace je nezbytná (Krok 5).
Opakujte kalibraci, dokud Gaps v MotionCal neklesnou pod 2%.
Zkontrolujte, zda se v blízkosti senzoru nenachází silné magnetické pole.
Chybí SPI podpora:
Knihovna AK09918C-library a senzor samotný podporuje pouze komunikaci I2C.