lsm9ds1 — 9-osiowa jednostka IMU LSM9DS1

Sterownik do modułu inercyjnego ST LSM9DS1 iNEMO przez I2C. LSM9DS1 łączy 3-osiowy akcelerometr, 3-osiowy żyroskop i 3-osiowy magnetometr w jednej obudowie; akcelerometr i żyroskop współdzielą adres I2C, podczas gdy magnetometr odpowiada pod drugim adresem. Ten sterownik włącza również wbudowaną 16-elementową kolejkę FIFO żyroskopu/akcelerometru, dzięki czemu najnowsze próbki mogą być efektywnie pobierane przez iter_accel_gyro().

Przykład:

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)

Klasy

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)

Tworzy instancję LSM9DS1, weryfikuje rejestry WHO_AM_I obu podurządzeń, konfiguruje wszystkie trzy sensory i włącza kolejkę FIFO akcelerometru/żyroskopu w trybie ciągłym.

bus

Skonfigurowana magistrala machine.I2C, do której podłączony jest sensor.

address_imu

7-bitowy adres I2C podurządzenia akcelerometr/żyroskop. Domyślnie 0x6B.

address_magnet

7-bitowy adres I2C podurządzenia magnetometru. Domyślnie 0x1E.

gyro_odr

Częstotliwość danych wyjściowych żyroskopu w Hz. Musi być jedną z wartości: 0 (wyłączony), 14.9, 59.5, 119, 238, 476 lub 952.

gyro_scale

Pełnoskalowy zakres żyroskopu w stopniach na sekundę. Musi być jedną z wartości: 245, 500 lub 2000.

accel_odr

Częstotliwość danych wyjściowych akcelerometru w Hz. Ten sam zestaw wartości co gyro_odr.

accel_scale

Pełnoskalowy zakres akcelerometru w g. Musi być jedną z wartości: 2, 4, 8 lub 16.

magnet_odr

Częstotliwość danych wyjściowych magnetometru w Hz. Musi być jedną z wartości: 0.625, 1.25, 2.5, 5, 10, 20, 40 lub 80.

magnet_scale

Pełnoskalowy zakres magnetometru w gausach. Musi być jedną z wartości: 4, 8, 12 lub 16.

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

Zapisuje wektor przesunięcia twardego żelaza (hard-iron) do rejestrów OFFSET_REG_*_M magnetometru. Przesunięcie podaje się w tych samych jednostkach, które zwraca magnet() (gausy); każda składowa jest przeliczana na surowe LSB przy użyciu skonfigurowanej skali magnetometru przed zapisem.

gyro_id() bytes

Zwraca jednobajtową wartość rejestru WHO_AM_I podurządzenia akcelerometr/żyroskop.

magent_id() bytes

Zwraca jednobajtową wartość rejestru WHO_AM_I podurządzenia magnetometru.

gyro() tuple[float, float, float]

Zwraca wektor żyroskopu (x, y, z) w stopniach na sekundę.

accel() tuple[float, float, float]

Zwraca wektor przyspieszenia (x, y, z) w jednostkach standardowego przyspieszenia ziemskiego (1 g = 9,81 m/s²).

magnet() tuple[float, float, float]

Zwraca wektor pola magnetycznego (x, y, z) w gausach.

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

Generator, który zwraca krotki (gyro, accel) dla każdej próbki aktualnie dostępnej w kolejce FIFO i zatrzymuje się, gdy kolejka FIFO jest pusta. Każdy wektor składowych ma te same jednostki co odpowiednio gyro() i accel().