Files
smart-serow/arduino/IMU.md
2026-02-02 19:30:15 +09:00

2.6 KiB

WT61 IMU Quick Reference

6-axis IMU (accelerometer + gyroscope) with onboard angle calculation via Kalman filter.

Serial Configuration

Setting Factory Default Our Config
Baud rate 115200 115200
Output rate 100Hz 100Hz

Config commands (sent on init):

0xFF 0xAA 0x66  # Vertical mounting mode
0xFF 0xAA 0x63  # 115200 baud / 100Hz

Settings are saved to flash - persist across power cycles.

Fallback to 9600/20Hz: If 115200 causes packet loss on AltSoftSerial, change 0x63 to 0x64 in imu.cpp and add imuSerial.begin(9600) after the delay.

Wiring (ATmega328P / AltSoftSerial)

WT61 Pin Arduino Pin Notes
TX 8 (RX) AltSoftSerial fixed pin
RX 9 (TX) Only needed for config commands
VCC 5V
GND GND

Packet Structure

11 bytes per packet, continuous stream (3 packet types interleaved):

Byte 0:    0x55 (header)
Byte 1:    Packet type
Bytes 2-3: Value 0 (int16_t, little-endian)
Bytes 4-5: Value 1
Bytes 6-7: Value 2
Bytes 8-9: Temperature (usually ignored)
Byte 10:   Checksum (sum of bytes 0-9, lower 8 bits)

Packet Types

Type Byte 1 V0 V1 V2
Acceleration 0x51 ax ay az
Gyroscope 0x52 gx gy gz
Angle 0x53 roll pitch yaw

Scale Factors

Measurement Formula Range
Acceleration raw / 32768.0 * 16.0 +/-16g
Gyroscope raw / 32768.0 * 2000.0 +/-2000 deg/s
Angle raw / 32768.0 * 180.0 +/-180 deg
Temperature raw / 340.0 + 36.25 Celsius

Known Quirks

  • Boot time: Module needs ~200-500ms after power-on before sending valid data
  • Config at wrong baud: Commands sent at wrong baud rate are ignored (garbled bytes) - this is actually useful for idempotent config-on-boot
  • AltSoftSerial at 115200: Technically out of spec for 16MHz AVR, but TX-only bursts of a few bytes work fine. Don't try sustained RX at that rate.

Commands

All commands are 3 bytes: 0xFF 0xAA <data>

Data Byte Function Notes
0x52 Zero Z-axis angle Resets yaw to 0
0x67 Accelerometer calibration Keep module level, zeros X/Y
0x60 Toggle sleep mode Toggles between standby and active
0x61 Serial mode Enable UART, disable I2C
0x62 I2C mode Enable I2C, disable UART
0x63 115200 baud / 100Hz Factory default
0x64 9600 baud / 20Hz Our config
0x65 Horizontal mounting Module placed flat
0x66 Vertical mounting Module placed upright