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ış birmachine.I2Cveri yolu nesnesidir.address, cihazın 7 bitlik I2C adresidir. Varsayılan olarak0x28değ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 olarakNDOF_MODEdeğ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 olarakAXIS_P4değ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
RuntimeErroroluşturur.- read_registers(register: int, size: int = 1) bytes¶
Verilen cihaz yazmacından
sizebayt okur ve bunları birbytesnesnesi olarak döndürür.
- write_registers(register: int, data: bytes) None¶
Verilen
databaytlarını cihazaregisteradresinden başlayarak yazar.
- operation_mode(mode: int = None) int¶
İşlem modu yazmacını alır veya ayarlar. Argüman olmadan, geçerli modu bir
intolarak döndürür. Birmodeargü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)datayazar. 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
modeargü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
numargümanı ile, sayfayı seçer.
- read_id() bytes¶
0x00yazmacından okunan 4 baytlık kimlik bloğunu döndürür. Beklenen değerb'\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
placementargümanı ile, sağlanan 2 baytlık eksen yapılandırmasını yazar. AşağıdakiAXIS_P0..AXIS_P7sabitlerinden 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.
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.
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 |
|---|---|---|---|---|---|
|
|
|
|
yüzü yukarı, P1’den 90° CCW |
|
|
|
|
|
yüzü yukarı, veri sayfası varsayılanı |
|
|
|
|
|
yüzü yukarı, 180° döndürülmüş |
|
|
|
|
|
yüzü yukarı, P1’den 90° CW |
|
|
|
|
|
yüzü aşağı, X ekseni etrafında çevrilmiş (yapıcı varsayılanı) |
|
|
|
|
|
yüzü aşağı, P4’ten 90° CCW döndürülmüş |
|
|
|
|
|
yüzü aşağı, P4’ten 180° döndürülmüş |
|
|
|
|
|
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_P1sabitinden 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_P1sabitinden 180° döndürülmüş. Çıkış eksenleri:X = -Xc,Y = -Yc,Z = +Zc.
- bno055.AXIS_P3: bytes¶
Yonga yüzü yukarı,
AXIS_P1sabitinden 90° CW döndürülmüş. Çıkış eksenleri:X = +Yc,Y = -Xc,Z = +Zc.
- bno055.AXIS_P4: bytes¶
Yonga,
AXIS_P1sabitine göre sırtüstü çevrilmiş (bileşen tarafı aşağı). Çıkış eksenleri:X = +Xc,Y = -Yc,Z = -Zc. Bu, hiçbiraxisargümanı sağlanmadığındaBNO055yapıcısı tarafından kullanılan yerleşimdir.
- bno055.AXIS_P5: bytes¶
Yonga yüzü aşağı,
AXIS_P4sabitinden 90° CCW döndürülmüş. Çıkış eksenleri:X = +Yc,Y = +Xc,Z = -Zc.