OpenMoco: Open-source Timelapse Motion Control

Hello all,

Recently, I completed the first versions of my OpenMoco software for the Arduino.

The purpose of the OpenMoco system is to provide an open-source, relatively inexpensive motion-control solution for time-lapse that provides many of the capabilities of the closed-source (and fairly pricey!) options on the market.

The OpenMoco design concept is presently:

A centralized 'engine' that directly controls up to two cameras, or one camera and an external flash, and interfaces with three stepper motor controllers to control motion on the axes.

Any number of human or machine interfaces (up to two at one time, via hardware and software serial) to control the engine.

Current engine features:

  • Intervalometer control: from 1 to 65,536 seconds interval time
  • 'Optimistic' scheduling of exposures -- fire at earliest available point longer than interval, don't miss shots due to actions taking longer than expected, and don't shoot during an action
  • Bulb mode exposure control: from 1 ms to ~ 50 days
  • Pre-focus tap (tap focus before firing)
  • Post-exposure delay
  • Pre-exposure delay
  • Shot-count limiting (none, or limit up to 65,536 shots)
  • Control of up to 3 stepper-motorized axes
  • Motion control is shoot-move-shoot (no movements while camera firing)
  • Linear ramp up and down of motor movement (make smooth transistions in final output video)
  • Linear speed ramping of individual movements (avoid shake and bounce when driving steppers multiple steps)
  • Direct manual control of axes (move this far, now)
  • Set home/go to home on motor axes
  • Alt Input/Output port
  • Alt input triggers actions when brought high
  • Alt in can trigger: camera exposure, motor movement
  • Alt output acts as secondary output when firing camera (another camera, flash, etc.)
  • Trigger alt out before or after: camera fire, individual motor movement
  • Action scripting: set pre-defined actions into program memory
  • Actions can modify nearly an aspect of program execution (exposure time, camera on/off, motor movement/direction, motor ramping, pause program, stop program, etc.)
  • Keyframing: trigger actions when keyframes occur.
  • Up to 8 keyframes of each type: shots fired, time elapsed, motor movements
  • Dual control by both hardware UART and software UART (control via computer and a hand-held device at the same time)

It also currently has a PERL API for controlling and interacting with the engine from a computer. I'll be releasing a human, textual/scriptable interface to it soon.

Some of the changes coming up in the next version:

  • Removing software UART (never liked it anyhow)
  • Adding i2c support for other devices (like my LightRails exposure control device), and separating some functions out of the engine into different components
  • Backlash compensation
  • Extending to 4-axes

I expect to have in the next couple of months a reference design showing how to create a two-axis unit using off-the-shelf components from Sherline, for about half the price of a commercial system that's currently on the market using the same sherline components.

Also, by end of the year, I intend to be releasing my first prototype motor axis units that do pan/tilt.

The goal is to both enable the DIY time-lapser to create great systems without having to hassle with re-inventing software wheels, and also to enable the dabbler to buy off-the-shelf setups that are much less than the current market prices for systems with similar features. (Presently, approximately $2k to $20k for commercial systems.)

The website is, and you can go directly to download the engine sketch, or view the source at the software page:

Any feedback would be greatly appreciated!


I like your idea very much ...

What about extending OpenMoco for taking panorama pics (gigapixel and spheres)?

How do you control the steppers? Any additional hardware like EasyDiver ?

Could you add some pictures to illustrate OpenMoco?

I DIYed a two axis-stepper-driven-robot combining an Arduino, two stepper drivers, two small steppers, two gearboxes, a 20x4 LCD and a Wii Nunchuck to take pics with a DSLR-cam. My gearboxes are imho too big and I would like to replace them with wormdrives, but could not find some reasonable priced ones.

There are plans to expand to a gigapano platform as well, which wouldn't be terribly difficult. I'm waiting until I have functional motorized axes together that can be had for a low price before expanding the scope =)

Yes, it requires motor drivers that have step/dir interfaces, like easydriver, probotix, gecko, etc. This allows one to use the right hardware for their solution (i.e. a large crane style automated jib wouldn't work very well with direct-driven steppers from the arduino, but it would work great with some beefy gecko's and AC steppers =)

As for pictures- what would you like to see? Pictures of a setup, or end-result? Right now I've been running an old hardware setup for all testing purposes, and here's a picture of it:

It's just a one-axis system with all of the guts for a three-axis system =)

As for worm gearing, have you checked out sdp-si? They have a great selection of worms and worm gears at a fairly inexpensive price. I've been making my parts lists and getting the parts drawings for the prototype designs I'm working on from them, and have been able to design a 175:1 worm gear setup (based around NEMA 14 steppers from anaheim automation) that part out completely (minus enclosure materials and machining) for about $120/axis. That would make it, in theory, about 42lbs of torque at final output, and a minimum rotational step of about 0.0019 degrees per step w/ an easydriver and 1.8 degree stepper.

Right now I'm working on some tutorials for the beginning DIY'er, while I wait to finish saving the cash to get my CNC system completed. I think there are a lot of great examples of how to do things out there for the newbie (certainly, I learned from a lot of them), but they don't explain how and why they were designed the way they were. I guess you could say that I'm surreptitiously defending all design concepts I've made through tutorials that show different ways of doing things, and their strengths/weaknesses =)

It's still fairly early in the life of the project, with a few people already using the software in their own hardware designs.

At least one other person, Dan Thompson, is contributing his own take, with a direct control interface between Maya and a multi-axis rig.


Interesting system. I currently have a camera crane under construction which I'd like to eventually set up with some motion control features, so I'll keep an eye on this project. Thanks for posting about it.

Ok guys, after a lot of work with others, etc. Version 0.82 of the engine is ready to go.

