lsm6dsox --- LSM6DSOX 6 軸 IMU

ST LSM6DSOX iNEMO 6 軸慣性計測ユニット(3 軸加速度計と 3 軸ジャイロスコープ)を I2C または SPI 経由で扱うドライバです。基本的な IMU 出力に加えて、このドライバはオンチップの組み込み機能を公開します。すなわち、設定可能な歩数計(ステップカウンタ)と、ST の Unico-GUI ツールからエクスポートした UCF ファイルでプログラムできる Machine Learning Core(MLC)です。

例:

import time
from machine import I2C
from lsm6dsox import LSM6DSOX

# Use the I2C bus the LSM6DSOX is wired to on your board.
lsm = LSM6DSOX(I2C(1))

# SPI alternative (replace cs= with your board's chip-select pin):
# from machine import SPI, Pin
# lsm = LSM6DSOX(SPI(1), cs=Pin("CS"))

while True:
    print("Accelerometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*lsm.accel()))
    print("Gyroscope:     x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*lsm.gyro()))
    time.sleep_ms(100)

クラス

class lsm6dsox.LSM6DSOX(bus: machine.I2C | machine.SPI, cs: machine.Pin | None = None, address: int = 0x6A, gyro_odr: float = 104, accel_odr: float = 104, gyro_scale: int = 2000, accel_scale: int = 4, ucf: str | None = None)

LSM6DSOX インスタンスを構築します。バスの種類は自動検出されます。busreadfrom_mem を公開していれば machine.I2C として扱われ、そうでなければ machine.SPI として扱われ、cs を指定する必要があります。チップはソフトリセットされ、要求された ODR とスケールがプログラムされ、指定されていれば MLC UCF ファイルが読み込まれます。

bus

設定済みの machine.I2C または machine.SPI バスのいずれか。

cs

SPI モードで使用するチップセレクトの machine.Pinbus が SPI インスタンスの場合は必須で、それ以外の場合は無視されます。

address

デバイスの 7 ビット I2C アドレス。デフォルトは 0x6A です。一部のボードでは SDO ピンを High に固定しており、その場合は 0x6B が選択されます。

gyro_odr

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

accel_odr

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

gyro_scale

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

accel_scale

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

ucf

ST Unico-GUI の .ucf レジスタダンプファイルへの任意のパス。指定された場合、ファイルが解析され、load_mlc() を介して構築時に MLC へ適用されます。

reset() None

CTRL3_C を介してソフトウェアリセットを発行し、リセットビットがクリアされるまでブロックします。デバイスが 10 回のリトライ以内に復帰しない場合は OSError を送出します。

set_mem_bank(bank: int) None

FUNC_CFG レジスタバンクを切り替えます。組み込み機能やセンサーハブのレジスタページにアクセスするために内部で使用されます。アプリケーションコードで必要になることはほとんどありません。

set_embedded_functions(enable: bool, emb_ab: tuple[int, int] | None = None) tuple[int, int]

組み込み機能ブロックを有効または無効にします。enableTrue の場合、2 バイトの emb_ab タプルが EMB_FUNC_EN_A/EMB_FUNC_EN_B に書き込まれます。False の場合、現在の値が読み出され、MLC/歩数計の有効化ビットがクリアされ、後で復元できるように以前の値が返されます。

load_mlc(ucf: str) None

パス ucf のファイルから MLC UCF プログラムを適用します。ドライバはファイルを 1 行ずつ走査し、各 Ac <reg> <val> の書き込みを適用した後、BDU を有効にし、MLC イベントを割り込みピン 1 へルーティングし、組み込み機能を再び有効にします。

mlc_output() bytes | None

新しい MLC の結果が利用可能な場合(MLC_STATUS ビットがセットされている場合)、8 つの MLC0_SRC..MLC7_SRC レジスタの内容を bytes 様オブジェクトとして返します。そうでなければ None を返します。

pedometer_config(enable: bool = True, debounce: int = 10, int1_enable: bool = False, int2_enable: bool = False) None

組み込み歩数計を設定します。

enable

組み込み機能ブロックでのステップ検出を有効または無効にします。

debounce

PEDO_DEB_STEPS_CONF に書き込まれるステップのデバウンス値。

int1_enable

True の場合、歩数計イベントを INT1 ピンへルーティングします。

int2_enable

True の場合、歩数計イベントを INT2 ピンへルーティングします。

pedometer_reset() None

ステップカウンタをゼロにリセットします。

steps() int

16 ビットのステップカウンタの現在値を返します。

gyro() tuple[float, float, float]

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

accel() tuple[float, float, float]

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