bno055 — Driver IMU BNO055¶
Este módulo fornece um driver para o sensor de orientação absoluta de 9 eixos Bosch BNO055 via I2C. O BNO055 funde dados de acelerómetro, magnetómetro e giroscópio no chip e expõe saídas de quaternião, ângulo de Euler, aceleração linear e gravidade, além dos canais brutos do sensor.
Exemplo de utilização:
import time
from machine import I2C
import bno055
bus = I2C(1)
imu = bno055.BNO055(bus)
while True:
print(imu.euler())
time.sleep_ms(100)
Classes¶
- class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)¶
Constrói uma instância do driver BNO055.
busé um objeto de busmachine.I2Cconfigurado, utilizado para comunicar com o sensor.addressé o endereço I2C de 7 bits do dispositivo. Por omissão é0x28.modeé o modo de operação em que o dispositivo é colocado após o reset. Consulte as constantes de modo de operação abaixo. Por omissão éNDOF_MODE.axisé um valor de configuração de remapeamento de eixos de 2 bytes. Consulte as constantes de posicionamento de eixos abaixo. Por omissão éAXIS_P4.
O construtor verifica o ID do chip, efetua um reset por software, muda para alimentação normal, aplica a configuração de eixos e entra no modo de operação solicitado utilizando o oscilador externo. Lança
RuntimeErrorse os valores esperados do registo de ID não forem lidos de volta.- read_registers(register: int, size: int = 1) bytes¶
Lê
sizebytes a partir do registo de dispositivo indicado e retorna-os como um objetobytes.
- write_registers(register: int, data: bytes) None¶
Escreve os bytes
datafornecidos no dispositivo a partir deregister.
- operation_mode(mode: int = None) int¶
Obtém ou define o registo de modo de operação. Sem argumento, retorna o modo atual como um
int. Com um argumentomode, escreve o novo modo no dispositivo. Consulte as constantes de modo de operação abaixo.
- system_trigger(data: int) None¶
Escreve
datano registo de acionamento do sistema (0x3F). Utilizado internamente para emitir um reset por software (0x20) e para selecionar o oscilador externo (0x80).
- power_mode(mode: int = None) bytes¶
Obtém ou define o registo de modo de alimentação. Sem argumento, retorna o conteúdo atual do registo de modo de alimentação. Com um argumento
mode, escreve o novo modo de alimentação no dispositivo.
- page(num: int = None) None¶
Obtém ou define a página do registo. Sem argumento, lê o registo de página atual. Com um argumento
num, seleciona a página.
- read_id() bytes¶
Retorna o bloco de ID de 4 bytes lido a partir do registo
0x00. O valor esperado éb'\xA0\xFB\x32\x0F'.
- axis(placement: bytes = None) bytes¶
Obtém ou define a configuração de remapeamento de eixos. Sem argumento, retorna a configuração atual de 2 bytes. Com um argumento
placement, escreve a configuração de eixos de 2 bytes fornecida. Utilize uma das constantesAXIS_P0..AXIS_P7abaixo.
- quaternion() list¶
Retorna a orientação fundida como uma lista de 4 elementos
[w, x, y, z]de floats escalados para o intervalo do quaternião unitário.
- euler() list¶
Retorna a orientação fundida como uma lista de 3 elementos
[yaw, roll, pitch]de floats em graus.
- accelerometer() list¶
Retorna a leitura do acelerómetro como uma lista de 3 elementos
[x, y, z]de floats em m/s^2.
- magnetometer() list¶
Retorna a leitura do magnetómetro como uma lista de 3 elementos
[x, y, z]de floats em micro-Tesla.
- gyroscope() list¶
Retorna a leitura do giroscópio como uma lista de 3 elementos
[x, y, z]de floats em graus por segundo.
Constantes¶
Modos de operação¶
- bno055.CONFIG_MODE: int¶
Modo de configuração (
0x00). O dispositivo deve estar neste modo para alterar os registos de configuração.
Posicionamentos de eixos¶
Os seguintes valores de 2 bytes são passados a BNO055.axis() para remapear o sistema de coordenadas do dispositivo. Cada constante é o par de registos (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) da folha de dados do BNO055 (Secção 3.4, Axis remap), pré-codificados para uma das oito orientações de posicionamento padrão.
Escolha a constante cujos eixos de saída correspondem à forma como o chip está fisicamente montado no PCB anfitrião:
Constante |
Saída X |
Saída Y |
Saída Z |
Bytes |
Montagem |
|---|---|---|---|---|---|
|
|
|
|
virado para cima, 90° CCW em relação a P1 |
|
|
|
|
|
virado para cima, orientação predefinida da folha de dados |
|
|
|
|
|
virado para cima, rodado 180° |
|
|
|
|
|
virado para cima, 90° CW em relação a P1 |
|
|
|
|
|
virado para baixo, invertido em torno de X (predefinição do construtor) |
|
|
|
|
|
virado para baixo, rodado 90° CCW em relação a P4 |
|
|
|
|
|
virado para baixo, rodado 180° em relação a P4 |
|
|
|
|
|
virado para baixo, rodado 90° CW em relação a P4 |
Xc / Yc / Zc designam os eixos intrínsecos do chip (conforme indicado na folha de dados do BNO055). As colunas «Saída» são os eixos que o dispositivo fornece via BNO055.euler(), BNO055.gyro(), etc. P0 a P3 são as quatro rotações de 90° do chip na orientação com o lado de componentes para cima; P4 a P7 são as mesmas quatro rotações após virar o chip para o lado contrário.
- bno055.AXIS_P0: bytes¶
Chip virado para cima, rodado 90° CCW em relação a
AXIS_P1. Eixos de saída:X = -Yc,Y = +Xc,Z = +Zc.
- bno055.AXIS_P1: bytes¶
Chip virado para cima na orientação predefinida da folha de dados do BNO055. Nenhum remapeamento é aplicado:
X = +Xc,Y = +Yc,Z = +Zc.
- bno055.AXIS_P2: bytes¶
Chip virado para cima, rodado 180° em relação a
AXIS_P1. Eixos de saída:X = -Xc,Y = -Yc,Z = +Zc.
- bno055.AXIS_P3: bytes¶
Chip virado para cima, rodado 90° CW em relação a
AXIS_P1. Eixos de saída:X = +Yc,Y = -Xc,Z = +Zc.
- bno055.AXIS_P4: bytes¶
Chip virado ao contrário (lado dos componentes para baixo) em relação a
AXIS_P1. Eixos de saída:X = +Xc,Y = -Yc,Z = -Zc. Este é o posicionamento utilizado pelo construtorBNO055quando nenhum argumentoaxisé fornecido.
- bno055.AXIS_P5: bytes¶
Chip virado para baixo, rodado 90° CCW em relação a
AXIS_P4. Eixos de saída:X = +Yc,Y = +Xc,Z = -Zc.