You can download everything here:

It may not be obvious from the surface, but the project has really taken off. If you pick up this month's copy of Wired, the fetish photo was shot using the OpenMoco system, I have worked directly with that photographer to help him build a system based around OpenMoco to solve many of his studio needs. Jay Burlage (of HDR and 'milapse' notoriety) joined me in the project a few months back, and has really helped increase the traction of the project with both pro and amateur shooters.

We're currently in talks with several hardware vendors, designers, etc. to start producing "kit components" that take the hardest work out of producing a high-end moco system (for timelapse, gigapano, studio shooting, etc.) and work for the lowest price. There have been a bunch of projects based around the system from DIY guys so far. Here are some examples:

Timelapse equipment:

Gigapano equipment running OpenMoco:

It seems like every day I learn about someone new working with it.

This latest version greatly expands the scripting capabilities for the engine, providing easy support for not only regular timelapse motion control and shooting, but interlacing videos at different motion speeds, or event different positions - you can shoot multiple videos in one pass with different view targets. Also extended support so that HDR timelapse, gigapixel panoramas, and even HDR gigapixel panoramas can be shot easily! (A 10x10 GP script example is included with 'Slim' that shows how to do the whole shot in only 14 commands.)

Speaking of gigapixel panoramas, the Papywizard guys are working to add support for the OpenMoco engine.

Of course, I've also added support for the 4th motor axis in this version, and the full serial protocol is now documented - making it easier to write new UI's or integrate it with other systems.

Along with the sketch for the arduino, I've also provided a perl API library, making it easier to interface with perl applications, and the "Slim" scripting engine, which allows one to use human-readable commands to script and repeat actions, or control the engine in real time from any machine that can run perl (windows, mac, linux, etc.).

We will be providing a native arduino library for serial communication soon so that it can be easily integrated as a network component in an existing arduino project.

Work on a processing-based GUI has begun, but a contributor has also created a Windows-based GUI, like I mentioned we're working with Papywizard to support it there, and some of the contributors are currently working on a native GUI for the touchshield slide.

The next release will add support for a simple native-ui running from the engine (lcd+5 buttons), the ability to mix DC motors in with the steppers, and asynchronous stepper control for using stepper-based continuous motion and real-time motor interaction with the steppers -- amongst many other things =)

Feel free to drop by and check it out, at

I see some people have been working on intervalometers, motion control, etc. I encourage you guys to join us and extend or create your projects at a little more rapid pace =)


This is awesome. I wish I work as fast as you in your video ^_^. Maybe a simple question: You have two rotary stages. For the one that controls tilt, why not have its rotational axis through the CCD or center of mass of the camera instead of through the bottom of the camera? Your rotation requires much torque compared with rotating around the camera's center. On the other hand, your way is more like a human being.

Hehe, actually one can produce a very high speed out of the steppers, based on some factors about the load, motor, microstepping, and how your velocity curve is implemented. I've been able to push that setup as fast as 5-7KHz step rate - but at that point, the metal worm gearing starts to howl and scream, and the amount of grease required to support those speeds results in too much backlash. I did a test last night with some new asynchronous motor code I'm working on, and pushed it to 10KHz, but that was stressing the gear chain too much.

The reason why the tilt is not centered with the mass of the camera is primarily to reduce the size/weight of the unit, while still allowing maximal tilt. In this case, with the camera off, the tilt bar can rotate a full 360'. Of course, one can simple turn the tilt upright frame around 180' (it's just two bolts that attaches it to the pan base) and get 360', but one goes completely off-center of the pan.

For those shooting panos, they'll want to be able to nodally-center the camera, so in that case, you just get a longer piece of extrusion to mount the camera to, and then slide it down a bit =) For timelapse, a little off-center is better, as you mention, to give a feel more like a person panning the camera.

FWIW, those motors only have 9 oz/in of torque! The gear chain is 120:1 worm gearing, and power is cut to both axes between moves in that video. So, it can run on a 4Ah battery all day and night - and then some.


OpenMoCo seems like a bad choice of name to me as it's pronounced like the more famous OpenMoko (open source mobile phone). Perhaps you should think about a change or those could be confused with each other ;)

OpenMoCo seems like a bad choice of name to me as it's pronounced like the more famous OpenMoko (open source mobile phone). Perhaps you should think about a change or those could be confused with each other Wink

Well, it's a bit late for all of that - as you can see it's been active for about a year, and that's what everyone knows it as now (there've been podcasts, an article in Tom's Hardware Guide, at least one forum has its own section devoted to it, and the timelapse/video motion control industry-types are all aware of it by that name now).

As there's little overlap in audience, I doubt it would be a big deal going forward - and I highly doubt they'd take that much issue with another opensource project having a similar name =)


I see the last post is from April, what's the status of this project.

I currently work as a Moco Operator on a serious system but I am very interested in puttin together a small lightweight system for DSLRs.

Some points Pan, Tilt , dolly would be essential repeatable motion is important On our Flair system we use a bloop light for lining up mulitple passes but it requires camera feedback to be really accurate.

I've just started playing with Arduino and would love to contribute on this.

drone, is the site part of your project?.

This thing is really amazing! :D


Yes - that is my company. We're working right now on a full implementation of the TLE in custom hardware, ready to run. (Although, the final TLE will differ from the existing one in that instead of 1 AVR for four axis, it will be 1 AVR per axis, using a targeted protocol. This way each axis can be independent and thereby free up code space/memory for a lot more function.)


the project is still active (see above), and has several active users, I'll admit to being remiss in posting new stuff up there as of late, but having two full-time jobs is kind of kicking my butt =) Feel free to join us and talk about what you want to achieve!