lsm9ds1 --- وحدة قياس بالقصور الذاتي LSM9DS1 تساعية المحاور

مُشغِّل لوحدة iNEMO بالقصور الذاتي من ST من طراز LSM9DS1 عبر 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

معدل خرج بيانات الجيروسكوب بالهرتز. يجب أن يكون أحد القيم 0 (إيقاف) أو 14.9 أو 59.5 أو 119 أو 238 أو 476 أو 952.

gyro_scale

مدى المقياس الكامل للجيروسكوب بالدرجات في الثانية. يجب أن يكون أحد القيم 245 أو 500 أو 2000.

accel_odr

معدل خرج بيانات مقياس التسارع بالهرتز. نفس مجموعة القيم الخاصة بـ gyro_odr.

accel_scale

مدى المقياس الكامل لمقياس التسارع بوحدة g. يجب أن يكون أحد القيم 2 أو 4 أو 8 أو 16.

magnet_odr

معدل خرج بيانات مقياس المغناطيسية بالهرتز. يجب أن يكون أحد القيم 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

تكتب متجه إزاحة الحديد الصلب في سجلات OFFSET_REG_*_M الخاصة بمقياس المغناطيسية. تُعطى الإزاحة بنفس الوحدات التي تُرجِعها magnet() (الغاوس)؛ ويُحوَّل كل مكوّن إلى بتات أقل أهمية خام باستخدام مقياس مقياس المغناطيسية المُعَدّ قبل كتابته.

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]]]

مولِّد يُنتِج صفوف (gyro, accel) لكل عينة متوفرة حاليًا في ذاكرة FIFO ويتوقف بمجرد فراغها. يحمل كل متجه مكوّن نفس وحدات gyro() وaccel() على التوالي.