Hello. In this article I’ll explain how to build simple and ultra cheap automated turntable with shutter release. The price for all parts are little less than $30 (all prices are taken from Aliexpress).
Most of the 3d artists, who started using photogrammetry are faced with same problem : how to automate shooting process. Arduino is the best choice for this purpose. It’s cheap and easy to develop devices. There are millions of different modules on market for arduino boards.
Step 1: Schematic
10k potentiometer — stepper motor speed adjustment.
SW1 — 2-position toggle switch, used for mode select (AUTO or HOLD).
SW2 — momentary push button — START.
SW3 — momentary push button — RESET.
SW4 — momentary push button — HARD RESET.
WS2812 RGB LED — indicates current status.
Almost all parts I found in my shelf. Also, one need to print motor holder and top plate on 3d printer
- Arduino Nano board
- USB - MicroUSB type B cable
- 5V Stepper motor 28BYJ-48
- Motor driver L298N
- Optocoupler 4N35 — 2pcs
- 10k resistor — 3pcs 220ohm
- resistor — 2pcs
- 10k potentiometer
- 2 Position toggle switch — 1pcs
- Momentary push button — 3pcs
- WS2812 RGB LED
- Wired remote shutter release (for your camera)
- Prototype board (4x6cm or bigger) DC-DC step down voltage regulator 4-core wire
Part list with links can be found here: Google Sheet
Step 2: 3d-printed Parts
Here is 3d printed parts: https://www.thingiverse.com/thing:3018451
I stuck the stepper base to piece of acrylic glass with double-sided tape. As you can see here, this 3d printed parts and motor itself can't hold big and heavy objects, so be careful. I use this turntable to scan small vases, sea shells, medium-size figures, etc.
Step 3: Stepper Motor Modification
Stepper motor needs modification from unipolar to bipolar. This modification significantly increases motor torque and allows using H-bridge type driver board.
Here is full guide:
In short, remove blue plastic cap and use sharp knife to cut central connection on board, as shown on picture. After that — cut off or desolder central red wire.
Step 4: Shutter Release for Camera
Find wired remote shutter release for your camera. It should have only one 2-stage button (focus-shutter). Usually it’s cheap, especially chinese replica.
For my Nikon D5300 I found MC-DC2 wired remote shutter.
Disassemble it and find common, focus and shutter lines. Usually common line in between other lines. Top one is the focus line (see picture). These lines connect to optocouplers outputs.
Step 5: Final Assemble
Optocouplers are used here as focus and shutter triggers. Optocoupler behaves like a button, triggered by external voltage. And there is complete electrical isolation between trigger voltage source and output side. So if you assemble correctly everything, this automatic trigger never damage your camera because it operates just like two separate buttons without electrical connection with external power source.
It is good idea to assemble all parts on breadboard to test it and debug. Sometimes non-original Arduino boards from china came corrupted.
I’ve assembled Arduino and small components on prototype board. Then I placed all parts on bent piece of acrylic glass.
Put 2 jumpers on ENA and ENB pins on motor driver board. This allows you to use 5v stepper motor.
Step 6: Code
Github link: https://github.com/VitaliiUspalenko/Turntable_v1....
Top part of code has some noticeable initial settings:
#define photoCount 32 //default number of photos
Stepper motor have 2048 steps per full revolution. For 32 photos, one turn equals 11.25 degrees, which is enough in most cases(IMO). To figure out number of steps for one turn, round function used:
step_count = round(2048/pCount);
This means, that every turn won’t be precise in some cases. For example, if we set numbers of photos to 48, one turn will be round(42.66) = 43. So, final position of stepper motor will be — 2064 (16 steps more). This is not critical for photogrammetry purposes, but if you need to be 100% precise, use 8-16-32-64-128-256 photos.
#define focusDelay 1200 //holding focus button (ms)
Here you can assign focus button hold delay, allowing your camera enough time to focus. For my Nikon D5300 with 35mm prime lens 1200ms is enough.
#define shootDelay 700 //holding shoot button (ms)
This value defines how long shutter button being pressed.
#define releaseDelay 500 //delay after shoot button release (ms)
When you want to use long exposure, increase releaseDelay value.
Step 7: Operation
Default number of photos is hardcoded into firmware. But you can change it, using terminal connection. Just connect Arduino board and PC with USB cable and establish terminal connection.
Connect Arduino board and PC, find corresponding COM port in Device manager.
For PC use PuTTY, it works well on Win10. For my Android phone I use Serial USB Terminal.
After successful connection, you can change number of photos and see current status. Type “+”, and it will increase numbers of photos by 1. “-” - decrease by 1. I use my android smartphone and OTG cable — it works well! After power off, photo count resets to default.
There is some kind of bug with chinese Arduino Nanos — when you power on Arduino without USB connection, sometimes it won’t start. That’s why I made external reset button for Arduino(HARD RESET). After pressing it, everything works well. This bug appears on boards with CH340 chip.
To start shooting process, set “mode” switch to AUTO and press START button. If you want to stop shooting process, set “mode” switch to HOLD. After that, you can resume shooting process by setting “mode” switch to AUTO, or reset process by pressing RESET. When mode switch is on HOLD, you can make a photo by pressing START button. This action makes photo without increasing photo count variable.
Step 8: Improvement
- Build large (40-50cm diameter) table with lazy susan ball bearing (like this one — http://bit.ly/2wIWVdV)
- Get more powerful stepper, such as NEMA 17 and driver — TMC2208 or DRV8825.
- Design and print reductor for extra high precision.
- Use LCD screen and rotary encoder, like in most 3d printers.
Sometimes my camera can not focus properly, usually when distance between camera and target lower than minimal focus distance, or when surface on the target too flat and has no noticeable details. This problem can be solved by using hot shoe camera adapter (like this one: http://bit.ly/2zrpwr2 , sync cable: http://bit.ly/2zrpwr2 to detect whether or not camera makes shot. Every time shutter opens to take a shot, camera shorts 2 contacts on hot shoe (central and common) to trigger external flash. We need to connect this 2 wires to Arduino just like external button and detect situation, when camera do not let shutter to open. If this happens, Arduino should make another take to focus and shoot, or pause operation and wait an action from user.
I hope this article was helpful for you. If you have any questions, feel free to contact me.