Panorama Controller for GoPro Cameras
The controller will rotate your GoPro over a set angle for a set duration or will rotate you GoPro for a full rotation for a set duration.

This project is based on the original instructable by Tyler Winegarner See instructable here and also from Mark Wheeler's version of Tyler Winegarner's instructable See Mark Wheeler's instructable here or his web site here .

My instructable combines software and hardware from both versions as well as adding some different build and control options of my own. further details on my web site.

I have added code for a 4x20 I2C LCD display and switches rather than the SainSmart LCD Keypad Shield. I have also removed the Arduino UNO shield and replaced it with an Arduino Atmega 328 mounted on vero board. Full schematics and vero board layouts included.

The Arduino controls a Geared Stepper Motor 28BYJ-48 via a ULN2003 Stepper Motor Driver Board. The 4x20 I2C LCD display and 5 micro switches form the interface to the Arduino. The controller has a Manfrotto 200PL-14 quick release tripod mount for attachment to my tripod and other mounting hardware fitted with a Manfrotto 323 Quick Release Clamp Adapter. Power is provided by a 50000mah USB Power Bank Battery Pack.

Step 1: Parts

General parts list.

I tried to use items I had left over from other projects to keep the cost down. Ebay items in links may only be available for short periods if the links are not there try a search for the items instead.

Atmega328P Kit, Arduino Uno Bootloader, 16MHZ Crystal, 22pF Capacitors Ebay

Geared Stepper Motor 28BYJ-48 + ULN2003 Driver Test Module Board for Arduino 5v

Vero board Ebay

Perspex Sheet/Aluminium sheet as required A5

50000mah Power Bank Pack Backup Mobile Phone Charger Ebay see pic 1 above

USB Lead A to B

USB B PCB socket

Stainless Steel Bar 4mm x 100mm Rod Shaft Ebay

