Introduction: DIY Time Lapse Dolly

About: Maker, love to experiment and figure out how stuff works

I have been making time lapse videos for some time now. I wanted to create a time lapse video in which the camera also moves while shooting the timelapse. This is to get a new dimension of motion over a static time lapse movie. The camera should cover a distance of 5 feet over 1-2 hours. When you now join the shots and create the time-lapse video - you get an additional dimension of time lapse + motion.

I viewed the time lapse dollies available on the net and purchasing a new time lapse dolly is too expensive so I thought of making one. Turned out I could make one in less than 2000 Rs or about 30 USD – and it does a fantastic job of taking moving time lapse videos. All this with material which was lying around the house and basically material which otherwise we would junk. The whole project works like a dream. (See the dolly in action)

This homemade dolly/slider is by far the simplest one. This design requires little to no workshop skills and specialist parts. The secret to this simple mechanism lies in the ridiculously simple sliding mechanism. No wheels & rails or any or any other complex parts just two PVC pipes which fit snugly inside each other.

This instructable explains in a lot detail the different components and the electric circuits needed to make this dolly. Anyone with basic knowledge of electronics can make this project.

I have tried to make this instructable as comprehensive as possible - however it is possible that I may have overlooked a few points. Kindly leave a comment or message me which and I will try my best to help you out, also this will will help me to improve this instructable.

Note: I take no responsibility if you damage your camera or arduino by building this dolly. By undertaking this instructable you do so at your own risk. Whilst I have made every best effort to insure this instructable is accurate given the fact I am not a professional and there may be errors.

Step 1: Getting the Tools and Parts

Tools

• Soldering iron
• Drill and wood 5 mm drill bit
• Screwdrivers
• Hacksaw Blade to cut the pipes
• Multimeter


Hardware needed


• 12v Geared DC Motor – high torque(3-5kg-cm). About 2 to 7 rpm should be good.
• Clamp to hold the DC motor
• Pulley
• String (plastic/nylon kite string or any other string should do)
• Small Hooks
• PVC pipes ¾ inch in diameter - 24 feet (approx)
• PVC pipes 1 inch in diameter – 1 feet (approx)
• 4 pieces PVC T connectors (for 3/4 inch pipe) –
• 4 pieces PVC Elbow joints (for 3/4 inch pipe)
• 4 Clamps for ¾ inch pipes
• 2 Clamps for 1 inch pipe
• ¾ inch screws
• Approx 6 inch x 9 inch plywood boards (9 mm to 12 mm thickness) for camera platform and to hold the arduino circuit. Any thickness will do as long as it is sturdy and hold the weight of the camera.
• Wood glue

Note: I picked up the 3/4 inch and 1 inch diameter pipes as I had them lying around. Basically any combination of pipe thickness would do as long as one fits in the other and moves smoothly for e.g. You could pick up a 1 inch and 1.5 inch diameter pipe as well. The pipes need to be sturdy enough to support the weight of the camera.

Electronic components

  • Arduino Uno
  • 2 full size breadboard
  • Camera Shutter Release Cable – check out the appropriate cable compatibility here (I have a Nikon DSLR camera and hence used a MCDC2 shutter release cable).
  • 60-80 10 & 20cm male-male Jumper cables Edit: Small pieces of single core wire recommended over jumper cables.
  • 10 male-female 20 cm Jumper cables.
  • 4 push buttons
  • l293d dual h bridge motor driver and 16 pin ic socket
  • 5mm LED
  • Couple of 10k potentiometers (Type 1 and Type 2)
  • 220ohm, 330ohm, 1k and 10k ¼ watt resistors
  • 16x2 lcd display
  • Male/female header pins (berg strip)
  • BC547 npn transistor
  • batteries and battery holder
  • 9 volt battery and battery clip
  • gpb (protoboard)

Edit:Instead of using jumper cables you can use pieces of single core wire cut and stripped to size to make the connections, it would be much neater and easier to debug. While writing this instructable I was using jumper cables. It would have been much easier had I used single core wires.

