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.