bno055 — BNO055 IMU -ajuri

Tämä moduuli tarjoaa ajurin Boschin BNO055 9-akseliselle absoluuttisen suunnan sensorille I2C-väylän kautta. BNO055 fuusioi kiihtyvyysanturin, magnetometrin ja gyroskoopin datan sirulla ja tarjoaa raakojen sensorikanavien lisäksi kvaternio-, Euler-kulma-, lineaarikiihtyvyys- ja painovoimalähdöt.

Esimerkkikäyttö:

import time
from machine import I2C
import bno055

bus = I2C(1)
imu = bno055.BNO055(bus)

while True:
    print(imu.euler())
    time.sleep_ms(100)

Luokat

class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)

Luo BNO055-ajuriolio.

  • bus on määritetty machine.I2C -väyläolio, jota käytetään kommunikointiin sensorin kanssa.

  • address on laitteen 7-bittinen I2C-osoite. Oletusarvo on 0x28.

  • mode on toimintatila, johon laite asetetaan nollauksen jälkeen. Katso toimintatilavakiot alta. Oletusarvo on NDOF_MODE.

  • axis on 2-tavuinen akselien uudelleenmäärityksen konfiguraatioarvo. Katso akselien sijoitusvakiot alta. Oletusarvo on AXIS_P4.

Konstruktori varmistaa sirun ID:n, suorittaa pehmeän nollauksen, vaihtaa normaalitehoon, soveltaa akselikonfiguraation ja siirtyy pyydettyyn toimintatilaan käyttäen ulkoista oskillaattoria. Nostaa RuntimeError-virheen, jos odotettuja ID-rekisterin arvoja ei lueta takaisin.

read_registers(register: int, size: int = 1) bytes

Lukee size tavua annetusta laiterekisteristä ja palauttaa ne bytes-oliona.

write_registers(register: int, data: bytes) None

Kirjoittaa annetut data-tavut laitteeseen alkaen rekisteristä register.

operation_mode(mode: int = None) int

Hakee tai asettaa toimintatilarekisterin. Ilman argumenttia palauttaa nykyisen tilan int-arvona. mode-argumentilla kirjoittaa uuden tilan laitteeseen. Katso toimintatilavakiot alta.

system_trigger(data: int) None

Kirjoittaa data-arvon järjestelmän laukaisurekisteriin (0x3F). Tätä käytetään sisäisesti pehmeän nollauksen (0x20) antamiseen ja ulkoisen oskillaattorin valitsemiseen (0x80).

power_mode(mode: int = None) bytes

Hakee tai asettaa tehotilarekisterin. Ilman argumenttia palauttaa nykyisen tehotilarekisterin sisällön. mode-argumentilla kirjoittaa uuden tehotilan laitteeseen.

page(num: int = None) None

Hakee tai asettaa rekisterisivun. Ilman argumenttia lukee nykyisen sivurekisterin. num-argumentilla valitsee sivun.

temperature() int

Palauttaa sirun lämpötilarekisterin arvon etumerkittömänä tavuna.

read_id() bytes

Palauttaa 4-tavuisen ID-lohkon, joka luetaan rekisteristä 0x00. Odotettu arvo on b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

Hakee tai asettaa akselien uudelleenmäärityksen konfiguraation. Ilman argumenttia palauttaa nykyisen 2-tavuisen akselikonfiguraation. placement-argumentilla kirjoittaa annetun 2-tavuisen akselikonfiguraation. Käytä jotakin alla olevista AXIS_P0..AXIS_P7-vakioista.

quaternion() list

Palauttaa fuusioidun suunnan 4-alkioisena liukulukulistana [w, x, y, z], joka on skaalattu yksikkökvaternion alueelle.

euler() list

Palauttaa fuusioidun suunnan 3-alkioisena liukulukulistana [yaw, roll, pitch] asteina.

accelerometer() list

Palauttaa kiihtyvyysanturin lukeman 3-alkioisena liukulukulistana [x, y, z] yksikössä m/s^2.

magnetometer() list

Palauttaa magnetometrin lukeman 3-alkioisena liukulukulistana [x, y, z] mikroteslana.

gyroscope() list

Palauttaa gyroskoopin lukeman 3-alkioisena liukulukulistana [x, y, z] asteina sekunnissa.

linear_acceleration() list

Palauttaa painovoimakompensoidun lineaarikiihtyvyyden 3-alkioisena liukulukulistana [x, y, z] yksikössä m/s^2.

gravity() list

Palauttaa painovoimavektorin 3-alkioisena liukulukulistana [x, y, z] yksikössä m/s^2.

Vakiot

Toimintatilat

bno055.CONFIG_MODE: int

Konfiguraatiotila (0x00). Laitteen on oltava tässä tilassa konfiguraatiorekistereiden muuttamiseksi.

bno055.ACCONLY_MODE: int

Pelkän kiihtyvyysanturin ei-fuusiotila (0x01).

bno055.MAGONLY_MODE: int

