Look what we have here. It's a table—that turns. It's a "turntable." [studio audience erupts in applause]. Radieye is a tripod-mounted, programmable turntable for repeatable still photography and rotary time lapse photography.
The fun doesn't stop there. I designed Radieye to be used as a "reverse 3D printer," whereby a set of photos are taken 360 degrees about an object, then patched together via 3D modeling software in post. I think of it as a kind of reverse 3D printer. A 3D printer translates a 3D illustrated object into a physical one. Radieye does the reverse, turning a physical object into a 3D model.
I started developing Radieye out of an interest in adding pan to Xy. More specifically, I wanted to use Xy to rotate a DSLR camera in a precise circle around an object, rendering this "spinning" effect during time lapse sequences. But there was a far simpler way to achieve this effect. When I explained the idea to a friend, he responded, "Why don't you make a turntable, so that the object turns in a circle, instead of moving the camera in a circle about the object?"
I was in good company, it turns out. This proved to be a far more elegant idea than my original thought. Radieye uses just one motor and axis of rotation, instead of the three required for moving the camera in a circle while trained at its center. I took to some CAD that week and knocked out Radieye's hardware pretty swiftly. There are some features I like about it.
Radieye's gearing components interface with a custom 1" bore hollow shaft I turned on a lathe. A fun piece to make. The piece itself and its clamps are nested into surface inlays on the two main polycarboate components, so the whole table sits super low on the tripod, and all the hardware stays hidden. Looking at clean design features like that, you'd almost never think I spend every other Friday night eating takeout Vietnamese while whiteboarding what exactly it is I think I should be doing with my life.
Manfrotto tripod legs come machined with three 10-32 tapped holes on their base, so Radieye attaches just like any standard tripod head. The camera can be positioned on the same set of legs with a Manfrotto magic arm, too. It all comes together as one nice and neat package.
Software is eating hardware, as it were. Radieye is controlled through a web browser. I developed a Javascript-based user interface that communicates to Arduino through node.js. The original client-side code I wrote is below. In the browser, the user enters a series of parameters to call out the desired number of rotations and photos per turn. Hitting go, the camera shutter and turntable actuate in sync according to their input parameters.
Shout out to everyone at the Harvard Extension DGMD15 course who coached me from the corner throughout this battle.
var five = require("johnny-five");
var board = new five.Board();
var motorSteps = 200 * 8;
board.on("ready", function() {
var LEDpin = new five.Pin(13);
var analogPin = new five.Pin('A0');
var shutterPin = new five.Pin({
pin: 12,
type: "digital"
});
var stepper = five.Stepper({
type: five.Stepper.TYPE.DRIVER,
stepsPerRev: 200,
pins: {
dir: 8,
step: 9
}
});
var express = require('express');
var app = express();
var run = function(passes, interval, shots) {
console.log("Running run with passes:", passes, "interval:", interval / 1000, "shots:", shots);
var i = 0;
var setRun = setInterval(function() {
console.log("Make another revolution or stop", i);
//step(); You actually don't need this for your
if (i < passes) {
revolution(interval, shots);
i++;
} else {
clearInterval(setRun);
}
}, interval * shots);
};
var step = function(shots) {
stepper.step({ steps: 4 * motorSteps / shots, direction: 1 }, function() {
console.log("step");
});
};
var snap = function() {
//console.log("snap");
LEDpin.high();
shutterPin.high();
setTimeout(function() {
LEDpin.low();
shutterPin.low();
}, 200);
console.log("snap");
};
var photoStep = function(shots) {
console.log("photoStep");
step(shots);
setTimeout(snap, 1 * 1000);
};
var revolution = function(interval, shots) {
console.log("Revolution-------");
var i = 0;
var setStep = setInterval(function() {
if (i < shots) {
photoStep(shots);
i++;
} else {
clearInterval(setStep);
}
}, interval);
};
app.get('/form', function(req, res) {
res.sendFile('form.html', { root: './node_modules' });
});
app.get('/stylesheet.css', function(req, res) {
res.sendFile('stylesheet.css', { root: './node_modules' });
});
app.get('/run', function(req, res) {
console.log(req.query);
run(req.query.passes, req.query.interval * 1000, req.query.shots);
});
app.listen(3000, function() {
console.log("Server's up at http://localhost:3000!");
});
});
Xy is an open-source project. I know, I'm such a nice guy. Below is a complete bill of materials. All custom components can be milled from 1/2" thick material, or check out the STL folder to 3D print them. CAD models and drawings are to the right. The Github repo is the best place to start.
SW Name | Code | Description | Q | QP | Cost/Unit | Cost | Serial | Supplier |
---|---|---|---|---|---|---|---|---|
128T_gear | MOT | 128T, 32 pitch 1" bore gear | 1 | 1 | $16.99 | $16.99 | 615238 | Servocity |
flanged_bearing | MOT | 1" bore flanged bearing | 2 | 2 | $6.48 | $12.96 | 535051 | Servocity |
shaft | MOT | 1" bore shaft | 1 | 1 | $4.49 | $4.49 | 635166 | Servocity |
nema14_motor | MOT | Nema 14 stepper motor | 1 | 1 | $9.77 | $9.77 | 14HS17-0504S | Stepper Online |
pinion_5mm | MOT | 5mm bore 32 pitch, 16T pinion gear | 1 | 1 | $7.99 | $7.99 | 615342 | Servocity |
hub_clamp | MOT | 1" clamping hub | 1 | 1 | $5.99 | $5.99 | 545354 | Servocity |
S-010-050-NUT-SS | HRD | #10 1/2" screw | 4 | 1 | $4.04 | $4.04 | 92185A242 | McMaster Carr |
M-030-160-SKT-H-SS | HRD | M3 16mm screw | 4 | 1 | $5.20 | $5.20 | 91292A115 | McMaster Carr |
S-006-050-SKT-H-SS. | HRD | #6 1/2" screw | 4 | 1 | $2.56 | $2.56 | 92185A148 | Servocity |
stage | PLC | turntable stage | 1 | 1 | custom | custom | custom | timsavas |
mount | PLC | motor and tripod mount | 1 | 1 | custom | custom | custom | timsavas |