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.