imu — IMU-helper voor de Arduino Nano 33 BLE Sense

Notitie

Deze pagina documenteert de Python imu-module van de Arduino Nano 33 BLE Sense (een kleine wrapper rond de ingebouwde IMU-drivers). Voor de OpenMV imu-module op C-niveau die wordt meegeleverd op de OPENMV_N6-, OPENMV_RT1060- en OPENMV_AE3-cameraborden, zie imu — imu-sensor.

Deze module is een dunne board-specifieke wrapper die de ingebouwde traagheidsmeeteenheid van de Arduino Nano 33 BLE Sense beschikbaar maakt als één enkel IMU-object. Beide hardwarerevisies van het board worden transparant afgehandeld:

  • Rev 1 gebruikt één enkele LSM9DS1 9-assige IMU.

  • Rev 2 combineert een Bosch BMI270 (accelerometer + gyroscoop) met een Bosch BMM150 magnetometer.

De constructor onderzoekt de I2C-bus op het BMI270-adres (0x68) en selecteert automatisch de bijbehorende driver, zodat gebruikerscode één keer kan worden geschreven en op beide revisies draait.

Voorbeeld:

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')

Construeert een IMU-object dat aan een I2C-bus is gekoppeld.

  • bus is een geïnitialiseerde machine.I2C-instantie die is verbonden met de ingebouwde IMU(‘s).

Bij constructie wordt de bus gescand: als er een apparaat reageert op adres 0x68 wordt een BMI270-plus-BMM150-paar geïnstantieerd (Nano 33 BLE Sense Rev 2), anders wordt een LSM9DS1 geïnstantieerd (Rev 1). De onderliggende driver wordt bewaard in het imu-attribuut en geconfigureerd met standaardbereiken en uitvoer-datasnelheden.

accel() tuple[float, float, float]

Geeft de laatste accelerometeruitlezing terug als een (x, y, z)-tuple in eenheden van g (standaardzwaartekrachten).

gyro() tuple[float, float, float]

Geeft de laatste gyroscoopuitlezing terug als een (x, y, z)-tuple in graden per seconde.

magnet() tuple[float, float, float]

Geeft de laatste magnetometeruitlezing terug als een (x, y, z)-tuple in microtesla (uT).