bno055 --- مشغّل وحدة القياس بالقصور الذاتي BNO055

توفر هذه الوحدة مشغّلاً لمستشعر التوجه المطلق ذي المحاور التسعة Bosch BNO055 عبر I2C. يدمج BNO055 بيانات مقياس التسارع ومقياس المغناطيسية والجيروسكوب على الشريحة ويُتيح مخرجات الكواتيرنيون وزوايا أويلر والتسارع الخطي والجاذبية إضافةً إلى قنوات المستشعر الخام.

مثال على الاستخدام:

import time
from machine import I2C
import bno055

bus = I2C(1)
imu = bno055.BNO055(bus)

while True:
    print(imu.euler())
    time.sleep_ms(100)

الأصناف

class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)

إنشاء نسخة من مشغّل BNO055.

  • bus هو كائن ناقل machine.I2C مُهيَّأ يُستخدم للتواصل مع المستشعر.

  • address هو عنوان I2C ذو 7 بتات للجهاز. القيمة الافتراضية 0x28.

  • mode هو وضع التشغيل الذي يُوضَع فيه الجهاز بعد إعادة الضبط. انظر ثوابت وضع التشغيل أدناه. القيمة الافتراضية NDOF_MODE.

  • axis هو قيمة إعادة تخطيط محاور بحجم بايتين. انظر ثوابت وضع المحاور أدناه. القيمة الافتراضية AXIS_P4.

يتحقق المُنشئ من معرّف الشريحة، ويجري إعادة ضبط ناعمة، ويبدّل إلى الطاقة العادية، ويطبّق إعداد المحاور، ويدخل وضع التشغيل المطلوب باستخدام المذبذب الخارجي. يثير RuntimeError إذا لم تُقرأ قيم سجل المعرّف المتوقعة.

read_registers(register: int, size: int = 1) bytes

يقرأ size بايتاً من سجل الجهاز المُعطى ويعيدها ككائن bytes.

write_registers(register: int, data: bytes) None

يكتب بايتات data المُعطاة إلى الجهاز بدءاً من register.

operation_mode(mode: int = None) int

يقرأ أو يضبط سجل وضع التشغيل. بدون وسيط، يعيد الوضع الحالي كـ int. مع وسيط mode، يكتب الوضع الجديد إلى الجهاز. انظر ثوابت وضع التشغيل أدناه.

system_trigger(data: int) None

يكتب data إلى سجل مشغّل النظام (0x3F). يُستخدم هذا داخلياً لإصدار إعادة ضبط ناعمة (0x20) ولاختيار المذبذب الخارجي (0x80).

power_mode(mode: int = None) bytes

يقرأ أو يضبط سجل وضع الطاقة. بدون وسيط، يعيد محتويات سجل وضع الطاقة الحالية. مع وسيط mode، يكتب وضع الطاقة الجديد إلى الجهاز.

page(num: int = None) None

يقرأ أو يضبط صفحة السجل. بدون وسيط، يقرأ سجل الصفحة الحالية. مع وسيط num، يختار الصفحة.

temperature() int

يعيد قيمة سجل درجة حرارة الشريحة كبايت غير موقّع.

read_id() bytes

يعيد كتلة المعرّف ذات الأربعة بايتات المقروءة من السجل 0x00. القيمة المتوقعة هي b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

يقرأ أو يضبط إعداد إعادة تخطيط المحاور. بدون وسيط، يعيد إعداد المحاور الحالي بحجم بايتين. مع وسيط placement، يكتب إعداد المحاور المُورَّد بحجم بايتين. استخدم أحد الثوابت AXIS_P0..AXIS_P7 أدناه.

quaternion() list

يعيد التوجه المدموج كقائمة من أربعة عناصر [w, x, y, z] من أعداد عشرية مُحجَّمة إلى نطاق الكواتيرنيون الواحدي.

euler() list

يعيد التوجه المدموج كقائمة من ثلاثة عناصر [yaw, roll, pitch] من أعداد عشرية بالدرجات.

accelerometer() list

يعيد قراءة مقياس التسارع كقائمة من ثلاثة عناصر [x, y, z] من أعداد عشرية بوحدة m/s^2.

magnetometer() list

يعيد قراءة مقياس المغناطيسية كقائمة من ثلاثة عناصر [x, y, z] من أعداد عشرية بوحدة الميكروتسلا.

gyroscope() list

يعيد قراءة الجيروسكوب كقائمة من ثلاثة عناصر [x, y, z] من أعداد عشرية بالدرجات في الثانية.

linear_acceleration() list

يعيد التسارع الخطي المعوَّض عن الجاذبية كقائمة من ثلاثة عناصر [x, y, z] من أعداد عشرية بوحدة m/s^2.

gravity() list

يعيد متجه الجاذبية كقائمة من ثلاثة عناصر [x, y, z] من أعداد عشرية بوحدة m/s^2.

الثوابت

أوضاع التشغيل

bno055.CONFIG_MODE: int

وضع التهيئة (0x00). يجب أن يكون الجهاز في هذا الوضع لتغيير سجلات التهيئة.

bno055.ACCONLY_MODE: int

وضع عدم الدمج لمقياس التسارع فقط (0x01).

bno055.MAGONLY_MODE: int

وضع عدم الدمج لمقياس المغناطيسية فقط (0x02).

bno055.GYRONLY_MODE: int

وضع عدم الدمج للجيروسكوب فقط (0x03).

bno055.ACCMAG_MODE: int

