Timelapse Panning Controller for GoPro Cameras





Introduction: Timelapse Panning Controller for GoPro Cameras

This instructible will show you how I built (and you can also build) an Arduino Timelapse Panning controller for GoPro cameras. There are obviously some refinements that can be made to the design, but in general I am very happy with the results that I've captured with it. Check out the video below for a quick overview of the device.

Step 1: Everything You Need

What you will need:

1x Arduino Uno Board R3
1x SainSmart LCD Keypad Shield
1x 28BYJ-48 Stepper motor
5x Female-Male Solderless Jumper Cables
1x 7-pin male header pins
1x 6x3x2" Radio Shack project Enclosure
1x 12 tooth drive gear
1x 36 tooth driven gear
2x 3x3 plate from Hillman Hobby parts
2x 1x3 bracket from Hillman Hobby parts
2x 2x3 right angle bracket from Hillman Hobby Parts
8x short screws and nuts
6x long, slender screws and nuts
4x nylon spacers
3x Buttons
1x 5mm drive shaft

Helpful haves:
Dremel or similar Rotary Tool
Picture hanging putty
2-part metal epoxy

Step 2: Circuit Design

There's nothing much to the circuit design. The Keypad Shield plugs straight onto the Arduino. You will need to solder a seven pin male header onto the keypad shield to get access to the pins which will power and control the motor.

Step 3: Building the Chassis for He Output Shaft.

Begin by drilling out the center holes of the 1x3 brackets so they can accommodate the output shaft. Once they're wide enough to accommodate the shaft without any binding, begin assembling the output shaft by mounting your driven gear and slide it throught he bottom bracket. I've added a nylon foot to the bottom of the shaft to keep it from binding on the baseplate.

Next, begin assembling the Chassis by attaching the top bracket to the two side panels. Notice that I arranged the bolts for the top bracket with the nuts facing outward - I'd had clearance issues with the driven gear. Then, attach the bottom bracket, the side panels and the L-brackets together to form the structure.

Step 4: Machining the Baseplate

Use the completed chassis to mark out where you'll need to drill the baseplate for mounting holes. Once you have the chassis mounted, line up the motor ensuring that the gears have a good interface. I find that placing a wad of picture putty under the motor helps with this. Then, drill the mounting holes for the motor and mount it into place using two of the longer, slender bolts.

Step 5: Machining the Enclosure

Next we'll machine the enclosure. Place small dabs of putty on the four corners of the screen, and place the keypad shield into the inside of the enclosure. The putty will keep the screen in place when marking the mounting holes for the screen, and will help mark the location of the screen - excellent for marking the for corners of the screen for the hole you'll need to cut out of the top.

Use the dremel to cut the hole for the screen, and then drill out the additional holes you need, for the brightness control and the three holes you'll need for the buttons.

Finally, cut a hole in the side of the enclosure for the USB cable. Neatness counts.

Step 6: Wire Up the Motor, Upload the Sketch, and Test.

Using the five jumper cables, wire up the motor to the board as shown. When you're ready, upload the following sketch to the uno board, mount it to the shield and test to make sure everything works.

The sketch for this project can be fount at the following link. I'll apologize in advance, I'm rubbish with commenting code, so there really aren't any comments. Sorry.



Step 7: Mounting Boards Into the Enclosure

Place the long screws through the mounting holes of the enclosure and then flip the enclosure upside down. Place the spacers and buttons and then drop the keypad shield onto the screws. Loosely fit the nuts onto the screws, making sure that everything fits where it needs to and the buttons function properly. Next, place the Arduino board into place, ensuing that you can plug a USB-B cable through the hole in the side.

Now is a very good time to double check that everything works before buttoning up the enclosure.

Step 8: Finishing Touches

Spread a wad of picture putty on the inside of the enclosure and begin to fit the baseplate into the top of the enclosure. The output shaft should leave a mark in the putty and indicate where you'll need to drill the hole for the output shaft.

You can add a tripod mount to the plastic base of the enclosure by drilling a hole in the plastic base and using 2-part epoxy to weld a 1/4" nut to the base. Make sure you roughen up all mating surfaces to ensure a good bond.

Finally, you can modify a GoPro flat mount plate to accommodate the output shaft by using the picture putty to bond a plastic plate to the bottom of the mounting plate. In this case I used a spare gear. Drill a hole for the output shaft, ensuring a snug fit. You can also use 2-part epoxy in place of the putty for a more permanent bond.

Microcontroller Contest

Second Prize in the
Microcontroller Contest

