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.
busadalah objek busmachine.I2Cyang sudah dikonfigurasi dan digunakan untuk berkomunikasi dengan sensor.addressadalah alamat I2C 7-bit dari perangkat. Defaultnya adalah0x28.modeadalah mode operasi yang diterapkan pada perangkat setelah reset. Lihat konstanta mode operasi di bawah. Defaultnya adalahNDOF_MODE.axisadalah nilai konfigurasi pemetaan ulang sumbu 2-byte. Lihat konstanta penempatan sumbu di bawah. Defaultnya adalahAXIS_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
RuntimeErrorjika nilai register ID yang diharapkan tidak terbaca kembali.- read_registers(register: int, size: int = 1) bytes¶
Membaca
sizebyte dari register perangkat yang diberikan dan mengembalikannya sebagai objekbytes.
- write_registers(register: int, data: bytes) None¶
Menulis byte
datayang diberikan ke perangkat mulai dariregister.
- operation_mode(mode: int = None) int¶
Mendapatkan atau menetapkan register mode operasi. Tanpa argumen, mengembalikan mode saat ini sebagai
int. Dengan argumenmode, menulis mode baru ke perangkat. Lihat konstanta mode operasi di bawah.
- system_trigger(data: int) None¶
Menulis
datake 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.
- read_id() bytes¶
Mengembalikan blok ID 4-byte yang dibaca dari register
0x00. Nilai yang diharapkan adalahb'\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 konstantaAXIS_P0..AXIS_P7di 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.
Konstanta¶
Mode operasi¶
- bno055.CONFIG_MODE: int¶
Mode konfigurasi (
0x00). Perangkat harus berada dalam mode ini untuk mengubah register konfigurasi.
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 |
|---|---|---|---|---|---|
|
|
|
|
menghadap ke atas, 90° CCW dari P1 |
|
|
|
|
|
menghadap ke atas, default datasheet |
|
|
|
|
|
menghadap ke atas, diputar 180° |
|
|
|
|
|
menghadap ke atas, 90° CW dari P1 |
|
|
|
|
|
menghadap ke bawah, dibalik terhadap X (default konstruktor) |
|
|
|
|
|
menghadap ke bawah, diputar 90° CCW dari P4 |
|
|
|
|
|
menghadap ke bawah, diputar 180° dari P4 |
|
|
|
|
|
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 konstruktorBNO055ketika tidak ada argumenaxisyang diberikan.
- bno055.AXIS_P5: bytes¶
Chip menghadap ke bawah, diputar 90° CCW dari
AXIS_P4. Sumbu keluaran:X = +Yc,Y = +Xc,Z = -Zc.