Introduction: Automated Product Photography Rig

About: Mech Engineer Turned Photographer, Technology Enthusiast, Drummer !!

Today, the world's e-commerce industry alone shoots close 30 billion images a day in studios across the world. Shooting involves human intervention to place object and move them through multiple angles before each image is shot. Multiple shots give customers a better idea of how their products look through imagery since e commerce is intangible over the internet. My aim is to simplify this process and ensure that varied types of products get shot in minimal time without human intervention with exact angles as specified by the photographer. This is an ongoing project since I am trying to improvise the functionality of this system at every stage. The system needs to be robust, versatile and at the same time easy to use for the end user.

Parts Required

Bread Board - 1 No.

Arduino Mega 2560 or the Intel Edison with the Arduino breakout Board - 1 No.( use the one youre comfy with)

Base Shield by (Seeed Studio) - 1 No.

Jumper wires - 40 No. L293D IC - 1 No.

DC Motor with reduction system to 10 RPM - 1 No.

RGB Led with 12C interface and 4 cable input GROVE (Seed Studio)- 1 No.

Songle 2 output Relay - 1 No.

Shoebox - 1 No.

Yongnuo Wireless SLR Camera Trigger and Receiver - 1 No.

Arduino IDE Installed on your computer.

12 V 4.0Amp Regulated AC to DC Adaptor

1 USB cable to connect the arduino mega and transfer Code

1 USB Battery Pack

Step 1: Preparing the Intel Edison/Arduino and the IC in H Bridge Mode

The connections are easy, see the image above with the breadboard circuit schematic.

Tip: You can connect an external power source to L293D pin 8, up to 36V! Ensur eyou use the right voltage and make sure you do not "burn" your motors!

Since we would be using just one motor for this setup you can ignore the second motor for all practical purposes.

You can also refer to this link to get more information on the working on the L293D IC. He has some good references there.

https://www.instructables.com/id/How-to-use-the-L29...

Step 2: Connecting the Relay

For the connection os the relay, I used the steps mentioned in this link.

https://www.instructables.com/id/How-to-use-the-L29...

COM - Common connection--> it is the center terminal, It is hot as power to the load is connected at this terminal.

NO Normally open ---> It acts like a switch,since it is open - there will be no contact between COM and NO, When we trigger the relay module, it connects to COM by the electromagnet inside the relay and supply to the load is provided,which powers up the light.Thus the circuit is closed until we trigger the state to low in relay. NC Normally closed---->It is always in contact with COM, even when relay is not powered.when we trigger the relay it opens the circuit, so the connection is lost. it behaves just opposite to NO.

im using NO connection,but here in this type of relay "HIGH" state in code turns off the relay(opens the circuit). "LOW" state in code turns on the relay.

The basic code for this would be as follows

digitalWrite(RELAY1,LOW); // Turns ON Relays 1
Serial.println("Light ON"); delay(2000); // Wait 2 seconds digitalWrite(RELAY1,HIGH); // Turns Relay Off Serial.println("Light OFF"); delay(2000);

Step 3: Controlling the DSLR Camera Wirelessly

For this step I've used a simple Yongnuou Wireless Trigger system which is available commercially. I have clicked a picture of it for your reference. However we need to hack it a little bit. The trigger transmitter needs to be opened up and the power leads and the trigger leads need to be pulled out to be connected to our arduino.There is one common line which comes in contact with another one to focus and both these when in touch, contact another lead to click. Howeverm ,we will assume that the camera will be in focus all the time since the distances between the camera and the product being shot are constant and hence we would not need any focus system to be a part of this process.

The trigger leads would connect to the two points on the relay which get actuated. The other two leads are the power leads which will be connected to the 12 V power rails on the mini breadboard. This will need 12 volts and will not work on the 5V logic voltage. You can either use the Vcc pin if the 2560 is being powered by an external 2.0 Amps adaptor.

Step 4: Putting All These Three Components Together and to Create the Complete System

In this step you connect all three systems together.

- The Motor Driving system

- The Relay System

- The wireless Triggering system for the Camera

#include
#include "rgb_lcd.h"

rgb_lcd lcd;

const int colorR = 255; const int colorG = 0; const int colorB = 0; const int rotdurA = 5100; const int rotdurB = 10200; const int relay = 10;

#define E1 10 // Enable Pin for motor 1 #define E2 11 // Enable Pin for motor 2

#define I1 8 // Control pin 1 for motor 1 #define I2 9 // Control pin 2 for motor 1 #define I3 12 // Control pin 1 for motor 2 #define I4 13 // Control pin 2 for motor 2 #define RELAY1 7

void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); lcd.setRGB(colorR, colorG, colorB); // Print a message to the LCD. lcd.print("__Initializing__"); delay(2000); lcd.setCursor(0, 0); lcd.setRGB(0 , 255, 0); lcd.print("__System Ready__"); delay(2000); pinMode(RELAY1, OUTPUT); pinMode(E1, OUTPUT); pinMode(E2, OUTPUT);

