Motus v1.3 – DIY Time-lapse and Video Motion Control

EDIT: for an updated look at the Motus project including the new pan/tilt head, please visit http://www.motusmotion.com

For the last 2-3 months, I’ve been working at a fervent – border line obsessive – pace trying to get Motus to a functional status. Motus is a DIY time-lapse and video motion control linear slider system built on the open source architecture of Arduino as well as my previously self-built slider. The original motivation behind powering the motion of this slider was to create smooth, highly repeatable motion for use in video. Not only does this offer a highly cinematic feel, but it also allows you to begin considering special effects such as composting several takes together.

I chose to use a stepper motor as the workhorse for the slider. The advantage of these motors is that you don’t need an encoder to know at which position you are; this means that I could set position and repeat it very precisely. Given this fact, I expanded the features of the slider to time-lapse as well — after all the hardware has been put together, time-lapse is then simply software driven.

Everything is controlled through the compact control box which includes a small but highly readable OLED, a PlayStation type joystick, as well as various buttons for user input and ON/OFF control. As far as I/O goes, we have a port for AC power (12V, 5A), a 5-pin DIN (240 degree) for the stepper, a 1/8″ stereo jack used to trigger the camera, USB-B port into the Arduino to load new sketches, as well as another 5-pin DIN (180 degree) hooked up to two analog pins on the Arduino for expanded use (light meter anyone?).

Some features and specs include:

  • Nema 23 stepper motor with 173 oz-in holding torque
  • Position precision of 0.17 mm
  • Precise motion control for smooth video operation
  • Manual video move (direction/speed) or movement between waypoints
  • AC (wall-wart) or DC (battery) powered
  • Open source architecture
  • OLED display for high contrast legibility, even in direct sun
  • 4ft long slider, max motion is 1-2 inches less
  • Acceleration for damped starts
  • High torque for incline/decline moves
  • HDR timelapse shooting
  • Time lapse setup options:
    • Manual or automatic choice of interval
    • Immediate or specific time based start
    • Motion between waypoints or overall length

For those interested, I offer the following parts list grosso modo; it isn’t complete for several reasons, a few of them being: (A) each project is specific to your needs and will be constructed differently, so there is no sense in going into the small details which globally don’t change anything; (B) I believe open-source and open-ness doesn’t mean I should show every little detail and write up an entire walk-through. Rather, I believe it should motivate to learn and inspire to dream; to that end, if I showed you all the details, you wouldn’t learn as much — and gain an appreciation for it all — as if you, instead, went out to the interweb and searched for solutions to your specific problem. So, with that being said, here are some of the parts I used.

I haven’t created much footage with the slider yet, however I can already share two pieces. The first was shot entirely with the slider, using the motion control to get smooth moves; the second was a quick sunset time-lapse test I did recently. Enjoy!

