top of page

3D Orbital Scanner

Screenshot 2025-10-15 150847.png

I designed and built a 3D scanning system capable of reconstructing physical objects using a dual-servo pan-and-tilt mechanism paired with an infrared distance sensor. The scanner was powered by an Arduino Uno R4, which controlled servo motion and collected distance data that I later processed in Python and MATLAB for visualization. My focus was on integrating mechanical design, electrical stability, and computational calibration into a single cohesive system.

I selected the Taidacent GP2Y0A51SK0F infrared sensor after analyzing multiple options. Its short minimum sensing range of around 1.25 cm made it far more effective for close-range measurements compared to the Sharp GP2Y0A02YK0F, which required at least 15 cm to produce accurate data. I modeled and fabricated the scanning mechanism in CAD, implementing a 2:1 gear ratio to extend the servo’s 180° motion to a full 360° rotation. The sensor arm was shortened to reduce torque load, and the base was stabilized with extended legs to minimize vibration during scanning.

Screenshot 2025-10-15 192613.png
Screenshot 2025-10-15 192604.png

To handle transient current spikes from the high-torque servos, I added a 680 µF electrolytic capacitor across the power rail. Using the relation C = IΔt/ΔV with a 1.1 A current draw over 1 ms and a maximum 0.7 V drop, I calculated that around 1570 µF would be ideal. Although the only capacitor I had available to me was smaller than what I calculated, it effectively mitigated brownouts and voltage dips, ensuring consistent servo performance and system reliability.

I developed a custom calibration curve to translate raw analog readings into accurate distance values. By experimentally mapping sensor output against known distances and performing logarithmic regression in MATLAB, we derived a power-law transfer equation:

Distance = 1548.8 × (DigitalReading)^−1.1073

(DigitalReading being a variable representing the direct value output from the sensor)

This achieved an R² = 0.97 and a mean error of only 0.7 inches, confirming high precision within the scanner’s operating range. The function was then integrated directly into the Arduino firmware to enable real-time conversion of sensor data into physical distance measurements.

Screenshot 2025-10-15 192557.png

Finally, I programmed a complete Arduino–Python–MATLAB pipeline to automate scanning, data logging, and visualization. The Arduino executed a non-blocking “snake” scan pattern for efficient coverage, while Python handled serial communication and spherical-to-Cartesian coordinate conversion to produce a 3D point cloud. MATLAB was used to visualize the reconstructed geometry and generate rotating renders of the scanned object. The final system integrated mechanical precision, electronics, and software into a fully functional 3D scanning prototype.

Visualized Data

3D Scanner

bottom of page