lsm9ds1 — IMU a 9 assi LSM9DS1¶
Driver per il modulo inerziale ST LSM9DS1 iNEMO tramite I2C. L’LSM9DS1 combina un accelerometro a 3 assi, un giroscopio a 3 assi e un magnetometro a 3 assi in un unico package; l’accelerometro e il giroscopio condividono un indirizzo I2C mentre il magnetometro risponde a un secondo indirizzo. Questo driver abilita anche la FIFO di giroscopio/accelerometro profonda 16 integrata nel chip, in modo da poter prelevare in modo efficiente i campioni più recenti tramite iter_accel_gyro().
Esempio:
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)
Classi¶
- 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)¶
Costruisce un’istanza
LSM9DS1, verifica i registri WHO_AM_I di entrambi i sotto-dispositivi, configura tutti e tre i sensori e abilita la FIFO di accelerometro/giroscopio in modalità continua.busUn bus
machine.I2Cconfigurato a cui è collegato il sensore.address_imuIndirizzo I2C a 7 bit del sotto-dispositivo accelerometro/giroscopio. Il valore predefinito è
0x6B.address_magnetIndirizzo I2C a 7 bit del sotto-dispositivo magnetometro. Il valore predefinito è
0x1E.gyro_odrFrequenza di output dei dati del giroscopio in Hz. Deve essere uno tra
0(off),14.9,59.5,119,238,476o952.gyro_scaleIntervallo di fondo scala del giroscopio in gradi al secondo. Deve essere uno tra
245,500o2000.accel_odrFrequenza di output dei dati dell’accelerometro in Hz. Stesso insieme di valori di
gyro_odr.accel_scaleIntervallo di fondo scala dell’accelerometro in g. Deve essere uno tra
2,4,8o16.magnet_odrFrequenza di output dei dati del magnetometro in Hz. Deve essere uno tra
0.625,1.25,2.5,5,10,20,40o80.magnet_scaleIntervallo di fondo scala del magnetometro in gauss. Deve essere uno tra
4,8,12o16.
- calibrate_magnet(offset: tuple[float, float, float]) None¶
Scrive un vettore di offset hard-iron nei registri
OFFSET_REG_*_Mdel magnetometro. L’offset è espresso nelle stesse unità restituite damagnet()(gauss); ogni componente viene convertita in LSB grezzi usando la scala del magnetometro configurata prima di essere scritta.
- gyro_id() bytes¶
Restituisce il valore a singolo byte del registro
WHO_AM_Idel sotto-dispositivo accelerometro/giroscopio.
- magent_id() bytes¶
Restituisce il valore a singolo byte del registro
WHO_AM_Idel sotto-dispositivo magnetometro.
- gyro() tuple[float, float, float]¶
Restituisce il vettore del giroscopio
(x, y, z)in gradi al secondo.
- accel() tuple[float, float, float]¶
Restituisce il vettore di accelerazione
(x, y, z)in unità di gravità standard (1 g = 9.81 m/s²).
- iter_accel_gyro() Iterator[tuple[tuple[float, float, float], tuple[float, float, float]]]¶
Generatore che produce tuple
(gyro, accel)per ogni campione attualmente disponibile nella FIFO e si arresta quando la FIFO è vuota. Ogni vettore componente ha le stesse unità digyro()eaccel()rispettivamente.