lsm9ds1 — IMU a 9 assi LSM9DS1

Driver per il modulo inerziale ST LSM9DS1 iNEMO tramite I2C. L’LSM9DS1 combina un accelerometro a 3 assi, un giroscopio a 3 assi e un magnetometro a 3 assi in un unico package; l’accelerometro e il giroscopio condividono un indirizzo I2C mentre il magnetometro risponde a un secondo indirizzo. Questo driver abilita anche la FIFO di giroscopio/accelerometro profonda 16 integrata nel chip, in modo da poter prelevare in modo efficiente i campioni più recenti tramite iter_accel_gyro().

Esempio:

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)

Classi

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)

Costruisce un’istanza LSM9DS1, verifica i registri WHO_AM_I di entrambi i sotto-dispositivi, configura tutti e tre i sensori e abilita la FIFO di accelerometro/giroscopio in modalità continua.

bus

Un bus machine.I2C configurato a cui è collegato il sensore.

address_imu

Indirizzo I2C a 7 bit del sotto-dispositivo accelerometro/giroscopio. Il valore predefinito è 0x6B.

address_magnet

Indirizzo I2C a 7 bit del sotto-dispositivo magnetometro. Il valore predefinito è 0x1E.

gyro_odr

Frequenza di output dei dati del giroscopio in Hz. Deve essere uno tra 0 (off), 14.9, 59.5, 119, 238, 476 o 952.

gyro_scale

Intervallo di fondo scala del giroscopio in gradi al secondo. Deve essere uno tra 245, 500 o 2000.

accel_odr

Frequenza di output dei dati dell’accelerometro in Hz. Stesso insieme di valori di gyro_odr.

accel_scale

Intervallo di fondo scala dell’accelerometro in g. Deve essere uno tra 2, 4, 8 o 16.

magnet_odr

Frequenza di output dei dati del magnetometro in Hz. Deve essere uno tra 0.625, 1.25, 2.5, 5, 10, 20, 40 o 80.

magnet_scale

Intervallo di fondo scala del magnetometro in gauss. Deve essere uno tra 4, 8, 12 o 16.

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

Scrive un vettore di offset hard-iron nei registri OFFSET_REG_*_M del magnetometro. L’offset è espresso nelle stesse unità restituite da magnet() (gauss); ogni componente viene convertita in LSB grezzi usando la scala del magnetometro configurata prima di essere scritta.

gyro_id() bytes

Restituisce il valore a singolo byte del registro WHO_AM_I del sotto-dispositivo accelerometro/giroscopio.

magent_id() bytes

Restituisce il valore a singolo byte del registro WHO_AM_I del sotto-dispositivo magnetometro.

gyro() tuple[float, float, float]

Restituisce il vettore del giroscopio (x, y, z) in gradi al secondo.

accel() tuple[float, float, float]

Restituisce il vettore di accelerazione (x, y, z) in unità di gravità standard (1 g = 9.81 m/s²).

magnet() tuple[float, float, float]

Restituisce il vettore del campo magnetico (x, y, z) in gauss.

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

Generatore che produce tuple (gyro, accel) per ogni campione attualmente disponibile nella FIFO e si arresta quando la FIFO è vuota. Ogni vettore componente ha le stesse unità di gyro() e accel() rispettivamente.