loading
Picture of Automatic 360 Degrees Panorama Shooting Stand
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.
 
Remove these adsRemove these ads by Signing Up

Step 1: Parts and Tools

Picture of Parts and Tools
IMG_1550.JPG
Basic materials:
  • Two servos
  • Arduino
  • Plastic material
  • Screws and glue
  • Cables
Tools: 
  • Knife
  • Drill with bits
  • Screw driver
  • Pliers

Step 2: IPod Stand

Picture of iPod Stand
IMG_1501.JPG
IMG_1502.JPG
IMG_1503.JPG
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.

Step 3: Vertical Mover Axle

Picture of Vertical Mover Axle
IMG_1508.JPG
IMG_1509.JPG
IMG_1511.JPG
IMG_1513.JPG
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.

Step 4: Balancing the Vertical Part

Picture of Balancing the Vertical Part
IMG_1517.JPG
To minimise the servo stress, I have balanced the iPod holder and marked the balance spots.

Step 5: Finishing the Vertical Axle

Picture of Finishing the Vertical Axle
IMG_1519.JPG
IMG_1522.JPG
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.

Step 6: Vertical Axle Standing!

Picture of Vertical Axle Standing!
Here is the finished vertical axle stand. Now it needs a bottom part.

Step 7: Bottom of Vertical Axle

Picture of Bottom of Vertical Axle
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!

Step 8: Horizontal Axis Parts

Picture of Horizontal Axis Parts
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.

Step 9: Driving Wheel

Picture of Driving Wheel
IMG_1530.JPG
IMG_1532.JPG
I had to drill the bigger wheel inside diameter in order to fit it onto the servo metal axis.

Step 10: Base Wheel

Picture of Base Wheel
IMG_1537.JPG
Then I marked the centre of the base and drilled it.

I attached the small wheel to the base.

Step 11: Base Spindle

Picture of Base Spindle
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.

Step 12: Gears Joined!

Picture of Gears Joined!
IMG_1540.JPG
IMG_1541.JPG
IMG_1548.JPG
Using a few cable ties the servo for the base has been attached to the box.

Now both wheels should touch.

Step 13: UPDATE: Gears

Picture of UPDATE: Gears
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.

Step 14: Sort the Cables Out

Picture of Sort the Cables Out
IMG_1547.JPG
Each servo uses three wires.
  • RED: 5V
  • BROWN: GND
  • YELLOW: Data

As in my arduino sketch:
  • Pin 9: Vertical servo yellow wire
  • Pin 10: Horizontal servo yellow wire

Step 15: Arduino Mount

Picture of Arduino Mount
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.

Step 16: Battery Power Supply

Picture of Battery Power Supply
All you are left with is to add the power supply.

Step 17: Code!

Picture of Code!
// 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);

 
 
}

Step 18: Done! Now in 3D

Picture of Done! Now in 3D
If I could, I would do the same panorama shooting stand out of 3D printed parts.

Why?
  • Quicker
  • Neater
  • Easy to share and reproduce
  • Good ideas spread for everyone to use them!
Unfortunately I have not got a 3D printer, neither I have any access to such a machine. 

That's why I have put up plans here so maybe someone tries and tells me how it works!

https://tinkercad.com/things/ax63XjOrBEn
WORMSS10 months ago

I could be wrong, but is the Panorama not meant to rotate around the Camera's point of centre? not the phone's point of centre? In both the X and Y axis? Meaning the phone needs to be more to the left (or right depending on what side you are looking at). and MUCH MUCH lower down so it is inline with where the motor is?

camwifi2 years ago
Cool
EngJohn2 years ago
I love the work keep it up to me it have worked
hertzgamma (author)  EngJohn2 years ago
Thank you!
It's only a matter of time before I figure out how to fix an airsoft gun onto something like this.
Shouldn't be too difficult ... just increase the size and torque of the motors, the power supply accordingly, and the strength of the chassis.

Now, if you want it to auto-track, that's a whole different story ...
hertzgamma (author)  [THECREATOR]2 years ago
I'm curious to see it. :D
jadebird2 years ago
What is the "plastic material" ? Where do you get them ?
nix782 years ago
Very simple yet very effective! I believe it would also work with Photosphere on Android phones. However the current arrangement (having the camera this far from the ritational axis) casues some so-called parallax errors (see the tiles or the edge of the grass on your panoramas). I recommend modifying the holder "cage" so that the whole rig turns around the center of the camera both vertically and horizontally. See the first picture here: http://www.bartneck.de/2013/06/16/spherical-360-degree-panorama-with-lego-mindstorms-motorized-head/  (it's also a bit off-axis, but better) (it also worth noting that doing the horizontal circles slowly but contiunouisly probably reduces the "twitching" that is caused by stopping for a photo.)
hertzgamma (author)  nix782 years ago
Thanks for the suggestions! I've already changed my design and will reflect the instructable soon. Now I've put gears for the horizontal spin.

As you say it will be best to have the rig turn the device around the camera. That is worth trying. I think this is a problem when panoramas of close objects are made and any ways it is much better centred than what it would be holding the device.
Rob3112 years ago
How do you run the sketch? Is it connected to a computer the whole time?
hertzgamma (author)  Rob3112 years ago
Once you upload the sketch to the Arduino you can go on to battery power and there is no need to run a PC.
thinkthank2 years ago
very good idea