M4 x 50mm (2") Hex Bolts

Nuts/bolts/washers as required

Aluminium Tube to cover hex bolt threads local DIY shop

Aluminium bar loca DIY shop


323 Quick Release Clamp Adapter+Plate Compatible fr Manfrotto 200PL Ebay

Bearing Flanged 4mm x2 Ebay

Bearing Flanged 3mm x1 Ebay

Hot Shoe Spirit level Ebay

Adjustable Speedlite Cold Shoe 1/4 Screw to Flash Hot Shoe Mount Adapter Ebay

Meccano Part 26A 19 tooth pinion Ebay

Meccano Black 3.5 inch Gear Wheel No 27b 133 tooth Ebay

Meccano drive shaft stop (taken off an old meccano face plate 109)

GoPro self adhesive mount

Step 2: Hardware


The stepper motor and gear wheel are mounted between 2 Perspex sheets separated by 4 x M4 x50mm (2") hex bolts and 4 x aluminium tubes to act as spacers. Flanged bearings 4mm top and 3mm bottom are fitted into holes in the sheet. Once the stepper motor and gears were fitted the control boards were then fitted in around these parts.

I drew a drilling template in Turbocad then marked up the Perspex sheet through the paper printout. Top and lower Perspex sheet were then clamped together and mounting holes and preliminary gear wheel bearing holes were drilled out. Final bearing holes were drilled out once the sheets were separated as the lower bearing is smaller. Before drilling out the stepper motor mounting/pinion hole I mounted the 133 tooth gear wheel and bearings cut the pinion hole then test fitted the stepper motor to check alignment. I slotted one of the stepper motor mounting holes to give a few millimetres of adjustment to enable correct gear meshing.

Pic 1 Top Perspex sheet drilling template for mounting bolts, stepper motor and gear wheel. Lower Perspex sheet is identical but does not require stepper motor holes. It will need additional holes though for the middle bearing plate mount.

Once the stepper motor and gear wheel had been mounted I cut a short piece of aluminium bar to mount the middle bearing. To ensure the middle bearing was in alignment with the the upper and lower bearings I drilled a 4mm hole the middle of the aluminium bar and mounted it on the gear wheel drive shaft. I then marked mounting holes on the lower Perspex sheet through small preliminary holes on the bearing mounting bar.

The 4x20 LCD display is mounted on 2 flat metal bars. These bars are bent to angle the display for viewing and also to keep the overall mounted height within the distance between the Perspex sheets. The bars are fixed to the Perspex sheets with large washers to spread the load on the Perspex. I have used one of the mounting holes to fix the spirit level in place. See pics 2 to 6 above for details.

Step 3: Motor, Gear Wheel and Bearings

The Geared Stepper Motor 28BYJ-48 has a 19 tooth Meccano Pinion attached. The pinion is drilled out to 5mm to fit the stepper motor drive shaft.

The Meccano 133 toothed gear wheel is fitted to a 4mm shaft. The shaft runs on 3 flanged bearings. One on the top Perspex sheet (4mm), one on an aluminium bearing mount fixed 10mm off the bottom Perspex plate (4mm). The 3rd (3mm) on the lower Perspex sheet. The lower bearing is 1mm smaller so the drive shaft cannot pass through but just sit on the bearing surface so it can be supported and still rotate.

Bearing locations pic 4

A. 133 toothed gear wheel B. Upper 4mm bearing C. 133 toothed gear wheel shaft stop (see below) D. 4mm 133 toothed gear wheel shaft E. Middle 4mm bearing F. Lower 3mm bearing

133 Toothed gear wheel release pic 5

133 toothed gear wheel shaft stop (C) prevents the 133 toothed gear wheel and attached camera from falling out of the controller.
Free movement (J ) allows the 133 toothed gear wheel to be lifted free of the stepper motor pinion so the camera can be rotated to any start position by hand. This is useful for initial camera positioning or a quick check of Panorama start and end points before setting on the controller.

Step 4: 323 Quick Release Clamp Adapter+Plate Compatible for Manfrotto 200PL

A Manfrotto PL200 quick release plate pic 1 (A) is fitted to the bottom of the controller
using a number of Manfrotto 323 quick release adapters pic 1(B) I can quickly mount the controller to any number of tri-pods or mounting devices.

pic 2 controller fitted to a miniature tripod via a Manfrotto PL200 quick release adapter plate
and pic 2 fitted to universal bar clamp

Step 5: Electronic

Pic 1 shows the overall schematic

Pic 2 shows the schematic of the ULN2003 stepper motor driver board

Pic 3 shows the board itself

Pic 4 the front of the vero board

Pic 5 the back of the vero board as an X-ray view from above

Pic 6 the back of the vero board

Step 6: Code


This code is based on Tyler Winegarner/Mark Wheeler's code and has been modified to work on a 20x4 I2C LCD display without built in switches.

On normal boot/reset a modified version of Tyler Winegarner's set angled rotation Panorama is loaded. If the Rotate Mode switch is held on reset then a modified version of Mark Wheeler's full rotation panorama is loaded.

Download Code

Step 7: Video

Video shows setup of both types of panorama and also a short demo timelapse.

<p>Hello oliverb</p><p>The program works and thank you for your help.</p>
<p>Hello oliverb</p><p>I really like<br>your &quot;Time-Lapse Panorama Controller&quot; project so I made<br>i too, but with Arduino UNO module. </p><p>I have<br>downloaded the code for the Arduino Time-Lapse Panorama Controller, but I get<br>the <strong>following error:</strong></p><p>One more thing,<br>how important is the 19/133 diameter of gear (cogwheel), will it<br>influence the accuracy of the rotation? </p><p>Thanks for your<br>answer. Bohuslav Kozdon</p><p> <strong>&quot;</strong><strong>Program error&quot;</strong></p><p><strong>Timelapse_Panorama_098:54:<br>error: 'int time' redeclared as different kind of symbol</strong></p><p><strong> int time = 0; // clock holder</strong></p><p><strong>^</strong></p><p><strong>In file included from<br>C:\Users\xxxx\Documents\Arduino\Timelapse_Panorama_098\Timelapse_Panorama_098.ino:22:0:</strong></p><p><strong>c:\program files<br>(x86)\arduino\hardware\tools\avr\avr\include\time.h:122:21: note: previous<br>declaration 'time_t time(time_t*)'</strong></p><p><strong> time_t time(time_t *timer);</strong></p><p><strong> ^</strong></p><p><strong>C:\Users\xxxx\Documents\Arduino\Timelapse_Panorama_098\Timelapse_Panorama_098.ino:<br>In function 'void loop()':</strong></p><p><strong>Timelapse_Panorama_098:486:<br>error: 'now' was not declared in this scope</strong></p><p><strong> time_t timeNow = now(); // What time is it<br>right now?</strong></p><p><strong> ^</strong></p><p><strong>Timelapse_Panorama_098:586:<br>error: 'now' was not declared in this scope</strong></p><p><strong> time_t timeNow = now(); // What time<br>is it right now?</strong></p><p><strong> ^</strong></p><p><strong>Timelapse_Panorama_098:587:<br>error: 'second' was not declared in this scope</strong></p><p><strong> endtime = second(timeNow) +<br>(minutes*60); // Add duration seconds to get endtime</strong></p><p><strong> ^</strong></p><p><strong>exit status 1</strong></p><p><strong>'int time' redeclared<br>as different kind of symbol</strong></p>
<p>The big wheel just give a smoother and slower step. </p><p>Did you download the code from my link ? Try this link from my web site http://home.btconnect.com/brettoliver1/Timelapse_Panorama/Timelapse_Panorama.zip </p>
Yes, I use the program on your web.site.<br>The problem is about the library - Time.h.<br>Error: int time = 0; // clock holder<br>You can put a link to your - Time.h<br>please help<br>
<p>I have put a copy of the Time library on my site here http://home.btconnect.com/brettoliver1/Time.zip</p>
I use an $9 egg timer from IKEA.. Does the same thing, alot cheaper.
<p>I have tried the egg timer but you can't control the speed of rotation. You have 1 speed over any angle. They are too slow for a full rotation panorama taking an hour. I use around 2 mins and if you need a narrow angle time lapse over an hour time period for example they turn far too quickly.</p>
Good morning Brett,<br>I have checked all the libraries, but all the libraries are present. Is it possible to sketch including the necessary libraries in a zip file to email to me, I do not come no further,<br>Sorry for my bad English, I'm 69. Google translator is my friend.<br>Kind regards,<br>Rien van Westreenen<br>The Netherlands
<p>Hi Rienv</p><p>Did you download the code or copy it from my site? If you copied off the page that could be the problem. Try downloading it from here first <a href="http://home.btconnect.com/brettoliver1/Timelapse_Panorama/Timelapse_Panorama.zip" rel="nofollow">http://home.btconnect.com/brettoliver1/Timelapse_P...</a></p><p>If this does not work I can zip up the libraries for you.</p>
Hi Brett,<br>I tried both options, but I'm getting at when compiling both the same error message.<br>Would you please send me the sketch zip file, including the &quot;include files&quot;<br>The hardware I just almost finished the sketch I do not get to work.<br>Kind regards,<br>Rien van Westreenen<br>The Netherlands
<p>Hello Oliver, Please can you help me. I have downloaded the code for the Arduino Time-Lapse Panorama Controller, but I get the following error:</p><p>'POSITIVE' was not declared in this scope</p><p>My English is not so good but I hope you understand me.</p><p>Kind regards,</p><p>Rien van Westreenen \</p><p>The Netherlands</p>
<p>Hi Rien.</p><p>POSITIVE is used in the Liquid Crystal library.</p><p>Try checking you have all the libraries installed for this project.</p><p>You will need</p><p> &lt;Wire.h&gt;</p><p> &lt;LiquidCrystal_I2C.h&gt;</p><p> &lt;StepperAK.h&gt;</p><p> &lt;Time.h&gt;</p><p>Hope this helps.</p><p>Brett.</p>
<p>It was my first Arduino project, made it with some changes to the software. I used the accelstepper.h library and translated the user interface to German. It was great fun. Thanks for the instructable.</p>
Cool project but I'm gonna be honest here, you can do the same exact thing using a flat top steel egg timer. You just use the goto suction mount to the top and as the timer goes down the top rotates giving you the panning motion over time. Not saying this project isn't great , it's just a little overkill.
<p>I think the photographer's goals dictate the level of complication here. I have built a couple of different devices for timelapse and panoramas, and am starting another for astrophotography. Make some cool shots with that egg timer, but don't expect to be able to do the same things this device is capable of.</p>
<p>I have tried the egg timer but you can't control the speed of rotation. You have 1 speed over any angle. They are too slow for a full rotation panorama taking an hour. I use around 2 mins and if you need a narrow angle time lapse over an hour time period for example they turn far too quickly. </p>
This is a more easy option https://youtu.be/waefkmc-tO8
<p>That is a much easier option but where do you attach your camera or mount a tri-pod? The gearing is needed to turn the camera very slowly.</p><p>Looks like it uses very similar software to Tyler Winegarner's but there are no credits on the video. </p>
<p>I think you have inadvertently swapped the back of the vero board from side to side. As it is shown, the components for the front of the board are not mirrored properly when you show the component locations on the back side.</p>
<p>Hi grayl.</p><p>My Veroboard software gives me many viewing options. I have re labeled the rear view to x-ray view as it shows the rear view from top down through the board. I have added another view showing the rear of the board as if flipped over from the top. </p>
<p>oliverb: Now you've nailed it. Nice 'ible.</p>
beautiful pictures! :)
<p>Thanks. :)</p>

About This Instructable




More by oliverb:IOT Pet Feeder Using the Blynk Mobile App & an ESP8266 Module Arduino Background Radiation Monitor With 7 Segment Display Arduino controlled DCF77 Synchronized Astronomical Regulator Master Clock 
Add instructable to: