lsm6dsox_mlc.py
# この作品はMITライセンスの下で提供されています。
# Copyright (c) 2013-2023 OpenMV LLC. 全著作権所有。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# LSM6DSOX IMU MLC(Machine Learning Core)の例。
# RAWのUCFファイルをダウンロードし、ストレージにコピーしてリセットします。
# 注意: この例で使用する学習済みモデル(UCFファイル)は以下から入手できます:
# https://github.com/STMicroelectronics/STMems_Machine_Learning_Core/tree/master/application_examples/lsm6dsox
from lsm6dsox import LSM6DSOX
from machine import Pin
from machine import I2C
INT_MODE = True # 割り込みモードで実行します。
INT_FLAG = False # 割り込み時にTrueを設定します。
def imu_int_handler(pin):
global INT_FLAG
INT_FLAG = True
if INT_MODE is True:
int_pin = Pin(24, mode=Pin.IN, pull=Pin.PULL_UP)
int_pin.irq(handler=imu_int_handler, trigger=Pin.IRQ_RISING)
i2c = I2C(0, scl=Pin(13), sda=Pin(12))
# 振動検出の例
UCF_FILE = "lsm6dsox_vibration_monitoring.ucf"
UCF_LABELS = {0: "no vibration", 1: "low vibration", 2: "high vibration"}
# 注意: 選択するデータレートとスケールは、MLCのデータレートとスケールに一致させる必要があります。
lsm = LSM6DSOX(i2c, gyro_odr=26, accel_odr=26, gyro_scale=2000, accel_scale=4, ucf=UCF_FILE)
# 頭部ジェスチャーの例
# UCF_FILE = "lsm6dsox_head_gestures.ucf"
# UCF_LABELS = {0:"Nod", 1:"Shake", 2:"Stationary", 3:"Swing", 4:"Walk"}
# 注意: 選択するデータレートとスケールは、MLCのデータレートとスケールに一致させる必要があります。
# lsm = LSM6DSOX(i2c, gyro_odr=26, accel_odr=26, gyro_scale=250, accel_scale=2, ucf=UCF_FILE)
print("MLC configured...")
while True:
if INT_MODE:
if INT_FLAG:
INT_FLAG = False
print(UCF_LABELS[lsm.mlc_output()[0]])
else:
buf = lsm.mlc_output()
if buf is not None:
print(UCF_LABELS[buf[0]])