Camera Slider Project in need of assistance.

Hello everyone, we are in need of some help and maybe even hopefully some collaboration.

In a nut shell, we are a small film group that just started getting into Arduinos in the hopes that it would help make our life a bit easier and allow us to build ‘equipment’ that we cannot afford. With that being said, we have started an Arduino controlled camera slider project and could use any help that we can get.

Instead of building the slider from scratch, we decided to cannibalize an old HP Designjet plotter for the linear motion that originally drove the print head shuttle (see attached). We’ve purchased an Arduino Mega and a couple 4 channel relay modules. On order is a couple Nema 17 200 step/rev 12v motors along with an Adafruit Motor\Stepper shield and some other ancillary items. Mechanically, we are sound, however, when it comes to the software side of things…we are completely lost.

First off, we are seriously wondering if an Arduino can pull off what we are trying to achieve or if we should dial it way back. Obviously, we are wanting to control the linear motion in the X Axis in order to make the camera slide back and forth via a single axis joystick, but we are also wanting a “speed buffer” at the beginning and end of movement that way the start and stop is not as ‘violent’ (more kinesic and less robotic). We are also trying to get the same characteristics in lieu of a camera pan motion (Z axis rotation) with another stepper motor controlled by a different single axis joystick.

We’re also wondering if it is at all possible to ‘record’ a series of movements and be able to ‘play’ them back to get the same camera movement repeatedly (with both X axis linear movement and Z axis rotation).

If anyone can help shed some light on this or could help with the programming, it would be greatly appreciated. Our main goal of this project is to not only have an awesome camera slider, but we want to put the information out there so that other filmmakers can build the same style of slider without having to slam their head off of the walls for weeks on end.

Thank you,


You have quite a bit of coding and electronics to learn. I am a photographer by trade and made a slider, but to be honest, if you have little coding and/or mechanics background, I'd consider the now many affordable systems available.

The mechanics side of things is not a concern since a couple of us are mechanical designers or mechanical engineers by trade. The coding side was the most concerning since the only one of us that was fluent in C/C++/C# is no longer with us.

Store LUTs of times and a direction (can be an int array with a protocol as such):

Byte 0-14 = tenths of seconds move occurs (say 500 tenths in)
Byte 15 = The direction the motor goes.

This allows a slide of 1600 seconds ish ( over 24hrs) and can be stored in the EEPROM, in the RAM (if you dont need it permanently) or on a separate EEPROM IC.

The internal EEPROM storage available for you to use without the external EEPROM is 1kb…allowing storage of ~500 ints. This means you can store 500 steps and when they should occur.

Another option is to do this more “mathematically” and with some more clever programming.
1.You want the slider to be in position a at time t.
2. Calculate the number of steps between a0 (where the thing is) and a1 (where it needs to be).
3. Calculate the time for those number of steps that need to occur.
4. You can now work out the number of seconds/tenths seconds/milliseconds each step needs to occur between point a0 and a a1.
5.Repeat for all necessary positions.

The positional data and times at each position can be stored in EEPROM.

For example:

a0 = 0cm t0=0
a1 = 5cm t1 = 10
a2 = 32cm t2 = 320

Say the motor needs to do 10 turns per centimeter:

a1 - a0 = 5cm
t1 - t0 = 10 seconds

5cm * 10 per cm = 50 turns
50turns / 10 seconds = 1 turn per 5 seconds.
Carry out the operation.

If you want to “ramp” the speed…so it looks like the thing is speeding up…then you can use various mathematical relationships to get the type of ramping you want…linear, quadratic, cubic, sinusoidal etc.

a0 = 0cm t0=0 s = linear
a1 = 5cm t1 = 10 s = decreasing quadratic
a2 = 32cm t2 = 320 s = sinusoidal.