bno055 — BNO055 IMU 드라이버

이 모듈은 Bosch BNO055 9축 절대 방위 센서를 I2C로 제어하는 드라이버를 제공합니다. BNO055는 가속도계, 자기계, 자이로스코프 데이터를 칩 내부에서 융합하며, 원시 센서 채널 외에도 쿼터니언, 오일러 각, 선형 가속도, 중력 출력을 제공합니다.

사용 예시:

import time
from machine import I2C
import bno055

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

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

클래스

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

BNO055 드라이버 인스턴스를 생성합니다.

  • bus는 센서와 통신하는 데 사용되는 구성된 machine.I2C 버스 객체입니다.

  • address는 장치의 7비트 I2C 주소입니다. 기본값은 0x28입니다.

  • mode는 리셋 후 장치가 설정되는 동작 모드입니다. 아래의 동작 모드 상수를 참조하십시오. 기본값은 NDOF_MODE입니다.

  • axis는 2바이트 축 재배치 구성 값입니다. 아래의 축 배치 상수를 참조하십시오. 기본값은 AXIS_P4입니다.

생성자는 칩 ID를 확인하고, 소프트 리셋을 수행하고, 일반 전원으로 전환하고, 축 구성을 적용한 다음, 외부 발진기를 사용하여 요청된 동작 모드로 진입합니다. 예상되는 ID 레지스터 값이 읽히지 않으면 RuntimeError를 발생시킵니다.

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

지정된 장치 레지스터에서 size 바이트를 읽어 bytes 객체로 반환합니다.

write_registers(register: int, data: bytes) None

주어진 data 바이트를 register부터 시작하여 장치에 씁니다.

operation_mode(mode: int = None) int

동작 모드 레지스터를 가져오거나 설정합니다. 인자가 없으면 현재 모드를 int로 반환합니다. mode 인자가 있으면 새 모드를 장치에 씁니다. 아래의 동작 모드 상수를 참조하십시오.

system_trigger(data: int) None

시스템 트리거 레지스터(0x3F)에 data를 씁니다. 이는 내부적으로 소프트 리셋(0x20)을 발행하고 외부 발진기(0x80)를 선택하는 데 사용됩니다.

power_mode(mode: int = None) bytes

전원 모드 레지스터를 가져오거나 설정합니다. 인자가 없으면 현재 전원 모드 레지스터 내용을 반환합니다. mode 인자가 있으면 새 전원 모드를 장치에 씁니다.

page(num: int = None) None

레지스터 페이지를 가져오거나 설정합니다. 인자가 없으면 현재 페이지 레지스터를 읽습니다. num 인자가 있으면 페이지를 선택합니다.

temperature() int

칩 온도 레지스터 값을 부호 없는 바이트로 반환합니다.

read_id() bytes

레지스터 0x00에서 읽은 4바이트 ID 블록을 반환합니다. 예상 값은 b'\xA0\xFB\x32\x0F'입니다.

axis(placement: bytes = None) bytes

축 재배치 구성을 가져오거나 설정합니다. 인자가 없으면 현재 2바이트 축 구성을 반환합니다. placement 인자가 있으면 제공된 2바이트 축 구성을 씁니다. 아래의 AXIS_P0..AXIS_P7 상수 중 하나를 사용하십시오.

quaternion() list

융합된 방위를 단위 쿼터니언 범위로 스케일링된 부동 소수점 값의 4요소 리스트 [w, x, y, z]로 반환합니다.

euler() list

융합된 방위를 도 단위의 부동 소수점 값의 3요소 리스트 [yaw, roll, pitch]로 반환합니다.

accelerometer() list

가속도계 측정값을 m/s^2 단위의 부동 소수점 값의 3요소 리스트 [x, y, z]로 반환합니다.

magnetometer() list

자기계 측정값을 마이크로테슬라 단위의 부동 소수점 값의 3요소 리스트 [x, y, z]로 반환합니다.

gyroscope() list

자이로스코프 측정값을 초당 도 단위의 부동 소수점 값의 3요소 리스트 [x, y, z]로 반환합니다.

linear_acceleration() list

중력 보정된 선형 가속도를 m/s^2 단위의 부동 소수점 값의 3요소 리스트 [x, y, z]로 반환합니다.

gravity() list

중력 벡터를 m/s^2 단위의 부동 소수점 값의 3요소 리스트 [x, y, z]로 반환합니다.

상수

동작 모드

bno055.CONFIG_MODE: int

구성 모드(0x00). 구성 레지스터를 변경하려면 장치가 이 모드에 있어야 합니다.

bno055.ACCONLY_MODE: int

