lsm9ds1 — IMU pe 9 axe LSM9DS1

Driver pentru modulul inerțial ST LSM9DS1 iNEMO prin I2C. LSM9DS1 combină un accelerometru pe 3 axe, un giroscop pe 3 axe și un magnetometru pe 3 axe într-un singur pachet; accelerometrul și giroscopul partajează o adresă I2C, în timp ce magnetometrul răspunde la o a doua adresă. Acest driver activează, de asemenea, FIFO-ul giroscop/accelerometru de adâncime 16 de pe cip, astfel încât cele mai recente eșantioane să poată fi golite eficient prin iter_accel_gyro().

Exemplu:

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)

Clase

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)

Construiește o instanță LSM9DS1, verifică registrele WHO_AM_I ale ambelor sub-dispozitive, configurează toți cei trei senzori și activează FIFO-ul accelerometru/giroscop în modul continuu.

bus

O magistrală machine.I2C configurată la care este atașat senzorul.

address_imu

Adresa I2C pe 7 biți a sub-dispozitivului accelerometru/giroscop. Valoarea implicită este 0x6B.

address_magnet

Adresa I2C pe 7 biți a sub-dispozitivului magnetometru. Valoarea implicită este 0x1E.

gyro_odr

Rata de ieșire a datelor giroscopului în Hz. Trebuie să fie una dintre 0 (oprit), 14.9, 59.5, 119, 238, 476 sau 952.

gyro_scale

Domeniul la scară completă al giroscopului în grade pe secundă. Trebuie să fie una dintre 245, 500 sau 2000.

accel_odr

Rata de ieșire a datelor accelerometrului în Hz. Același set de valori ca gyro_odr.

accel_scale

Domeniul la scară completă al accelerometrului în g. Trebuie să fie una dintre 2, 4, 8 sau 16.

magnet_odr

Rata de ieșire a datelor magnetometrului în Hz. Trebuie să fie una dintre 0.625, 1.25, 2.5, 5, 10, 20, 40 sau 80.

magnet_scale

Domeniul la scară completă al magnetometrului în gauss. Trebuie să fie una dintre 4, 8, 12 sau 16.

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

Scrie un vector de compensare hard-iron în registrele OFFSET_REG_*_M ale magnetometrului. Compensarea este dată în aceleași unități pe care le returnează magnet() (gauss); fiecare componentă este convertită în LSB-uri brute folosind scara configurată a magnetometrului înainte de a fi scrisă.

gyro_id() bytes

Returnează valoarea pe un octet a registrului WHO_AM_I al sub-dispozitivului accelerometru/giroscop.

magent_id() bytes

Returnează valoarea pe un octet a registrului WHO_AM_I al sub-dispozitivului magnetometru.

gyro() tuple[float, float, float]

Returnează vectorul giroscopului (x, y, z) în grade pe secundă.

accel() tuple[float, float, float]

Returnează vectorul de accelerație (x, y, z) în unități de gravitație standard (1 g = 9,81 m/s²).

magnet() tuple[float, float, float]

Returnează vectorul câmpului magnetic (x, y, z) în gauss.

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

Generator care produce tupluri (gyro, accel) pentru fiecare eșantion disponibil în prezent în FIFO și se oprește odată ce FIFO-ul este gol. Fiecare vector de componente are aceleași unități ca gyro() și, respectiv, accel().