Building a 3D Photography Rig with Canon DSLRs and Arduino [Instructional]

Like most photographers, I am very well acquainted with Gear Acquisition Syndrome, otherwise known as “gear lust”. It’s the desire to replace my perfectly functional cameras and lenses with the latest and greatest tech. Or even worse, the need to collect new gear instead of replacing my current gear, including buying novelty or specialized techology. GAS is made even worse by frequenting photography forums like PhotoMarket, where users buy and sell all manner of camera bodies, lenses, and accessories. One camera that gets listed there every so often is the Nishika N8000. The N8000 is a four-lens film camera whose developed shots can be combined to create GIFs like this:

via GIPHY

The effect that the camera creates always interested me, as the novelty would be great for parties and celebrations, and it’s an interesting way to create depth in photography that you can’t really get with normal stills. But the ~$200 price tag attached to the camera was something that I couldn’t justify. So I set out to recreate the effect with gear I already had or could borrow from friends.

Materials:*

The Controller

The basic idea was to have four cameras lined up in an arc to replicate the four lenses of the N8000. To add an extra challenge, however, the cameras all needed to fire at the same time for the effect to be complete.

I explored several ways to fire multiple cameras while researching for this project. My first thought was to tether all four cameras to my laptop via USB and use software like digiCamControl to fire them simultaneously. Unfortunately, due to hardware limitations, there would be latency of anywhere from 100-400ms introduced between each camera firing. While a lag like that would only amount to about one to two seconds of latency between camera one and camera four, it would still ruin any shot with significant movement or action by causing cameras #1 and #4 to capture different shots.

Back to the drawing board then. If a digital shutter trigger was going to cause delays between shots then I needed to go analogue. Fortunately most Canon DSLRs these days have a remote shutter port – which allows me to fire the camera using a remote control like this.

I ordered one from Amazon and cracked it open. Much to my surprise, the internals of the shutter release seemed quite simple. My suspicion was confirmed over at doc-diy.net, who have stripped down remote shutter controls for every major camera brand.

As their diagram shows, both the shutter and focus on the camera are controlled by a simple 3-pole 2.5mm jack. For my purposes, all I needed to consider was the shutter release, as the cameras would take different lengths of time to focus and cause an asynchronous capture.

Now that I know how the trigger works, it’s time to expand it to work with multiple cameras. My first attempt was very rudimentary, simply splicing the original cable with another one and triggering them together. This worked, but not as effectively as I would have wanted:

With a proof of concept completed I wanted to expand it to four cameras. This is where I ran into my second big problem. While wiring just two trigger cables together works decently, soldering a board with four cables gave me issues in both latency and circuit completion. There were several revisions but I ended up scrapping them for a new design that is more versatile and safer. Enter the Arduino Nano.

The Arduino

The Nano is a microprocessor that allows me to run programs to send signals to the Nano’s various digital output pins. Using the Nano I followed the same basic principle from my first version: run a signal to four outputs that will trigger my cameras.

For those interested, my final schematic is here.

void setup() {
// put your setup code here, to run once:
pinMode(12, OUTPUT);
pinMode(7, INPUT_PULLUP);
}

void loop() {
// put your main code here, to run repeatedly:
if ( digitalRead(7) == LOW) {
digitalWrite(12, HIGH); // sets the digital pin 12 on
delay(100);
digitalWrite(12, LOW);
delay(100); // sets the digital pin 12 off
} else {
digitalWrite(12, LOW);
}
}

This is the final version of my multi-camera trigger. The Arduino is running the above program which monitors to pin 7, connected to the button. When the button is pushed, a high signal is sent to pin 12. That signal is then sent down the four optocouplers wired in series and passed to the four 3.5mm jacks on the right side.

Using four 3.5mm cables and four 2.5mm to 3.5mm adapters, I can connect the cameras to the Arduino, powered externally by a battery pack through the mini-USB port on the board.

The Base

Now with the controller taken care of, I needed to build a base for the cameras to rest on.

Using three layers of foam poster board I cut out and glued the main structure together:

I drew an arc on the board and used removable velcro strips to create mounts for the cameras.

Once that was done, I used some more foam board to create mounts on the bottom for the light stands and a small box to hold the trigger and battery pack.

It’s not pretty but it works!!

Assembly

With all the pieces necessary, I was able to assemble the final product:

First Use

Now to test it! While there will be more examples added to this blog in the future, and to our Instagram account, I quickly put together an example to show all of you.

To edit the photos together properly, I added the files into a Photoshop project and layered them so that the hat was in the same position and at the same scale. Then I used this tutorial from HubSpot to export the GIF.

Other Uses

Having an Arduino control the logic also let’s me change how the project works! In a couple of minutes I can import some new code and turn my multi-trigger into a time-lapse controller and create videos like the one below.

That’s It!!

Using ~$50 of supplies and borrowing a few cameras from friends I was able to replicate a novelty camera effect instead of purchasing yet another camera for my collection.

If you liked this project and would like to see more, please consider subscribing to our newsletter!