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_imu7-битный адрес I2C подустройства акселерометра/гироскопа. По умолчанию
0x6B.address_magnet7-битный адрес 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подустройства акселерометра/гироскопа.
- accel() tuple[float, float, float]¶
Возвращает вектор ускорения
(x, y, z)в единицах стандартной гравитации (1 g = 9.81 м/с²).
- iter_accel_gyro() Iterator[tuple[tuple[float, float, float], tuple[float, float, float]]]¶
Генератор, выдающий кортежи
(gyro, accel)для каждого отсчёта, доступного в данный момент в FIFO, и останавливающийся, как только FIFO опустеет. Каждый вектор-составляющая имеет те же единицы, что иgyro()иaccel()соответственно.