Spatial Mapping System
A standalone embedded LIDAR-style scanner. A VL53L1X time-of-flight sensor is rotated through 360° by a stepper motor to capture one planar distance scan; moving the rig along the perpendicular axis and scanning again builds a full 3D point cloud of a hallway or room. Everything runs bare-metal in C on a TI TM4C123 (ARM Cortex-M4), with I2C to the sensor, UART to the host, and a button-driven state machine covering start/stop, rotation direction, angular step and homing.

What needed to change.
Commercial LIDAR is expensive. The exercise was to reach a usable indoor 3D scan using a single low-cost time-of-flight sensor, a stepper motor and a microcontroller.
The system I chose to build.
A finite state machine drives the sensor and motor from four debounced buttons, with four status LEDs reporting measurement and transmission state. Distance samples are buffered on-chip, then streamed to a host over UART where polar samples are converted to Cartesian coordinates and rendered as a point cloud.
My role: Solo. Firmware, hardware bring-up, serial protocol design and PC-side reconstruction.
Under the surface.
The interesting parts rarely stay simple.
- The I2C bus speed was fixed by assignment, so the driver had to be parameterised and its timing verified on a mixed-signal oscilloscope rather than assumed from the datasheet.
- Converting polar samples to Cartesian coordinates on a microcontroller without hardware floating point meant watching for precision loss.
- Finding the real throughput bottleneck across sensor sampling, on-chip buffering and serial transmission.
What came out the other side.
Scanned an assigned campus location and reconstructed it as a 3D model that matched the real space. Angular resolution is switchable between 11.25° and 45° per step.
What I would improve next.
- Automate the linear displacement axis so a full 3D scan needs no manual repositioning.
- Stream scans continuously instead of buffering and then transmitting.