imu — допоміжний модуль IMU для Arduino Nano 33 BLE Sense

Примітка

На цій сторінці описано Python-модуль imu плати Arduino Nano 33 BLE Sense (невелика обгортка навколо вбудованих драйверів IMU). Щодо модуля imu рівня C для OpenMV, який постачається на платах камер OPENMV_N6, OPENMV_RT1060 та OPENMV_AE3, дивіться imu — датчик IMU.

Цей модуль є тонкою платформозалежною обгорткою, яка надає доступ до вбудованого блоку вимірювання інерції плати Arduino Nano 33 BLE Sense у вигляді єдиного об’єкта IMU. Обидві апаратні ревізії плати підтримуються прозоро:

  • Rev 1 використовує одну 9-осьову IMU LSM9DS1.

  • Rev 2 поєднує Bosch BMI270 (акселерометр + гіроскоп) з магнетометром Bosch BMM150.

Конструктор сканує шину I2C на наявність адреси BMI270 (0x68) та автоматично вибирає відповідний драйвер, тому код користувача можна написати один раз і запускати на будь-якій ревізії.

Приклад:

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

Створює об’єкт IMU, прив’язаний до шини I2C.

  • bus — ініціалізований екземпляр machine.I2C, підключений до вбудованих IMU.

При ініціалізації сканується шина: якщо пристрій відповідає за адресою 0x68, створюється пара BMI270 + BMM150 (Nano 33 BLE Sense Rev 2), інакше — LSM9DS1 (Rev 1). Базовий драйвер зберігається в атрибуті imu та налаштовується з діапазонами та вихідними частотами дискретизації за замовчуванням.

accel() tuple[float, float, float]

Повертає останнє показання акселерометра у вигляді кортежу (x, y, z) в одиницях g (стандартні прискорення вільного падіння).

gyro() tuple[float, float, float]

Повертає останнє показання гіроскопа у вигляді кортежу (x, y, z) в градусах на секунду.

magnet() tuple[float, float, float]

Повертає останнє показання магнетометра у вигляді кортежу (x, y, z) в мікротеслах (мкТл).