12 Comments

  1. Nice application. I am designing a pan/tilt for my pod (see website). It looks as though you’ve cracked what I’m trying to do. I have the unit working, though I’m having difficulty programming endstops so I dont drive each axis too far. I will be expanding on the code to do the time lapse etc for other uses.
    I have included the code so far so you can see my approach. Any pointers you may have would be appreciated. Also Arduino based using easy stepper v4.4
    Does your unit control x any axis ?. If so is it available commercially.

    //declare pins
    int potPinX = 1; // input X axis
    int Step_X = 11;
    int Dir_X = 12;
    int Enable_X = 7;

    int potPinY = 2; //input Y axis
    int Step_Y = 9;
    int Dir_Y = 10;
    int Enable_Y = 8;

    //declare values
    int Speed_X = 0; //step speed (delay between steps)
    int val1= 0;
    int j = 0;

    int Speed_Y = 0;
    int val2= 0;
    int K = 0;

    void setup() {
    pinMode(Step_X, OUTPUT);
    pinMode(Dir_X, OUTPUT);
    pinMode(Enable_X, OUTPUT);

    pinMode(Step_Y, OUTPUT);
    pinMode(Dir_Y, OUTPUT);
    pinMode(Enable_Y, OUTPUT);

    //Serial.begin(9600);
    }

    void loop() {

    val1 = analogRead(potPinX);
    j = val1 – 517;
    j = abs(j); e
    Speed_X = 20000/j;

    val2 = analogRead(potPinY); // read the value from the sensor

    K = val2 – 517;
    K = abs(K);
    Speed_Y = 20000/j;

    if (val1 >= 520){

    digitalWrite(Enable_X,LOW); // enable
    digitalWrite(Dir_X, HIGH); // Set direction
    digitalWrite(Step_X,HIGH);
    delayMicroseconds(2);
    digitalWrite(Step_X,LOW);
    delayMicroseconds(Speed_X);

    }

    if (val2 >= 520){

    digitalWrite(Enable_Y,LOW); // enable
    digitalWrite(Dir_Y, HIGH); // Set direction
    digitalWrite(Step_Y,HIGH);
    delayMicroseconds(2);
    digitalWrite(Step_Y,LOW);
    delayMicroseconds(Speed_Y);

    }
    if (val1 <= 510){

    digitalWrite(Enable_X,LOW);// enable
    digitalWrite(Dir_X, LOW); // Other direction
    digitalWrite(Step_X,HIGH);
    delayMicroseconds(2);
    digitalWrite(Step_X,LOW);
    delayMicroseconds(Speed_X);
    }

    if (val2 <= 510){

    digitalWrite(Enable_Y,LOW);// enable
    digitalWrite(Dir_Y, LOW); // Other direction
    digitalWrite(Step_Y,HIGH);
    delayMicroseconds(2);
    digitalWrite(Step_Y,LOW);
    delayMicroseconds(Speed_Y);
    }

    if (val1 = 510) {
    digitalWrite(Enable_X,HIGH); // disable the stepper motor if the joystic is in the center
    }

    if (val2 = 510) {
    digitalWrite(Enable_Y,HIGH);

    }

    • Constantino Schillebeeckx

      Hi Bill, thanks for dropping by.

      A few comments on your code and your application.
      1. You probably don’t want to disable any of the steppers since you’re going to be dealing with a lot of vibration on the airplane; thus you’ll want the motors to hold position always.
      2. Using delayMicroseconds isn’t the best approach because it locks your code up and doesn’t allow you to do anything; instead look at an approach like this: http://playground.arduino.cc/Code/AvoidDelay

      Furthermore, take a look at the current status of the project: http://www.motusmotion.com. Yes, my controller can move as many axes as you throw at it, assuming the driver takes two input signals (step & dir).

      I’m currently putting the finishing touches on the next version controller at which point it’ll be commercially available, send me an email and we can discuss getting one into your hands: info@photocs.net

  2. Daniel Cordeor

    Hi Constantino, i like the Motus control, I come from spain and I search a motion control proyect for video and timelapse, I have and igus rail and steppers motors, belts,…. do you send me the arduino code, please? or It´s a comercial proyect? thanks.

    • Constantino Schillebeeckx

      Hi Daniel,

      Thanks for the comment. Sending you the code would not help you out since it’s specific to my particular drivers; furthermore, it’s large and complex, which would not help you out. However, if you tell me which driver you have, I could point you in the right direction for some basic code.

      Cheers!

  3. Noce work, i have the same setup except the motorized options, would be so kind to list the parts as you have outline in the first build. Thank you.

    • Constantino Schillebeeckx

      I added a brief parts list to the blog; thanks for stopping by!

  4. Patrick

    Holy crap! I’ve been researching this stuff like crazy. Thanks!

  5. Chassez l’ingenieur, il revient au galop!
    (Original is “Chassez le naturel, il revient au galop”)
    I knew it was only a matter of time before you would be itching to do something technical :)
    Felicitations: the whole project is very impressive!

  6. Frédéric

    Wow, I admire the ambition and resulting competence that is clearly visible, in the rig and in your writing about it. It promises a lot. I did have a hard time understanding all the technical terms though, which made it a bit uneasy to read the text fluently.

    The real estate commercial is well executed, but has perhaps a bit too much bokeh for my liking. I don’t know how much input you had in the design of the commercial, but although it has a straightforward and clear vision, the American publicity feel is way too obvious for me (the sentimental post-rock based on xylophone, guitar and drums; statements like “to find a way for us to be able to incorporate our passionate love for architecture…”). But I guess it’s just me that gets irritated by the mechanics of publicity… Hope you don’t mind my honest feedback.

    Young man from Europe ;)

Leave a Reply