lsm9ds1 — LSM9DS1 9 eksenli IMU

ST LSM9DS1 iNEMO atalet modülü için I2C üzerinden sürücü. LSM9DS1, tek bir pakette bir 3 eksenli ivmeölçer, 3 eksenli jiroskop ve 3 eksenli manyetometreyi bir araya getirir; ivmeölçer ve jiroskop bir I2C adresini paylaşırken manyetometre ikinci bir adreste yanıt verir. Bu sürücü ayrıca, en son örneklerin iter_accel_gyro() aracılığıyla verimli bir şekilde boşaltılabilmesi için çip üzerindeki 16 derinlikli jiro/ivme FIFO’yu da etkinleştirir.

Örnek:

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)

Sınıflar

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)

Bir LSM9DS1 örneği oluşturur, her iki alt cihazın WHO_AM_I yazmaçlarını doğrular, üç sensörün tümünü yapılandırır ve ivme/jiro FIFO’yu sürekli modda etkinleştirir.

bus

Sensörün bağlı olduğu yapılandırılmış bir machine.I2C veri yolu.

address_imu

İvmeölçer/jiroskop alt cihazının 7 bitlik I2C adresi. Varsayılan olarak 0x6B değerini alır.

address_magnet

Manyetometre alt cihazının 7 bitlik I2C adresi. Varsayılan olarak 0x1E değerini alır.

gyro_odr

Jiroskop çıktı verisi hızı, Hz cinsinden. Şunlardan biri olmalıdır: 0 (kapalı), 14.9, 59.5, 119, 238, 476 veya 952.

gyro_scale

Jiroskop tam ölçek aralığı, derece/saniye cinsinden. Şunlardan biri olmalıdır: 245, 500 veya 2000.

accel_odr

İvmeölçer çıktı verisi hızı, Hz cinsinden. gyro_odr ile aynı değer kümesi.

accel_scale

İvmeölçer tam ölçek aralığı, g cinsinden. Şunlardan biri olmalıdır: 2, 4, 8 veya 16.

magnet_odr

Manyetometre çıktı verisi hızı, Hz cinsinden. Şunlardan biri olmalıdır: 0.625, 1.25, 2.5, 5, 10, 20, 40 veya 80.

magnet_scale

Manyetometre tam ölçek aralığı, gauss cinsinden. Şunlardan biri olmalıdır: 4, 8, 12 veya 16.

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

Manyetometrenin OFFSET_REG_*_M yazmaçlarına bir sert demir ofset vektörü yazar. Ofset, magnet() yönteminin döndürdüğü ile aynı birimlerde (gauss) verilir; her bileşen, yazılmadan önce yapılandırılmış manyetometre ölçeği kullanılarak ham LSB’lere dönüştürülür.

gyro_id() bytes

İvmeölçer/jiroskop alt cihazının tek baytlık WHO_AM_I yazmaç değerini döndürür.

magent_id() bytes

Manyetometre alt cihazının tek baytlık WHO_AM_I yazmaç değerini döndürür.

gyro() tuple[float, float, float]

Jiroskop vektörünü (x, y, z) saniyede derece cinsinden döndürür.

accel() tuple[float, float, float]

İvme vektörünü (x, y, z) standart yerçekimi birimleri cinsinden döndürür (1 g = 9,81 m/s²).

magnet() tuple[float, float, float]

Manyetik alan vektörünü (x, y, z) gauss cinsinden döndürür.

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

FIFO’da şu anda mevcut olan her örnek için (gyro, accel) demetleri veren ve FIFO boşaldığında duran üreteç. Her bileşen vektörü, sırasıyla gyro() ve accel() ile aynı birimlere sahiptir.