وضع عدم الدمج لمقياس التسارع + مقياس المغناطيسية (0x04).

bno055.ACCGYRO_MODE: int

وضع عدم الدمج لمقياس التسارع + الجيروسكوب (0x05).

bno055.MAGGYRO_MODE: int

وضع عدم الدمج لمقياس المغناطيسية + الجيروسكوب (0x06).

bno055.AMG_MODE: int

وضع عدم الدمج لمقياس التسارع + مقياس المغناطيسية + الجيروسكوب (0x07).

bno055.IMUPLUS_MODE: int

وضع دمج وحدة القياس بالقصور الذاتي باستخدام مقياس التسارع + الجيروسكوب (0x08).

bno055.COMPASS_MODE: int

وضع دمج البوصلة باستخدام مقياس التسارع + مقياس المغناطيسية (0x09).

bno055.M4G_MODE: int

وضع دمج المغناطيس للجيروسكوب (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

وضع الدمج بتسع درجات حرية مع تعطيل المعايرة السريعة لمقياس المغناطيسية (0x0B).

bno055.NDOF_MODE: int

وضع الدمج بتسع درجات حرية مع تفعيل المعايرة السريعة لمقياس المغناطيسية (0x0C). هذا هو الوضع الافتراضي الذي يستخدمه المُنشئ.

أوضاع المحاور

تُمرَّر القيم التالية ذات البايتين إلى BNO055.axis() لإعادة تخطيط نظام إحداثيات الجهاز. كل ثابت هو زوج السجلات (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) من ورقة بيانات BNO055 (القسم 3.4، إعادة تخطيط المحاور)، مُرمَّز مسبقاً لأحد التوجهات القياسية الثمانية للوضع.

اختر الثابت الذي تطابق محاور خرجه طريقة تركيب الشريحة فعلياً على لوحة الدوائر المضيفة:

الثابت

الخرج X

الخرج Y

الخرج Z

البايتات

التركيب

AXIS_P0

-Yc

+Xc

+Zc

21 04

الوجه لأعلى، 90° عكس عقارب الساعة من P1

AXIS_P1

+Xc

+Yc

+Zc

24 00

الوجه لأعلى، الإعداد الافتراضي لورقة البيانات

AXIS_P2

-Xc

-Yc

+Zc

24 06

الوجه لأعلى، مُدار 180°

AXIS_P3

+Yc

-Xc

+Zc

21 02

الوجه لأعلى، 90° مع عقارب الساعة من P1

AXIS_P4

+Xc

-Yc

-Zc

24 03

الوجه لأسفل، مقلوب حول X (الإعداد الافتراضي للمُنشئ)

AXIS_P5

+Yc

+Xc

-Zc

21 01

الوجه لأسفل، مُدار 90° عكس عقارب الساعة من P4

AXIS_P6

-Yc

-Xc

-Zc

21 07

الوجه لأسفل، مُدار 180° من P4

AXIS_P7

-Xc

+Yc

-Zc

24 05

الوجه لأسفل، مُدار 90° مع عقارب الساعة من P4

تشير Xc / Yc / Zc إلى المحاور الجوهرية للشريحة (كما هو مطبوع في ورقة بيانات BNO055). أعمدة "الخرج" هي المحاور التي يسلّمها الجهاز عبر BNO055.euler() وBNO055.gyro() وما إلى ذلك. P0 حتى P3 هي الدورات الأربع بزاوية 90° للشريحة في وضع جانب المكوّنات لأعلى؛ وP4 حتى P7 هي الدورات الأربع نفسها بعد قلب الشريحة على ظهرها.

bno055.AXIS_P0: bytes

الشريحة بوجهها لأعلى، مُدارة 90° عكس عقارب الساعة من AXIS_P1. محاور الخرج: X = -Yc وY = +Xc وZ = +Zc.

bno055.AXIS_P1: bytes

الشريحة بوجهها لأعلى في التوجه الافتراضي لورقة بيانات BNO055. لا تُطبَّق إعادة تخطيط: X = +Xc وY = +Yc وZ = +Zc.

bno055.AXIS_P2: bytes

الشريحة بوجهها لأعلى، مُدارة 180° من AXIS_P1. محاور الخرج: X = -Xc وY = -Yc وZ = +Zc.

bno055.AXIS_P3: bytes

الشريحة بوجهها لأعلى، مُدارة 90° مع عقارب الساعة من AXIS_P1. محاور الخرج: X = +Yc وY = -Xc وZ = +Zc.

bno055.AXIS_P4: bytes

الشريحة مقلوبة على ظهرها (جانب المكوّنات لأسفل) بالنسبة إلى AXIS_P1. محاور الخرج: X = +Xc وY = -Yc وZ = -Zc. هذا هو الوضع الذي يستخدمه مُنشئ BNO055 عند عدم تمرير وسيط axis.

bno055.AXIS_P5: bytes

الشريحة بوجهها لأسفل، مُدارة 90° عكس عقارب الساعة من AXIS_P4. محاور الخرج: X = +Yc وY = +Xc وZ = -Zc.

bno055.AXIS_P6: bytes

الشريحة بوجهها لأسفل، مُدارة 180° من AXIS_P4. محاور الخرج: X = -Yc وY = -Xc وZ = -Zc.

bno055.AXIS_P7: bytes

الشريحة بوجهها لأسفل، مُدارة 90° مع عقارب الساعة من AXIS_P4. محاور الخرج: X = -Xc وY = +Yc وZ = -Zc.