imu --- ตัวช่วย IMU สำหรับ Arduino Nano 33 BLE Sense

Note

หน้านี้อธิบายโมดูล Python imu ของ Arduino Nano 33 BLE Sense (ตัวห่อบางๆ รอบๆ ไดรเวอร์ IMU บนบอร์ด) สำหรับโมดูล imu ระดับ C ของ OpenMV ที่มาพร้อมกับบอร์ดกล้อง OPENMV_N6, OPENMV_RT1060 และ OPENMV_AE3 ดูได้ที่ imu --- imu sensor

โมดูลนี้เป็นตัวห่อบางๆ เฉพาะบอร์ดที่เปิดเผยหน่วยวัดแรงเฉื่อยบนบอร์ดของ Arduino Nano 33 BLE Sense ในรูปแบบออบเจกต์ IMU เดียว รองรับบอร์ดทั้งสองรีวิชันอย่างโปร่งใส:

  • Rev 1 ใช้ LSM9DS1 9-axis IMU ตัวเดียว

  • Rev 2 ใช้ Bosch BMI270 (accelerometer + gyroscope) ร่วมกับ Bosch BMM150 magnetometer

คอนสตรัคเตอร์จะตรวจสอบบัส 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]

คืนค่าการอ่าน accelerometer ล่าสุดเป็น tuple (x, y, z) ในหน่วย g (แรงโน้มถ่วงมาตรฐาน)

gyro() tuple[float, float, float]

คืนค่าการอ่าน gyroscope ล่าสุดเป็น tuple (x, y, z) ในหน่วยองศาต่อวินาที

magnet() tuple[float, float, float]

คืนค่าการอ่าน magnetometer ล่าสุดเป็น tuple (x, y, z) ในหน่วยไมโครเทสลา (uT)