Spin is a photography turntable system for capturing how your DIY projects come together over time.

NOTE: If you have a laser cutter whose bed is 12" in a single dimension, click here for a modified turntable design!


Building your own Spin system involves fabricating the mechanical turntable, assembling the Spin Arduino shield, and 3D printing a motor gear and iOS device stand.

All purchased parts are available online from McMaster, Digikey, Sparkfun, and Amazon. The raw materials cost around $150. There are quick links to most materials on the left; these links exclude any acrylic or fasteners you'll need to fabricate and assemble the turntable.

If you'd like to grab all the design files in one place, check out the project on Github.

The following tools are necessary for assembling your Spin turntable

  • Philipps head screwdrivers (precision and normal)
  • M1.5 allen wrench
  • Soldering iron and basic soldering tools (tweezers, solder, and wire strippers)

You will also need to use the following machines:

  • Laser Cutter
  • 3D Printer
Turntable Fabrication

The turntable consists of laser cut, 3D printed, and purchased parts.

Recommended parts are listed below. It is highly recommended that you purchase the fasteners at your local hardware store since the parts are only available in bulk online. You can find direct links to Sparkfun, McMaster, and Digikey carts on the left side of this page. Alternatively, if you want me to mail you a kit of fasteners, send me an email at spinturntable (at) gmail (dot) com.

