IMU-GPS Data Logger

Project Objective & System Architecture​

​​​​​​To empirically evaluate the performance trade offs of altered final drive ratios on my 2007 Honda CBR600RR, I needed a high rate instrumentation rig to quantify longitudinal acceleration and in-gear top speeds across different front/rear sprocket combinations. Factory speedometers read from the transmission countershaft, introducing calibration errors whenever gearing changes; an independent, ground-truth kinematic logger was essential. I engineered a standalone DAQ package built around an ESP32-S3 microcontroller, a u-blox MAX-M10S GNSS module communicating over high-speed UART, and a 9-DOF IMU over I2C/SPI. The unit samples positional velocity, heading, and 3-axis acceleration/gyro rates while streaming live speed and GPS lock status to an onboard 0.96-inch OLED display.

Firmware Optimization & Concurrency Challenges

A primary firmware obstacle was handling concurrent sensor streams without dropping packets or bottlenecking the polling cycle during aggressive acceleration pulls. The GNSS module updates at a lower frequency than the high-rate IMU, and synchronous SD card writes were introducing blocking I/O latency that skewed time intervals:

  • Implemented multi-tasked FreeRTOS firmware to decouple high-rate sensor polling from non-blocking microSD write buffers.

  • Restructured the logging architecture to stream timestamped CSV time-series and GeoJSON trajectories without buffer overruns, enabling precise overlay of longitudinal G-forces against true GPS velocity per gear.

Mechanical Packaging & Enclosure Iterations

Mounting sensitive electronics directly to a high-revving motorcycle chassis exposed the unit to severe high-frequency engine vibration and wind load:

  • Modeled the multi piece enclosure in SolidWorks, accounting for internal component clearances, external USB-C access, SMA antenna pass-through, and XT-60 power connector.

  • The initial prototype suffered from low assembly clearances, and high forces required to place PCB's cracked certain parts of the housing.

  • Redesigned the housing with reinforced internal corner gussets, increased shell wall thickness, and optimized print infill parameters, producing an easy to assemble and tough enclosure.

Custom Telemetry System

Initial housing iterations.
Initial housing iterations.

Initial housing iterations, 3D printed using PLA.

Stage 1: Component Selection & System Architecture

I initiated this project with a hard $200 budget and a strong curiosity to experiment with GNSS tracking and raw sensor integration. While I initially wanted to implement RTK (Real-Time Kinematic) positioning for centimeter level accuracy, the modules alone exceeded my budget. Instead, I selected the u-blox MAX-M10S, prioritizing a multi constellation receiver for strong, reliable satellite reception and low power consumption, allowing the unit to run efficiently on battery power.​

To complement the GPS, I selected the ICM-20948 9-DOF IMU from SparkFun. I specifically wanted a 9-axis sensor to experiment with magnetic measurements and heading data. For the brains of the operation, I needed high-speed data logging, which drove me to select an ESP32-S3 variant featuring an onboard microSD card slot. Finally, rather than relying on plug and play Qwiic connectors, I chose to manually wire the components—including calculating and soldering the necessary I2C pull up resistors to ensure I understood the hardware layer from the ground up. I also integrated a dedicated power module to selectively toggle the OLED display to save battery.

Layout of components (ESP32, GNSS module, IMU, and power module) before assembly.

​​​Stage 2: Bench Wiring & Firmware Bring-Up

Before designing any physical housing, the system had to be proven on the bench. I manually wired the I2C and UART lines between the ESP32, the GNSS module, and the IMU, wiring in the pull-up resistors required to establish stable communication.

ICM-20948 breakout with hand-soldered I2C pull-up resistor and protective tape masking.

Initial hardware bring-up: OLED diagnostic confirmation over I2C with stacked u-blox MAX-M10S and ESP32 board assembly.

This stage was entirely about firmware validation: ensuring the multi-constellation GPS could achieve a stable lock, the IMU was streaming clean acceleration data, and the power module successfully toggled the live OLED telemetry readout.

2025-2026 • Data Logging & Telemetry System

ESP32-S3 GPS & IMU Kinematic Data Logger

Developed an ESP32-S3 vehicle dynamics logger to capture real-time chassis telemetry during track runs. Interfaced a u-blox MAX-M10S GNSS and 9-DOF IMU over UART and SPI. Eliminated buffer overruns under vibration to stream and log non-blocking CSV/GeoJSON kinematic data.