lsm9ds1 — IMU 9 axes LSM9DS1

Pilote pour le module inertiel ST LSM9DS1 iNEMO via I2C. Le LSM9DS1 combine un accéléromètre 3 axes, un gyroscope 3 axes et un magnétomètre 3 axes dans un seul boîtier ; l’accéléromètre et le gyroscope partagent une adresse I2C tandis que le magnétomètre répond sur une seconde adresse. Ce pilote active également la FIFO gyroscope/accéléromètre de 16 niveaux de la puce afin que les échantillons les plus récents puissent être vidés efficacement via iter_accel_gyro().

Exemple

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)

Classes

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)

Construit une instance LSM9DS1, vérifie les registres WHO_AM_I des deux sous-composants, configure les trois capteurs et active la FIFO accéléromètre/gyroscope en mode continu.

bus

Un bus machine.I2C configuré auquel le capteur est connecté.

address_imu

Adresse I2C 7 bits du sous-composant accéléromètre/gyroscope. Vaut par défaut 0x6B.

address_magnet

Adresse I2C 7 bits du sous-composant magnétomètre. Vaut par défaut 0x1E.

gyro_odr

Débit de données en sortie du gyroscope en Hz. Doit être l’une des valeurs 0 (désactivé), 14.9, 59.5, 119, 238, 476 ou 952.

gyro_scale

Plage pleine échelle du gyroscope en degrés par seconde. Doit être l’une des valeurs 245, 500 ou 2000.

accel_odr

Débit de données en sortie de l’accéléromètre en Hz. Même ensemble de valeurs que gyro_odr.

accel_scale

Plage pleine échelle de l’accéléromètre en g. Doit être l’une des valeurs 2, 4, 8 ou 16.

magnet_odr

Débit de données en sortie du magnétomètre en Hz. Doit être l’une des valeurs 0.625, 1.25, 2.5, 5, 10, 20, 40 ou 80.

magnet_scale

Plage pleine échelle du magnétomètre en gauss. Doit être l’une des valeurs 4, 8, 12 ou 16.

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

Écrit un vecteur de décalage de fer dur (hard-iron) dans les registres OFFSET_REG_*_M du magnétomètre. Le décalage est donné dans les mêmes unités que celles renvoyées par magnet() (gauss) ; chaque composante est convertie en LSB bruts à l’aide de l’échelle configurée du magnétomètre avant d’être écrite.

gyro_id() bytes

Renvoie la valeur du registre WHO_AM_I d’un octet du sous-composant accéléromètre/gyroscope.

magent_id() bytes

Renvoie la valeur du registre WHO_AM_I d’un octet du sous-composant magnétomètre.

gyro() tuple[float, float, float]

Renvoie le vecteur gyroscopique (x, y, z) en degrés par seconde.

accel() tuple[float, float, float]

Renvoie le vecteur d’accélération (x, y, z) en unités de gravité standard (1 g = 9,81 m/s²).

magnet() tuple[float, float, float]

Renvoie le vecteur de champ magnétique (x, y, z) en gauss.

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

Générateur qui produit des tuples (gyro, accel) pour chaque échantillon actuellement disponible dans la FIFO et s’arrête une fois la FIFO vide. Chaque vecteur de composante a les mêmes unités que gyro() et accel() respectivement.