Pelkän magnetometrin ei-fuusiotila (0x02).

bno055.GYRONLY_MODE: int

Pelkän gyroskoopin ei-fuusiotila (0x03).

bno055.ACCMAG_MODE: int

Kiihtyvyysanturin + magnetometrin ei-fuusiotila (0x04).

bno055.ACCGYRO_MODE: int

Kiihtyvyysanturin + gyroskoopin ei-fuusiotila (0x05).

bno055.MAGGYRO_MODE: int

Magnetometrin + gyroskoopin ei-fuusiotila (0x06).

bno055.AMG_MODE: int

Kiihtyvyysanturin + magnetometrin + gyroskoopin ei-fuusiotila (0x07).

bno055.IMUPLUS_MODE: int

IMU-fuusiotila, joka käyttää kiihtyvyysanturia + gyroskooppia (0x08).

bno055.COMPASS_MODE: int

Kompassifuusiotila, joka käyttää kiihtyvyysanturia + magnetometriä (0x09).

bno055.M4G_MODE: int

Magneetti-gyroskoopille-fuusiotila (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

9-DOF-fuusiotila nopea magnetometrin kalibrointi poissa käytöstä (0x0B).

bno055.NDOF_MODE: int

9-DOF-fuusiotila nopea magnetometrin kalibrointi käytössä (0x0C). Tämä on konstruktorin käyttämä oletustila.

Akselien sijoitukset

Seuraavat 2-tavuiset arvot välitetään BNO055.axis() -metodille laitteen koordinaatiston uudelleenmäärittämiseksi. Kukin vakio on (AXIS_MAP_CONFIG, AXIS_MAP_SIGN)-rekisteripari BNO055:n datalehdestä (osio 3.4, Axis remap), valmiiksi koodattuna jollekin kahdeksasta vakiosijoitussuunnasta.

Valitse vakio, jonka lähtöakselit vastaavat sitä, miten siru on fyysisesti kiinnitetty isäntäpiirilevylle:

Vakio

Lähtö X

Lähtö Y

Lähtö Z

Tavut

Kiinnitys

AXIS_P0

-Yc

+Xc

+Zc

21 04

etupuoli ylöspäin, 90° vastapäivään P1:stä

AXIS_P1

+Xc

+Yc

+Zc

24 00

etupuoli ylöspäin, datalehden oletus

AXIS_P2

-Xc

-Yc

+Zc

24 06

etupuoli ylöspäin, käännetty 180°

AXIS_P3

+Yc

-Xc

+Zc

21 02

etupuoli ylöspäin, 90° myötäpäivään P1:stä

AXIS_P4

+Xc

-Yc

-Zc

24 03

etupuoli alaspäin, käännetty X-akselin ympäri (konstruktorin oletus)

AXIS_P5

+Yc

+Xc

-Zc

21 01

etupuoli alaspäin, kierretty 90° vastapäivään P4:stä

AXIS_P6

-Yc

-Xc

-Zc

21 07

etupuoli alaspäin, kierretty 180° P4:stä

AXIS_P7

-Xc

+Yc

-Zc

24 05

etupuoli alaspäin, kierretty 90° myötäpäivään P4:stä

Xc / Yc / Zc tarkoittavat sirun sisäisiä akseleita (kuten BNO055:n datalehdessä on painettu). ”Lähtö”-sarakkeet ovat akselit, jotka laite tuottaa metodien BNO055.euler(), BNO055.gyro() jne. kautta. P0P3 ovat sirun neljä 90°-kiertoa komponenttipuoli ylöspäin -suunnassa; P4P7 ovat samat neljä kiertoa, kun siru on käännetty selälleen.

bno055.AXIS_P0: bytes

Siru etupuoli ylöspäin, kierretty 90° vastapäivään AXIS_P1-vakiosta. Lähtöakselit: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

Siru etupuoli ylöspäin BNO055:n datalehden oletussuunnassa. Uudelleenmääritystä ei sovelleta: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

Siru etupuoli ylöspäin, kierretty 180° AXIS_P1-vakiosta. Lähtöakselit: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

Siru etupuoli ylöspäin, kierretty 90° myötäpäivään AXIS_P1-vakiosta. Lähtöakselit: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

Siru käännetty selälleen (komponenttipuoli alaspäin) suhteessa AXIS_P1-vakioon. Lähtöakselit: X = +Xc, Y = -Yc, Z = -Zc. Tätä sijoitusta käyttää BNO055-konstruktori, kun axis-argumenttia ei anneta.

bno055.AXIS_P5: bytes

Siru etupuoli alaspäin, kierretty 90° vastapäivään AXIS_P4-vakiosta. Lähtöakselit: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

Siru etupuoli alaspäin, kierretty 180° AXIS_P4-vakiosta. Lähtöakselit: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

Siru etupuoli alaspäin, kierretty 90° myötäpäivään AXIS_P4-vakiosta. Lähtöakselit: X = -Xc, Y = +Yc, Z = -Zc.