bno055 — BNO055 IMU Sürücüsü

Bu modül, Bosch BNO055 9 eksenli mutlak yönelim sensörü için I2C üzerinden bir sürücü sağlar. BNO055, ivmeölçer, manyetometre ve jiroskop verilerini yonga üzerinde birleştirir ve ham sensör kanallarına ek olarak kuaternion, Euler açısı, doğrusal ivme ve yerçekimi çıkışlarını sunar.

Örnek kullanım:

import time
from machine import I2C
import bno055

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

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

Sınıflar

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

Bir BNO055 sürücü örneği oluşturur.

  • bus, sensörle iletişim kurmak için kullanılan, yapılandırılmış bir machine.I2C veri yolu nesnesidir.

  • address, cihazın 7 bitlik I2C adresidir. Varsayılan olarak 0x28 değerini alır.

  • mode, sıfırlamadan sonra cihazın geçirileceği işlem modudur. Aşağıdaki işlem modu sabitlerine bakın. Varsayılan olarak NDOF_MODE değerini alır.

  • axis, 2 baytlık bir eksen yeniden eşleme yapılandırma değeridir. Aşağıdaki eksen yerleşim sabitlerine bakın. Varsayılan olarak AXIS_P4 değerini alır.

Yapıcı, yonga kimliğini doğrular, yazılımsal bir sıfırlama gerçekleştirir, normal güce geçer, eksen yapılandırmasını uygular ve harici osilatörü kullanarak istenen işlem moduna girer. Beklenen kimlik yazmacı değerleri geri okunamazsa RuntimeError oluşturur.

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

Verilen cihaz yazmacından size bayt okur ve bunları bir bytes nesnesi olarak döndürür.

write_registers(register: int, data: bytes) None

Verilen data baytlarını cihaza register adresinden başlayarak yazar.

operation_mode(mode: int = None) int

İşlem modu yazmacını alır veya ayarlar. Argüman olmadan, geçerli modu bir int olarak döndürür. Bir mode argümanı ile, yeni modu cihaza yazar. Aşağıdaki işlem modu sabitlerine bakın.

system_trigger(data: int) None

Sistem tetikleme yazmacına (0x3F) data yazar. Bu, dahili olarak yazılımsal bir sıfırlama (0x20) yayınlamak ve harici osilatörü (0x80) seçmek için kullanılır.

power_mode(mode: int = None) bytes

Güç modu yazmacını alır veya ayarlar. Argüman olmadan, geçerli güç modu yazmacının içeriğini döndürür. Bir mode argümanı ile, yeni güç modunu cihaza yazar.

page(num: int = None) None

Yazmaç sayfasını alır veya ayarlar. Argüman olmadan, geçerli sayfa yazmacını okur. Bir num argümanı ile, sayfayı seçer.

temperature() int

Yonga sıcaklığı yazmacının değerini işaretsiz bir bayt olarak döndürür.

read_id() bytes

0x00 yazmacından okunan 4 baytlık kimlik bloğunu döndürür. Beklenen değer b'\xA0\xFB\x32\x0F' şeklindedir.

axis(placement: bytes = None) bytes

Eksen yeniden eşleme yapılandırmasını alır veya ayarlar. Argüman olmadan, geçerli 2 baytlık eksen yapılandırmasını döndürür. Bir placement argümanı ile, sağlanan 2 baytlık eksen yapılandırmasını yazar. Aşağıdaki AXIS_P0..AXIS_P7 sabitlerinden birini kullanın.

quaternion() list

Birleştirilmiş yönelimi, birim kuaternion aralığına ölçeklenmiş kayan noktalı sayılardan oluşan 4 elemanlı bir liste [w, x, y, z] olarak döndürür.

euler() list

Birleştirilmiş yönelimi, derece cinsinden kayan noktalı sayılardan oluşan 3 elemanlı bir liste [yaw, roll, pitch] olarak döndürür.

accelerometer() list

İvmeölçer okumasını, m/s^2 cinsinden kayan noktalı sayılardan oluşan 3 elemanlı bir liste [x, y, z] olarak döndürür.

magnetometer() list

Manyetometre okumasını, mikro-Tesla cinsinden kayan noktalı sayılardan oluşan 3 elemanlı bir liste [x, y, z] olarak döndürür.

gyroscope() list

Jiroskop okumasını, saniyede derece cinsinden kayan noktalı sayılardan oluşan 3 elemanlı bir liste [x, y, z] olarak döndürür.

linear_acceleration() list

Yerçekimi telafili doğrusal ivmeyi, m/s^2 cinsinden kayan noktalı sayılardan oluşan 3 elemanlı bir liste [x, y, z] olarak döndürür.

gravity() list

Yerçekimi vektörünü, m/s^2 cinsinden kayan noktalı sayılardan oluşan 3 elemanlı bir liste [x, y, z] olarak döndürür.

Sabitler

İşlem modları

bno055.CONFIG_MODE: int

Yapılandırma modu (0x00). Yapılandırma yazmaçlarını değiştirmek için cihaz bu modda olmalıdır.

