imu — auxiliar 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 wrapper em torno dos drivers de IMU embarcados). Para o módulo imu em nível C da OpenMV que vem nas placas de câmera OPENMV_N6, OPENMV_RT1060 e OPENMV_AE3, consulte imu — sensor imu.

Este módulo é um wrapper fino específico da placa que expõe a unidade de medição inercial embarcada 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:

  • A Rev 1 usa um único IMU LSM9DS1 de 9 eixos.

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

O construtor sonda o barramento I2C em busca do endereço do BMI270 (0x68) e seleciona o driver correspondente automaticamente, de modo que o código do usuário pode ser escrito uma só vez e executado em qualquer uma das revisões.

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 vinculado a um barramento I2C.

  • bus é uma instância machine.I2C inicializada conectada ao(s) IMU(s) embarcado(s).

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

accel() tuple[float, float, float]

Retorna a leitura mais recente do acelerômetro como uma tupla (x, y, z) em unidades de g (gravidades padrão).

gyro() tuple[float, float, float]

Retorna a leitura mais recente do giroscópio como uma tupla (x, y, z) em graus por segundo.

magnet() tuple[float, float, float]

Retorna a leitura mais recente do magnetômetro como uma tupla (x, y, z) em microtesla (uT).