lsm9ds1 — LSM9DS1 9-assige IMU¶
Driver voor de ST LSM9DS1 iNEMO inertiële module via I2C. De LSM9DS1 combineert een 3-assige versnellingsmeter, 3-assige gyroscoop en 3-assige magnetometer in een enkele behuizing; de versnellingsmeter en gyroscoop delen een I2C-adres terwijl de magnetometer op een tweede adres reageert. Deze driver schakelt ook de 16-diepe gyro/accel-FIFO op de chip in, zodat de meest recente samples efficiënt kunnen worden afgevoerd via iter_accel_gyro().
Voorbeeld:
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)
Klassen¶
- 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)¶
Construeer een
LSM9DS1-instantie, verifieer de WHO_AM_I-registers van beide subapparaten, configureer alle drie de sensoren en schakel de accel/gyro-FIFO in continue modus in.busEen geconfigureerde
machine.I2C-bus waaraan de sensor is gekoppeld.address_imu7-bits I2C-adres van het subapparaat van de versnellingsmeter/gyroscoop. Standaard
0x6B.address_magnet7-bits I2C-adres van het subapparaat van de magnetometer. Standaard
0x1E.gyro_odrOutput data rate van de gyroscoop in Hz. Moet een van de volgende zijn:
0(uit),14.9,59.5,119,238,476of952.gyro_scaleFull-scale bereik van de gyroscoop in graden per seconde. Moet een van de volgende zijn:
245,500of2000.accel_odrOutput data rate van de versnellingsmeter in Hz. Dezelfde set waarden als
gyro_odr.accel_scaleFull-scale bereik van de versnellingsmeter in g. Moet een van de volgende zijn:
2,4,8of16.magnet_odrOutput data rate van de magnetometer in Hz. Moet een van de volgende zijn:
0.625,1.25,2.5,5,10,20,40of80.magnet_scaleFull-scale bereik van de magnetometer in gauss. Moet een van de volgende zijn:
4,8,12of16.
- calibrate_magnet(offset: tuple[float, float, float]) None¶
Schrijf een hard-iron offsetvector naar de
OFFSET_REG_*_M-registers van de magnetometer. De offset wordt opgegeven in dezelfde eenheden alsmagnet()teruggeeft (gauss); elke component wordt naar ruwe LSB’s geconverteerd met behulp van de geconfigureerde magnetometerschaal voordat deze wordt geschreven.
- gyro_id() bytes¶
Geeft de waarde van het enkele-byte
WHO_AM_I-register van het subapparaat van de versnellingsmeter/gyroscoop terug.
- magent_id() bytes¶
Geeft de waarde van het enkele-byte
WHO_AM_I-register van het subapparaat van de magnetometer terug.
- accel() tuple[float, float, float]¶
Geeft de versnellingsvector
(x, y, z)terug in eenheden van standaard zwaartekracht (1 g = 9.81 m/s²).
- iter_accel_gyro() Iterator[tuple[tuple[float, float, float], tuple[float, float, float]]]¶
Generator die
(gyro, accel)-tuples oplevert voor elk sample dat momenteel beschikbaar is in de FIFO en stopt zodra de FIFO leeg is. Elke componentvector heeft respectievelijk dezelfde eenheden alsgyro()enaccel().