가속도계 전용 비융합 모드(0x01).

bno055.MAGONLY_MODE: int

자기계 전용 비융합 모드(0x02).

bno055.GYRONLY_MODE: int

자이로스코프 전용 비융합 모드(0x03).

bno055.ACCMAG_MODE: int

가속도계 + 자기계 비융합 모드(0x04).

bno055.ACCGYRO_MODE: int

가속도계 + 자이로스코프 비융합 모드(0x05).

bno055.MAGGYRO_MODE: int

자기계 + 자이로스코프 비융합 모드(0x06).

bno055.AMG_MODE: int

가속도계 + 자기계 + 자이로스코프 비융합 모드(0x07).

bno055.IMUPLUS_MODE: int

가속도계 + 자이로스코프를 사용하는 IMU 융합 모드(0x08).

bno055.COMPASS_MODE: int

가속도계 + 자기계를 사용하는 컴퍼스 융합 모드(0x09).

bno055.M4G_MODE: int

자이로스코프 대용 자기계 융합 모드(0x0A).

bno055.NDOF_FMC_OFF_MODE: int

빠른 자기계 보정이 비활성화된 9-DOF 융합 모드(0x0B).

bno055.NDOF_MODE: int

빠른 자기계 보정이 활성화된 9-DOF 융합 모드(0x0C). 이는 생성자가 사용하는 기본 모드입니다.

축 배치

다음 2바이트 값은 장치 좌표계를 재배치하기 위해 BNO055.axis()에 전달됩니다. 각 상수는 BNO055 데이터시트(섹션 3.4, Axis remap)의 (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) 레지스터 쌍이며, 8가지 표준 배치 방향 중 하나에 맞게 미리 인코딩되어 있습니다.

칩이 호스트 PCB에 물리적으로 장착된 방식에 출력 축이 일치하는 상수를 선택하십시오:

상수

출력 X

출력 Y

출력 Z

바이트

장착

AXIS_P0

-Yc

+Xc

+Zc

21 04

위쪽을 향함, P1에서 90° 반시계 방향

AXIS_P1

+Xc

+Yc

+Zc

24 00

위쪽을 향함, 데이터시트 기본값

AXIS_P2

-Xc

-Yc

+Zc

24 06

위쪽을 향함, 180° 회전

AXIS_P3

+Yc

-Xc

+Zc

21 02

위쪽을 향함, P1에서 90° 시계 방향

AXIS_P4

+Xc

-Yc

-Zc

24 03

아래쪽을 향함, X축 기준 뒤집힘(생성자 기본값)

AXIS_P5

+Yc

+Xc

-Zc

21 01

아래쪽을 향함, P4에서 90° 반시계 방향 회전

AXIS_P6

-Yc

-Xc

-Zc

21 07

아래쪽을 향함, P4에서 180° 회전

AXIS_P7

-Xc

+Yc

-Zc

24 05

아래쪽을 향함, P4에서 90° 시계 방향 회전

Xc / Yc / Zc는 칩의 고유 축을 나타냅니다(BNO055 데이터시트에 표기된 대로). “출력” 열은 장치가 BNO055.euler(), BNO055.gyro() 등을 통해 전달하는 축입니다. P0부터 P3까지는 부품면이 위를 향한 방향에서 칩을 90°씩 회전한 네 가지이고, P4부터 P7까지는 칩을 뒤집은 후의 동일한 네 가지 회전입니다.

bno055.AXIS_P0: bytes

칩이 위쪽을 향하고 AXIS_P1에서 90° 반시계 방향으로 회전됨. 출력 축: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

칩이 위쪽을 향하고 BNO055 데이터시트의 기본 방향에 있음. 재배치가 적용되지 않음: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

칩이 위쪽을 향하고 AXIS_P1에서 180° 회전됨. 출력 축: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

칩이 위쪽을 향하고 AXIS_P1에서 90° 시계 방향으로 회전됨. 출력 축: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

칩이 AXIS_P1 대비 뒤집힘(부품면이 아래를 향함). 출력 축: X = +Xc, Y = -Yc, Z = -Zc. 이는 axis 인자가 제공되지 않았을 때 BNO055 생성자가 사용하는 배치입니다.

bno055.AXIS_P5: bytes

칩이 아래쪽을 향하고 AXIS_P4에서 90° 반시계 방향으로 회전됨. 출력 축: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

칩이 아래쪽을 향하고 AXIS_P4에서 180° 회전됨. 출력 축: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

칩이 아래쪽을 향하고 AXIS_P4에서 90° 시계 방향으로 회전됨. 출력 축: X = -Xc, Y = +Yc, Z = -Zc.