Skip to content

Sensors

BNO055 9-DOF IMU

Bosch BNO055 with on-chip sensor fusion. Outputs absolute orientation (quaternion) + calibrated linear acceleration at 100 Hz.

Property Value
I²C address 0x28 (ADR=GND), 0x29 (ADR=3.3V)
I²C speed 400 kHz (fast mode)
Output rate 100 Hz (NDOF mode)
Per-IMU payload 28 bytes: quat w/x/y/z + lin accel x/y/z (float32 LE)
Note Can stretch I²C clock up to ~700 µs during fusion. Use 4.7 kΩ pull-ups.

IMU placement

# Location Address Bus MCU
0 Left wrist 0x28 I2C1 STM32
1 Right wrist 0x29 I2C1 STM32
2 Left upper arm 0x28 I2C2 STM32
3 Right upper arm 0x29 I2C2 STM32
4 Chest 0x28 I2C0 KB2040
5 Thigh 0x28 I2C1 KB2040

MyoWare 2.0 Muscle Sensor

Analog EMG envelope sensor. Outputs a 0–3.3 V signal proportional to muscle activation. The firmware reads the raw ADC value and normalizes to 0.0–1.0.

# Placement ADC pin
0 Forearm flexor A0
1 Lumbar erector (back) A1

The firmware oversamples 4× and averages to reduce noise.


FSR 402 Force Sensor

Force-sensitive resistor (0.1"–4.5" sensing region). Used in a voltage divider with 10 kΩ pull-down: FSR leg → 3.3 V, other leg → ADC pin + 10 kΩ → GND. Output normalized to 0.0–1.0.

# Placement ADC pin
0 Left heel A2
1 Left toe A3
2 Right heel A4
3 Right toe A5

FSR drift

FSRs drift with temperature and wear. The feature extractor uses relative change and heel/toe ratios, not absolute force. Calibrate per session for best results.


Intel RealSense D435i

RGB-D camera with built-in IMU. Mounted on helmet for ground-truth activity annotation. Connects via USB 3.0 (separate from the MCU USB-C). Requires ~200 MB/s bandwidth — use a dedicated USB 3.0 port, not a hub.

Install: pip install pyrealsense2


BMP390 (backordered)

Barometric pressure sensor for altitude estimation. Architected for but not required. Two float32 fields sit in the packet at bytes 202–209; the host parser reads them, and the recorder stores them. The firmware writes 0.0 until the sensor is fitted.

Integration (when the sensor arrives): write a driver module for the BMP390, add one put_f32 pair in packet_builder.c — no protocol change needed. See BMP390 Integration.