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, 3D printed using PLA.
Design Stages
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.
Later in the project, I expanded the electrical architecture for vehicle integration by adding an off the shelf buck converter. This stepped down erratic 12V automotive/motorcycle power directly to a clean 3.3V rail to continuously power the ESP32 and sensors without relying on rechargeable battery packs. Finally, anticipating future upgrades and sensor additions, I implemented a modular hardware interface using two 3.5mm TRRS audio jacks I had on hand. Because 3.5mm jacks provide at least three to four isolated conductors in a compact, rugged form factor, they served as an ideal plug-and-play port for wiring external telemetry sensors into the final assembly without re-soldering the core board stack.
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.
Stage 3: CAD Packaging & 3D Print Iteration
To mount this system to a motorcycle, the physical footprint had to be as compact as possible. I designed the SolidWorks enclosure to stack the PCBs vertically. To keep the assembly lightweight and hardware-free, I avoided traditional metal screws entirely. Instead, I utilized the existing mounting holes on the PCBs and designed corresponding 3D-printed cylindrical pegs inside the enclosure for a friction-based press fit.
This required multiple rapid prototyping iterations. Because FDM 3D prints inherently expand and shrink depending on the material and thermal dynamics, my initially "CAD-accurate" dimensions did not fit in reality. I adjusted the pin diameters and hole tolerances, printing test pieces until I dialed in the exact expansion offset for my specific 3D printer, resulting in a perfectly snug, vibration-resistant fit.


Rapid FDM Fitment Test Prints: Calibration prints designed to dial in thermal shrinkage and mechanical tolerances for the rocker switch, PCB press-fit standoffs, XT60 power port, and USB-C bulkhead cutout.
Iterating on these isolated test pieces allowed me to empirically calibrate for material shrinkage, achieving the precise interference tolerances required for a vibration-resistant press fit.








SolidWorks internal section view showing vertical PCB mounting posts, clearance offsets, and connector brackets.
CAD assembly highlighting the angled OLED bezel, modular 3.5mm TRRS ports, XT60 power input, and rocker switch.
Front orthographic CAD model mapping cutouts for the OLED screen, dual sensor jacks, XT60 connector, USB-C port, and SMA antenna bulkhead.
Physical 3D-printed PLA enclosure validating press-fit component retention, bulkhead clearances, and port alignments.
Stage 4: Field Testing & Kinematic Data Reduction
With the hardware securely packaged, I mounted the enclosure to my motorcycle using foam double sided tape to begin dynamic field testing. The goal was to subject the logger to high-RPM engine vibrations and aggressive acceleration to ensure the firmware and SD card buffers wouldn't drop data packets.
Following the test runs, I offloaded the CSV telemetry directly from the logger to my phone via Bluetooth, eliminating the need to reach for the enclosure or physically remove the microSD card between passes. I then rendered the trip data in an interactive Kepler.gl environment, analyzing the ground-truth GPS velocity profiles to empirically benchmark acceleration deltas and in-gear top speeds across each sprocket setup.
Interactive Kepler.gl Kinematic Route & Velocity Visualization
Interactive trajectory plot rendered from the CSV data offloaded via Bluetooth. Click and drag to rotate, pan, or inspect localized GPS velocity gradients along the test route.
Post-Mortem: Hot-Plug Failure & The Next Build
Following successful initial runs, I attempted to transition the system from temporary 5V USB-C power to a permanent 12V vehicle battery connection using an off the shelf buck converter module. During a hot-plug connection, contact bounce and inrush current caused an inductive arc across the connector terminals.
The low cost regulator lacked reverse polarity, inrush, and overvoltage protection; it shorted internally and passed the unregulated 12V bus voltage directly through to the 3.3V rail. The overvoltage spike instantly destroyed the ESP32-S3, u-blox GNSS receiver, the SD card, and OLED display.
While catastrophic to this prototype, this failure provided a critical engineering takeaway: critical instrumentation cannot rely on unrated commodity power converters lacking transient suppression. To solve this permanently for all future builds, I began designing my own Custom 6–28V to 5V Buck Converter Module with Integrated eFuse Protection in KiCad featuring hot plug inrush clamping, adjustable overcurrent thresholds, and reverse-voltage cutoff.
Iman Alizahi
Direct Contact
alizahi.i475@gmail.com
202-471-9337
Clarksburg, MD
© 2026 Iman Alizahi - Open to Full Time Mechanical, Manufacturing, and Test Engineering Roles.