Automatic 360 Degrees Panorama Shooting Stand
by hertzgamma in Circuits > Cameras
30940 Views, 205 Favorites, 0 Comments
Automatic 360 Degrees Panorama Shooting Stand
![IMG_1551-001.JPG](/proxy/?url=https://content.instructables.com/FVV/FHTD/HJ1X4QV5/FVVFHTDHJ1X4QV5.jpg&filename=IMG_1551-001.JPG)
What I made is a shooting stand that holds a smartphone and turns it around while it captures a 360 degrees panorama! In my case it is an iPod, but it does not matter, anything works.
It has two axles and turns the phone all around just as you would do to shoot the panorama.
All you will need except from the shooting stand is an application that will shoot the panorama for you. Just turn in on and power up the panorama shooting stand, that's it.
Watch the video:
I have entered the 3D print contest, so if you like my creation, please vote for me :)
A few panoramas I made:
http://360.io/qggJC4
http://360.io/RR8XkL
UPDATES:
#1 - 12 July 2013 - Arduino code 03 replaced with 04 version.
#2 - 15 July 2013 - Added new Step 13. Reworked the propulsion system for the horizontal rotation. Now with gears.
It has two axles and turns the phone all around just as you would do to shoot the panorama.
All you will need except from the shooting stand is an application that will shoot the panorama for you. Just turn in on and power up the panorama shooting stand, that's it.
Watch the video:
I have entered the 3D print contest, so if you like my creation, please vote for me :)
A few panoramas I made:
http://360.io/qggJC4
http://360.io/RR8XkL
UPDATES:
#1 - 12 July 2013 - Arduino code 03 replaced with 04 version.
#2 - 15 July 2013 - Added new Step 13. Reworked the propulsion system for the horizontal rotation. Now with gears.
Parts and Tools
![IMG_1499.JPG](/proxy/?url=https://content.instructables.com/FR7/QC61/HIW8MS2M/FR7QC61HIW8MS2M.jpg&filename=IMG_1499.JPG)
![IMG_1550.JPG](/proxy/?url=https://content.instructables.com/FIJ/LOCB/HIW8MS2L/FIJLOCBHIW8MS2L.jpg&filename=IMG_1550.JPG)
Basic materials:
- Two servos
- Arduino
- Plastic material
- Screws and glue
- Cables
- Knife
- Drill with bits
- Screw driver
- Pliers
IPod Stand
![IMG_1500.JPG](/proxy/?url=https://content.instructables.com/FTH/87C1/HIW8MR7E/FTH87C1HIW8MR7E.jpg&filename=IMG_1500.JPG)
![IMG_1501.JPG](/proxy/?url=https://content.instructables.com/FQ8/4APH/HIW8MR7G/FQ84APHHIW8MR7G.jpg&filename=IMG_1501.JPG)
![IMG_1502.JPG](/proxy/?url=https://content.instructables.com/FXJ/4SMG/HIW8MR7M/FXJ4SMGHIW8MR7M.jpg&filename=IMG_1502.JPG)
![IMG_1503.JPG](/proxy/?url=https://content.instructables.com/FUU/B5I7/HIW8MR7P/FUUB5I7HIW8MR7P.jpg&filename=IMG_1503.JPG)
![IMG_1504.JPG](/proxy/?url=https://content.instructables.com/FSO/QXPF/HIW8MR80/FSOQXPFHIW8MR80.jpg&filename=IMG_1504.JPG)
The idea is to fix the device on a holder made of plastic.
I've cut some plastic pieces and glued them to form a pocket for the iPod.
It is restrained from all sides except from the insertion slot.
I have plenty of space for the touchscreen.
I've cut some plastic pieces and glued them to form a pocket for the iPod.
It is restrained from all sides except from the insertion slot.
I have plenty of space for the touchscreen.
Vertical Mover Axle
![IMG_1506.JPG](/proxy/?url=https://content.instructables.com/FKT/FR3H/HIW8MR8L/FKTFR3HHIW8MR8L.jpg&filename=IMG_1506.JPG)
![IMG_1508.JPG](/proxy/?url=https://content.instructables.com/F1P/XHLD/HIW8MR8T/F1PXHLDHIW8MR8T.jpg&filename=IMG_1508.JPG)
![IMG_1509.JPG](/proxy/?url=https://content.instructables.com/FIH/7P18/HIW8MR8Z/FIH7P18HIW8MR8Z.jpg&filename=IMG_1509.JPG)
![IMG_1511.JPG](/proxy/?url=https://content.instructables.com/F5B/QMZK/HIW8MR93/F5BQMZKHIW8MR93.jpg&filename=IMG_1511.JPG)
![IMG_1513.JPG](/proxy/?url=https://content.instructables.com/FJM/9AJW/HIW8MR9B/FJM9AJWHIW8MR9B.jpg&filename=IMG_1513.JPG)
![IMG_1514.JPG](/proxy/?url=https://content.instructables.com/FHL/6DFU/HIW8MR9G/FHL6DFUHIW8MR9G.jpg&filename=IMG_1514.JPG)
On one of the sides of the iPod holder is the servo. The other side is held in place by a screw.
This forms the axle for the vertical movement.
Both sides of the axle are carefully aligned.
This forms the axle for the vertical movement.
Both sides of the axle are carefully aligned.
Balancing the Vertical Part
![IMG_1515.JPG](/proxy/?url=https://content.instructables.com/F87/DEK4/HIW8MR9I/F87DEK4HIW8MR9I.jpg&filename=IMG_1515.JPG)
![IMG_1517.JPG](/proxy/?url=https://content.instructables.com/FH5/IRL5/HIW8MR9L/FH5IRL5HIW8MR9L.jpg&filename=IMG_1517.JPG)
To minimise the servo stress, I have balanced the iPod holder and marked the balance spots.
Finishing the Vertical Axle
![IMG_1518.JPG](/proxy/?url=https://content.instructables.com/FQ7/DENW/HIW8MR9Q/FQ7DENWHIW8MR9Q.jpg&filename=IMG_1518.JPG)
![IMG_1519.JPG](/proxy/?url=https://content.instructables.com/F7P/HDT2/HIW8MR9U/F7PHDT2HIW8MR9U.jpg&filename=IMG_1519.JPG)
![IMG_1522.JPG](/proxy/?url=https://content.instructables.com/F3C/ZJE3/HIW8MRAN/F3CZJE3HIW8MRAN.jpg&filename=IMG_1522.JPG)
![IMG_1545.JPG](/proxy/?url=https://content.instructables.com/FSE/9E3M/HIW8MRU3/FSE9E3MHIW8MRU3.jpg&filename=IMG_1545.JPG)
On one side of the iPod holder there is the servo attachment element. I have screwed it with two screws. On the other side I drilled a hole, where the bolt inserts.
Vertical Axle Standing!
![IMG_1523.JPG](/proxy/?url=https://content.instructables.com/FIU/XCQL/HIW8MRAR/FIUXCQLHIW8MRAR.jpg&filename=IMG_1523.JPG)
Here is the finished vertical axle stand. Now it needs a bottom part.
Bottom of Vertical Axle
![IMG_1525.JPG](/proxy/?url=https://content.instructables.com/FIK/H6WG/HIW8MRBJ/FIKH6WGHIW8MRBJ.jpg&filename=IMG_1525.JPG)
![IMG_1527.JPG](/proxy/?url=https://content.instructables.com/FOH/Z8YE/HIW8MRBV/FOHZ8YEHIW8MRBV.jpg&filename=IMG_1527.JPG)
The legs of the vertical stand are aligned and held by a new piece of plastic.
Two screws for each leg are far enough. This could be glued too!
Two screws for each leg are far enough. This could be glued too!
Horizontal Axis Parts
![IMG_1528.JPG](/proxy/?url=https://content.instructables.com/F0Y/BQNQ/HIW8MRBW/F0YBQNQHIW8MRBW.jpg&filename=IMG_1528.JPG)
My basic parts supply was very restrained. I cam up with s few parts from an old toy. I would use gears for best results. If you're happy to have a 3D printer you could make the gears easily.
Driving Wheel
![IMG_1529.JPG](/proxy/?url=https://content.instructables.com/FZW/52SG/HIW8MRC1/FZW52SGHIW8MRC1.jpg&filename=IMG_1529.JPG)
![IMG_1530.JPG](/proxy/?url=https://content.instructables.com/FWR/AEB9/HIW8MRCB/FWRAEB9HIW8MRCB.jpg&filename=IMG_1530.JPG)
![IMG_1532.JPG](/proxy/?url=https://content.instructables.com/FJX/XB4C/HIW8MRDB/FJXXB4CHIW8MRDB.jpg&filename=IMG_1532.JPG)
I had to drill the bigger wheel inside diameter in order to fit it onto the servo metal axis.
Base Wheel
![IMG_1533.JPG](/proxy/?url=https://content.instructables.com/FFA/96JW/HIW8MRS9/FFA96JWHIW8MRS9.jpg&filename=IMG_1533.JPG)
![IMG_1537.JPG](/proxy/?url=https://content.instructables.com/FY6/5QD5/HIW8MRSS/FY65QD5HIW8MRSS.jpg&filename=IMG_1537.JPG)
Then I marked the centre of the base and drilled it.
I attached the small wheel to the base.
I attached the small wheel to the base.
Base Spindle
![IMG_1536.JPG](/proxy/?url=https://content.instructables.com/FEP/MG6P/HIW8MRSL/FEPMG6PHIW8MRSL.jpg&filename=IMG_1536.JPG)
![IMG_1538.JPG](/proxy/?url=https://content.instructables.com/FDO/J7S4/HIW8MRTA/FDOJ7S4HIW8MRTA.jpg&filename=IMG_1538.JPG)
To allow the base to spin freely I inserted its axis through a plastic box.
The bit that hangs off from the bottom can be cut.
The bit that hangs off from the bottom can be cut.
Gears Joined!
![IMG_1539.JPG](/proxy/?url=https://content.instructables.com/FF2/XIDK/HIW8MRTH/FF2XIDKHIW8MRTH.jpg&filename=IMG_1539.JPG)
![IMG_1540.JPG](/proxy/?url=https://content.instructables.com/FAI/YEBE/HIW8MRTL/FAIYEBEHIW8MRTL.jpg&filename=IMG_1540.JPG)
![IMG_1541.JPG](/proxy/?url=https://content.instructables.com/FVX/8AJ9/HIW8MRTZ/FVX8AJ9HIW8MRTZ.jpg&filename=IMG_1541.JPG)
![IMG_1548.JPG](/proxy/?url=https://content.instructables.com/FQ7/DCBH/HIW8MRYD/FQ7DCBHHIW8MRYD.jpg&filename=IMG_1548.JPG)
Using a few cable ties the servo for the base has been attached to the box.
Now both wheels should touch.
Now both wheels should touch.
UPDATE: Gears
![IMG_1565.JPG](/proxy/?url=https://content.instructables.com/F4O/C47H/HJ1X4QU0/F4OC47HHJ1X4QU0.jpg&filename=IMG_1565.JPG)
![IMG_1566.JPG](/proxy/?url=https://content.instructables.com/FCE/K4U0/HJ1X4QU1/FCEK4U0HJ1X4QU1.jpg&filename=IMG_1566.JPG)
I've got updated the wheels that rotate the base of the panorama maker.
The two gears that I used have a ratio about 1:3. The bigger gear is at the servo because it rotates only 180 degrees and I need the base to rotate 360.
Now with the gears there is no slip and the movement is more accurate as well as the whole thing is more robust to different loads and weather conditions like wind for example.
The two gears that I used have a ratio about 1:3. The bigger gear is at the servo because it rotates only 180 degrees and I need the base to rotate 360.
Now with the gears there is no slip and the movement is more accurate as well as the whole thing is more robust to different loads and weather conditions like wind for example.
Sort the Cables Out
![IMG_1546.JPG](/proxy/?url=https://content.instructables.com/F6T/QERF/HIW8MRYA/F6TQERFHIW8MRYA.jpg&filename=IMG_1546.JPG)
![IMG_1547.JPG](/proxy/?url=https://content.instructables.com/FGH/4VV3/HIW8MRYC/FGH4VV3HIW8MRYC.jpg&filename=IMG_1547.JPG)
Each servo uses three wires.
As in my arduino sketch:
- RED: 5V
- BROWN: GND
- YELLOW: Data
As in my arduino sketch:
- Pin 9: Vertical servo yellow wire
- Pin 10: Horizontal servo yellow wire
Arduino Mount
![IMG_15491.jpg](/proxy/?url=https://content.instructables.com/F0H/UU7I/HIW8MS1I/F0HUU7IHIW8MS1I.jpg&filename=IMG_15491.jpg)
It's a bit tricky here because the cables mess around. I found a good spot on the side, but be careful.
You can always change the servo zero position and avoid the wires from spinning around the axles.
You can always change the servo zero position and avoid the wires from spinning around the axles.
Battery Power Supply
![IMG_1555.JPG](/proxy/?url=https://content.instructables.com/FU3/UWH4/HIW8MUKF/FU3UWH4HIW8MUKF.jpg&filename=IMG_1555.JPG)
All you are left with is to add the power supply.
Code!
![code.jpg](/proxy/?url=https://content.instructables.com/F1A/XVPO/HIW8MRY2/F1AXVPOHIW8MRY2.jpg&filename=code.jpg)
// Automatic 360 Degrees Panorama Shooting Stand
// By Pavel Mihaylov
// Edition 04
#include <Servo.h>
Servo myservo; // create servo object to control a servo
Servo myservo_horizontal; // a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
int pos_horizontal = 10;
int pos_horizontal_incr;
int pos_horizontal_increment_degrees = 10;
int delay_move = 10;
int delay_move_quicker = 5;
int delay_move_slower = 25;
int delay_photo = 1200;
int initial = 1;
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
myservo_horizontal.attach(10);
}
void loop()
{
if(pos_horizontal > 140) // goes from 180 degrees to 0 degrees
{
while(pos_horizontal > 10)
{
pos_horizontal -= 1;
myservo_horizontal.write(pos_horizontal); // tell servo to go to position in variable 'pos'
delay(delay_move_slower); // waits 15ms for the servo to reach the position
}
}
pos_horizontal_incr = pos_horizontal_increment_degrees;
while(pos_horizontal_incr > 0 || pos < 80) // goes from 180 degrees to 0 degrees
{
pos_horizontal_incr -= 1;
if(pos_horizontal_incr > 0) {
pos_horizontal += 1;
}
pos += 3;
myservo.write(pos);
myservo_horizontal.write(pos_horizontal); // tell servo to go to position in variable 'pos'
delay(delay_move); // waits 15ms for the servo to reach the position
delay(delay_move); // waits 15ms for the servo to reach the position
}
delay(delay_photo);
//Rig swings back and forward to say hello to camera man
if(initial == 1)
{
while(initial < 15)
{
pos -= 1;
myservo.write(pos);
initial += 1;
delay(delay_move_slower);
}
while(initial > -15)
{
pos += 1;
myservo.write(pos);
initial -= 1;
delay(delay_move_slower);
}
while(initial < 22)
{
pos -= 1;
myservo.write(pos);
initial += 1;
delay(delay_move_slower);
}
while(initial > 1)
{
pos += 1;
myservo.write(pos);
initial -= 1;
delay(delay_move_slower);
}
initial = 2;
delay(delay_photo);
delay(delay_photo);
}
//Now shoot begins
for(pos = 80; pos < 125; pos+=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(delay_move); // waits 15ms for the servo to reach the position
}
delay(delay_photo);
for(pos = 125; pos < 170; pos+=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(delay_move); // waits 15ms for the servo to reach the position
}
delay(delay_photo);
for(pos = 170; pos > 45; pos -= 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(delay_move); // waits 15ms for the servo to reach the position
}
delay(delay_photo);
for(pos = 45; pos > 10; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(delay_move); // waits 15ms for the servo to reach the position
}
delay(delay_photo);
}
// By Pavel Mihaylov
// Edition 04
#include <Servo.h>
Servo myservo; // create servo object to control a servo
Servo myservo_horizontal; // a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
int pos_horizontal = 10;
int pos_horizontal_incr;
int pos_horizontal_increment_degrees = 10;
int delay_move = 10;
int delay_move_quicker = 5;
int delay_move_slower = 25;
int delay_photo = 1200;
int initial = 1;
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
myservo_horizontal.attach(10);
}
void loop()
{
if(pos_horizontal > 140) // goes from 180 degrees to 0 degrees
{
while(pos_horizontal > 10)
{
pos_horizontal -= 1;
myservo_horizontal.write(pos_horizontal); // tell servo to go to position in variable 'pos'
delay(delay_move_slower); // waits 15ms for the servo to reach the position
}
}
pos_horizontal_incr = pos_horizontal_increment_degrees;
while(pos_horizontal_incr > 0 || pos < 80) // goes from 180 degrees to 0 degrees
{
pos_horizontal_incr -= 1;
if(pos_horizontal_incr > 0) {
pos_horizontal += 1;
}
pos += 3;
myservo.write(pos);
myservo_horizontal.write(pos_horizontal); // tell servo to go to position in variable 'pos'
delay(delay_move); // waits 15ms for the servo to reach the position
delay(delay_move); // waits 15ms for the servo to reach the position
}
delay(delay_photo);
//Rig swings back and forward to say hello to camera man
if(initial == 1)
{
while(initial < 15)
{
pos -= 1;
myservo.write(pos);
initial += 1;
delay(delay_move_slower);
}
while(initial > -15)
{
pos += 1;
myservo.write(pos);
initial -= 1;
delay(delay_move_slower);
}
while(initial < 22)
{
pos -= 1;
myservo.write(pos);
initial += 1;
delay(delay_move_slower);
}
while(initial > 1)
{
pos += 1;
myservo.write(pos);
initial -= 1;
delay(delay_move_slower);
}
initial = 2;
delay(delay_photo);
delay(delay_photo);
}
//Now shoot begins
for(pos = 80; pos < 125; pos+=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(delay_move); // waits 15ms for the servo to reach the position
}
delay(delay_photo);
for(pos = 125; pos < 170; pos+=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(delay_move); // waits 15ms for the servo to reach the position
}
delay(delay_photo);
for(pos = 170; pos > 45; pos -= 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(delay_move); // waits 15ms for the servo to reach the position
}
delay(delay_photo);
for(pos = 45; pos > 10; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(delay_move); // waits 15ms for the servo to reach the position
}
delay(delay_photo);
}
Done! Now in 3D
![design.jpg](/proxy/?url=https://content.instructables.com/FHM/E8W9/HIW8MSLP/FHME8W9HIW8MSLP.jpg&filename=design.jpg)
If I could, I would do the same panorama shooting stand out of 3D printed parts.
Why?
That's why I have put up plans here so maybe someone tries and tells me how it works!
https://tinkercad.com/things/ax63XjOrBEn
Why?
- Quicker
- Neater
- Easy to share and reproduce
- Good ideas spread for everyone to use them!
That's why I have put up plans here so maybe someone tries and tells me how it works!
https://tinkercad.com/things/ax63XjOrBEn