lsm9ds1 — 9-осевой IMU LSM9DS1

Драйвер для инерциального модуля ST LSM9DS1 iNEMO по I2C. LSM9DS1 объединяет 3-осевой акселерометр, 3-осевой гироскоп и 3-осевой магнитометр в одном корпусе; акселерометр и гироскоп используют общий адрес I2C, тогда как магнитометр отвечает на втором адресе. Этот драйвер также включает встроенный 16-уровневый FIFO гироскопа/акселерометра, чтобы самые последние отсчёты можно было эффективно считывать через iter_accel_gyro().

Пример:

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)

Классы

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)

Создаёт экземпляр LSM9DS1, проверяет регистры WHO_AM_I обоих подустройств, настраивает все три датчика и включает FIFO акселерометра/гироскопа в непрерывном режиме.

bus

Настроенная шина machine.I2C, к которой подключён датчик.

address_imu

7-битный адрес I2C подустройства акселерометра/гироскопа. По умолчанию 0x6B.

address_magnet

7-битный адрес I2C подустройства магнитометра. По умолчанию 0x1E.

gyro_odr

Выходная частота данных гироскопа в Гц. Должна быть одной из 0 (выкл.), 14.9, 59.5, 119, 238, 476 или 952.

gyro_scale

Полношкальный диапазон гироскопа в градусах в секунду. Должен быть одним из 245, 500 или 2000.

accel_odr

Выходная частота данных акселерометра в Гц. Тот же набор значений, что и у gyro_odr.

accel_scale

Полношкальный диапазон акселерометра в g. Должен быть одним из 2, 4, 8 или 16.

magnet_odr

Выходная частота данных магнитометра в Гц. Должна быть одной из 0.625, 1.25, 2.5, 5, 10, 20, 40 или 80.

magnet_scale

Полношкальный диапазон магнитометра в гауссах. Должен быть одним из 4, 8, 12 или 16.

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

Записывает вектор смещения «жёсткого железа» в регистры OFFSET_REG_*_M магнитометра. Смещение задаётся в тех же единицах, что возвращает magnet() (гауссы); каждая составляющая преобразуется в сырые LSB с использованием настроенного масштаба магнитометра перед записью.

gyro_id() bytes

Возвращает однобайтовое значение регистра WHO_AM_I подустройства акселерометра/гироскопа.

magent_id() bytes

Возвращает однобайтовое значение регистра WHO_AM_I подустройства магнитометра.

gyro() tuple[float, float, float]

Возвращает вектор гироскопа (x, y, z) в градусах в секунду.

accel() tuple[float, float, float]

Возвращает вектор ускорения (x, y, z) в единицах стандартной гравитации (1 g = 9.81 м/с²).

magnet() tuple[float, float, float]

Возвращает вектор магнитного поля (x, y, z) в гауссах.

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

Генератор, выдающий кортежи (gyro, accel) для каждого отсчёта, доступного в данный момент в FIFO, и останавливающийся, как только FIFO опустеет. Каждый вектор-составляющая имеет те же единицы, что и gyro() и accel() соответственно.