lsm9ds1 — LSM9DS1 9-Achsen-IMU

Treiber für das ST LSM9DS1 iNEMO-Trägheitsmodul über I2C. Der LSM9DS1 vereint einen 3-Achsen-Beschleunigungssensor, ein 3-Achsen-Gyroskop und ein 3-Achsen-Magnetometer in einem einzigen Gehäuse; Beschleunigungssensor und Gyroskop teilen sich eine I2C-Adresse, während das Magnetometer auf eine zweite Adresse reagiert. Dieser Treiber aktiviert außerdem die On-Chip-FIFO mit 16 Einträgen für Gyro/Accel, sodass die jüngsten Proben effizient über iter_accel_gyro() abgerufen werden können.

Beispiel:

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)

Klassen

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)

Erstellt eine LSM9DS1-Instanz, überprüft die WHO_AM_I-Register beider Teilgeräte, konfiguriert alle drei Sensoren und aktiviert die Accel/Gyro-FIFO im kontinuierlichen Modus.

bus

Ein konfigurierter machine.I2C-Bus, an den der Sensor angeschlossen ist.

address_imu

7-Bit-I2C-Adresse des Beschleunigungssensor-/Gyroskop-Teilgeräts. Standardmäßig 0x6B.

address_magnet

7-Bit-I2C-Adresse des Magnetometer-Teilgeräts. Standardmäßig 0x1E.

gyro_odr

Ausgabedatenrate des Gyroskops in Hz. Muss einer der Werte 0 (aus), 14.9, 59.5, 119, 238, 476 oder 952 sein.

gyro_scale

Vollausschlagsbereich des Gyroskops in Grad pro Sekunde. Muss einer der Werte 245, 500 oder 2000 sein.

accel_odr

Ausgabedatenrate des Beschleunigungssensors in Hz. Gleiche Wertemenge wie gyro_odr.

accel_scale

Vollausschlagsbereich des Beschleunigungssensors in g. Muss einer der Werte 2, 4, 8 oder 16 sein.

magnet_odr

Ausgabedatenrate des Magnetometers in Hz. Muss einer der Werte 0.625, 1.25, 2.5, 5, 10, 20, 40 oder 80 sein.

magnet_scale

Vollausschlagsbereich des Magnetometers in Gauss. Muss einer der Werte 4, 8, 12 oder 16 sein.

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

Schreibt einen Hard-Iron-Offset-Vektor in die OFFSET_REG_*_M-Register des Magnetometers. Der Offset wird in denselben Einheiten angegeben, die magnet() zurückgibt (Gauss); jede Komponente wird unter Verwendung der konfigurierten Magnetometer-Skala in rohe LSBs umgerechnet, bevor sie geschrieben wird.

gyro_id() bytes

Gibt den Ein-Byte-Wert des WHO_AM_I-Registers des Beschleunigungssensor-/Gyroskop-Teilgeräts zurück.

magent_id() bytes

Gibt den Ein-Byte-Wert des WHO_AM_I-Registers des Magnetometer-Teilgeräts zurück.

gyro() tuple[float, float, float]

Gibt den Gyroskop-Vektor (x, y, z) in Grad pro Sekunde zurück.

accel() tuple[float, float, float]

Gibt den Beschleunigungsvektor (x, y, z) in Einheiten der Standard-Erdbeschleunigung (1 g = 9,81 m/s²) zurück.

magnet() tuple[float, float, float]

Gibt den Magnetfeldvektor (x, y, z) in Gauss zurück.

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

Generator, der (gyro, accel)-Tupel für jede aktuell in der FIFO verfügbare Probe liefert und anhält, sobald die FIFO leer ist. Jeder Komponentenvektor hat dieselben Einheiten wie gyro() bzw. accel().