lsm9ds1 — IMU de 9 eixos LSM9DS1

Driver para o módulo inercial iNEMO ST LSM9DS1 via I2C. O LSM9DS1 combina um acelerómetro de 3 eixos, um giroscópio de 3 eixos e um magnetómetro de 3 eixos num único encapsulamento; o acelerómetro e o giroscópio partilham um endereço I2C, enquanto o magnetómetro responde num segundo endereço. Este driver também ativa o FIFO de 16 posições de giroscópio/acelerómetro no chip, para que as amostras mais recentes possam ser drenadas eficientemente através de iter_accel_gyro().

Exemplo:

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)

Classes

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)

Constrói uma instância LSM9DS1, verifica os registos WHO_AM_I de ambos os sub-dispositivos, configura os três sensores e ativa o FIFO accel/gyro em modo contínuo.

bus

Um barramento machine.I2C configurado ao qual o sensor está ligado.

address_imu

Endereço I2C de 7 bits do sub-dispositivo acelerómetro/giroscópio. Por omissão é 0x6B.

address_magnet

Endereço I2C de 7 bits do sub-dispositivo magnetómetro. Por omissão é 0x1E.

gyro_odr

Taxa de saída de dados do giroscópio em Hz. Deve ser um dos seguintes valores: 0 (desligado), 14.9, 59.5, 119, 238, 476 ou 952.

gyro_scale

Gama de escala completa do giroscópio em graus por segundo. Deve ser um dos seguintes valores: 245, 500 ou 2000.

accel_odr

Taxa de saída de dados do acelerómetro em Hz. Mesmo conjunto de valores que gyro_odr.

accel_scale

Gama de escala completa do acelerómetro em g. Deve ser um dos seguintes valores: 2, 4, 8 ou 16.

magnet_odr

Taxa de saída de dados do magnetómetro em Hz. Deve ser um dos seguintes valores: 0.625, 1.25, 2.5, 5, 10, 20, 40 ou 80.

magnet_scale

Gama de escala completa do magnetómetro em gauss. Deve ser um dos seguintes valores: 4, 8, 12 ou 16.

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

Escreve um vetor de offset de ferro duro nos registos OFFSET_REG_*_M do magnetómetro. O offset é fornecido nas mesmas unidades que magnet() devolve (gauss); cada componente é convertido para LSB em bruto usando a escala do magnetómetro configurada antes de ser escrito.

gyro_id() bytes

Devolve o valor do registo WHO_AM_I de um byte do sub-dispositivo acelerómetro/giroscópio.

magent_id() bytes

Devolve o valor do registo WHO_AM_I de um byte do sub-dispositivo magnetómetro.

gyro() tuple[float, float, float]

Devolve o vetor do giroscópio (x, y, z) em graus por segundo.

accel() tuple[float, float, float]

Devolve o vetor de aceleração (x, y, z) em unidades de gravidade padrão (1 g = 9,81 m/s²).

magnet() tuple[float, float, float]

Devolve o vetor de campo magnético (x, y, z) em gauss.

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

Gerador que produz tuplos (gyro, accel) para cada amostra atualmente disponível no FIFO e para quando o FIFO estiver vazio. Cada vetor componente tem as mesmas unidades que gyro() e accel(), respetivamente.