bno055 — BNO055 IMU-drivrutin¶
Denna modul tillhandahåller en drivrutin för Bosch BNO055 9-axlig sensor för absolut orientering via I2C. BNO055 sammanför data från accelerometer, magnetometer och gyroskop på chippet och tillhandahåller utdata för kvaternion, Euler-vinklar, linjär acceleration och gravitation utöver de råa sensorkanalerna.
Exempelanvändning:
import time
from machine import I2C
import bno055
bus = I2C(1)
imu = bno055.BNO055(bus)
while True:
print(imu.euler())
time.sleep_ms(100)
Klasser¶
- class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)¶
Skapar en instans av BNO055-drivrutinen.
busär ett konfigureratmachine.I2C-bussobjekt som används för att kommunicera med sensorn.addressär enhetens 7-bitars I2C-adress. Standardvärdet är0x28.modeär det driftläge som enheten försätts i efter återställning. Se driftlägeskonstanterna nedan. Standardvärdet ärNDOF_MODE.axisär ett 2-byte-konfigurationsvärde för axelomkoppling. Se konstanterna för axelplacering nedan. Standardvärdet ärAXIS_P4.
Konstruktorn verifierar chip-ID:t, utför en mjuk återställning, växlar till normal strömförsörjning, tillämpar axelkonfigurationen och går in i det begärda driftläget med den externa oscillatorn. Utlöser
RuntimeErrorom de förväntade ID-registervärdena inte läses tillbaka.- read_registers(register: int, size: int = 1) bytes¶
Läser
sizebyte från det angivna enhetsregistret och returnerar dem som ettbytes-objekt.
- write_registers(register: int, data: bytes) None¶
Skriver de angivna
data-byten till enheten med början vidregister.
- operation_mode(mode: int = None) int¶
Hämtar eller ställer in driftlägesregistret. Utan argument returneras det aktuella läget som en
int. Med ettmode-argument skrivs det nya läget till enheten. Se driftlägeskonstanterna nedan.
- system_trigger(data: int) None¶
Skriver
datatill systemets utlösarregister (0x3F). Detta används internt för att utfärda en mjuk återställning (0x20) och för att välja den externa oscillatorn (0x80).
- power_mode(mode: int = None) bytes¶
Hämtar eller ställer in strömlägesregistret. Utan argument returneras det aktuella strömlägesregistrets innehåll. Med ett
mode-argument skrivs det nya strömläget till enheten.
- page(num: int = None) None¶
Hämtar eller ställer in registersidan. Utan argument läses det aktuella sidregistret. Med ett
num-argument väljs sidan.
- read_id() bytes¶
Returnerar det 4-byte-stora ID-blocket som läses från register
0x00. Det förväntade värdet ärb'\xA0\xFB\x32\x0F'.
- axis(placement: bytes = None) bytes¶
Hämtar eller ställer in konfigurationen för axelomkoppling. Utan argument returneras den aktuella 2-byte-axelkonfigurationen. Med ett
placement-argument skrivs den angivna 2-byte-axelkonfigurationen. Använd en av konstanternaAXIS_P0..AXIS_P7nedan.
- quaternion() list¶
Returnerar den sammanförda orienteringen som en lista med 4 element
[w, x, y, z]av flyttal skalade till enhetskvaternionintervallet.
- euler() list¶
Returnerar den sammanförda orienteringen som en lista med 3 element
[yaw, roll, pitch]av flyttal i grader.
- accelerometer() list¶
Returnerar accelerometeravläsningen som en lista med 3 element
[x, y, z]av flyttal i m/s^2.
- magnetometer() list¶
Returnerar magnetometeravläsningen som en lista med 3 element
[x, y, z]av flyttal i mikro-Tesla.
- gyroscope() list¶
Returnerar gyroskopavläsningen som en lista med 3 element
[x, y, z]av flyttal i grader per sekund.
Konstanter¶
Driftlägen¶
- bno055.CONFIG_MODE: int¶
Konfigurationsläge (
0x00). Enheten måste vara i detta läge för att ändra konfigurationsregister.
Axelplaceringar¶
Följande 2-byte-värden skickas till BNO055.axis() för att koppla om enhetens koordinatsystem. Varje konstant är registerparet (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) från BNO055-databladet (Avsnitt 3.4, Axis remap), förkodat för en av de åtta standardplaceringsorienteringarna.
Välj den konstant vars utdataxlar matchar hur chippet är fysiskt monterat på värd-PCB:n:
Konstant |
Utdata X |
Utdata Y |
Utdata Z |
Byte |
Montering |
|---|---|---|---|---|---|
|
|
|
|
uppåtvänd, 90° moturs från P1 |
|
|
|
|
|
uppåtvänd, databladets standard |
|
|
|
|
|
uppåtvänd, roterad 180° |
|
|
|
|
|
uppåtvänd, 90° medurs från P1 |
|
|
|
|
|
nedåtvänd, vänd kring X (konstruktorstandard) |
|
|
|
|
|
nedåtvänd, roterad 90° moturs från P4 |
|
|
|
|
|
nedåtvänd, roterad 180° från P4 |
|
|
|
|
|
nedåtvänd, roterad 90° medurs från P4 |
Xc / Yc / Zc betecknar chippets inneboende axlar (som de står tryckta i BNO055-databladet). Kolumnerna ”Utdata” är de axlar som enheten levererar via BNO055.euler(), BNO055.gyro() osv. P0 till P3 är chippets fyra 90°-rotationer i orienteringen med komponentsidan uppåt; P4 till P7 är samma fyra rotationer efter att chippet vänts på rygg.
- bno055.AXIS_P0: bytes¶
Chippet uppåtvänt, roterat 90° moturs från
AXIS_P1. Utdataxlar:X = -Yc,Y = +Xc,Z = +Zc.
- bno055.AXIS_P1: bytes¶
Chippet uppåtvänt i BNO055-databladets standardorientering. Ingen omkoppling tillämpas:
X = +Xc,Y = +Yc,Z = +Zc.
- bno055.AXIS_P2: bytes¶
Chippet uppåtvänt, roterat 180° från
AXIS_P1. Utdataxlar:X = -Xc,Y = -Yc,Z = +Zc.
- bno055.AXIS_P3: bytes¶
Chippet uppåtvänt, roterat 90° medurs från
AXIS_P1. Utdataxlar:X = +Yc,Y = -Xc,Z = +Zc.
- bno055.AXIS_P4: bytes¶
Chippet vänt på rygg (komponentsidan nedåt) relativt
AXIS_P1. Utdataxlar:X = +Xc,Y = -Yc,Z = -Zc. Detta är den placering somBNO055-konstruktorn använder när ingetaxis-argument anges.
- bno055.AXIS_P5: bytes¶
Chippet nedåtvänt, roterat 90° moturs från
AXIS_P4. Utdataxlar:X = +Yc,Y = +Xc,Z = -Zc.