lsm9ds1 — LSM9DS1 IMU בעל 9 צירים

מנהל התקן למודול האינרציאלי ST LSM9DS1 iNEMO באמצעות I2C. ה-LSM9DS1 משלב מד תאוצה תלת-צירי, ג’ירוסקופ תלת-צירי ומגנטומטר תלת-צירי במארז יחיד; מד התאוצה והג’ירוסקופ חולקים כתובת I2C בעוד שהמגנטומטר מגיב על כתובת שנייה. מנהל התקן זה גם מאפשר את ה-FIFO בעומק 16 של הג’ירו/תאוצה שעל השבב כך שניתן לרוקן ביעילות את הדגימות האחרונות באמצעות 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 של שני תת-ההתקנים, מגדיר את כל שלושת החיישנים ומאפשר את ה-FIFO של התאוצה/ג’ירו במצב רציף.

bus

אפיק machine.I2C מוגדר שאליו מחובר החיישן.

address_imu

כתובת I2C בת 7 סיביות של תת-התקן מד התאוצה/הג’ירוסקופ. ברירת המחדל היא 0x6B.

address_magnet

כתובת I2C בת 7 סיביות של תת-התקן המגנטומטר. ברירת המחדל היא 0x1E.

gyro_odr

קצב נתוני הפלט של הג’ירוסקופ ב-Hz. חייב להיות אחד מבין 0 (כבוי), 14.9, 59.5, 119, 238, 476 או 952.

gyro_scale

טווח הסקאלה המלאה של הג’ירוסקופ במעלות-לשנייה. חייב להיות אחד מבין 245, 500 או 2000.

accel_odr

קצב נתוני הפלט של מד התאוצה ב-Hz. אותה קבוצת ערכים כמו gyro_odr.

accel_scale

טווח הסקאלה המלאה של מד התאוצה ב-g. חייב להיות אחד מבין 2, 4, 8 או 16.

magnet_odr

קצב נתוני הפלט של המגנטומטר ב-Hz. חייב להיות אחד מבין 0.625, 1.25, 2.5, 5, 10, 20, 40 או 80.

magnet_scale

טווח הסקאלה המלאה של המגנטומטר בגאוס. חייב להיות אחד מבין 4, 8, 12 או 16.

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

כותבת וקטור היסט hard-iron אל אוגרי ה-OFFSET_REG_*_M של המגנטומטר. ההיסט ניתן באותן יחידות ש-magnet() מחזירה (גאוס); כל רכיב מומר ל-LSBs גולמיים באמצעות סקאלת המגנטומטר המוגדרת לפני הכתיבה.

gyro_id() bytes

מחזירה את ערך האוגר WHO_AM_I בן הבית הבודד של תת-התקן מד התאוצה/הג’ירוסקופ.

magent_id() bytes

מחזירה את ערך האוגר 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]]]

גנרטור המניב tuples של (gyro, accel) עבור כל דגימה הזמינה כעת ב-FIFO ועוצר ברגע שה-FIFO ריק. לכל וקטור רכיב יש אותן יחידות כמו gyro() ו-accel() בהתאמה.