4 People Made This Project!


  • Oil Contest

    Oil Contest
  • Creative Misuse Contest

    Creative Misuse Contest
  • Clocks Contest

    Clocks Contest

28 Discussions

Does this project use a stepper motor driver??? and can you show the schematics for this project?? Thanks in advance :D

just curious, what is the lowest rotation speed you can get with this setup? Has anyone gotten closer to 1 rev per hour? or know what you would need to do to get there?



2 replies

You should be able to make this go as slow as you like. The code on the arduino takes the total runtime of the timelapse (currently limited to 12 hours, but easy to change) and divides that up by the number of motor steps needed to get from the start of the program to the end.

I suppose that if you moved it over a short enough distance over a long enough period of time, you would eventually see the individual steps of the stepper expressed over the long period of time, appearing as a juddery motion. Should be fairly easy to fix using stabilization software though.

Thanks for the quick reply. Any idea what the smallest degree of movement is?

Nice work!

I am making a version of your Time Lapse device using a 4x20 LCD I2C display and Meccano gears with a 1 to 7 ratio.

I have combined your code with the the modified code from


The code is switchable between the two so I can select the code for full Rotation Time Lapse or the set rotation Timelapse using your code.

As I have extra display space on my 4x20 display I have added degrees left and right when setting the start and end points and also total panorama angle once the panorama starts.

Will post a pic when the project is completed.

Really nice job, the resulting videos are amazing !

Thats is exactly what I was looking for. Many thanks for posting ! :)


my name is Tobi, i coose this to be my first real arduino project (i've bee playing around with it a while).

I wanted to modify it as i want to use a LCD 1602 and seperate push buttons.

My questions now how to wrap it up together, or how to modify the code to run.

Another question is, if i need to run the stepper with a ul2003 driver, or if i can directly wire it to the arduino.

I don't know it its important, but i don't use an uno, instead i chose a nano v3.0.



Hi Tyler,

I tried to build something up similar. I thought that with microstepping the stepper, that the 4096/rev resolution would be smooth enough to use direct drive, but it isn't. I am observing some "cogging" in which even though there are supposed to be 8 (micro)steps per phase, 6 of them barely move and two of them move much more. Did you observe this kind of behavior on your stepper? I have another one so I guess I'll see if the other one does it also. At any rate, I guess I'll end up using gears. I found that hobby king has metal gears that should work at a much lower price (around $3 or $4 dollars each). What did you use (where did you get), your 5mm drive shaft? Thanks!

1 reply

I got around to making my own based on your concept. I made a few changes and wrote my own software (I'm a software engineer so I figured I ought to write my own!). Thanks for the inspiration!


You can find gears cheaply in old scanners and printers :)

2 replies

My first build of this design used nylon gears that I'd harvested from a hand-crank powered LED flashlight. I had to drill the bore out of the gears quite a lot and warped them in the process, so they weren't suitable in the long run - but it was a great proof on concept. I definitely will be eyeing abandoned printers in the future!

thanks a lot for that wonderful project. since i had all the electronics at home I put them together, loaded your software and it was working straight immediatly! after finding tooth drive gear (used nylon gear) in a local hobby store, i decided to go for a more easy and stylish case using two acrylic glass pieces I got for cheap, brass standoffs. doing that way, except drilling holes at exact places no additional Mount for the shaft is necessary.

check the following Pictures to get an idea, what I am talking about: https://www.dropbox.com/sh/azsx2rrjdx11i2p/L_wYMblZvZ 

Best regards from vienna, Austria!

2 replies

Christian, that looks super elegant! Do you use a drill press to get your accurate drilling?

I'm glad the code worked straight away. Its really exciting to see my code on the screen of an arduino a continent away.

use just my dremel 8200 on a dremel workstation.
the acrylic glass comes with a protective cover film while still remaining transparent enough.
this makes it super easy to take the exact points for holes as it is enough to hold the components where you want them to have at the end, mark it with a water restistant pen and the drill the hole.
you just remove the film after you are done with the last hole and the surface of the acrylic glass still is absolute without any scratches or something.

Hi Tyler,
Thanks for the great post! Your project looks great.
I am a bit overwhelmed by the sdp-si website. I don't know much about gears... Could you advice me as to which models to buy?
Thanks a lot!

1 reply

Yeah, it was pretty overwhelming to me at first, too. Took me a while to realize I could isolate search fields by internal bore, gear pitch, etc. Anyhow, the two gears I used were the following part numbers. Pop these in the search field and it should come right up:



Very nice. Might adapt this for the iPhone. ( time lapse apps )