Step 2: Constructing the Dolly Frame

    ¾ inch pipes (smaller diameter pipe)

    • Cut two pipes about 5 feet in length.
    • Cut two small pieces of about 6 inches (for attaching the platform for the electronics).
    • Cut two small connector pieces about 4 inches in length.
    • Cut four pipes about 1 feet in length for the four legs of the dolly.

    Connect the pipes using the elbow and T connectors as shown in the picture. The T connectors act as connectors for the legs as well. Ensure that the connections between the PVC pipes are tight as they need to hold the entire weight of the camera. In case the joints are loose and not tight then attaching a simple paper tape at the ends of the pipes and inserting them in the joints does the trick.

    Step 3: Camera Slider Platform

    1 inch pipe(larger diameter)

    • Cut two pieces about 5 inches in length

    Platform

    • 6 inch x 9 inch plywood board. Approx 1 inch in thickness. This will allow the 3/4 inch screws to go through easily
    • 2/4 clamps for holding the pipes in place
    • 2-3 small hooks

    Cut a 6 inch by 9 inch plywood board or any other strong board on which the DSLR Camera can be placed.

    Use the clamp and fix it to the one inch pipe as shown in the photo above using 3/4 inch screws. Use the power drill to create a small hole to start with, which will then guide the screws through.

    Important Note: Ensure that the distance of these two pipes on the platform is the same as the width of the dolly. This will allow smooth functioning of the platform on the dolly.

    Camera Platform Stand

    On the other side of the platform where the pipes have been fixed we need to fix the Camera tripod stand.

    I got my ball head from a small 6 inch tripod. Similar tripods or their heads are cheaply available on ebay. It is important that the head should take the weight of the camera you plan on using. You also need a reliable way to attach the head to the platform.

    To fix the Tripod Ball Head at the center of the platform. I used two plastic plates, drilled a round hole at the center and then attached the ball head at the center using a screw that was used to attach the head to he tripod.

    Step 4: Platform for Arduino Circuit and Motor

    Platform

    • 5 inch x 9 inch plywood board (1/2 inch thick)
    • 4 Clamps + 3/4 inch screws
    • 1 DC Motor + clamp to hold the DC motor
    • 2 Pulley
    • 2 strong pieces string approx 5&1/2ft and 11ft in length

    Steps

    On the 3/4 inch pipe fix a 5 inch x 9 inch (or any other suitable size) plywood board using clamps to create the a place to hold your arduino circuit board on the top.

    On the reverse side attach the motor using clamps - this will be used to pull the camera platform from one end to the other. Ensure that the motor is fixed in a way wherein the pulley is more or less at the center of the platform. This will ensure that the string which pulls the camera platform is in a straight line enabling smooth motion.

    Attach two wheels / pulleys to the motor shaft. One pulley will be used to pull the camera platform towards the stationary platform (as the motor moves in clockwise direction) and the other pulley will be used to push the camera away from the stationary platform (as motor moves in anti-clockwise direction)

    Tie one end of the string from the pulley to the camera platform. From the other pulley take the string and loop it over the far end of the dolly and then attach it to the camera platform.

    So as the motor moves in anti-clockwise direction the first pulley will pull the camera towards the ifself. When the motor moves in clockwise direction the second pulley is now pulling the camera platform - but since the string is looped from the far end - it is effectively pushing the camera platform away from the static platform.

    Thus anti-clockwise motion of the motor is giving us the Pull effect and clockwise motion of the motor is giving us the Push effect on the camera platform.

    The Platform is now ready for use.

    Step 5: Connecting the Motor Driver Ic

    This step allows us to change the direction of our dc motor. This step can be skipped if you want a unidirectional motor. You can use an npn transistor (say Tip31c).

    To change the direction of our motor we use an H-bridge. A H bridge is an electronic circuit that enables a voltage to be applied across a load in either direction. Read more about how H-bridges work here.

    In the code we have input 1 as x, input 2 as y and enable pins.

    When x is low, y is high and enable is high the motor spins one way (i.e. clockwise direction).

    When x is high, y is low and enable is high the motor spins the other way (i.e. anti-clockwise direction).

    When x is low, y is low the motor doesn't spin.

    For the motor to spin enable needs to be high irrespective of x & y. Hence enable can be used as a switch when x & y remain fixed.

    In the above diagram.

    • Input 1 & 2 are x & y respectively.
    • vs is the supply (12v) for the 12v motor.
    • vss is the supply(5v) which powers the chip.
    • Enable acts as a switch for the motor. High=on, low=off.

    This code will help you to test if your circuit is working. The motor runs for 3 seconds in one direction, stops for 2 seconds and runs in the other direction for 3 seconds. The cycle continues.

    Tip: You can leave out the motor and batteries. Instead if you measure the voltage (with a multimeter) across outputs for the motor, you will get +5v for one direction and -5v for other direction.


    int x = 3;
    int y = 4;
    int enable = 5;


    void setup() { //this code will run once

    //this loop sets the pins as outputs

    for (int i = 3; i<=5; i++)
    {
    pinMode(i, OUTPUT);
    }
    }

    void loop() {
    //this sets the direction of the motor
    digitalWrite(x, HIGH);
    digitalWrite(y, LOW);


    digitalWrite(enable, HIGH); //this starts the motor
    delay(3000); //motor is running for 3 seconds
    digitalWrite(enable, LOW); //motor stops

    delay(2000); //wait for 2 seconds


    //this sets the direction of the motor opposite to be opposite that the forst time
    digitalWrite(y, HIGH);
    digitalWrite(x, LOW);


    digitalWrite(enable, HIGH); //this starts the motor
    delay(3000); //motor is running for 3 seconds
    digitalWrite(enable, LOW); //motor stops

    delay(2000); //wait for 2 seconds

    }

    Step 6: DSLR Shutter Release Cable

    For the camera to work in tandem with the motor - we need to ensure that the camera is triggered when the dolly is is stationary and not in motion.

    Hence we need to synchronize this motion and clik the picture using the Arduino.

    Shutter Release Cable

    Most DSLR cameras can be triggered remotely using a release cable. For my Nikon D5100 - the cable connector is MC-DC 2 type.

    Unfortunately the connectors used for the external release have rather exotic shapes. So if you don't already have one you will probably have to buy it.

    Note: Kindly refer to your camera manual to find out which type of interface cable is compatible with your camera. I found this site which lists the camera remote release pin outs and connector types between various camera brands.

    I bought my compatible remote control cable from eBay for about 450 Rs (6.5 dollars). Choose the one that is compatible with your camera.

    I cut off the remote control switch and stripped away the coating peel back the metal shield and twist it off to the side. This exposed the wires. For the MC-DC2 connector the wires / pinouts are as follows

    • Green wire - Autofocus (AF)
    • White wire - Shutter release
    • Black wire also cable sleeve = Ground

    The colors will vary but it has to have 3 main wires-ground, focus and shutter. You'll have to figure this out by experimentation.

    To focus the camera the focus wire has to be connected to ground. To release the camera both wires have to be connected to ground.

    • When you short circuit black&green wires, camera will auto focus, and when you short circuit black, green & white wires, camera's shutter will operate.
    • Here we do not need to focus our camera, hence we tie the focus and ground wire together. Now when we touch our shutter release wire to the ground and focus wire combo the camera will take a shot.
    • Now we need to build an electronic switch which will touch our shutter release wire to the ground and focus wire combo when required.

    The camera needs to be kept in manual focus mode

    Now that we have the cable ready - we need to build the circuit to use a transistor as switch.

    Note: Kindly research and make the connections with care. I am not responsible for anything going wrong with your camera. You do this solely at your risk.

    Step 7: Electronic Circuit for Camera Shutter Release

    Here we use a npn transistor as an electronic switch. I am using BC547 transistor. Most npn bi-polar junction transistors should work for this setup.

    IMPORTANT: If you are using any other transistor be sure to check the collector, base & emitter pin configurations (just google the transistor part number and take a look at the datasheet).

    The transistor consists of three terminals-collector, base and emitter. We have connected the focus, ground wire and arduino's ground to the emitter of the transistor and the shutter release wire to the collector of the transistor.

    When the base receives 5v from pin 6 on the arduino the transistor acts as a closed switch between the emitter and the base ie the shutter release wire is connected to the ground and focus cable. Hence the camera is triggered as explained in the previous step.

    Keep the camera in manual focus mode.

    The base is connected to the Arduino through a resistor. This is a safety precaution. Here the value of the resistor is 1K.

    You may use this very simple code to trigger your camera every 3 seconds.

    <br>int camera = 6; //camera is connected to D6<br>void setup() {<br>  // initialize camera as an output.<br>  pinMode(camera, OUTPUT);<br>}<br><br>// the loop function runs over and over again forever<br>void loop() {<br>  //trigger the camera<br>  digitalWrite(camera, HIGH);<br>  delay(100);              <br>  digitalWrite(camera, LOW);<br><br>  //wait for 2.9 seconds     <br>  delay(2900);              <br>}<br><br>

    Step 8: Push Button Controls

    We'll be using these push buttons to control the dolly. They perform the following functions - on, off, push and pull.

    One end of the switch is connected to 5v and the other to a pin on the arduino. When a pin on the arduino reads 5v the state is high else its low. We also connect a resistor (atleast 1k) between the terminal of the switch connected to the Arduino and ground. This is known as a pull down resistor. This resistor pulls the state of the pin low when it is not high. If this resistor was not there the digital pin on the Arduino would read any random value (high or low) when it would not be high.

    Using this simple code you can test if your buttons are working properly. Whenever you press one of the buttons the onboard led will light up for a second and the camera will be triggered.


    int camera = 6;
    int on = A3;
    int off = A2;
    int pull = A1;
    int push = A0;
    int led = 13;

    void setup() {
    pinMode(camera, OUTPUT); // initialize camera as an output.
    pinMode(push, INPUT);
    pinMode(on, INPUT);
    pinMode(off, INPUT);
    pinMode(pull, INPUT);
    pinMode(led, OUTPUT);
    }

    void loop() {
    //trigger the camera if one of the buttons is pressed

    if (digitalRead(on) == HIGH || digitalRead(off) == HIGH ||digitalRead(push) == HIGH ||digitalRead(pull) == HIGH)
    {
    digitalWrite(camera, HIGH);
    delay(100);
    digitalWrite(camera, LOW);

    digitalWrite(led, HIGH);
    delay(1000);
    }

    else
    {
    digitalWrite(camera,LOW);
    digitalWrite(led, LOW);
    }
    }


    Step 9: Led

    The easiest part of the project. The led will be ON when the dolly is running and it will be OFF for rest of the time.

    The led requires less then 10mA and has a voltage drop of about 1.8v across it. The pins on the Arduino work at 5 volts. We need this extra voltage (5-1.8=3.2v) to drop somewhere or else the resistance will be too low between the 5v & ground and the Arduino will be forced to supply a current greater then it can handle. Hence after the calculations the value of the resistor comes out to be 150 Ohms. You should connect a 330 Ohm resistor to be on the safer side.

    If the resistance is not connected a lot of current will try to flow through the led and bad stuff might happen.

    I am taking about a generic 5mm led. If you are using a different led 330ohms is still good but you may want to change it.

    When the pin 1 is high the led will be on else it will be off.

    Connect the circuit.

    Take care, led is a non-linear device - it has positive and negative terminals like a battery. Longer terminal is the positive part and it goes to the digital output pin.

    This is a simple led blink code to test your led.

    int led = 1;

    // the setup function runs once when you press reset or power the board
    void setup() {
    // initialize digital pin 1 (led) as an output.
    pinMode(led, OUTPUT);
    }

    // the loop function runs over and over again forever
    void loop() {
    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
    delay(1000); // wait for a second
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
    delay(1000); // wait for a second
    }

    Step 10: Using the Pototentiometer for Cycle Time Control

    This is what we'll be using to change the cycle time and the time for which the motor pulls the camera trolley. These times will be displayed on the LCD panel. I have used this method as it is easier to control the cycle of the motor on the field when I want to adjust the pulley timings. The camera settings I can adjust using the camera. Otherwise I would need to have my laptop to change the pulley timings on the field which is a bit cumbersome.

    Potentiometer

    The middle terminal of one pot is connected to analog pin A1, and another pot to A2. One end of the pots go to 5v from the arduino and another end to ground.

    What this will do is that we'll get a potential between 0-5v on the middle terminal of the pot.

    This potential is read by an analog pin on the Arduino. The Arduino assigns it a value from 0-1023. When the analog pin reads 5v the value is 1023 and when the pin reads 0v value is 0.

    We map this value (0-1023) to the number of seconds we want the cycle to run. In the (final) code I have set the values so that the motor can run for a max of 10 seconds and the cycle for a max of 30 seconds but this can be changed as per your preference.

    Hence by tweaking the potentiometer I can control the cycle time and hence the time for which the motor pulls the camera trolley. Next section I have explained the electronic circuit for the LCD panel.

    Step 11: Electronic Circuit for the LCD Display

    Here we are using a generic 16x2 lcd display for displaying the cycle time and the time for which the motor pulls the camera.

    The display has 16 pins. Solder some header pins if they are not included with your lcd.

    Pinout Connections

    • 1 VSS 0V Ground (goes to the ground of the arduino)
    • 2 VDD 5V Supply Voltage for logic (5v of the arduino through 220ohm resistor)
    • 3 VO (Variable) Operating voltage for LCD (pot)
    • 4 RS H/L H: DATA, L: Instruction code (digital pin 7)
    • 5 R/W (ground)
    • 6 E H,H->L Chip enable signal (digital pin8)
    • 7 DB0 H/L Data bus line (none)
    • 8 DB1 H/L Data bus line (none)
    • 9 DB2 H/L Data bus line (none)
    • 10 DB3 H/L Data bus line (none)
    • 11 DB4 H/L Data bus line (digital pin 9)
    • 12 DB5 H/L Data bus line (digital pin 10)
    • 13 DB6 H/L Data bus line (digital pin 11)
    • 14 DB7 H/L Data bus line (digital pin 12)
    • 15 A 5V LED + (digital pin 13)
    • 16 K 0V LED- (ground through 220ohm)

    Assembly

    • Assemble the board as per the circuit diagram.
    • Connect a resistor between supply voltage for logic (VDD) and the 5v supply from the arduino.
    • DB4-7 are connected to the pins 9-12 on the arduino
    • A to digital pin 13 (A&K power the backlight)

    • The potentiometer generates a voltage from 0 to 5v on its center terminal - which controls the contrast of the LCD.

    Test Code

    This is a code to test if your LCD is working. This code prints "Hello World" on both the lines of the lcd alternately. This should work if the connections are as shown in the circuit diagram.

    Note: If you do not see anything on the display, adjust the contrast through the potentiometer.

    int backlight = 13;<br>int led = 1;<br>int c = 1;<br>int mode = 1;<br><br>#include<LiquidCrystal.h><br>LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //pins 7-12 where we have connected the lcd <br><br>void setup() {<br>  // put your setup code here, to run once:<br>   pinMode(led, OUTPUT);<br>   pinMode(backlight, OUTPUT);<br>   lcd.begin(16, 2);<br>}<br><br>void loop() {<br>    digitalWrite(backlight, HIGH);<br>    lcd.setCursor(0, 0);<br>    lcd.print("Hello World");<br>    delay(1000);<br>    lcd.clear();<br>    delay(1000);<br>    lcd.setCursor(0, 1);<br>    lcd.print("Hello World");    <br>    delay(1000);<br>    lcd.clear();<br>    delay(1000);<br>}<br><br>

    Step 12: Tying It All Up

    The final schematic and code.

    volatile int a = 1000; //time for which motor is pulling<br>volatile int b = 5000; //delay between shots = cycle time;<br><br>volatile int valb = 0;<br>volatile int vala = 0;<br><br>int led = 1; <br>int pin = 2; //this is also connected to our "stop" button. This triggers an intrrupt which can stop the dolly even when it is in between a cycle.<br>int x = 3;   // motor driver direction control<br>int y = 4;   // motor driver direction control<br>int enable = 5; // motor driver enable pin<br>int camera = 6; //transistor<br>int backlight = 13; //led backlight<br><br>//these go to our buttons<br>int on = A3;<br>int off = A2;<br>int pull = A1;<br>int push = A0;<br><br>// goes to pots<br>int va = A4;<br>int vb = A5;<br><br>//variables used in the code<br>int mode = 4;<br>int disp = 4;<br><br>#include<LiquidCrystal.h><br>LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //pins 7-12 where we have connected the lcd <br>  <br>void setup() {<br>   pinMode(push, INPUT);<br>   pinMode(on, INPUT);<br>   pinMode(off, INPUT);<br>   pinMode(pull, INPUT);<br>   pinMode(led, OUTPUT);<br>   pinMode(backlight, OUTPUT);<br>   <br> for (int i = 3; i<=6; i++)<br>   { pinMode(i, OUTPUT);} <br><br>lcd.begin(16, 2); //initiliaze the 16x2 lcd<br><br>//this is also connected to our intrrupt function. This triggers an intrrupt when the stop button is pressed. This can stop the dolly even when it is in between a cycle.<br> attachInterrupt(digitalPinToInterrupt(pin), offint, RISING);<br>}<br><br>void offint()<br>{<br>if (mode == 1)<br>   {<br>    lcd.display();<br>    lcd.clear();<br>    digitalWrite(backlight, HIGH);<br>    lcd.print("Stopped");<br>    }<br>    disp = 0;   <br>    <br>   mode = 4;<br>   digitalWrite(backlight, HIGH); <br>   digitalWrite(x, LOW);<br>   digitalWrite(y, LOW);<br>   digitalWrite(enable, LOW);<br>   digitalWrite(led, LOW); <br>   digitalWrite(camera, LOW);<br><br>}<br><br>void loop() {<br><br>//We use switch case to control our dolly. "mode" states which cycle the dolly is in-pull,push,on or off.<br>//Pressing the buttons switches in between the modes.<br> <br>  if (digitalRead(off) == HIGH) <br>  {mode = 4; disp = 4;}<br>  else if (digitalRead(on) == HIGH) <br>  {mode = 1; disp = 1;}<br>  else if (digitalRead(push) == HIGH) <br>  {mode = 3; disp = 3;}<br>  else if (digitalRead(pull) == HIGH) <br>  {mode = 2; disp = 2;}<br><br>  else<br>  mode = mode;<br><br>  if (mode != 1)<br> {//this reads the potentiometer, maps the value to a time and displays it to the lcd<br>  vala = analogRead(va);<br>  valb = analogRead(vb);<br>  a = map(vala, 1023, 0, 0, 10000); //maximum time the motor can run in a cycle is 10 seconds.<br>  b = map(valb, 1023, 0, 0, 30000); //maximum time of each cycle is 30 seconds.<br>  delay(100);<br><br>//this prints the cycle time ont he lcd.<br>  lcd.display();<br>  digitalWrite(backlight, HIGH);<br>  lcd.setCursor(0, 0);<br>  lcd.print("Pull  = ");<br>  lcd.print(a / 1000);<br>  lcd.print(".");<br>  lcd.print(a / 100 - a / 1000 * 10);<br>  lcd.print(" sec ");<br>  lcd.setCursor(0, 1);<br>  lcd.setCursor(0, 1);<br>  lcd.print("Cycle = "); <br>  lcd.print(b / 1000);<br>  lcd.print(".");<br>  lcd.print(b / 100 - b / 1000 * 10);<br>  lcd.print(" sec ");<br>  delay(100);<br><br>   digitalWrite(led, LOW);   <br>   digitalWrite(backlight, HIGH); <br>   digitalWrite(camera, LOW);<br> }<br>  <br>switch (mode) {<br> case 1: <br><br>//this code runs once when the cycle is started to display "Running" on the lcd for one second.<br>  digitalWrite(led, HIGH);<br>  if (disp == 1)<br>    {<br>    lcd.clear();<br>    digitalWrite(backlight, HIGH);<br>    lcd.print("Running");<br>    delay(1000);<br>    lcd.clear();<br>    }<br>    disp = 0;<br>    <br>//this is our main piece of code<br>//this triggers the camera, controls the cycle and turns the led on.<br>   lcd.noDisplay();<br>   digitalWrite(backlight, LOW); <br>   digitalWrite(led, HIGH);<br>   digitalWrite(x, HIGH);<br>   digitalWrite(y, LOW); <br>   <br>   digitalWrite(enable, HIGH);<br>   delay(a);             //motor is pulling the camera<br>   digitalWrite(enable, LOW); //motor stops<br><br>   delay(b-a-1000);            //main delay<br><br>   digitalWrite(camera, HIGH);   //camera is trigered<br>   delay(100);<br>   digitalWrite(camera, LOW);<br>   delay(900);<br>   <br>   break;<br>   <br> case 2:<br> //This will constantly pull the camera towards the motor.<br>   lcd.display();<br>   digitalWrite(enable, HIGH);<br>   digitalWrite(x, HIGH);<br>   digitalWrite(y, LOW);<br><br>   //this code runs once when the cycle is started to display "Pulling" on the lcd for one second.<br>   if (disp == 2)<br>    {<br>    lcd.clear();<br>    digitalWrite(backlight, HIGH);<br>    lcd.print("Pulling");<br>    delay(1000);<br>    lcd.clear();<br>    }<br>    disp = 0;<br>    <br>   break;<br> <br> case 3:<br> //This will constantly push the camera away from the motor.<br>   lcd.display();<br>   digitalWrite(enable, HIGH);<br>   digitalWrite(x, LOW);<br>   digitalWrite(y, HIGH);<br><br>//this code runs once when the cycle is started to display "Pushing" on the lcd for one second.<br>  if (disp == 3)<br>    {<br>    lcd.clear();<br>    digitalWrite(backlight, HIGH);<br>    lcd.print("Pushing");<br>    delay(1000);<br>    lcd.clear();<br>    }<br>    disp = 0;<br>   break;<br><br> case 4:<br><br> //this will stop all the processes of the dolly.<br>   digitalWrite(x, LOW);<br>   digitalWrite(y, LOW);<br>   digitalWrite(enable, LOW);<br><br> //this code runs once when the cycle is started to display "Stopped" on the lcd for one second.<br>  if (disp == 4)<br>    {<br>    lcd.clear();<br>    digitalWrite(backlight, HIGH);<br>    lcd.print("Stopped");<br>    delay(1000);<br>    lcd.clear();<br>    }<br>    disp = 0;   <br>   break;<br><br> default:<br>   lcd.display();<br>   digitalWrite(x, LOW);<br>   digitalWrite(y, LOW);<br>   digitalWrite(enable, LOW);<br>}<br>}<br><br>

    Step 13: Moving On

    I built the whole thing using breadboards to test the prototype out and ensure that all parts of my circuit work as intended. However if you want to take the dolly outside and put it to use - this will not work. Hence having tested all the components - I decided to put all these components on a general purpose board (gpb) In the following steps - I will explain how to get the gpb together.

    Edit:Instead of using jumper cables you can use pieces of single strand wire cut and stripped to size to make the connections, it would be much neater and easier to debug. While writing this instructable I was using jumper cables. It would have been much easier had I used single strand wires.

    Step 14: Moving the Circuit to the General Purpose Board

    I made a shield for for the buttons and the motor driver. You can also design a similar pcb, but however for this instructable - I am limiting myself to a gpb (general purpose board) or protoboard. It takes a fair bit of patience and soldering skills to build the board but it isn't difficult overall - once you get a hang of it.

    I made two gpbs one for the overall circuit (which controls the motor and camera) and another one for the LCD. This was due to the non standard spacing between pins 7 and 8 on the arduino board which makes fixing a gpb to the arduino not possible. One side benefit of this is that the LCD board can be reused for other projects :-)

    The boards which contains the buttons and camera will connect to the analog pins, digital pins 0-6 and power and ground pins on the Arduino board.

    The board will have terminals for

    • Camera control (two terminals)
    • Output from the motor driver which drives the motor (X & Y)
    • 12 volt power supply input for the motor (12v and ground)

    Lets get started

    We will need to make the header pins which go into the arduino longer. This is to allow the pins to be soldered to the board while being long enough to plug in the arduino. Just press the terminals of the header pins with your fingers or a pair of pliers. (see image)

    1. Before you pull out your soldering iron, we need to make a rough layout of where our parts need to be.
    2. Then we need to design the solder traces such that the traces do not overlap and touch each other. Take help from the breadboard diagrams that I have provided in the earlier steps.
    3. I recommend that you design your exact circuit on paper first.
    4. Once you have the design in place - then place the components at the appropriate location on the board.
    5. Check and check again then once more. Finding and correcting mistakes will take a lot of time.
    6. Solder the components as per the circuit diagram.

    Some Tips

    • In some places I replaced long traces out of solder with the trimmings of terminals of resistors and leds.
    • I did my best so that most of the solder traces do not overlap each other but if you need you can use a piece of (enameled) copper wire to connect two points.
    • The wire needs to be enameled so that it is insulated and it then it won't matter if they touch the solder traces.
    • I salvaged some wire out of an old motor. With a sandpaper - sand the ends of the copper wire to expose the copper within. Solder these ends at the required location

    Step 15: Protoboard for the Lcd

    As in the previous step assemble the components of the gpb as per the circuit diagram.

    We will connect the lcd gpb to the arduino pins 7 to 13 with jumper cables as shown in the photograph

    I have also put in a potentiometer on this board so as to control the LCD contrast. This makes the board independent and hence I can reuse it for other projects.

    Step 16: Time Lapse Dolly in Action

    Once assembled - finally we can see the dolly in action.(Video link here)

    Let me know if you have any suggestions or comments.

    That's all folks!! Thanks for reading!! Have a wonderful day!!