Android Timelapse Dolly

with No Comments

I’ve been working on a different take on a timelapse dolly.

This is an Android-controlled, bluetooth-communicating timelapse dolly.    An Android App is used to configure everything and control the dolly.

I somewhat whipped it up for a trip to Alaska, so I am still in the process of refining everything.

Examples of this dolly in action:

The Mechanical

Many of the parts used are the same as what is used on a Mini Kossel 3D printer.


Built the rack out of 1515 [amazon asin=B00C444G6O&text=Openbeam] would work as well.  I used 1 meter length.


The dolly base is 1/2 plywood that I had laying around that is drilled and cut on my CNC router.  If anyone is interested in the DXFs please ask!

The dolly has 6 bearing wheels from from deltaprinter.  This rides nicely on the 1515 extrusion.

[amazon asin=B00C4P382G&text=Amazon]) with a GT2 Belt Drive Gear (16 tooth).  Using a GT2 Timing Belt attached to either end.

The bearings before the stepper motor are 4 flanged bearings – [amazon asin=B00MGLKAWY&text=Amazon]).

Mounted on the top is the camera head from a tripod, which the camera mounts onto.

The 8-wire Ethernet breakout board is described in the electronics.

The shutter release that I’m using is an IR transmitter.  The two cameras I would like to use are a Canon T2i and a EOS-M.  I was annoyed to find out that the EOS-M has no way to attach a shutter release cable nor trigger the shutter over the USB, but I found that it still works with the IR device such as a [amazon asin=B004WB8EYM&text=RC-6].  After searching around on the internet,  I found a couple places that show the protocol –  Basically you send it 16 pulses at ~32.7kHz.  Wait 7.33ms.  Then send another 16 pulses at ~32.7kHz.  This will trigger the shutter.  This should work on all canon camera with a IR receiver.  Both the Canon T2i and EOS-M work great!  The first IR transmitter I tried was just a IR LED ripped off an old remote.



Gecko Stepper Motor Driver – This is what is sending the correct signals to the stepper motor to get it to move.  You tell it what direction you want to move on one pin and pulse steps on another pin.  Each pulse will move it one (micro)step.  This will send the right signals down the 4 wires going to the stepper motors.   This stepper motor is 200 steps per rotation.  The controller also does microsteps (basically in-between steps) to get some more accuracy – 10 Microsteps per step.  2,000 microsteps total.

I am currently driving the stepper motor driver at 19v current limited to 1A.

I had a couple of these around that I had extra for my CNC machine.  They would be way too expensive otherwise for this.  If I were do pick up something new, I’d get a pololu driver or something like that.

[amazon asin=B008BHB4L8&text=Step-down DC/DC converter].  Ultra cheap DC/DC converter.  This brings down 19V input to 7.4V that that the camera needs.  I didn’t want to have seperate camera battery on there so I used one of these. Seems to work well.

[amazon asin=B00B9GFJAU&text=Ethernet Breakout Board] – Carries the 4 wires for the stepper motor,  7.8V power for camera, shutter release for camera.  This way you only need to hook up one cord and don’t have a bunch of wires hanging around.

[amazon asin=B007KOHOCQ&text=V1 ]for this project, but the [amazon asin=B00BR5MB6S&text=OTG ]version would work as well). I really like the board and it opens up a lot of possibilities.  This is the first project I’ve used it in besides playing around.  This provides an interface to go between an android app and controlling pins on the PIC microprocessor on the IOIO board.  This can either be over a USB cable between the two or over Bluetooth.  The library provided takes care of much of the work.

I am running the stock V5.00 firmware on the IOIO that includes a new motor control library.  This allows an android app to send down blobs of sequenced data that is queued up and the IOIO executes in real-time.  This is a big deal because it allows for exact pulses and events to be executed in the right order and without all the lag (10s of milliseconds) that bluetooth or USB would provide.

Power Supply – I am using a [amazon asin=B00I0RIFES&text=GoalZero Sherpa 100].  The Sherpa has a 19V output for use with laptops.  I am using the 19V line to power the stepper motor driver.  For the stepper motor driver I need at least 15V (up to 50V).  The DC/DC converter brings it down from 19V to 7.4V to connect to the camera.  The IOIO board has a DC/DC converter that brings it down from 7.4V to 5V for the IOIO.

The Sherpa 100 has about 100 Watt hours of energy.  I hooked everything up to the power supply and recorded how much current was being used.  It seemed to average around 5W.  It varied based on if it the stepper motor was moving or if was taking a photo.  At that rate we should be able to run this set-up for about 20 hours off of battery power alone.  I also have a solar panel for the goal zero… With that connected I bet I could run quite a while longer!


Using the Pololu driver listed above you should be able to drive the whole device off of 12V which may be easier for people.  Then you might be able to use something like this [amazon asin=B005NGLTZQ&text=37Wh battery].  Although I haven’t tried it yet.


I provided the tossed together software that I’m using on github.

Mit license – so feel free to grab it for your project.  The only requirement is attribution back to me.  And if you do something cool with it let me know!

It runs as a service in the background so the screen can be off in the background. – I tried to make it as configurable as possible on the fly.  The biggest down-side right now is that the movements are queue up and send down to the IOIO ahead of the movement.  If you make a configuration change it will have to execute a couple movements with the old value before it gets to the new ones. – This is based off of Ytai’s example so I could get the use of the service correct.  There is quite a bit of setting up the sequencer, but the main program is in loop().

public void loop() throws ConnectionLostException,	InterruptedException {

move() – will send the PWM of an exact length.  This will send an exact number of pulses (that trigger microsteps) down to the Stepper Motor Controller – which will send the right stuff down to the stepper motor.

pause(float pause_seconds) – will wait the number of seconds desired.  I use this during the time when a photo is being taken (for example 30 second night shot) or right after a movement (1/2 second wait to make sure there isn’t extra vibrations that could get into a shot)

photo() – This will send the command to take a picture over the IR sensor.  16 pulses at ~32.7kHz.  Wait 7.33ms.  Then send another 16 pulses at ~32.7kHz.

There are a ton of new features that could be added.  Bulb ramping, dolly ramping, use a shutter release, use a DC motor instead of a stepper motor, etc.  One of the best things is you just need to update the app on your phone and you are good to go with adding these extra features.

The downside is the phone always has to be in range of the IOIO.  If you walk too far away and it loses connection, it will finish its queue and then wait and wait to be reconnected and for new data to be sent down.

Quick Demo:

I am considering building a single board with all the electronics on it, or a kit for the whole thing.  If we had enough people interested I could get a set of boards made.  Let me know if you’re interested!


Leave a Reply