checkpoint: working sensor acquisition and axis validation
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
# Trikke Motion Telemetry Logger
|
||||
|
||||
Prototype v0 firmware for a Seeed Studio XIAO ESP32-C3 with an ADXL345
|
||||
accelerometer and L3G4200D gyroscope on a shared I2C bus.
|
||||
|
||||
This milestone does four things:
|
||||
|
||||
1. Detects and verifies both sensors by their identification registers.
|
||||
2. Configures each sensor for 100 Hz raw acquisition.
|
||||
3. Emits timestamped, sensor-native raw readings over the XIAO USB connection.
|
||||
4. Maps both sensors into a shared enclosure coordinate frame for validation.
|
||||
|
||||
BLE transport and phone-side storage come after the wired sensor path is proven.
|
||||
|
||||
## Wiring
|
||||
|
||||
| Signal | XIAO pin | ESP32-C3 GPIO |
|
||||
| --- | --- | --- |
|
||||
| SDA | D4 | GPIO6 |
|
||||
| SCL | D5 | GPIO7 |
|
||||
| Sensor power | 3V3 | — |
|
||||
| Sensor ground | GND | — |
|
||||
|
||||
Both breakouts share SDA, SCL, 3V3, and GND. The firmware checks both possible
|
||||
7-bit I2C addresses for each device:
|
||||
|
||||
- ADXL345: `0x53` or `0x1D`; expected `DEVID` is `0xE5`.
|
||||
- L3G4200D: `0x69` or `0x68`; expected `WHO_AM_I` is `0xD3`.
|
||||
|
||||
## Sensor configuration
|
||||
|
||||
- ADXL345: 100 Hz output rate, full-resolution mode, +/-8 g. Nominal scale is
|
||||
3.9 mg/LSB.
|
||||
- L3G4200D: 100 Hz output rate, 25 Hz bandwidth, +/-500 dps. Nominal scale is
|
||||
17.5 mdps/LSB.
|
||||
|
||||
The enclosure coordinate frame is:
|
||||
|
||||
- +X points right in the reference photograph.
|
||||
- +Y points toward the top of the enclosure.
|
||||
- +Z points out of the board toward the enclosure cover.
|
||||
|
||||
The L3G4200D already matches that frame. The ADXL345 mapping is:
|
||||
|
||||
```text
|
||||
enclosure X = native Y
|
||||
enclosure Y = -native X
|
||||
enclosure Z = native Z
|
||||
```
|
||||
|
||||
No calibration, filtering, or sensor fusion is performed yet.
|
||||
|
||||
## Build and flash
|
||||
|
||||
ESP-IDF 6.0.2 is installed at:
|
||||
|
||||
```text
|
||||
/Users/jay/.espressif/v6.0.2/esp-idf
|
||||
```
|
||||
|
||||
For each new terminal:
|
||||
|
||||
```sh
|
||||
source /Users/jay/.espressif/v6.0.2/esp-idf/export.sh
|
||||
idf.py build
|
||||
idf.py -p /dev/cu.usbmodem1134101 flash monitor
|
||||
```
|
||||
|
||||
Exit the serial monitor with `Ctrl-]`.
|
||||
|
||||
## USB output
|
||||
|
||||
After startup metadata, records use CSV:
|
||||
|
||||
```text
|
||||
sequence,timestamp_us,accel_x_raw,accel_y_raw,accel_z_raw,gyro_x_raw,gyro_y_raw,gyro_z_raw,accel_native_x_raw,accel_native_y_raw,accel_native_z_raw,gyro_native_x_raw,gyro_native_y_raw,gyro_native_z_raw
|
||||
```
|
||||
|
||||
`timestamp_us` is the ESP32-C3 monotonic microsecond timer since boot. The axes
|
||||
in the first six sample columns use the enclosure frame above. The appended native
|
||||
columns are temporary diagnostics for the coordinated orientation test.
|
||||
Reference in New Issue
Block a user