lsm6dsox_mlc.py
# Dieses Werk ist unter der MIT-Lizenz lizenziert.
# Copyright (c) 2013-2023 OpenMV LLC. Alle Rechte vorbehalten.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# LSM6DSOX-IMU-MLC-(Machine-Learning-Core)-Beispiel.
# Laden Sie die rohe UCF-Datei herunter, kopieren Sie sie auf den Speicher und setzen Sie zurück.
# HINWEIS: Die vortrainierten Modelle (UCF-Dateien) für die Beispiele finden Sie hier:
# https://github.com/STMicroelectronics/STMems_Machine_Learning_Core/tree/master/application_examples/lsm6dsox
from machine import Pin
from machine import SPI
from lsm6dsox import LSM6DSOX
INT_MODE = True # Im Interrupt-Modus ausführen.
INT_FLAG = False # Bei Interrupt auf True setzen.
def imu_int_handler(pin):
global INT_FLAG
INT_FLAG = True
if INT_MODE is True:
int_pin = Pin("PA1", mode=Pin.IN, pull=Pin.PULL_UP)
int_pin.irq(handler=imu_int_handler, trigger=Pin.IRQ_RISING)
# Beispiel zur Vibrationserkennung
UCF_FILE = "lsm6dsox_vibration_monitoring.ucf"
UCF_LABELS = {0: "no vibration", 1: "low vibration", 2: "high vibration"}
# HINWEIS: Die ausgewählte Datenrate und Skalierung müssen mit der Datenrate und Skalierung des MLC übereinstimmen.
lsm = LSM6DSOX(
SPI(5),
cs=Pin("PF6", Pin.OUT_PP, Pin.PULL_UP),
gyro_odr=26,
accel_odr=26,
gyro_scale=2000,
accel_scale=4,
ucf=UCF_FILE,
)
# Beispiel für Kopfgesten
# UCF_FILE = "lsm6dsox_head_gestures.ucf"
# UCF_LABELS = {0:"Nicken", 1:"Schütteln", 2:"Stillstand", 3:"Schwingen", 4:"Gehen"}
# HINWEIS: Die ausgewählte Datenrate und Skalierung müssen mit der Datenrate und Skalierung des MLC übereinstimmen.
# lsm = LSM6DSOX(SPI(5), cs_pin=Pin("PF6", Pin.OUT_PP, Pin.PULL_UP),
# 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]])