This is home to my take on a DIY camera slider rail for timelapse photography. The plan is to use as much pre-existing hardware and software as possible so that anyone could build there own system. This a first pass at making this system and it will most likely evolve and get enhanced in future versions. Let me know if there are any errors or if you have any suggestions for improvements.
I’ve finally got all the the bits together and have sorted out the basic software and controller as below.
Firstly i’ll go through the hardware, then the controller box
Time Lapse Slider component
Timelapse rail hardware parts.
|Rail 1500mm 60×20 V-Slot|
|4 solid delrin wheels|
|1 gantry plate|
|Two limit switches|
|1 nema 48mm motor|
|Double Tee Nuts|
|GT2 Pulley 20 tooth|
|M3 socket head screws|
|M5 Low profile screws (6mm, 10mm)|
|GT2 timing Belt|
|2 Eccentric Spacers|
|Motor mount plate|
|Manfrotto ball head (484RC2) or any other suitable head.|
|1/4″ D-Ring Screw Stainless Steel For Camera Tripod|
|1/4″ to 3/8″ Convert Screw Adapter for Tripod & Monopod|
|Aluminium flat bar – 40mm x 3mm x 1m – Mounting plate|
|Aluminuim flat bar – 40mm x 6mm x 300mm – Tripod mounts|
|6mm Black Spiral Binding|
|M5 Low Profile Screws – 30mm|
|Metric Aluminum Spacers – 3mm|
|Aluminium Angle – 20mm x 20mm x 1.5mm 1m – Limit stops|
For the gantry I have essentially copied the Openbuilds video using the OpenBuilds Belt and Pinion Build Example. I know there are many ways of doing the gantry but have currently decided to go with everything on the gantry plate including motor, controller and camera particularly since the software controls both the camera and the motor. I may look into other options in revised version of the build.
The Stepper motor came with 4 seperate wires I encased these in black 6mm spiral binding and added a mini XLR conector to the end of the cable.
After an initial test of the standard gantry plate and wheel setup on the rail using the provided 25mm screws I found that there was not enough clearance between the rail and the gantry with tripod head screw attached. The associate screw hit the rail. I have revised the setup and replaced the provided 25mm M5 screws with 35mm screws and added 3mm spacers to raise the gantry plate high enough to allow for clearance of the tripod head mount screw. Eccentric spacers were used on one side to allow for adjustment of the wheels once attached to the rail as per the example video above. I also enlarged the hole in the center of the gantry to allow for a 1/4″ bolt to go through to allow for the attachment of the tripod head.
Below is the revised wheel assembly with tripod head, motor and controller box. The wheels are mounted with 30mm M5 screws and 3mm spacers.
To mount the tripod head I inserted a 3/8″ to 1/4″ screw adapter into the screw thread at the base of the tripod head and mounted the tripod head to the centre of the gantry plate with a 1/4″ D-Ring Screw. I mounted the stepper motor the motor mounting plate with 4 M3 socket screws then mounted both the motor assembly to the gantry plate with two M5 sockets screws and a Double Tee nut..
I made a mounting plate to attach the controller box to the gantry plate. To do this I got a 1m length of 40mm wide x 3mm thick aluminium bar cut an 80mm length then I drilled 5mm holes using a motor plate as a template. This will be attached to the gantry plate using two M5 screws and a double Tee nut similar to the stepper motor mounting.
Below is how it looks once assembled. The gantry plate was then fit to the rail and the eccentric spacers were adjusted to ensure a good fit between the wheels and the slot. Once the adjustment was made the gantry was removed and set aside.
Rail support attachment.
I planned on using a couple of camera tripods to support the rail. To do this I designed a simple attachment plate that would allow for a tripod camera plate to be screwed to the bottom of the rail and allow for the easy attachment of the tripods. I roughed out a plan using 40mm x 6mm aluminium bar cut into 2 x 60mm lengths.
I drilled 4 x 5mm holes 20mm apart in each end and 40mm apart length ways. I then drilled a 10mm counter sunk hole in each to a depth of 2mm to allow for the M5 attachment screws to sit below the surface of the plate. I then drilled a hole in the center of each plate and tapped a 1/4″ 20 thread hole for the tripod plate screw to attach to. Below is a rough fist attempt at the plates. These plates can be used on the 40mm, 60mm and 80mm rail.
I backed the plates with some Duct tape to protect the rail and attached them to the rail using 4 10mm M5 screws attached using 4 Tee nuts.
The mounting plate can be slid to any position along the rail.
Below is a tripod camera plate attached to one of the mount plates.
Tripods easily attach to the camera plates and provide quite a stable platform to support the the rail. The tripods can be set at any height or angle and still provide quite good stability.
Here is my final design diagram for tripod attachment plate.
The camera control system will be using limit switches to stop the camera system once it reaches the end of the rail. I fashioned two rail stops out of 20mm x 20mm x 1.5mm aluminium angle. This was done by cutting two 40mm lengths of the angle and then drilling 2 x 5mm holes 20mm apart. These are attached to the rail using 6mm M5 screws and Tee nuts and can be slid to the desired location and locked in place.
Limit stop attached to the rail.
Attaching the GT2 timing belt was done by simply using a 10mm M5 screw and a Tee nut slid into the slot on the side of the rail over the top of the belt The M5 screw was then tightened to hold the timing belt in place.
The belt is fed along the rail and through the gantry plate motor setup and tensioned at the other end of the rail with another M5 and Tee nut tightened to keep it in place.
The controller box
The controller unit is based on Airic Lenz’s excellent MiniEngine (MiniE V1.1) with some slight modifications in both the hardware, based on what I already had and needed to change, and the software to accommodate a shift to an i2c LCD. Below is the list of components. I am not overly skilled at electronics or programming, so I’m sure it could be made better.
The Stepper motor in this system draws up to 1.8 amps so the EasyDriver listed in Airics schematic (pages 16 and 17 of the MinieE v1.1 doc) has been replaced with a BigEasyDriver, which is pin compatible. Secondly I have changed the 4N35 optocouplers to 4N25 simply because I already had them, and changed R1 and R2 to 330 ohm instead of the 500 ohm listed. I have also done away with the LCD shield and have instead opted to make the equivalent setup using an i2c LCD backpack and 5 SPST press buttons set up the same as those used on the DFRobot shield.
Controller Box components
|Big Easy Driver|
|Sparkfun Arduino ProtoShield Kit|
|2 – 1K resistors|
|2.5mm stereo jack – camera|
|3.5mm stereo jack – limit switches|
|2 – 4N25 optocouplers (I already had these)|
|2 – 330 ohm resistors|
|2.1mm power jack|
|2.1mm power socket|
|Mini XLR socket|
|Mini XLR jack|
|Miniature Pushbutton – SPST Momentary Action|
|Adafruit i2c / SPI character LCD backpack|
|Adafruit Standard LCD 16×2 + extras – white on blue|
|100mmx68mmx50mm Plastic Enclosure|
|Camera remote cable|
|Stereo 3.5mm cable|
|Button resistors – 2K, 330Ω, 620Ω, 1K, 3.3k|
|M3 nylon nuts|
|M3 6mm nylon spacers|
Below is a video of the initial test of the electronics and software. On the left is the 48mm stepper mounted on the Openbuilds V-Slot Gantry plate. Next is a breadboard with a Big Easy Driver and two 4N25 Optocouplers linked to the camera remote connection on the camera. Next is an Arduino UNO with a Freetronics Terminal Shield and a DFRobot LCD Shield. On the right is a small breadboard/shield with two momentary switches and a couple of resistors that are acting as the limit switches that would normally be on the rail to prevent the camera from running off the end of the rail. The system is running the Airic Lenz’s MiniEngine (MiniE V1.1) and is set to run as shoot-move-shoot mode. The motor is currently set to a 1/2 turn each step, this can be set to other values depending on the need.
As shown in the video I had the system working quite well using a DFRobot LCD shield. However I will need to mount the BigEasyDriver optocouplers etc on a Protoshield or something similar and stacking the protoshield and LCD on the arduino, while it works quite well it is large and hard to mount in a small box. There also may be heat issues from the BigEasyDriver, which would be mounted directly under the LCD shield. I looked into creating the equivalent of the DFRobot LCD shield in parts mounted in the lid of the case but wanted to minimise the cabling. As such I looked into other options for the LCD and settled on trying the i2c bus thereby minimising the number of wires and hopefully simplifying the connections.. Adafruit makes a i2c LCD backpack and also has a nice 16×2 LCD and plenty of tutorials to put it all together. I chose to give this a go.
Putting it all together
First preparation of the controller box to mount the gantry plate. This involved drilling two 5mm holes in the base of the mounting box that aligned with the mounting plate. The box was then attached to the mounting plate using 2 x 6mm M5 screws and a double Tee nut,
I had limited clearance between the Arduino and the base of the box so to ensure no electrical shorting I covered the double Tee nut with electrical tape as well as covered the corresponding location on the Arduino.
The Arduino was temporarily mounted in the box using M3 screws and nylon spacers.
The whole controller box and motor will be controlled by a 12 battery. This will also power the Arduino directly. To do this I attached a a short cable to a 2.1mm power plug and attached this to the Arduino before mounting it into the box. I also drilled holes for a 2.1mm power socket a toggle switch, the mini XLR socket and for the 3.5mm (limit switch plug) and a 2.5mm (camera remote plug) stereo sockets. It is important to note that the Arduino code (as listed below) must be installed onto the Arduino and functioning correctly before the board is installed into the box. I have not allowed for the provision of a USB connector. This could be added by cutting a hole to allow USB support, but this current build doesn’t have this.
I first reviewed the schematics that were used in the MiniE system and made some minor modifications to suit my needs, I incorporated the buttons that were previously included on the LCD shield as well as changed the connection to support the i2c LCD. Below is the revised schematic.
For the button array I essentially copied the schematic from the DFRobot LCD shield buttons, as below, using the same resistor values in the new array. This allowed for a for the same button values and no modification to the code.
The i2c LCD backpack was connected to the LCD screen as per this tutorial.
I found that the i2c backpack didn’t allow for control of the LCD back light, changing the setting for the back light essentially either turned it on or off, without adjusting the brightness. I opted to remove the connection between the i2c backpack and the LCD and instead directly connect pin 15 on the LCD to D10 on the arduino as was originally assigned in the MiniE design. This restored the back light fading control.
Direct wiring to Pin15 on the LCDThe LCD and button array were installed into the lid of the box. The LCD is held in place with M3 screws and nylon spacers and M3 nuts.
The button array resistors were soldered directly to the buttons and the wires from the LCD and the Buttons to the Arduino were connected.
The Motor controller and other components were mounted onto a Sparfun ProtoShield. Below are the two optocouplers with resistors and the Limit switch resistors and connector wires.
The Protoboard was large enough for the Big Easy Driver board to be also mounted. Ths was attached and the wires connecting the Sleep, Direction, Step and ground were connnected to the associated pins on the Protoshield, Wires for the motor and motor power were also connected.
The power switch and input sockets were installed and wires were connected as was the MiniXLR socket. The LCD was also connected to the Protoshield. The wires for the limit switch and camera remote were separated ready for the connection to their respective sockets.
The limit switch and camera remote stereo sockets were connected and installed.
The power was applied and a test was run to ensure that the unit was working. Once this was done and all was OK the lid was secured onto the box.
The controller box was then attached to the gantry plate using two M5 screws and a Double Tee nut. Below is the box mounted with the motor and power connected.
The trigger switches were wired to a 3.5mm stereo cable.
These were then attached to the Gantry plate using the provided M5 screws and nuts. The positioning of these was done so that they would line up with the limit stops on the rail and also to minimise interference with the camera head. The limit switch stereo jack was connected to the controller box.
Below is the full camera gantry setup with the controller box mounted, motor, limit switches and camera remote connected.
The code for this project is essentially the code for the MiniE found here. Because I basically replicated the hardware of the DFRobot LCD shield as much as I could the values for the buttons and other code did not need to change. Also because I directly connected the LCD backlight to pin D10 on the Arduino I didn’t need to change the code for that either. The only mofification I needed to make was to change the LCD initialization code to support the i2c LCD backpack. This code is line176 in the miniE.ino file. Below is a pic of changed code. I have no other i2c devices connected so left the address to 0. The only other change that has to be made is to replace Arduino LiquidCrystal library with the one provided by Adafruit. This is essentail as the standard LiquidCrystal library will not work with the i2c backpack. The link to this library can be found here. This library is easy to use and is backwards compatible.
Initial Field Test
Below is the finished Time lapse rail setup for an initial field test
Here is a video from a trial run of the rail.