bno055 --- Driver IMU BNO055

Modul ini menyediakan driver untuk sensor orientasi absolut 9-sumbu Bosch BNO055 melalui I2C. BNO055 memadukan data akselerometer, magnetometer, dan giroskop di dalam chip dan mengekspos keluaran kuaternion, sudut Euler, akselerasi linear, dan gravitasi selain saluran sensor mentah.

Contoh penggunaan:

import time
from machine import I2C
import bno055

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

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

Kelas

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

Membuat instance driver BNO055.

  • bus adalah objek bus machine.I2C yang sudah dikonfigurasi dan digunakan untuk berkomunikasi dengan sensor.

  • address adalah alamat I2C 7-bit dari perangkat. Defaultnya adalah 0x28.

  • mode adalah mode operasi yang diterapkan pada perangkat setelah reset. Lihat konstanta mode operasi di bawah. Defaultnya adalah NDOF_MODE.

  • axis adalah nilai konfigurasi pemetaan ulang sumbu 2-byte. Lihat konstanta penempatan sumbu di bawah. Defaultnya adalah AXIS_P4.

Konstruktor memverifikasi ID chip, melakukan soft reset, beralih ke daya normal, menerapkan konfigurasi sumbu, dan memasuki mode operasi yang diminta menggunakan osilator eksternal. Memunculkan RuntimeError jika nilai register ID yang diharapkan tidak terbaca kembali.

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

Membaca size byte dari register perangkat yang diberikan dan mengembalikannya sebagai objek bytes.

write_registers(register: int, data: bytes) None

Menulis byte data yang diberikan ke perangkat mulai dari register.

operation_mode(mode: int = None) int

Mendapatkan atau menetapkan register mode operasi. Tanpa argumen, mengembalikan mode saat ini sebagai int. Dengan argumen mode, menulis mode baru ke perangkat. Lihat konstanta mode operasi di bawah.

system_trigger(data: int) None

Menulis data ke register system trigger (0x3F). Ini digunakan secara internal untuk mengeluarkan soft reset (0x20) dan memilih osilator eksternal (0x80).

power_mode(mode: int = None) bytes

Mendapatkan atau menetapkan register mode daya. Tanpa argumen, mengembalikan isi register mode daya saat ini. Dengan argumen mode, menulis mode daya baru ke perangkat.

page(num: int = None) None

Mendapatkan atau menetapkan halaman register. Tanpa argumen, membaca register halaman saat ini. Dengan argumen num, memilih halaman.

temperature() int

Mengembalikan nilai register suhu chip sebagai byte tak bertanda.

read_id() bytes

Mengembalikan blok ID 4-byte yang dibaca dari register 0x00. Nilai yang diharapkan adalah b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

Mendapatkan atau menetapkan konfigurasi pemetaan ulang sumbu. Tanpa argumen, mengembalikan konfigurasi sumbu 2-byte saat ini. Dengan argumen placement, menulis konfigurasi sumbu 2-byte yang diberikan. Gunakan salah satu konstanta AXIS_P0..AXIS_P7 di bawah.

quaternion() list

Mengembalikan orientasi gabungan sebagai daftar 4-elemen [w, x, y, z] dari float yang diskalakan ke rentang kuaternion satuan.

euler() list

Mengembalikan orientasi gabungan sebagai daftar 3-elemen [yaw, roll, pitch] dari float dalam derajat.

accelerometer() list

Mengembalikan pembacaan akselerometer sebagai daftar 3-elemen [x, y, z] dari float dalam m/s^2.

magnetometer() list

Mengembalikan pembacaan magnetometer sebagai daftar 3-elemen [x, y, z] dari float dalam micro-Tesla.

gyroscope() list

Mengembalikan pembacaan giroskop sebagai daftar 3-elemen [x, y, z] dari float dalam derajat per detik.

linear_acceleration() list

Mengembalikan akselerasi linear yang dikompensasi gravitasi sebagai daftar 3-elemen [x, y, z] dari float dalam m/s^2.

gravity() list

Mengembalikan vektor gravitasi sebagai daftar 3-elemen [x, y, z] dari float dalam m/s^2.

Konstanta

Mode operasi

bno055.CONFIG_MODE: int

Mode konfigurasi (0x00). Perangkat harus berada dalam mode ini untuk mengubah register konfigurasi.

bno055.ACCONLY_MODE: int

Mode non-fusi hanya akselerometer (0x01).

bno055.MAGONLY_MODE: int