Item Vendor Quantity Part Number Total Price
Specialized Parts
Turntable McMaster 1 18635A52 33.02
M3 Heat-Set Inserts McMaster 1 (pack of 100) 94180A331 12.30
3/16" acrylic (total area of 30" x 14") Tap Plastics 1 3/16" acrylic 19.40
⅛" white acrylic (14"x14") Tap Plastics 1 1/8" acrylic 10.00
Misc Electronics
Stepper Motor Sparkfun 1 ROB-09238 14.95
Arduino Uno Sparkfun 1 DEV-11021 24.95
12VDC Wall Adapter Sparkfun 1 TOL-09442 5.94
M3 Standoffs Digikey 4 952-2189-ND 2.24
3.5mm Audio Cable Amazon 1 Audio Cable 7.99
M3 set screw (4mm length) 2
M3 machine screws (10mm length) 18
M3 nuts 7
¼-20 machine screws (0.625" length) 3
¼-20 nuts 3
5/16 machine screws (2.5" length) 3
5/16 nuts 3
Total: $130 + ~ $10 for fasteners

NOTE: Remember to purchase acrylic that can fit your laser cutter’s bed! The materials I suggest fit my laser cutter (3’x2’).

Laser Cutting

Spin consists of 3/16"-thick clear acrylic parts as well as a 1/8"-thick platform.

First, laser cut the base, outer gear, and stepper motor case parts out of the 3/16” acrylic (all vector cuts):

3/16" acrylic parts [dxf | cdr | ai]

Next, cut the platform out of ⅛” acrylic / ABS. The steps for fabricating the platform are, 1) raster 3 holes 0.08" deep (this is so the platform can rest atop 3 screws on the turntable), 2) vector cut the outline of the platform, and 3) flip the part over and vector engrave the centermark (green). The centermark should not cut through the entire part.

1/8" acrylic platform (front on left, back on right) [dxf | cdr | ai]

TIP: The rastering process can be shortened by sending each red rasterd hole separately (so the laser head doesn't have to travel back and forth when rastering the bottom two holes).

3D Printing

3D print the motor gear [stl], which will attach to the stepper motor. Optionally, you can use this iOS device dock I designed to fit iPhones and iPads [stl].

NOTE: I highly recommend printing the motor gear in ABS and not PLA, which is more susceptible to warping and heat damage. This is what one motor gear looked like after several weeks of use:

Wait for a few minutes after inserting the heat-set inserts before you screw the gear to the motor shaft. You want the plastic to cool completely to prevent any deformation.

If you find that the heat-set inserts start to loosen from the plastic, replace the motor gear part with a new one.


First, solder a 4-pin male header to the stepper motor cable in the following color sequence: RGYB

RGYB cable ordering for stepper motor

Next, attach the 3D printed motor gear to the stepper motor shaft. To do this, you need to first insert the M3 heated inserts into the two holes on the side of the motor gear.

Use a soldering iron to insert the M3 heatset inserts (check out the video below for reference).

Be sure to turn the temperature down on your soldering iron and keep the soldering iron as straight as possible to avoid melting too much material around the insertion hole. Using a Weller WES51 soldering iron, a temperature of 400F works well.

Threaded Insert installation into 3D printed plastic parts from EricYoung on Youtube

TIP: Position the motor gear such that the gear hangs off the side of the table to keep the part flat (for easier insertion).

Assemble the stepper motor case on the base of the turntable using the M3 nuts and bolts. The cable outlet on the stepper should face towards the center of the turntable.

Ensure that the Arduino mounting holes are on the LEFT side of the base (so that the audio cable will face the front of the turntable when fully assembled). Check out the assembled turntable above for reference.

Next, secure the Arduino to the base using the standoffs and M3 screws.

Fasten the laser cut parts with the purchased turntable bearing from McMaster. The outer gear should be attached to the interior of the turntable using ¼-20 screws, adding a nut in between the outer gear and the head of the screw. This will make it easier to align the floating platform later.

Use the 5/16" bolts to attach the outer ring of the turntable to the base, using a nut to secure the base in place:

Last, add the ⅛” platform, which rests on top of the ¼-20 screws.

PCB Assembly

The Spin Arduino shield is designed for the Arduino Uno and utilizes the Easy Driver stepper motor driver.

You can order the board from OSH Park [https://oshpark.com/profiles/scientiffic], which is $35.10 for 3 boards (and can take about 2 weeks to make and send), or you can make the board yourself: [Eagle Project]

Spin Schematic [pdf]
Spin Board (Top on Left, Bottom on Right)
Part # Part
C1 0.22 µF capacitor
R1 2 KΩ resistor
R2 2 KΩ resistor
R3 10 KΩ resistor
R4 1 KΩ resistor
R5 1 KΩ resistor
R6 100 Ω resistor
R7 100 Ω resistor
R8 100 Ω resistor
R9 100 Ω resistor

Item Vendor Quantity Part Number Total Price
Easy Drive Stepper Motor Driver Sparkfun 1 ROB-12779 14.95
Blue LEDs 1206 SMD Sparkfun 1 (strip of 25) PRT-12620 2.95
Male headers Sparkfun 2 PRT-00116 3.00
Female header Digikey 1 S5440-ND 0.63
3.5mm audio jack Digikey 1 CP-43514-ND 1.18
100 Ω resistor 1206 SMD Digikey 5 311-100FRCT-ND 0.45
1 kΩ resistor 1206 SMD Digikey 1 P1.0KECT-ND 0.09
10 kΩ resistor 1206 SMD Digikey 1 311-10.0KFRCT-ND 0.09
2 kΩ 1206 SMD Digikey 2 RMCF1206JT2K00CT-ND 0.18
0.22 µF 1206 capacitor Digikey 1 399-1251-1-ND 0.17
Total: $23.51

Program the Arduino

The Spin system utilizes the Soft Modem library to send audio signals from an iPhone to the Arduino. You need to use a particular patched library, which you can find here:

SoftModem Library

Install the SoftModem library on your computer (instructions).

Next upload the Spin Arduino Sketch [spin.ino] to your Arduino. Last updated 7/27/16 for communicating with Android app

Attach the shield to the Arduino with the LEDs pointing towards the center of the table. Connect the motor to the shield by orienting the red cable of the motor closest to the LEDs.

To test that your turntable, you can use this Processing sketch, which lets you nudge the turntable left or right or do a complete rotation. After you've assembled your turntable, run the Processing sketch and test that your turntable can do a full rotation.

NOTE: This sketch will not work with Processing 3.0 due to library compatibility issues - please run in Processing 2.2.1.

Processing Sketch [zip]
NOTE: Do NOT unplug the stepper motor while the turntable is powered. This will damage the Easy Driver board! Be sure to turn off the turntable before unplugging the stepper motor.
Download the App

You can run the Spin mobile app on your iOS or Android device.

The Spin iOS app runs on any iOS device (iPhones, iPod Touches, iPads) running iOS 7.0 and up.

You can find the Spin app on the App store at the following link: https://itunes.apple.com/us/app/spin-turntable/id999530437?mt=8

The Spin Android app is available on the Play store at the following link: https://play.google.com/store/apps/details?id=com.ttseng.spin

NOTE: Your iOS device must be physically connected to the turntable to use the app.

Using Spin

To start using Spin, plug in the Arduino Uno to a wall outlet using the AC Adapter and connect the 3.5mm audio cable between your mobile device and the Spin shield.

When you open up the mobile app, you will go through a one-time setup that will check your connection to the turntable. After the app is able to successfully connect to the turntable, you can register and begin creating Spin animations!

Feel free to get creative with your Spin backdrop! You can use hanging white fabric, a cardboard trifold, or a whiteboard for a neutral background, but you can also decorate it to personalize your Spins.

White fabric as backdrop using vice grip
Artwork as backdrop
No backdrop!

I will add to this as issues come in! If you run into any problems, please add the issue on Github.

My Spin Turntable isn't spinning

Is your turntable plugged in using the AC adapter? Two of the LEDs should be illuminated if the turntable is receiving power. USB power is not enough to power the stepper motor completely.

Do you hear the motor turning? If so, you may need to tighten the set screws on the 3D-printed motor gear to ensure the motor shaft isn't slipping in the motor gear. If the heat-set inserts come loose from the gear as you tighten the set screw, you may need to replace the motor gear with a new part.

Are you using a working 4-pin 3.5mm audio cable? You must use a 4-pin 3.5 mm audio cable to connect to the turntable. You can ensure that the connections on the cable are working with a multimeter. In particular, tip and the ring closest to the base are the ones used to communicate between the turntable and the phone.

Still not turning? Close the app completely, restart it, and try again.

STILL not working? Please report the issue on Github.

Live Documentation

To follow the development of new features for Spin, or to leave any feedback or suggestions, check out the Build in Progress Spin page