lsm9ds1 --- LSM9DS1 9 軸 IMU

ST LSM9DS1 iNEMO 慣性モジュールを I2C 経由で扱うドライバです。LSM9DS1 は 3 軸加速度計、3 軸ジャイロスコープ、3 軸磁気センサーを単一のパッケージに統合しています。加速度計とジャイロスコープは 1 つの I2C アドレスを共有し、磁気センサーは別のアドレスで応答します。このドライバはまた、オンチップの 16 段ジャイロ/加速度 FIFO を有効にして、iter_accel_gyro() を通じて直近のサンプルを効率的に取り出せるようにします。

例:

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)

クラス

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)

LSM9DS1 インスタンスを構築し、両方のサブデバイスの WHO_AM_I レジスタを検証し、3 つのセンサーすべてを設定し、加速度/ジャイロ FIFO を連続モードで有効にします。

bus

センサーが接続されている、設定済みの machine.I2C バス。

address_imu

加速度計/ジャイロスコープのサブデバイスの 7 ビット I2C アドレス。デフォルトは 0x6B です。

address_magnet

磁気センサーのサブデバイスの 7 ビット I2C アドレス。デフォルトは 0x1E です。

gyro_odr

ジャイロスコープの出力データレート(Hz)。0(オフ)、14.959.5119238476952 のいずれかでなければなりません。

gyro_scale

ジャイロスコープのフルスケール範囲(度毎秒)。2455002000 のいずれかでなければなりません。

accel_odr

加速度計の出力データレート(Hz)。gyro_odr と同じ値の集合です。

accel_scale

加速度計のフルスケール範囲(g)。24816 のいずれかでなければなりません。

magnet_odr

磁気センサーの出力データレート(Hz)。0.6251.252.5510204080 のいずれかでなければなりません。

magnet_scale

磁気センサーのフルスケール範囲(ガウス)。481216 のいずれかでなければなりません。

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

ハードアイアンオフセットベクトルを磁気センサーの OFFSET_REG_*_M レジスタに書き込みます。オフセットは magnet() が返すのと同じ単位(ガウス)で指定します。各成分は書き込み前に、設定された磁気センサーのスケールを使って生の LSB に変換されます。

gyro_id() bytes

加速度計/ジャイロスコープのサブデバイスの 1 バイトの WHO_AM_I レジスタ値を返します。

magent_id() bytes

磁気センサーのサブデバイスの 1 バイトの WHO_AM_I レジスタ値を返します。

gyro() tuple[float, float, float]

ジャイロスコープのベクトル (x, y, z) を度毎秒で返します。

accel() tuple[float, float, float]

加速度のベクトル (x, y, z) を標準重力単位(1 g = 9.81 m/s²)で返します。

magnet() tuple[float, float, float]

磁界のベクトル (x, y, z) をガウスで返します。

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

現在 FIFO に存在するすべてのサンプルについて (gyro, accel) タプルを生成し、FIFO が空になると停止するジェネレータです。各成分ベクトルは、それぞれ gyro()accel() と同じ単位を持ちます。