lsm9ds1 --- IMU 9-sumbu LSM9DS1

Driver untuk modul inersia iNEMO ST LSM9DS1 melalui I2C. LSM9DS1 menggabungkan akselerometer 3-sumbu, giroskop 3-sumbu, dan magnetometer 3-sumbu dalam satu paket; akselerometer dan giroskop berbagi alamat I2C sementara magnetometer merespons pada alamat kedua. Driver ini juga mengaktifkan FIFO giroskop/akselerasi 16-deep on-chip sehingga sampel terbaru dapat diambil secara efisien melalui iter_accel_gyro().

Contoh:

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)

Kelas

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)

Buat instans LSM9DS1, verifikasi register WHO_AM_I dari kedua sub-perangkat, konfigurasikan ketiga sensor dan aktifkan FIFO akselerasi/giroskop dalam mode berkelanjutan.

bus

Bus machine.I2C yang telah dikonfigurasi tempat sensor terpasang.

address_imu

Alamat I2C 7-bit sub-perangkat akselerometer/giroskop. Default ke 0x6B.

address_magnet

Alamat I2C 7-bit sub-perangkat magnetometer. Default ke 0x1E.

gyro_odr

Laju data keluaran giroskop dalam Hz. Harus salah satu dari 0 (mati), 14.9, 59.5, 119, 238, 476 atau 952.

gyro_scale

Rentang skala penuh giroskop dalam derajat per detik. Harus salah satu dari 245, 500 atau 2000.

accel_odr

Laju data keluaran akselerometer dalam Hz. Set nilai yang sama seperti gyro_odr.

accel_scale

Rentang skala penuh akselerometer dalam g. Harus salah satu dari 2, 4, 8 atau 16.

magnet_odr

Laju data keluaran magnetometer dalam Hz. Harus salah satu dari 0.625, 1.25, 2.5, 5, 10, 20, 40 atau 80.

magnet_scale

Rentang skala penuh magnetometer dalam gauss. Harus salah satu dari 4, 8, 12 atau 16.

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

Tulis vektor offset hard-iron ke register OFFSET_REG_*_M magnetometer. Offset diberikan dalam satuan yang sama seperti yang dikembalikan oleh magnet() (gauss); setiap komponen dikonversi ke LSB mentah menggunakan skala magnetometer yang dikonfigurasi sebelum ditulis.

gyro_id() bytes

Kembalikan nilai register WHO_AM_I satu byte dari sub-perangkat akselerometer/giroskop.

magent_id() bytes

Kembalikan nilai register WHO_AM_I satu byte dari sub-perangkat magnetometer.

gyro() tuple[float, float, float]

Kembalikan vektor giroskop (x, y, z) dalam derajat per detik.

accel() tuple[float, float, float]

Kembalikan vektor akselerasi (x, y, z) dalam satuan gravitasi standar (1 g = 9,81 m/s²).

magnet() tuple[float, float, float]

Kembalikan vektor medan magnet (x, y, z) dalam gauss.

iter_accel_gyro() Iterator[tuple[tuple[float, float, float], tuple[float, float, float]]]

Generator yang menghasilkan tuple (gyro, accel) untuk setiap sampel yang saat ini tersedia dalam FIFO dan berhenti setelah FIFO kosong. Setiap vektor komponen memiliki satuan yang sama seperti gyro() dan accel() masing-masing.