lsm9ds1 — 9osá IMU LSM9DS1

Ovladač pro inerciální modul ST LSM9DS1 iNEMO přes I2C. LSM9DS1 kombinuje 3osý akcelerometr, 3osý gyroskop a 3osý magnetometr v jediném pouzdře; akcelerometr a gyroskop sdílejí jednu I2C adresu, zatímco magnetometr reaguje na druhé adrese. Tento ovladač také povoluje 16místnou FIFO gyroskopu/akcelerometru na čipu, aby bylo možné nejnovější vzorky efektivně odebrat přes iter_accel_gyro().

Příklad:

import time
from machine import Pin, I2C
from lsm9ds1 import LSM9DS1

imu = LSM9DS1(I2C(1, scl=Pin("P15"), sda=Pin("P14")))

while True:
    print("Accelerometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.accel()))
    print("Magnetometer:  x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.magnet()))
    print("Gyroscope:     x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.gyro()))
    time.sleep_ms(100)

Třídy

class lsm9ds1.LSM9DS1(bus: machine.I2C, address_imu: int = 0x6B, address_magnet: int = 0x1E, gyro_odr: float = 952, gyro_scale: int = 245, accel_odr: float = 952, accel_scale: int = 4, magnet_odr: int = 80, magnet_scale: int = 4)

Vytvoří instanci LSM9DS1, ověří registry WHO_AM_I obou podzařízení, nakonfiguruje všechny tři senzory a povolí FIFO akcelerometru/gyroskopu v nepřetržitém režimu.

bus

Nakonfigurovaná sběrnice machine.I2C, k níž je senzor připojen.

address_imu

7bitová I2C adresa podzařízení akcelerometru/gyroskopu. Výchozí hodnota je 0x6B.

address_magnet

7bitová I2C adresa podzařízení magnetometru. Výchozí hodnota je 0x1E.

gyro_odr

Výstupní datová rychlost gyroskopu v Hz. Musí být jedna z hodnot 0 (vypnuto), 14.9, 59.5, 119, 238, 476 nebo 952.

gyro_scale

Plný rozsah gyroskopu ve stupních za sekundu. Musí být jedna z hodnot 245, 500 nebo 2000.

accel_odr

Výstupní datová rychlost akcelerometru v Hz. Stejná sada hodnot jako gyro_odr.

accel_scale

Plný rozsah akcelerometru v g. Musí být jedna z hodnot 2, 4, 8 nebo 16.

magnet_odr

Výstupní datová rychlost magnetometru v Hz. Musí být jedna z hodnot 0.625, 1.25, 2.5, 5, 10, 20, 40 nebo 80.

magnet_scale

Plný rozsah magnetometru v gaussech. Musí být jedna z hodnot 4, 8, 12 nebo 16.

calibrate_magnet(offset: tuple[float, float, float]) None

Zapíše vektor hard-iron offsetu do registrů OFFSET_REG_*_M magnetometru. Offset se zadává ve stejných jednotkách, jaké vrací magnet() (gauss); každá složka se před zápisem převede na surové LSB pomocí nakonfigurovaného měřítka magnetometru.

gyro_id() bytes

Vrátí jednobajtovou hodnotu registru WHO_AM_I podzařízení akcelerometru/gyroskopu.

magent_id() bytes

Vrátí jednobajtovou hodnotu registru WHO_AM_I podzařízení magnetometru.

gyro() tuple[float, float, float]

Vrátí vektor gyroskopu (x, y, z) ve stupních za sekundu.

accel() tuple[float, float, float]

Vrátí vektor zrychlení (x, y, z) v jednotkách standardní gravitace (1 g = 9.81 m/s²).

magnet() tuple[float, float, float]

Vrátí vektor magnetického pole (x, y, z) v gaussech.

iter_accel_gyro() Iterator[tuple[tuple[float, float, float], tuple[float, float, float]]]

Generátor, který poskytuje n-tice (gyro, accel) pro každý vzorek aktuálně dostupný ve FIFO a zastaví se, jakmile je FIFO prázdná. Každý vektor složek má stejné jednotky jako gyro(), respektive accel().