bno055 — Driver da 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 os dados do acelerômetro, magnetômetro e giroscópio no próprio chip e expõe saídas de quaternion, ângulo de Euler, aceleração linear e gravidade, além dos canais de sensor brutos.
Exemplo de uso:
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 do BNO055.
busé um objeto de barramentomachine.I2Cconfigurado, usado para se comunicar com o sensor.addressé o endereço I2C de 7 bits do dispositivo. O padrão é0x28.modeé o modo de operação no qual o dispositivo é colocado após o reset. Veja as constantes de modo de operação abaixo. O padrão éNDOF_MODE.axisé um valor de configuração de remapeamento de eixos de 2 bytes. Veja as constantes de posicionamento de eixos abaixo. O padrão éAXIS_P4.
O construtor verifica o ID do chip, executa um soft reset, alterna para o modo de energia normal, aplica a configuração de eixos e entra no modo de operação solicitado usando o oscilador externo. Gera
RuntimeErrorse os valores esperados dos registradores de ID não forem lidos de volta.- read_registers(register: int, size: int = 1) bytes¶
Lê
sizebytes do registrador de dispositivo fornecido e os retorna como um objetobytes.
- write_registers(register: int, data: bytes) None¶
Escreve os bytes de
datafornecidos no dispositivo a partir deregister.
- operation_mode(mode: int = None) int¶
Obtém ou define o registrador de modo de operação. Sem argumento, retorna o modo atual como um
int. Com um argumentomode, escreve o novo modo no dispositivo. Veja as constantes de modo de operação abaixo.
- system_trigger(data: int) None¶
Escreve
datano registrador de gatilho do sistema (0x3F). Isso é usado internamente para emitir um soft reset (0x20) e para selecionar o oscilador externo (0x80).
- power_mode(mode: int = None) bytes¶
Obtém ou define o registrador de modo de energia. Sem argumento, retorna o conteúdo atual do registrador de modo de energia. Com um argumento
mode, escreve o novo modo de energia no dispositivo.
- page(num: int = None) None¶
Obtém ou define a página de registradores. Sem argumento, lê o registrador de página atual. Com um argumento
num, seleciona a página.
- read_id() bytes¶
Retorna o bloco de ID de 4 bytes lido do registrador
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 de eixos de 2 bytes atual. Com um argumento
placement, escreve a configuração de eixos de 2 bytes fornecida. Use 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 quaternion 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 registradores de configuração.
Posicionamentos de eixos¶
Os seguintes valores de 2 bytes são passados para BNO055.axis() para remapear o sistema de coordenadas do dispositivo. Cada constante é o par de registradores (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) do datasheet do BNO055 (Seção 3.4, Axis remap), pré-codificado para uma das oito orientações de posicionamento padrão.
Escolha a constante cujos eixos de saída correspondam à forma como o chip está fisicamente montado na PCB do host:
Constante |
Saída X |
Saída Y |
Saída Z |
Bytes |
Montagem |
|---|---|---|---|---|---|
|
|
|
|
voltado para cima, 90° no sentido anti-horário a partir de P1 |
|
|
|
|
|
voltado para cima, padrão do datasheet |
|
|
|
|
|
voltado para cima, girado 180° |
|
|
|
|
|
voltado para cima, 90° no sentido horário a partir de P1 |
|
|
|
|
|
voltado para baixo, invertido em torno de X (padrão do construtor) |
|
|
|
|
|
voltado para baixo, girado 90° no sentido anti-horário a partir de P4 |
|
|
|
|
|
voltado para baixo, girado 180° a partir de P4 |
|
|
|
|
|
voltado para baixo, girado 90° no sentido horário a partir de P4 |
Xc / Yc / Zc denotam os eixos intrínsecos do chip (conforme impressos no datasheet do BNO055). As colunas “Saída” são os eixos que o dispositivo entrega via BNO055.euler(), BNO055.gyro(), etc. P0 até P3 são as quatro rotações de 90° do chip na orientação com o lado dos componentes para cima; P4 até P7 são as mesmas quatro rotações após virar o chip de costas.
- bno055.AXIS_P0: bytes¶
Chip voltado para cima, girado 90° no sentido anti-horário a partir de
AXIS_P1. Eixos de saída:X = -Yc,Y = +Xc,Z = +Zc.
- bno055.AXIS_P1: bytes¶
Chip voltado para cima na orientação padrão do datasheet do BNO055. Nenhum remapeamento é aplicado:
X = +Xc,Y = +Yc,Z = +Zc.
- bno055.AXIS_P2: bytes¶
Chip voltado para cima, girado 180° a partir de
AXIS_P1. Eixos de saída:X = -Xc,Y = -Yc,Z = +Zc.
- bno055.AXIS_P3: bytes¶
Chip voltado para cima, girado 90° no sentido horário a partir de
AXIS_P1. Eixos de saída:X = +Yc,Y = -Xc,Z = +Zc.
- bno055.AXIS_P4: bytes¶
Chip virado de costas (lado dos componentes para baixo) em relação a
AXIS_P1. Eixos de saída:X = +Xc,Y = -Yc,Z = -Zc. Este é o posicionamento usado pelo construtorBNO055quando nenhum argumentoaxisé fornecido.
- bno055.AXIS_P5: bytes¶
Chip voltado para baixo, girado 90° no sentido anti-horário a partir de
AXIS_P4. Eixos de saída:X = +Yc,Y = +Xc,Z = -Zc.