bno055 — BNO055 IMU illesztőprogram¶
Ez a modul illesztőprogramot biztosít a Bosch BNO055 9 tengelyes abszolút orientációs érzékelőhöz I2C-n keresztül. A BNO055 a gyorsulásmérő, a magnetométer és a giroszkóp adatait a chipen összegzi, és a nyers érzékelőcsatornákon felül kvaternió-, Euler-szög-, lineáris gyorsulás- és gravitációs kimeneteket is biztosít.
Példa a használatra:
import time
from machine import I2C
import bno055
bus = I2C(1)
imu = bno055.BNO055(bus)
while True:
print(imu.euler())
time.sleep_ms(100)
Osztályok¶
- class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)¶
Létrehoz egy BNO055 illesztőprogram-példányt.
A
busegy beállítottmachine.I2Cbuszobjektum, amely az érzékelővel való kommunikációra szolgál.Az
addressaz eszköz 7 bites I2C-címe. Alapértelmezett értéke0x28.A
modeaz az üzemmód, amelybe az eszköz a visszaállítás után kerül. Lásd az alábbi üzemmód-konstansokat. Alapértelmezett értékeNDOF_MODE.Az
axisegy 2 bájtos tengely-átleképezési beállítási érték. Lásd az alábbi tengelyelhelyezési konstansokat. Alapértelmezett értékeAXIS_P4.
A konstruktor ellenőrzi a chip azonosítóját, szoftveres visszaállítást hajt végre, normál tápellátásra vált, alkalmazza a tengelybeállítást, és belép a kért üzemmódba a külső oszcillátor használatával.
RuntimeErrorhibát vált ki, ha a várt azonosítóregiszter-értékek nem olvashatók vissza.- read_registers(register: int, size: int = 1) bytes¶
Beolvas
sizebájtot a megadott eszközregiszterből, ésbytesobjektumként adja vissza azokat.
- write_registers(register: int, data: bytes) None¶
Kiírja a megadott
databájtokat az eszközre aregisterregisztertől kezdve.
- operation_mode(mode: int = None) int¶
Lekérdezi vagy beállítja az üzemmódregisztert. Argumentum nélkül az aktuális üzemmódot adja vissza
intértékként.modeargumentummal az új üzemmódot írja az eszközre. Lásd az alábbi üzemmód-konstansokat.
- system_trigger(data: int) None¶
Kiírja a
dataadatot a rendszer-triggerregiszterbe (0x3F). Ezt belsőleg a szoftveres visszaállítás kiadására (0x20) és a külső oszcillátor kiválasztására (0x80) használja.
- power_mode(mode: int = None) bytes¶
Lekérdezi vagy beállítja a tápüzemmód-regisztert. Argumentum nélkül a tápüzemmód-regiszter aktuális tartalmát adja vissza.
modeargumentummal az új tápüzemmódot írja az eszközre.
- page(num: int = None) None¶
Lekérdezi vagy beállítja a regiszteroldalt. Argumentum nélkül beolvassa az aktuális oldalregisztert.
numargumentummal kiválasztja az oldalt.
- read_id() bytes¶
Visszaadja a
0x00regiszterből beolvasott 4 bájtos azonosítóblokkot. A várt értékb'\xA0\xFB\x32\x0F'.
- axis(placement: bytes = None) bytes¶
Lekérdezi vagy beállítja a tengely-átleképezési beállítást. Argumentum nélkül az aktuális 2 bájtos tengelybeállítást adja vissza.
placementargumentummal a megadott 2 bájtos tengelybeállítást írja ki. Használja az alábbiAXIS_P0..AXIS_P7konstansok egyikét.
- quaternion() list¶
Visszaadja az összegzett orientációt 4 elemű
[w, x, y, z]listaként, lebegőpontos értékekkel az egységkvaternió tartományára skálázva.
- euler() list¶
Visszaadja az összegzett orientációt 3 elemű
[yaw, roll, pitch]listaként, lebegőpontos értékekkel fokban.
- accelerometer() list¶
Visszaadja a gyorsulásmérő mérési eredményét 3 elemű
[x, y, z]listaként, lebegőpontos értékekkel m/s^2-ben.
- magnetometer() list¶
Visszaadja a magnetométer mérési eredményét 3 elemű
[x, y, z]listaként, lebegőpontos értékekkel mikroteslában.
- gyroscope() list¶
Visszaadja a giroszkóp mérési eredményét 3 elemű
[x, y, z]listaként, lebegőpontos értékekkel fok/másodpercben.
Konstansok¶
Üzemmódok¶
- bno055.CONFIG_MODE: int¶
Konfigurációs mód (
0x00). A konfigurációs regiszterek módosításához az eszköznek ebben a módban kell lennie.
Tengelyelhelyezések¶
A következő 2 bájtos értékek a BNO055.axis() metódusnak adhatók át az eszköz koordináta-rendszerének átleképezéséhez. Minden konstans a BNO055 adatlap (3.4. szakasz, Axis remap) szerinti (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) regiszterpár, amely a nyolc szabványos elhelyezési orientáció egyikéhez van előre kódolva.
Válassza azt a konstanst, amelynek kimeneti tengelyei megfelelnek annak, ahogy a chip fizikailag fel van szerelve a gazda nyomtatott áramköri lapra:
Konstans |
Kimeneti X |
Kimeneti Y |
Kimeneti Z |
Bájtok |
Felszerelés |
|---|---|---|---|---|---|
|
|
|
|
felfelé néz, 90°-kal CCW a P1-hez képest |
|
|
|
|
|
felfelé néz, adatlap szerinti alapértelmezés |
|
|
|
|
|
felfelé néz, 180°-kal elforgatva |
|
|
|
|
|
felfelé néz, 90°-kal CW a P1-hez képest |
|
|
|
|
|
lefelé néz, X körül átfordítva (konstruktor alapértelmezése) |
|
|
|
|
|
lefelé néz, 90°-kal CCW elforgatva a P4-hez képest |
|
|
|
|
|
lefelé néz, 180°-kal elforgatva a P4-hez képest |
|
|
|
|
|
lefelé néz, 90°-kal CW elforgatva a P4-hez képest |
Az Xc / Yc / Zc a chip belső tengelyeit jelöli (ahogy a BNO055 adatlapon szerepel). A „Kimeneti” oszlopok azok a tengelyek, amelyeket az eszköz a BNO055.euler(), BNO055.gyro() stb. metódusokon keresztül szolgáltat. A P0-tól P3-ig terjedő értékek a chip négy 90°-os elforgatása alkatrész-felfelé orientációban; a P4-től P7-ig terjedő értékek ugyanaz a négy elforgatás, miután a chipet a hátára fordítottuk.
- bno055.AXIS_P0: bytes¶
A chip felfelé néz, 90°-kal CCW elforgatva a
AXIS_P1értékhez képest. Kimeneti tengelyek:X = -Yc,Y = +Xc,Z = +Zc.
- bno055.AXIS_P1: bytes¶
A chip felfelé néz a BNO055 adatlap alapértelmezett orientációjában. Nincs átleképezés alkalmazva:
X = +Xc,Y = +Yc,Z = +Zc.
- bno055.AXIS_P2: bytes¶
A chip felfelé néz, 180°-kal elforgatva a
AXIS_P1értékhez képest. Kimeneti tengelyek:X = -Xc,Y = -Yc,Z = +Zc.
- bno055.AXIS_P3: bytes¶
A chip felfelé néz, 90°-kal CW elforgatva a
AXIS_P1értékhez képest. Kimeneti tengelyek:X = +Yc,Y = -Xc,Z = +Zc.
- bno055.AXIS_P4: bytes¶
A chip a hátára fordítva (alkatrészoldal lefelé) a
AXIS_P1értékhez képest. Kimeneti tengelyek:X = +Xc,Y = -Yc,Z = -Zc. Ezt az elhelyezést használja aBNO055konstruktor, amikor nincs megadvaaxisargumentum.
- bno055.AXIS_P5: bytes¶
A chip lefelé néz, 90°-kal CCW elforgatva a
AXIS_P4értékhez képest. Kimeneti tengelyek:X = +Yc,Y = +Xc,Z = -Zc.