lsm9ds1 — IMU de 9 ejes LSM9DS1¶
Controlador para el módulo inercial iNEMO LSM9DS1 de ST a través de I2C. El LSM9DS1 combina un acelerómetro de 3 ejes, un giroscopio de 3 ejes y un magnetómetro de 3 ejes en un solo encapsulado; el acelerómetro y el giroscopio comparten una dirección I2C, mientras que el magnetómetro responde en una segunda dirección. Este controlador también habilita la FIFO de giroscopio/acelerómetro de 16 niveles del chip para que las muestras más recientes puedan vaciarse eficientemente mediante iter_accel_gyro().
Ejemplo:
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)
Clases¶
- 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)¶
Construye una instancia de
LSM9DS1, verifica los registros WHO_AM_I de ambos subdispositivos, configura los tres sensores y habilita la FIFO de acelerómetro/giroscopio en modo continuo.busUn bus
machine.I2Cconfigurado al que está conectado el sensor.address_imuDirección I2C de 7 bits del subdispositivo acelerómetro/giroscopio. Su valor predeterminado es
0x6B.address_magnetDirección I2C de 7 bits del subdispositivo magnetómetro. Su valor predeterminado es
0x1E.gyro_odrTasa de datos de salida del giroscopio en Hz. Debe ser uno de
0(apagado),14.9,59.5,119,238,476o952.gyro_scaleRango de escala completa del giroscopio en grados por segundo. Debe ser uno de
245,500o2000.accel_odrTasa de datos de salida del acelerómetro en Hz. El mismo conjunto de valores que
gyro_odr.accel_scaleRango de escala completa del acelerómetro en g. Debe ser uno de
2,4,8o16.magnet_odrTasa de datos de salida del magnetómetro en Hz. Debe ser uno de
0.625,1.25,2.5,5,10,20,40o80.magnet_scaleRango de escala completa del magnetómetro en gauss. Debe ser uno de
4,8,12o16.
- calibrate_magnet(offset: tuple[float, float, float]) None¶
Escribe un vector de compensación de hierro duro (hard-iron) en los registros
OFFSET_REG_*_Mdel magnetómetro. La compensación se da en las mismas unidades que devuelvemagnet()(gauss); cada componente se convierte a LSB sin procesar usando la escala de magnetómetro configurada antes de escribirse.
- gyro_id() bytes¶
Devuelve el valor de un solo byte del registro
WHO_AM_Idel subdispositivo acelerómetro/giroscopio.
- magent_id() bytes¶
Devuelve el valor de un solo byte del registro
WHO_AM_Idel subdispositivo magnetómetro.
- gyro() tuple[float, float, float]¶
Devuelve el vector del giroscopio
(x, y, z)en grados por segundo.
- accel() tuple[float, float, float]¶
Devuelve el vector de aceleración
(x, y, z)en unidades de gravedad estándar (1 g = 9.81 m/s²).
- iter_accel_gyro() Iterator[tuple[tuple[float, float, float], tuple[float, float, float]]]¶
Generador que produce tuplas
(gyro, accel)por cada muestra actualmente disponible en la FIFO y se detiene una vez que la FIFO está vacía. Cada vector componente tiene las mismas unidades quegyro()yaccel()respectivamente.