Voltino TriSense Pro je kompaktní senzor obsahující 3 samostatné čipy. BMP580 pro měření atmosférického tlaku a teploty, AK09918C pro měření síly magnetického pole a nakonec ICM42688P - 3osý akcelerometr a 3osý gyroskop. A právě v tomto návodu se podíváme, jak poprvé rozchodit ICM42688P na modulu Voltino TriSense Pro a získat tak první cenná data.
Pro první testování senzor zapojíme k Arduino Uno přes I2C rozhraní. Budeme používat specializovanou knihovnu ICM42688P-Voltino, která zjednodušuje komunikaci, umožňuje efektivní čtení dat přes FIFO buffer a nabízí automatickou kalibraci gyroskopu.
Celý proces trvá jen pár minut a nevyžaduje žádné složité nástroje – stačí Arduino IDE, USB kabel a jumper kabely.
Voltino TriSense Pro senzor
Arduino Uno (nebo kompatibilní deska)
4-6 jumper kabelů (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). To znamená, že 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).
Krok 1: Instalace knihovny
Knihovna ICM42688P-Voltino je navržena speciálně pro tento IMU a podporuje jak I2C, tak SPI komunikaci, čtení z FIFO a správu offsetů.
Stáhněte knihovnu jako ZIP soubor z repozitáře.
Otevřete Arduino IDE.
Přejděte do Sketch > Include Library > Add .ZIP Library a vyberte stažený ZIP soubor.
Restartujte Arduino IDE.
Poznámka: Knihovna závisí na standardních knihovnách Wire.h (pro I2C) a SPI.h, které jsou součástí Arduino IDE.
Modul TriSense Pro se připojuje k I2C rozhraní mikrokontroléru. Adresa senzoru je standardně 0x68.
VIN (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)
CS (senzor) → nepřipojovat
Použijeme pokročilý příklad čtení z FIFO bufferu, který zajistí stabilní příjem dat při vysoké vzorkovací frekvenci. Data budou vytištěna v jednotkách g (zrychlení) a °/s (stupně za sekundu).
C++
Připojte Arduino Uno k počítači přes USB.
Vyberte board v Arduino IDE: Tools > Board > Arduino Uno.
Vyberte port: Tools > Port > (vyberte správný COM port).
Nahrajte kód: Klikněte na šipku "Upload".
Otevřete Serial Monitor: Tools > Serial Monitor (nastavte baud rate na 115200).
Testování:
Měli byste vidět nepřetržitý proud dat.
Akcelerometr (Accel): Když je IMU v klidu na stole, hodnota $A_z$ by měla být blízko 1.0 g (kvůli gravitaci) a $A_x, A_y$ blízko 0.0 g.
Gyroskop (Gyro): Hodnoty $G_x, G_y, G_z$ by měly být blízko 0.0 dps (ale bez kalibrace budou mít malý offset - viz Krok 5). Pohybem IMU by se měly hodnoty rychle měnit.
Senzor ICM-42688-P podporuje velmi vysoké frekvence výstupních dat (ODR), a to až 32 kHz.
Pro základní ODR (např. 500 Hz nebo 1 kHz) je Arduino Uno/Nano naprosto dostačující.
Pro rychlejší ODR než 8 kHz (např. 16 kHz nebo 32 kHz) silně doporučujeme použít výkonnější mikrokontrolér, který dokáže rychleji zpracovávat komunikaci po sběrnici (zejména SPI) a efektivně vyprazdňovat FIFO, aby nedošlo k přetečení. Vhodné alternativy jsou např.:
Raspberry Pi Pico (díky rychlému procesoru RP2040)
ESP32 (díky dvoujádrovému procesoru)
Pokud chcete eliminovat drift gyroskopu (malé, ale neustálé odchylky v klidu), musíte provést kalibraci. Knihovna obsahuje jednoduchou funkci autoCalibrateGyro().
Příprava: Ujistěte se, že IMU je v naprostém klidu na rovné ploše.
Postup: Použijte následující kód, který provede kalibraci jednou v setup().
C++
Po nahrání kódu a uplynutí pár desítek sekund se v Serial Monitoru vytisknou vypočítané offsety. Tyto kalibrační hodnoty (ox, oy, oz) použijte ve vašich budoucích projektech s funkcí imu.setGyroOffset(ox, oy, oz).
Pokud potřebujete vyšší rychlost komunikace, použijte SPI. Vyžaduje 4 datové piny, včetně pinu CS (Chip Select). V kódu je použitý pin D10 pro CS, ale můžete jej změnit.
VIN (senzor) → 5V (Arduino – VIN pro SPI)
GND (senzor) → GND (Arduino)
MOSI (senzor) → D11 (Arduino – MOSI)
MISO (senzor) → D12 (Arduino – MISO)
SCK (senzor) → D13 (Arduino – SCK)
CS (senzor) → D10 (Arduino – CS, lze změnit)
Pro testování SPI použijte kód z Kroku 3, ale s malou úpravou v setup():
C++
Senzor nenalezen ("IMU not detected!"):
Zkontrolujte zapojení VCC a GND.
Ověřte, že napětí na VIN odpovídá logice vaší desky (5V pro Arduino Uno, 3.3V pro Pico/ESP32).
Ujistěte se, že piny SDA a SCL nejsou prohozené.
Přetečení FIFO/Nepravidelná data:
Zkontrolujte, že baud rate na Serial Monitoru odpovídá kódu (115200).
Pokud používáte ODR vyšší než 8 kHz, zvažte přechod na výkonnější mikrokontrolér (Pico, ESP32) pro rychlejší čtení.
Zvažte snížení frekvence ODR pomocí imu.setODR().
Chybná kalibrace:
Během autoCalibrateGyro() se IMU nesmí hýbat.