bno055.ACCONLY_MODE: int

Yalnızca ivmeölçer, birleştirme dışı modu (0x01).

bno055.MAGONLY_MODE: int

Yalnızca manyetometre, birleştirme dışı modu (0x02).

bno055.GYRONLY_MODE: int

Yalnızca jiroskop, birleştirme dışı modu (0x03).

bno055.ACCMAG_MODE: int

İvmeölçer + manyetometre birleştirme dışı modu (0x04).

bno055.ACCGYRO_MODE: int

İvmeölçer + jiroskop birleştirme dışı modu (0x05).

bno055.MAGGYRO_MODE: int

Manyetometre + jiroskop birleştirme dışı modu (0x06).

bno055.AMG_MODE: int

İvmeölçer + manyetometre + jiroskop birleştirme dışı modu (0x07).

bno055.IMUPLUS_MODE: int

İvmeölçer + jiroskop kullanan IMU birleştirme modu (0x08).

bno055.COMPASS_MODE: int

İvmeölçer + manyetometre kullanan pusula birleştirme modu (0x09).

bno055.M4G_MODE: int

Jiroskop yerine manyetometre birleştirme modu (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

Hızlı manyetometre kalibrasyonu devre dışı bırakılmış 9-DOF birleştirme modu (0x0B).

bno055.NDOF_MODE: int

Hızlı manyetometre kalibrasyonu etkinleştirilmiş 9-DOF birleştirme modu (0x0C). Bu, yapıcı tarafından kullanılan varsayılan moddur.

Eksen yerleşimleri

Aşağıdaki 2 baytlık değerler, cihaz koordinat sistemini yeniden eşlemek için BNO055.axis() fonksiyonuna iletilir. Her sabit, BNO055 veri sayfasından (Bölüm 3.4, Axis remap) alınan (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) yazmaç çiftidir ve sekiz standart yerleşim yöneliminden biri için önceden kodlanmıştır.

Çıkış eksenleri, yonganın ana PCB üzerine fiziksel olarak nasıl monte edildiğine uyan sabiti seçin:

Sabit

Çıkış X

Çıkış Y

Çıkış Z

Baytlar

Montaj

AXIS_P0

-Yc

+Xc

+Zc

21 04

yüzü yukarı, P1’den 90° CCW

AXIS_P1

+Xc

+Yc

+Zc

24 00

yüzü yukarı, veri sayfası varsayılanı

AXIS_P2

-Xc

-Yc

+Zc

24 06

yüzü yukarı, 180° döndürülmüş

AXIS_P3

+Yc

-Xc

+Zc

21 02

yüzü yukarı, P1’den 90° CW

AXIS_P4

+Xc

-Yc

-Zc

24 03

yüzü aşağı, X ekseni etrafında çevrilmiş (yapıcı varsayılanı)

AXIS_P5

+Yc

+Xc

-Zc

21 01

yüzü aşağı, P4’ten 90° CCW döndürülmüş

AXIS_P6

-Yc

-Xc

-Zc

21 07

yüzü aşağı, P4’ten 180° döndürülmüş

AXIS_P7

-Xc

+Yc

-Zc

24 05

yüzü aşağı, P4’ten 90° CW döndürülmüş

Xc / Yc / Zc, yonganın içsel eksenlerini belirtir (BNO055 veri sayfasında basıldığı gibi). “Çıkış” sütunları, cihazın BNO055.euler(), BNO055.gyro() vb. aracılığıyla sunduğu eksenlerdir. P0 ile P3 arası, bileşen tarafı yukarı yöneliminde yonganın dört 90° dönüşüdür; P4 ile P7 arası, yonga sırtüstü çevrildikten sonraki aynı dört dönüştür.

bno055.AXIS_P0: bytes

Yonga yüzü yukarı, AXIS_P1 sabitinden 90° CCW döndürülmüş. Çıkış eksenleri: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

Yonga yüzü yukarı, BNO055 veri sayfasının varsayılan yöneliminde. Yeniden eşleme uygulanmaz: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

Yonga yüzü yukarı, AXIS_P1 sabitinden 180° döndürülmüş. Çıkış eksenleri: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

Yonga yüzü yukarı, AXIS_P1 sabitinden 90° CW döndürülmüş. Çıkış eksenleri: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

Yonga, AXIS_P1 sabitine göre sırtüstü çevrilmiş (bileşen tarafı aşağı). Çıkış eksenleri: X = +Xc, Y = -Yc, Z = -Zc. Bu, hiçbir axis argümanı sağlanmadığında BNO055 yapıcısı tarafından kullanılan yerleşimdir.

bno055.AXIS_P5: bytes

Yonga yüzü aşağı, AXIS_P4 sabitinden 90° CCW döndürülmüş. Çıkış eksenleri: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

Yonga yüzü aşağı, AXIS_P4 sabitinden 180° döndürülmüş. Çıkış eksenleri: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

Yonga yüzü aşağı, AXIS_P4 sabitinden 90° CW döndürülmüş. Çıkış eksenleri: X = -Xc, Y = +Yc, Z = -Zc.