Automating photogrammetry – 3D printing, an Arduino, and an Android phone
Summary: Capturing hundreds of photographs for high-detail photogrammetry can be a tedious manual chore. By combining a 3D-printed turntable, an Arduino-driven stepper motor, and a networked Android phone running Python, small-object 3D scanning can be fully automated with outstanding reconstruction quality.
Key Takeaways
- Automated Capture Pipeline: Eliminates the manual effort of shooting hundreds of angles by synchronizing a motor-driven turntable with a smartphone camera over Wi-Fi.
- Accessible Hardware: Built using an entry-level 3D printer (Dremel 3D20), basic Arduino starter components, and an inexpensive stepper motor driver.
- Seamless Software Reconstruction: AliceVision Meshroom successfully aligned 720 images across four distinct object orientations without requiring manual feature alignment.
Detailed Overview
Photogrammetry provides an accessible way to digitize physical objects for free, but manually snapping hundreds of photos is time-consuming. To solve this, a fully automated capture rig can be constructed to rotate an object incrementally while triggering a smartphone camera.
Fabrication: 3D Printing the Rig
The mechanical turntable design originated from a design shared on Reddit and Thingiverse.

Because the build volume of a Dremel 3D20 is limited, parts that exceeded the print bed were split in half using Autodesk MeshMixer and printed individually:

The printed components press-fit together cleanly without requiring glue.
Deep Dive & Technical Insights
Wiring the Stepper Motor and Arduino
The hardware setup utilizes an Arduino Uno and a 5 V stepper motor paired with a driver board.

The wiring configuration connects:
- Pins
2, 3, 4, 5on the Arduino to driver pinsIN1throughIN4. 5 Vpower andGNDfrom the Arduino to the stepper driver power rails.
The control sketch (.ino file from the Thingiverse release) is uploaded directly to the Arduino board via the Arduino IDE.
Network Communication & Automation Scripts
The scanning process is coordinated between a PC (such as a Microsoft Surface Go) and an Android smartphone via Python over a local Wi-Fi network.

Android Configuration:
- Install QPython on the Android device.
- Load
Server.py(available via the modified AA-Scan repository). - Set
serverAddressto match the local IP of the smartphone (e.g.,192.168.8.100), define the image storage directory, and execute the script.

Computer Configuration:
- Identify the Arduino's serial port (e.g.,
COM3). - Open
Client.py, updateserverAddressListwith the phone's IP address, and specify the correct COM port. - Run the script:
python Client.py
- Identify the Arduino's serial port (e.g.,
Automated Scanning in Action
Once triggered, the computer commands the Arduino to step the turntable, pausing at each increment while notifying the phone over Wi-Fi to snap a photograph.
Watch Video Demonstration: Automated Turntable and Phone Capture
Results and Model Processing
To evaluate the rig, a small rabbit vertebra measuring under 2 cm in length was captured across four separate resting orientations (dorsal, ventral, cranial, and caudal sides), producing 720 images in total.
All 720 photographs were fed into AliceVision Meshroom in a single batch. Due to the high-key lighting setup and neutral white turntable plate, Meshroom successfully aligned the entire image set without requiring manual feature masking or multi-chunk alignment.
- Interactive 3D Model: View the 3D Rabbit Vertebra on Sketchfab
Conclusion & Resources
By offloading repetitive capture tasks to an Arduino and utilizing an existing smartphone camera over Wi-Fi, this setup provides a portable, highly effective photogrammetry workflow suited for digitizing delicate, small-scale specimens.
- Source Code: AA-Scan GitHub Repository
- 3D Printable Files: Thingiverse 3D Scanner Files
- Subsequent Expansion: Extending the Setup to Support DSLRs