lsm9ds1 — LSM9DS1 9-osni IMU

Upravljački program za ST LSM9DS1 iNEMO inercijalni modul putem I2C. LSM9DS1 kombinira 3-osni akcelerometar, 3-osni žiroskop i 3-osni magnetometar u jednom kućištu; akcelerometar i žiroskop dijele I2C adresu, dok magnetometar odgovara na drugoj adresi. Ovaj upravljački program također omogućuje 16-mjesni žiro/akcel FIFO na čipu tako da se najnoviji uzorci mogu učinkovito isprazniti putem iter_accel_gyro().

Primjer:

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)

Klase

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)

Konstruira LSM9DS1 instancu, provjerava WHO_AM_I registre oba poduređaja, konfigurira sva tri senzora i omogućuje akcel/žiro FIFO u kontinuiranom načinu rada.

bus

Konfigurirana machine.I2C sabirnica na koju je senzor priključen.

address_imu

7-bitna I2C adresa poduređaja akcelerometar/žiroskop. Zadano 0x6B.

address_magnet

7-bitna I2C adresa poduređaja magnetometra. Zadano 0x1E.

gyro_odr

Brzina izlaznih podataka žiroskopa u Hz. Mora biti jedna od 0 (isključeno), 14.9, 59.5, 119, 238, 476 ili 952.

gyro_scale

Raspon pune skale žiroskopa u stupnjevima po sekundi. Mora biti jedan od 245, 500 ili 2000.

accel_odr

Brzina izlaznih podataka akcelerometra u Hz. Isti skup vrijednosti kao gyro_odr.

accel_scale

Raspon pune skale akcelerometra u g. Mora biti jedan od 2, 4, 8 ili 16.

magnet_odr

Brzina izlaznih podataka magnetometra u Hz. Mora biti jedna od 0.625, 1.25, 2.5, 5, 10, 20, 40 ili 80.

magnet_scale

Raspon pune skale magnetometra u gausima. Mora biti jedan od 4, 8, 12 ili 16.

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

Zapisuje vektor pomaka tvrdog željeza (hard-iron) u registre OFFSET_REG_*_M magnetometra. Pomak je zadan u istim jedinicama koje vraća magnet() (gaus); svaka se komponenta pretvara u sirove LSB-ove pomoću konfigurirane skale magnetometra prije zapisivanja.

gyro_id() bytes

Vraća jednobajtnu vrijednost registra WHO_AM_I poduređaja akcelerometar/žiroskop.

magent_id() bytes

Vraća jednobajtnu vrijednost registra WHO_AM_I poduređaja magnetometra.

gyro() tuple[float, float, float]

Vraća vektor žiroskopa (x, y, z) u stupnjevima po sekundi.

accel() tuple[float, float, float]

Vraća vektor ubrzanja (x, y, z) u jedinicama standardne gravitacije (1 g = 9.81 m/s²).

magnet() tuple[float, float, float]

Vraća vektor magnetskog polja (x, y, z) u gausima.

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

Generator koji daje torke (gyro, accel) za svaki uzorak trenutno dostupan u FIFO-u i zaustavlja se nakon što je FIFO prazan. Svaki vektor komponente ima iste jedinice kao gyro() odnosno accel().