Mode non-fusi hanya magnetometer (0x02).

bno055.GYRONLY_MODE: int

Mode non-fusi hanya giroskop (0x03).

bno055.ACCMAG_MODE: int

Mode non-fusi akselerometer + magnetometer (0x04).

bno055.ACCGYRO_MODE: int

Mode non-fusi akselerometer + giroskop (0x05).

bno055.MAGGYRO_MODE: int

Mode non-fusi magnetometer + giroskop (0x06).

bno055.AMG_MODE: int

Mode non-fusi akselerometer + magnetometer + giroskop (0x07).

bno055.IMUPLUS_MODE: int

Mode fusi IMU menggunakan akselerometer + giroskop (0x08).

bno055.COMPASS_MODE: int

Mode fusi kompas menggunakan akselerometer + magnetometer (0x09).

bno055.M4G_MODE: int

Mode fusi magnet-untuk-giroskop (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

Mode fusi 9-DOF dengan kalibrasi magnetometer cepat dinonaktifkan (0x0B).

bno055.NDOF_MODE: int

Mode fusi 9-DOF dengan kalibrasi magnetometer cepat diaktifkan (0x0C). Ini adalah mode default yang digunakan oleh konstruktor.

Penempatan sumbu

Nilai 2-byte berikut diteruskan ke BNO055.axis() untuk memetakan ulang sistem koordinat perangkat. Setiap konstanta adalah pasangan register (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) dari datasheet BNO055 (Bagian 3.4, Axis remap), yang telah dikodekan sebelumnya untuk salah satu dari delapan orientasi penempatan standar.

Pilih konstanta yang sumbu keluarannya sesuai dengan cara chip dipasang secara fisik pada PCB host:

Konstanta

Keluaran X

Keluaran Y

Keluaran Z

Byte

Pemasangan

AXIS_P0

-Yc

+Xc

+Zc

21 04

menghadap ke atas, 90° CCW dari P1

AXIS_P1

+Xc

+Yc

+Zc

24 00

menghadap ke atas, default datasheet

AXIS_P2

-Xc

-Yc

+Zc

24 06

menghadap ke atas, diputar 180°

AXIS_P3

+Yc

-Xc

+Zc

21 02

menghadap ke atas, 90° CW dari P1

AXIS_P4

+Xc

-Yc

-Zc

24 03

menghadap ke bawah, dibalik terhadap X (default konstruktor)

AXIS_P5

+Yc

+Xc

-Zc

21 01

menghadap ke bawah, diputar 90° CCW dari P4

AXIS_P6

-Yc

-Xc

-Zc

21 07

menghadap ke bawah, diputar 180° dari P4

AXIS_P7

-Xc

+Yc

-Zc

24 05

menghadap ke bawah, diputar 90° CW dari P4

Xc / Yc / Zc menunjukkan sumbu intrinsik chip (seperti yang tercetak dalam datasheet BNO055). Kolom "Output" adalah sumbu yang dihasilkan perangkat melalui BNO055.euler(), BNO055.gyro(), dll. P0 hingga P3 adalah empat rotasi 90° dari chip dalam orientasi sisi komponen menghadap ke atas; P4 hingga P7 adalah empat rotasi yang sama setelah membalik chip ke belakangnya.

bno055.AXIS_P0: bytes

Chip menghadap ke atas, diputar 90° CCW dari AXIS_P1. Sumbu keluaran: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

Chip menghadap ke atas dalam orientasi default datasheet BNO055. Tidak ada pemetaan ulang yang diterapkan: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

Chip menghadap ke atas, diputar 180° dari AXIS_P1. Sumbu keluaran: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

Chip menghadap ke atas, diputar 90° CW dari AXIS_P1. Sumbu keluaran: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

Chip dibalik ke belakangnya (sisi komponen menghadap ke bawah) relatif terhadap AXIS_P1. Sumbu keluaran: X = +Xc, Y = -Yc, Z = -Zc. Ini adalah penempatan yang digunakan oleh konstruktor BNO055 ketika tidak ada argumen axis yang diberikan.

bno055.AXIS_P5: bytes

Chip menghadap ke bawah, diputar 90° CCW dari AXIS_P4. Sumbu keluaran: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

Chip menghadap ke bawah, diputar 180° dari AXIS_P4. Sumbu keluaran: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

Chip menghadap ke bawah, diputar 90° CW dari AXIS_P4. Sumbu keluaran: X = -Xc, Y = +Yc, Z = -Zc.