imu — helper de IMU para o Arduino Nano 33 BLE Sense

Nota

Esta página documenta o módulo Python imu do Arduino Nano 33 BLE Sense (um pequeno invólucro em torno dos drivers IMU integrados). Para o módulo imu de nível C do OpenMV que é fornecido com as placas de câmara OPENMV_N6, OPENMV_RT1060 e OPENMV_AE3, consulte imu — sensor imu.

Este módulo é um invólucro fino específico de placa que expõe a unidade de medição inercial integrada do Arduino Nano 33 BLE Sense como um único objeto IMU. Ambas as revisões de hardware da placa são tratadas de forma transparente:

  • Rev 1 utiliza um IMU LSM9DS1 de 9 eixos.

  • Rev 2 combina um Bosch BMI270 (acelerómetro + giroscópio) com um magnetómetro Bosch BMM150.

O construtor sonda o barramento I2C para o endereço BMI270 (0x68) e seleciona automaticamente o driver correspondente, pelo que o código do utilizador pode ser escrito uma vez e executado em qualquer revisão.

Exemplo:

import time
import imu
from machine import Pin, I2C

bus = I2C(1, scl=Pin("P15"), sda=Pin("P14"))
sensor = imu.IMU(bus)

while True:
    print('Accelerometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*sensor.accel()))
    print('Gyroscope:     x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*sensor.gyro()))
    print('Magnetometer:  x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*sensor.magnet()))
    print("")
    time.sleep_ms(100)

class IMU

class imu.IMU(bus: 'machine.I2C')

Constrói um objeto IMU ligado a um barramento I2C.

  • bus é uma instância machine.I2C inicializada e ligada ao(s) IMU(s) integrado(s).

Durante a construção, o barramento é analisado: se um dispositivo responder no endereço 0x68, é instanciado um par BMI270 mais BMM150 (Nano 33 BLE Sense Rev 2); caso contrário, é instanciado um LSM9DS1 (Rev 1). O driver subjacente é mantido no atributo imu e configurado com intervalos predefinidos e taxas de dados de saída.

accel() tuple[float, float, float]

Devolve a leitura mais recente do acelerómetro como um tuplo (x, y, z) em unidades de g (gravidades padrão).

gyro() tuple[float, float, float]

Devolve a leitura mais recente do giroscópio como um tuplo (x, y, z) em graus por segundo.

magnet() tuple[float, float, float]

Devolve a leitura mais recente do magnetómetro como um tuplo (x, y, z) em micro-tesla (uT).