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.