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.)
Any feedback would be greatly appreciated!