bno055 — Driver IMU BNO055¶
Acest modul oferă un driver pentru senzorul de orientare absolută pe 9 axe Bosch BNO055 prin I2C. BNO055 combină pe cip datele de la accelerometru, magnetometru și giroscop și expune ieșiri de cuaternion, unghiuri Euler, accelerație liniară și gravitație, pe lângă canalele de senzor brute.
Exemplu de utilizare:
import time
from machine import I2C
import bno055
bus = I2C(1)
imu = bno055.BNO055(bus)
while True:
print(imu.euler())
time.sleep_ms(100)
Clase¶
- class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)¶
Construiește o instanță de driver BNO055.
buseste un obiect de magistralămachine.I2Cconfigurat, folosit pentru a comunica cu senzorul.addresseste adresa I2C pe 7 biți a dispozitivului. Valoarea implicită este0x28.modeeste modul de operare în care este pus dispozitivul după resetare. Vezi constantele modurilor de operare de mai jos. Valoarea implicită esteNDOF_MODE.axiseste o valoare de configurare a remapării axelor pe 2 octeți. Vezi constantele de plasare a axelor de mai jos. Valoarea implicită esteAXIS_P4.
Constructorul verifică ID-ul cipului, efectuează o resetare software, comută la alimentarea normală, aplică configurația axelor și intră în modul de operare solicitat folosind oscilatorul extern. Generează
RuntimeErrordacă valorile așteptate ale registrului de ID nu sunt citite înapoi.- read_registers(register: int, size: int = 1) bytes¶
Citește
sizeocteți din registrul dat al dispozitivului și îi returnează ca obiectbytes.
- write_registers(register: int, data: bytes) None¶
Scrie octeții
datadați în dispozitiv, începând de laregister.
- operation_mode(mode: int = None) int¶
Obține sau setează registrul modului de operare. Fără argument, returnează modul curent ca
int. Cu un argumentmode, scrie noul mod în dispozitiv. Vezi constantele modurilor de operare de mai jos.
- system_trigger(data: int) None¶
Scrie
dataîn registrul de declanșare a sistemului (0x3F). Acesta este folosit intern pentru a emite o resetare software (0x20) și pentru a selecta oscilatorul extern (0x80).
- power_mode(mode: int = None) bytes¶
Obține sau setează registrul modului de alimentare. Fără argument, returnează conținutul curent al registrului modului de alimentare. Cu un argument
mode, scrie noul mod de alimentare în dispozitiv.
- page(num: int = None) None¶
Obține sau setează pagina de registre. Fără argument, citește registrul paginii curente. Cu un argument
num, selectează pagina.
- read_id() bytes¶
Returnează blocul de ID pe 4 octeți citit din registrul
0x00. Valoarea așteptată esteb'\xA0\xFB\x32\x0F'.
- axis(placement: bytes = None) bytes¶
Obține sau setează configurația de remapare a axelor. Fără argument, returnează configurația curentă a axelor pe 2 octeți. Cu un argument
placement, scrie configurația axelor pe 2 octeți furnizată. Folosește una dintre constanteleAXIS_P0..AXIS_P7de mai jos.
- quaternion() list¶
Returnează orientarea combinată ca listă cu 4 elemente
[w, x, y, z]de numere în virgulă mobilă scalate la intervalul cuaternionului unitar.
- euler() list¶
Returnează orientarea combinată ca listă cu 3 elemente
[yaw, roll, pitch]de numere în virgulă mobilă în grade.
- accelerometer() list¶
Returnează citirea accelerometrului ca listă cu 3 elemente
[x, y, z]de numere în virgulă mobilă în m/s^2.
- magnetometer() list¶
Returnează citirea magnetometrului ca listă cu 3 elemente
[x, y, z]de numere în virgulă mobilă în micro-Tesla.
- gyroscope() list¶
Returnează citirea giroscopului ca listă cu 3 elemente
[x, y, z]de numere în virgulă mobilă în grade pe secundă.
Constante¶
Moduri de operare¶
- bno055.CONFIG_MODE: int¶
Mod de configurare (
0x00). Dispozitivul trebuie să fie în acest mod pentru a modifica registrele de configurare.
Plasări ale axelor¶
Următoarele valori pe 2 octeți sunt transmise către BNO055.axis() pentru a remapa sistemul de coordonate al dispozitivului. Fiecare constantă este perechea de registre (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) din fișa tehnică BNO055 (Secțiunea 3.4, Axis remap), pre-codificată pentru una dintre cele opt orientări de plasare standard.
Alege constanta ale cărei axe de ieșire corespund modului în care cipul este montat fizic pe PCB-ul gazdă:
Constantă |
Ieșire X |
Ieșire Y |
Ieșire Z |
Octeți |
Montare |
|---|---|---|---|---|---|
|
|
|
|
cu fața în sus, 90° CCW față de P1 |
|
|
|
|
|
cu fața în sus, valoarea implicită din fișa tehnică |
|
|
|
|
|
cu fața în sus, rotit 180° |
|
|
|
|
|
cu fața în sus, 90° CW față de P1 |
|
|
|
|
|
cu fața în jos, întors în jurul axei X (valoarea implicită a constructorului) |
|
|
|
|
|
cu fața în jos, rotit 90° CCW față de P4 |
|
|
|
|
|
cu fața în jos, rotit 180° față de P4 |
|
|
|
|
|
cu fața în jos, rotit 90° CW față de P4 |
Xc / Yc / Zc denotă axele intrinseci ale cipului (așa cum sunt tipărite în fișa tehnică BNO055). Coloanele „Ieșire” reprezintă axele pe care dispozitivul le livrează prin BNO055.euler(), BNO055.gyro() etc. P0 până la P3 sunt cele patru rotații de 90° ale cipului în orientarea cu partea componentelor în sus; P4 până la P7 sunt aceleași patru rotații după întoarcerea cipului pe spate.
- bno055.AXIS_P0: bytes¶
Cip cu fața în sus, rotit 90° CCW față de
AXIS_P1. Axe de ieșire:X = -Yc,Y = +Xc,Z = +Zc.
- bno055.AXIS_P1: bytes¶
Cip cu fața în sus în orientarea implicită din fișa tehnică BNO055. Nu se aplică nicio remapare:
X = +Xc,Y = +Yc,Z = +Zc.
- bno055.AXIS_P2: bytes¶
Cip cu fața în sus, rotit 180° față de
AXIS_P1. Axe de ieșire:X = -Xc,Y = -Yc,Z = +Zc.
- bno055.AXIS_P3: bytes¶
Cip cu fața în sus, rotit 90° CW față de
AXIS_P1. Axe de ieșire:X = +Yc,Y = -Xc,Z = +Zc.
- bno055.AXIS_P4: bytes¶
Cip întors pe spate (partea componentelor în jos) față de
AXIS_P1. Axe de ieșire:X = +Xc,Y = -Yc,Z = -Zc. Aceasta este plasarea folosită de constructorulBNO055atunci când nu este furnizat niciun argumentaxis.
- bno055.AXIS_P5: bytes¶
Cip cu fața în jos, rotit 90° CCW față de
AXIS_P4. Axe de ieșire:X = +Yc,Y = +Xc,Z = -Zc.