bno055 — Controlador IMU BNO055¶
Este módulo proporciona un controlador para el sensor de orientación absoluta de 9 ejes Bosch BNO055 a través de I2C. El BNO055 fusiona los datos del acelerómetro, el magnetómetro y el giroscopio en el propio chip y expone salidas de cuaternión, ángulos de Euler, aceleración lineal y gravedad, además de los canales de sensor en bruto.
Ejemplo 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)
Clases¶
- class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)¶
Construye una instancia del controlador BNO055.
buses un objeto de busmachine.I2Cconfigurado que se utiliza para comunicarse con el sensor.addresses la dirección I2C de 7 bits del dispositivo. El valor predeterminado es0x28.modees el modo de operación en el que se coloca el dispositivo después del reinicio. Consulta las constantes de modo de operación más abajo. El valor predeterminado esNDOF_MODE.axises un valor de configuración de reasignación de ejes de 2 bytes. Consulta las constantes de colocación de ejes más abajo. El valor predeterminado esAXIS_P4.
El constructor verifica el ID del chip, realiza un reinicio por software, cambia a la alimentación normal, aplica la configuración de ejes y entra en el modo de operación solicitado utilizando el oscilador externo. Lanza
RuntimeErrorsi los valores esperados de los registros de ID no se leen correctamente.- read_registers(register: int, size: int = 1) bytes¶
Lee
sizebytes del registro de dispositivo indicado y los devuelve como un objetobytes.
- write_registers(register: int, data: bytes) None¶
Escribe los bytes
dataindicados en el dispositivo comenzando enregister.
- operation_mode(mode: int = None) int¶
Obtiene o establece el registro de modo de operación. Sin argumentos, devuelve el modo actual como un
int. Con un argumentomode, escribe el nuevo modo en el dispositivo. Consulta las constantes de modo de operación más abajo.
- system_trigger(data: int) None¶
Escribe
dataen el registro de disparo del sistema (0x3F). Esto se utiliza internamente para emitir un reinicio por software (0x20) y para seleccionar el oscilador externo (0x80).
- power_mode(mode: int = None) bytes¶
Obtiene o establece el registro de modo de alimentación. Sin argumentos, devuelve el contenido actual del registro de modo de alimentación. Con un argumento
mode, escribe el nuevo modo de alimentación en el dispositivo.
- page(num: int = None) None¶
Obtiene o establece la página de registros. Sin argumentos, lee el registro de página actual. Con un argumento
num, selecciona la página.
- read_id() bytes¶
Devuelve el bloque de ID de 4 bytes leído del registro
0x00. El valor esperado esb'\xA0\xFB\x32\x0F'.
- axis(placement: bytes = None) bytes¶
Obtiene o establece la configuración de reasignación de ejes. Sin argumentos, devuelve la configuración de ejes actual de 2 bytes. Con un argumento
placement, escribe la configuración de ejes de 2 bytes proporcionada. Usa una de las constantesAXIS_P0..``AXIS_P7`` más abajo.
- quaternion() list¶
Devuelve la orientación fusionada como una lista de 4 elementos
[w, x, y, z]de números de punto flotante escalados al rango del cuaternión unitario.
- euler() list¶
Devuelve la orientación fusionada como una lista de 3 elementos
[yaw, roll, pitch]de números de punto flotante en grados.
- accelerometer() list¶
Devuelve la lectura del acelerómetro como una lista de 3 elementos
[x, y, z]de números de punto flotante en m/s^2.
- magnetometer() list¶
Devuelve la lectura del magnetómetro como una lista de 3 elementos
[x, y, z]de números de punto flotante en micro-Teslas.
- gyroscope() list¶
Devuelve la lectura del giroscopio como una lista de 3 elementos
[x, y, z]de números de punto flotante en grados por segundo.
Constantes¶
Modos de operación¶
- bno055.CONFIG_MODE: int¶
Modo de configuración (
0x00). El dispositivo debe estar en este modo para cambiar los registros de configuración.
Colocaciones de ejes¶
Los siguientes valores de 2 bytes se pasan a BNO055.axis() para reasignar el sistema de coordenadas del dispositivo. Cada constante es el par de registros (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) de la hoja de datos del BNO055 (Sección 3.4, Axis remap), precodificado para una de las ocho orientaciones de colocación estándar.
Elige la constante cuyos ejes de salida coincidan con la forma en que el chip está montado físicamente en la PCB anfitriona:
Constante |
Salida X |
Salida Y |
Salida Z |
Bytes |
Montaje |
|---|---|---|---|---|---|
|
|
|
|
boca arriba, 90° en sentido antihorario respecto a P1 |
|
|
|
|
|
boca arriba, predeterminado de la hoja de datos |
|
|
|
|
|
boca arriba, rotado 180° |
|
|
|
|
|
boca arriba, 90° en sentido horario respecto a P1 |
|
|
|
|
|
boca abajo, volteado sobre el eje X (predeterminado del constructor) |
|
|
|
|
|
boca abajo, rotado 90° en sentido antihorario respecto a P4 |
|
|
|
|
|
boca abajo, rotado 180° respecto a P4 |
|
|
|
|
|
boca abajo, rotado 90° en sentido horario respecto a P4 |
Xc / Yc / Zc denotan los ejes intrínsecos del chip (tal como están impresos en la hoja de datos del BNO055). Las columnas «Salida» son los ejes que el dispositivo entrega a través de BNO055.euler(), BNO055.gyro(), etc. De P0 a P3 son las cuatro rotaciones de 90° del chip en la orientación con el lado de componentes hacia arriba; de P4 a P7 son las mismas cuatro rotaciones tras voltear el chip sobre su dorso.
- bno055.AXIS_P0: bytes¶
Chip boca arriba, rotado 90° en sentido antihorario respecto a
AXIS_P1. Ejes de salida:X = -Yc,Y = +Xc,Z = +Zc.
- bno055.AXIS_P1: bytes¶
Chip boca arriba en la orientación predeterminada de la hoja de datos del BNO055. No se aplica ninguna reasignación:
X = +Xc,Y = +Yc,Z = +Zc.
- bno055.AXIS_P2: bytes¶
Chip boca arriba, rotado 180° respecto a
AXIS_P1. Ejes de salida:X = -Xc,Y = -Yc,Z = +Zc.
- bno055.AXIS_P3: bytes¶
Chip boca arriba, rotado 90° en sentido horario respecto a
AXIS_P1. Ejes de salida:X = +Yc,Y = -Xc,Z = +Zc.
- bno055.AXIS_P4: bytes¶
Chip volteado sobre su dorso (lado de componentes hacia abajo) respecto a
AXIS_P1. Ejes de salida:X = +Xc,Y = -Yc,Z = -Zc. Esta es la colocación utilizada por el constructor deBNO055cuando no se proporciona ningún argumentoaxis.
- bno055.AXIS_P5: bytes¶
Chip boca abajo, rotado 90° en sentido antihorario respecto a
AXIS_P4. Ejes de salida:X = +Yc,Y = +Xc,Z = -Zc.