bno055 — מנהל התקן BNO055 IMU#

מודול זה מספק מנהל התקן לחיישן הכיוון המוחלט 9-צירי BNO055 של Bosch דרך 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-bit של ההתקן. ברירת המחדל היא 0x28.

  • mode הוא מצב הפעולה שאליו ההתקן מוכנס לאחר איפוס. ראו את קבועי מצב-הפעולה למטה. ברירת המחדל היא NDOF_MODE.

  • axis הוא ערך תצורת מיפוי-צירים בן 2 בתים. ראו את קבועי מיקום-הצירים למטה. ברירת המחדל היא 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 לאוגר ה-trigger של המערכת (0x3F). זה משמש פנימית להנפקת איפוס רך (0x20) ולבחירת המתנד החיצוני (0x80).

power_mode(mode: int = None) bytes#

מקבל או קובע את אוגר מצב ההספק. ללא ארגומנט, מחזיר את תוכן אוגר מצב-ההספק הנוכחי. עם ארגומנט mode, כותב את מצב ההספק החדש להתקן.

page(num: int = None) None#

מקבל או קובע את עמוד האוגר. ללא ארגומנט, קורא את אוגר העמוד הנוכחי. עם ארגומנט num, בוחר את העמוד.

temperature() int#

מחזיר את ערך אוגר טמפרטורת השבב כבית ללא סימן.

read_id() bytes#

מחזיר את בלוק המזהה בן 4 הבתים שנקרא מאוגר 0x00. הערך הצפוי הוא b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes#

מקבל או קובע את תצורת מיפוי הצירים. ללא ארגומנט, מחזיר את תצורת הצירים הנוכחית בת 2 הבתים. עם ארגומנט placement, כותב את תצורת הצירים בת 2 הבתים שסופקה. השתמשו באחד מהקבועים AXIS_P0..AXIS_P7 שלמטה.

quaternion() list#

מחזיר את הכיוון הממוזג כרשימה בת 4 איברים [w, x, y, z] של מספרים ממשיים מותאמים לטווח הקווטרניון היחידתי.

euler() list#

מחזיר את הכיוון הממוזג כרשימה בת 3 איברים [yaw, roll, pitch] של מספרים ממשיים במעלות.

accelerometer() list#

מחזיר את קריאת מד-התאוצה כרשימה בת 3 איברים [x, y, z] של מספרים ממשיים ב-m/s^2.

magnetometer() list#

מחזיר את קריאת המגנטומטר כרשימה בת 3 איברים [x, y, z] של מספרים ממשיים במיקרו-טסלה.

gyroscope() list#

מחזיר את קריאת הגירוסקופ כרשימה בת 3 איברים [x, y, z] של מספרים ממשיים במעלות לשנייה.

linear_acceleration() list#

מחזיר את התאוצה הלינארית המתוקנת לכבידה כרשימה בת 3 איברים [x, y, z] של מספרים ממשיים ב-m/s^2.

gravity() list#

מחזיר את וקטור הכבידה כרשימה בת 3 איברים [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#

מצב מיזוג IMU המשתמש במד-תאוצה + גירוסקופ (0x08).

bno055.COMPASS_MODE: int#

מצב מיזוג מצפן המשתמש במד-תאוצה + מגנטומטר (0x09).

bno055.M4G_MODE: int#

מצב מיזוג מגנט-לגירוסקופ (0x0A).

bno055.NDOF_FMC_OFF_MODE: int#

מצב מיזוג 9-DOF עם כיול מגנטומטר מהיר מושבת (0x0B).

bno055.NDOF_MODE: int#

מצב מיזוג 9-DOF עם כיול מגנטומטר מהיר מאופשר (0x0C). זהו מצב ברירת המחדל שבו משתמש הבנאי.

מיקומי צירים#

הערכים הבאים בני 2 הבתים מועברים אל BNO055.axis() כדי למפות מחדש את מערכת הקואורדינטות של ההתקן. כל קבוע הוא זוג האוגרים (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) מגיליון הנתונים של BNO055 (סעיף 3.4, Axis remap), מקודד מראש עבור אחד משמונת כיווני המיקום הסטנדרטיים.

בחרו את הקבוע שצירי הפלט שלו תואמים לאופן שבו השבב מותקן פיזית על ה-PCB המארח:

קבוע

פלט 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). עמודות ה-”Output“ הן הצירים שההתקן מספק דרך 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.