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.