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.busSensörün bağlı olduğu yapılandırılmış bir
machine.I2Cveri yolu.address_imuİvmeölçer/jiroskop alt cihazının 7 bitlik I2C adresi. Varsayılan olarak
0x6Bdeğerini alır.address_magnetManyetometre alt cihazının 7 bitlik I2C adresi. Varsayılan olarak
0x1Edeğerini alır.gyro_odrJiroskop çıktı verisi hızı, Hz cinsinden. Şunlardan biri olmalıdır:
0(kapalı),14.9,59.5,119,238,476veya952.gyro_scaleJiroskop tam ölçek aralığı, derece/saniye cinsinden. Şunlardan biri olmalıdır:
245,500veya2000.accel_odrİvmeölçer çıktı verisi hızı, Hz cinsinden.
gyro_odrile aynı değer kümesi.accel_scaleİvmeölçer tam ölçek aralığı, g cinsinden. Şunlardan biri olmalıdır:
2,4,8veya16.magnet_odrManyetometre çıktı verisi hızı, Hz cinsinden. Şunlardan biri olmalıdır:
0.625,1.25,2.5,5,10,20,40veya80.magnet_scaleManyetometre tam ölçek aralığı, gauss cinsinden. Şunlardan biri olmalıdır:
4,8,12veya16.
- calibrate_magnet(offset: tuple[float, float, float]) None¶
Manyetometrenin
OFFSET_REG_*_Myazmaç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.