pinMode(I1, OUTPUT); pinMode(I2, OUTPUT); pinMode(I3, OUTPUT); pinMode(I4, OUTPUT); }

void loop() {

lcd.setCursor(0, 0); lcd.print("Place Prodct Now"); delay(500);

lcd.setCursor(0, 0); lcd.print("___Front_Shot___"); delay(1000); digitalWrite(RELAY1,0); delay(150); // Wait 2 seconds

digitalWrite(RELAY1,1); // Turns Relay Off Temporarily

// Pauses for 2 second digitalWrite(E1, LOW); digitalWrite(E2, LOW); delay(2000);

// Rotates the Disc from 0 - 90 Degrees CW

digitalWrite(E1, HIGH); digitalWrite(E2, HIGH);

digitalWrite(I1, HIGH); digitalWrite(I2, LOW); digitalWrite(I3, HIGH); digitalWrite(I4, LOW); delay(rotdurA);

// Pauses for 2 second digitalWrite(E1, LOW); digitalWrite(E2, LOW); delay(1000);

lcd.setCursor(0, 0); lcd.print("___Side__Shot___"); delay(1000);

digitalWrite(RELAY1,0); delay(150); // Wait 2 seconds digitalWrite(RELAY1,1); // Turns Relay Off

// Rotates the Disc by 90 - 180 Degrees CW digitalWrite(E1, HIGH); digitalWrite(E2, HIGH);

digitalWrite(I1, HIGH); digitalWrite(I2, LOW); digitalWrite(I3, HIGH); digitalWrite(I4, LOW); delay(rotdurA);

// Pauses for 2 second digitalWrite(E1, LOW); digitalWrite(E2, LOW); delay(2000);

lcd.setCursor(0, 0); lcd.print("___Back__Shot___"); delay(1000);

digitalWrite(RELAY1,0); delay(150); // Wait 2 seconds digitalWrite(RELAY1,1); // Turns Relay Off // Rotates the Disc from 180 - 9 360 again Degrees CW

lcd.setCursor(0, 0); lcd.print("_Shoot_Complete_"); delay(1000);

digitalWrite(E1, HIGH); digitalWrite(E2, HIGH);

digitalWrite(I1, HIGH); digitalWrite(I2, LOW); digitalWrite(I3, HIGH); digitalWrite(I4, LOW); delay(rotdurB);

// Pauses for 2 second digitalWrite(E1, LOW); digitalWrite(E2, LOW); delay(100);

}

Step 5: Step 5 - Gist of the Code

The objective of this project is to automate the entire shoot process and to ensure that product are shot automatically at specific angles and these images need to be transferred directly to the computer where they can be edited later.

The first bit of the code initializes the system and asks the user to place the product with the face front.

The rig starts shooting the front angle shot of the product.

The base moves by 45 degrees and comes to a halt for a few seconds.

The rig gets a 45 degree shot.

Moves another 45 degrees and comes to halt.

The gets a 90 degree (Side Shot) of the product.

Moves another 90 degrees and comes to halt.

The gets a 180 degree (Back Shot) of the product.

Reports that the "Shoot Completed" and comes back to "Home Position" which is 0 or 360 degrees.

We are using a simple DC motor which has a speed of 10 rpm and is controlled by an IC in H bridge mode (IC-L293D) The pin configurations have been shared earlier along with the references.

Since the Speed of the motor is around 10RPM or 10 revolutions in 60 seconds or 1 revolution (360 deg) in 6 seconds, we can arrive at the conclusion that it moves at "60 Degree per second"

45 Degrees in 0.75 Second or 750 milli sec as used by arduino (Front shot to 45 degree shot) Optional

45 Degrees in 0.75 Second or 750 milli sec as used by arduino (45 degree shot to 90 degree side shot) Optional

90 Degrees in 1.5 second or 1500 milli sec as used by arduino (90 Degree Side shot to 180 degree back shot)

180 Degree in 3 seconds of 3000 milli sec as used by arduino (180 degree back shot to the 360 degree Home Position)

However, the DC motor speed is usually controlled by the voltage that is applied, the load and the small play of the motor shaft.. I had to take both of these into consideration and arrive at values mid way and those are the numbers you will see in program. Please feel free to use your numbers as required.

At each of the positions that the camera comes to a standstill we use the code to trigger the relay to complete the circuit of the cameras wireless trigger system. Since this is wireless, the photographs are shot automatically without any hard wired connection between the rig and the computer/camera. However the camera and the computer will have to be connected through a USB cable or in newer cases the wifi connection inbuilt in the camera.

Thats it !! Your ready to shoot your products without much manual intervention and the angles will be very uniform since its a machine that is handling your shoot.

Step 6: Step 6 - the Actual Working Video of the Rig

Here you go. I've used all my photography, videography skills into making this video which shows how the product works.

First Time Author Contest 2016

Participated in the
First Time Author Contest 2016