lsm9ds1 — IMU de 9 ejes LSM9DS1

Controlador para el módulo inercial iNEMO LSM9DS1 de ST a través de I2C. El LSM9DS1 combina un acelerómetro de 3 ejes, un giroscopio de 3 ejes y un magnetómetro de 3 ejes en un solo encapsulado; el acelerómetro y el giroscopio comparten una dirección I2C, mientras que el magnetómetro responde en una segunda dirección. Este controlador también habilita la FIFO de giroscopio/acelerómetro de 16 niveles del chip para que las muestras más recientes puedan vaciarse eficientemente mediante iter_accel_gyro().

Ejemplo:

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)

Clases

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)

Construye una instancia de LSM9DS1, verifica los registros WHO_AM_I de ambos subdispositivos, configura los tres sensores y habilita la FIFO de acelerómetro/giroscopio en modo continuo.

bus

Un bus machine.I2C configurado al que está conectado el sensor.

address_imu

Dirección I2C de 7 bits del subdispositivo acelerómetro/giroscopio. Su valor predeterminado es 0x6B.

address_magnet

Dirección I2C de 7 bits del subdispositivo magnetómetro. Su valor predeterminado es 0x1E.

gyro_odr

Tasa de datos de salida del giroscopio en Hz. Debe ser uno de 0 (apagado), 14.9, 59.5, 119, 238, 476 o 952.

gyro_scale

Rango de escala completa del giroscopio en grados por segundo. Debe ser uno de 245, 500 o 2000.

accel_odr

Tasa de datos de salida del acelerómetro en Hz. El mismo conjunto de valores que gyro_odr.

accel_scale

Rango de escala completa del acelerómetro en g. Debe ser uno de 2, 4, 8 o 16.

magnet_odr

Tasa de datos de salida del magnetómetro en Hz. Debe ser uno de 0.625, 1.25, 2.5, 5, 10, 20, 40 o 80.

magnet_scale

Rango de escala completa del magnetómetro en gauss. Debe ser uno de 4, 8, 12 o 16.

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

Escribe un vector de compensación de hierro duro (hard-iron) en los registros OFFSET_REG_*_M del magnetómetro. La compensación se da en las mismas unidades que devuelve magnet() (gauss); cada componente se convierte a LSB sin procesar usando la escala de magnetómetro configurada antes de escribirse.

gyro_id() bytes

Devuelve el valor de un solo byte del registro WHO_AM_I del subdispositivo acelerómetro/giroscopio.

magent_id() bytes

Devuelve el valor de un solo byte del registro WHO_AM_I del subdispositivo magnetómetro.

gyro() tuple[float, float, float]

Devuelve el vector del giroscopio (x, y, z) en grados por segundo.

accel() tuple[float, float, float]

Devuelve el vector de aceleración (x, y, z) en unidades de gravedad estándar (1 g = 9.81 m/s²).

magnet() tuple[float, float, float]

Devuelve el vector de campo magnético (x, y, z) en gauss.

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

Generador que produce tuplas (gyro, accel) por cada muestra actualmente disponible en la FIFO y se detiene una vez que la FIFO está vacía. Cada vector componente tiene las mismas unidades que gyro() y accel() respectivamente.