So… this is one of those posts I have been needing to do for a long time, but when I looked at the project I kept asking where the heck does one even start? The majority of this was built around May of 2015 and I will be back dating this post to reflect that. The wording is written as if I wrote it back then to keep the tenses at least a little bit proper, but as usual, grammar police be warned… Dangerous reading ahead. Also, this was a project that had many areas being developed at the same time, so while I will try to write things as linear as possible, it will not be, it can’t be, and it wasn’t. Now on with the show…
A couple of years ago I built a camera slider for my brother based on a design by J.G. Pastorjak. While I was doing the research about how to build it, I decided to build one for myself as well. This was a simple slider which worked very well, provided some wonderfully smooth video, and I have used it a lot. The time-lapse community have made several advances using sliders. Shots in which the camera is actually moving in during the time-lapsed event. It’s very complex and beautiful movement. While I suppose this could be done without computer / machine control, someone is going to have a really bad day trying to do it. I have also been following the work of some of the higher end commercial slider systems which not only moved the camera within the time-lapse, but it also included automated pan and tilt. These were the sorts of goals I wanted design and work for. While I suppose I could have saved some money and time and just bought the dern’d thing, that’s not how I tick. More, I didn’t want to be limited by the features that someone else dictated to me based upon some sort of pricing structure. I want to understand it, explore it, and most importantly make it my own. I did a ton of researching and reading trying to find answers and solutions. While I found a few people who have ventured down this alleyway, I couldn’t find anything like what I was personally imagining, or wanting.
A few items which I wanted (the basics)…
- Pan, tilt, and slider (duh)
- Must be self contained.
- Must be able to be used for both video and stills (time-lapse).
- Should be easily convertible for new features.
- Should be smallish in size.
- In stills mode, the controller will also trigger the camera shutter.
- I wanted to reuse as much as I could of the slider I had originally built.
Then there were the constant burning questions which gummed up the process…
- What type of motors should I use? Stepper motors, standard motors with some sort of encoders, servos?
- Does the slider engage with a ball screw, rack & pinion gears, or belt feed?
- What materials would I use for the slider, the deck, the moving bits?
- How would the pan and tilt actually work? Belt, worm gear, direct drive?
- If it was self contained, how would I control it (without needing a laptop)?
- How would I power it?
- How would I connect it to my camera (shutter release interface)?
I usually have 4 – 5 projects brewing at any given time. Probably more than that if I am being honest. Most of the time I will hit some cliff of impossibility or creative wall and stop that project for a while. I will then work on another while I mull over the issue. I am not an engineer by trade, but my engineer friends tell me I am one, just minus the degree. It’s just how my mind works. These problems are like brain puzzles. There has to be a solution, so sometimes I will plow into a project without fully knowing if it will pan out (pun not intended). This project was no different. There were some pretty hard issues to resolve here. It covered so many areas of discipline… Mechanical, structural, electronics, programing, and general artistic aesthetic.
My thinking was that I needed to work on the slider trolly portion (called the ‘slider’ from here on) first because if there’s no slider, there’s nowhere to place the motors, or camera. Pretty straight forward, right? I am sure that this is going to start sounding very circular, but stick with me. One issue I had with the original slider is that it could get a little wobbly if I got some weight on it. So I decided to re-deck the slider for extra rigidity. I started to think about what size the deck would be and realized that the deck would be based upon the distance between the rails + the width of the wheels + a little extra for fine tuning. It then occurred to me that if I am cutting the deck out, I also need to think through where the pan and tilt would live on that deck. If the pan and tilt are on the slider, then the motors will also be on the slider. If the motors are on there, how do I get wires to it. Wait… if it has wires and it is spinning, how do I keep them from getting caught up on itself. In the end, I realized that I was going to be designing the whole pan, tilt, deck, and slider assembly at the same time.
While the Shapeoko II is an amazing machine and is completely capable of making beautiful things, it’s not a exactly speed burner. When cutting aluminum, parts could take up to 4 hours to cut out. With that time commitment, I didn’t want to remake parts if I could help it. With this in mind, there was a lot of benefit of thinking through the whole mechanism. I was using Draftsight for the design. Sometimes the hardest part is starting. Where do you start? Eventually I just started placing design ideas with rough spacing. Once I started seeing something I liked, I then started taking measurements and dialing it in. This of course meant that lots of things needed to shift, but the idea was there.
I started work on the base of the slider system. This means the end caps which would support the rails on which the slider would slide… upon. My previous slider rails were 1 inch square aluminum tubes held together with 2 – 6 inch pieces of “all thread”. This put a 3 inch space between the rails. While this worked, as I mentioned earlier, it had the tendency to be a bit wobbly once you got a camera and head on it. To make things worse, the original rails were the stuff you find at Home Depot which had very thin walls and HD don’t tell you what grade of aluminum it is (several threads on the internetwebz says box stores are selling generic low grade 5052). I called and talked to a woman who said she would find out and get back to me (I am still waiting). I bought a new set of rails from Metal Supermarkets which are quite thick, and if the web is correct, a superior grade of aluminum (6061). I bought the new rails for less than the cost of the thin stuff from the HD (makes one think).
While it is not a huge increase, I spread the gap between the rails from 3 inches to 4 inches, hoping that the strength and extra width would make things more rigid. The rails are held together with custom aluminum brackets or end caps (no, I haven’t come up with an official name for them). These brackets were milled out of 6061 aluminum. Actually I’ll just place it here… everything on this project was 6061. It’s super strong, light weight, and can be machined well. The caps are a half inch thick which is probably a little bit overkill, but I don’t have to worry about them bending anytime soon.
The caps have threaded holes in the leg sections in which leveling screws could be placed to allow the slider to be stabilized on just about any surface. They also have a set of holes for M5 screws to tighten down on to the rails, locking them in place. This is important so I can break the system down quickly and easily. There’s a notch cut out dead center to receive various types of mounts which can be screwed into (motor, pulley, etc.). I didn’t build any of these additions to be permanent (although they could be) as I wanted a test bed for further ideas after the slider system was complete. The pulley end plates have a recessed cut pocket for a bearing and a small hole in the center for a M5 screw to pass, through a geared pulley in between, through a second bearing, through the top plate which is then secured with a washer and locknut. There are 3 holes around the outside for m5 screws and a bushing. Once the bushings are in place the whole thing sandwiches together and locks tight. The other end cap holds a fixture which holds the slider stepper motor. Again, this is attached via 2 – M5 screws.
I am not going to go much into the angst and back and forth I went through trying to make some of my final decisions on various various parts unless it is absolutely necessary. Otherwise this will become a silly long blog post (which is already a bit too long), and you dear reader would probably need some serious therapy as a result. I settled on using stepper motors. Steppers offered me the assurance of repeatability and strength. For some effects work I am imagining, I will need to repeat the exact same move, over and over, many times. I need the camera to match up both in time and spatially, so exact repeatability is critical. The steppers I am using are Nema 17 Bipolar 64oz./in. and provide 200 steps per revolution. This accuracy can be expanded by microstepping which splits each main step into smaller sub steps. The number of microsteps really comes down to the driver one chooses to use. Initially, getting up and running, I am using some of the super cheap knock off A4988 type drivers (There’s a lot of money falling into this project, so inexpensive while prototyping, yeah?). These are suppose to provide up to 16X or 3200 microsteps per revolution. The only problem with using microstepping is that I loose some holding torque when using higher levels of microstepping. This is not a problem if the slider is on a level surface, but it could potentially slip if I am trying to have the camera climb. So… build it, see what it can do, and update it as necessary.
At this point it was time to get at least a basic amount of the automation work started with the current slider and the new rails. Clearly this would be a microcontroller driven thing. My go to microcontroller is of course the Arduino. I knew it would be more than capable of the movement as that’s what’s driving my Shapeoko, and if you think about it, this is really just a CNC machine with a camera attached. Getting the stepper going was not too hard, while getting it moving smoothly, was. Let me rephrase, the linear movement was perfectly smooth. It was just getting an object to ramp into up into motion without a heavy jerk was somewhat problematic. Software can be fixed. Mechanical issues, would have needed to be tweaked and rebuilt. Being that this was a software thing, I moved on. Eventually I found an Arduino library that let me set a specific distance and it would ease in and out of the movement. The video below shows that progress. I am sorry for the crap quality, but at that moment, it was very exciting and I wanted to capture it’s first real steps. The belt was attached by being sandwiched between a couple washers and screwed tight. A more permanent solution was designed for the new deck, but hadn’t been cut out yet.
Below is a video of the first bits I shot with a camera, the new end caps, new rails, pulley and motor mount, but with previous slider. I was grilling out on back porch, so I figured I would take out slider and give it a try in between burger flips. While it’s not an Oscar winner (nor all that entertaining), you can see that it is very smooth. Speed was not the goal here. I was curious (concerned) to that I would see stutter(ish) motion artifacts at really slow speeds caused by the stepper’s movement which by it’s nature is based upon pulses. Would this translate into the video? I was really happy to find that it was buttery smooth. I will point out that at about 13 seconds into the video, you can see the image shake. This is a result of the sudden jerk into motion when the slider started to move. This was before putting on the new deck, so effectively the camera was suspended over the center of the slider (only connected from one of the sides). I had to detach the deck from the other wheel fixture due to the wider width of the gap between the rails. The new deck helps this a lot, but again, this is why I need to get some easing worked into the motion portion of the programming. Smooth movement from a stop, up to speed, then smooth slow down, and stop.
The motors somehow need to connect to the slider if things are going to move, right? I decided that it would be belted gears. The idea being that I could tension the gears and motors after building everything. I can also re-gear things if the movement is too fast or slow. While I am all for building my own things, there are some items in which I felt there was no need to reinvent the wheel. Gears, pulleys, and belts need to be exact for things to run smoothly. Most of these types of items I purchased from Servo City as they have some really beautiful stuff. Everything else was built from scratch.
The center point which ties everything together, is the deck. The deck was designed with attach points all around it in the form of tapped holes, so that there would be gobs of options. While I am not sure if this was a good idea or not yet (only time will tell), but I made all the hole spacing on one deck axis in inches, and millimeters in the other. My thinking is that perhaps someone would produce something I might want to attach, so why not try to make it somewhat universal. I have been trying to keep everything I build as metric, just because it’s wonderful to work with, but made an exception here. The deck also has attachment points for the wheel rigs. There are points for the belt connection plates and a finger hole for tensioning them. The belt connection plates are what physically attach the slider to the stepper. The belt is easily fed through these slots in the plate, but once the belt is tensioned, there’s no worry of it slipping back out. These are held in place with M3 screws.
I am currently shooting with the Canon 5D mkIII and Panasonic GH4, so I have built the slider around the 5D as it was the bigger of the two. This thing is going to be carrying a lot of wiring which has to reach from the outside the slider all the way up through the pan and tilt arms and up to the camera. I concocted a number of ways to do this, but they were all limited in some way.
Then I had an ‘aha’ moment. Adafruit announced a slipring wiring harness. While this product didn’t make it very far in my design, it was the idea of the wires being integrated into rotational axis that got me. The reason being is that I could do a couple of rotations without causing harm. I started digging into the ServoCity site and on paper put together a stack of items which would provide this cored rotation.
The item the brought it all together was a set of crazy thin bearings with a huge center bore. These were used on both the pan and the tilt axis. The tubes were flanged on one end which provided a base to which everything could stack and lock to. I will try to explain the stack, but it’s a little convoluted in text. For the rotational base, the tube was fed through a hub which would lock onto the tube. The tube is passed through a large pulley and the hub is screwed to that. The tube is then passed through a very thin plastic washer, and then one of the ultra thin bearings. There are 2 milled plates which sit on top and underneath the slider deck. These plates have pockets cut to exactly fit these bearings. These plates are bolted to the deck to provide a secure rotational center. The tube coming out the other side of the slider deck and bearing plate is then passed through the second bearing, through a plastic washer, then the bottom hub lock. The only difference with the tilt axis is that the tube passes through another inside riser piece which ultimately connects to the camera plate. I am sure that this was a bit hard to follow, so hopefully the photos spell it out a bit more clearly.
I wanted the pan to around the nodal center of the lens. If the lens sits too far forward, a pan can feel more like a swing. Being that different lenses would have different points, I have built in a a slot to allow for forward, and backward movement. I also built in the ability to put the camera plate at several height levels so I can change how the camera tumbles, or allow space for an extended battery pack. Basically I built in a ton of options I which I might or might not need, but wanted the option. I also added many spots for other things to be attached, and wires to be strapped to. Zip ties will keep things wired flat to the plates and I have cut slots which the wires can cut back and forth to stay out of the way of the rotating arms. I am making this sound somewhat easy, and it wasn’t. There were several attempts on a couple of these parts which ended in sadness due to unforeseen spacing issues, bearing pocket being on the wrong side of the piece (I was trying to do some 2 sided milling which is quite difficult to do and keep things perfectly aligned).
Meanwhile… Back at the batcave… The previous video was being controlled from my laptop. I needed a way to control this thing remotely. I wanted both immediate physical control (joystick) and programmable control for repeat performance. I needed something which could provide visual feedback as well as let me know the status of the system. I decided to use a 4D Systems touch screen instead of a bunch of dedicated physical buttons and switches. Sure… why not throw in a whole throng of unnecessary hardship in my path when I could have just made life far easier with physical real world things… but no, I had to go way too far off the deep end and go all touch screen.
Well here’s the thing… I had purchased this one of their displays about a year ago and never used it for the project I intended it for. I needed to use it because it was stupidly expensive and I didn’t want it going to waste and it seemed to be the type of project which lent itself to perfectly. I used a plastic project box to contain it all. I designed the interface in Draftsight, and let the Shapeoko have at it. I used blue painters tape to help prevent rip-outs and to keep the surface clean. I then used some of my 80’s Tetris skillz to get all the shapes to fit into the box as tightly as possible as there was not very much room. There are a couple of switches. One is for the basic Arduino power and screen, then the second is for the higher voltage for the motors which would be supplied from the LiPo batteries used for RC aircraft. The second switch would also act as an emergency stop in case I needed it. It is an automated device, and I didn’t want to let a robot run without a way of stopping it dead in it’s tracks. Eventually I got it all packaged in the box. The problem I encountered was that updating the code now also required taking part of the box apart. While this doesn’t seem like a big deal, I am really scared that the universe will discover that I had too much mater in one location and result in an explosion of some sort. Taking the box apart just exposes a lot of fragile things to danger, and I once you have come this far, having an accident could result in a lot of time / money trying to fix what usually comes down to a moment of stupidity (I live in a house with a giant golden retriever which has a tail with a striking force of several thousand pounds, capable of destroying most things in it’s path, let alone also the potential spilling drinks and or other liquids one wouldn’t want on their electronics).
One of the hardest parts of all of this was the programming. I am not a programmer, but I do what I need to do, and learn what I need to learn to make things work. Most of the time, and especially in times like this, I was way out of my comfort zone. There were two sides to the programming. One is the Arduino code itself which is hard enough, but then there’s the LCD code. There’s also the design of the LCD. The LCD is touched which in return sends commands serially to the Arduino. The Arduino then goes to town on whatever I told it to do and sends feedback back to the LCD. The LCD then interprets what was sent, and displays this on the screen. This back and forth pattern must be thought through and as I found out the hard way, you really need to have all your wants and desires planned out. For some reason everything is numbered on the display and if you delete something, or add something above an item which was already there, you can not renumber the items, it just becomes the next in line. This becomes very confusing when you are trying to program some very odd stuff to start with. Many times, you are unsure if it is a coding mistake, or a numbering mistake (which yes, is coding, but not the structural stuff). Everything for the display is loaded onto a microSD card which is inserted into the display. If you are developing for it and trying to get code working, you render the code and graphics onto the card, eject the card from the computer, insert it onto the display, connect it to the Arduino, turn on the Arduino, test and realize that things are not how you envisioned them to be, shut everything down, disconnect the monitor, eject the card, put it back in the computer, choose the windows side of the Mac, go back into the 4D software, tweak, and repeat. But the up side, is that you have a touch screen interface in a fairly short amount of time. Once the touch system and Arduino was sorted out, it was time to get the cameras working with the controller.
Having worked on my Blackbox Camera Controller (yes yes yes… blogpost forthcoming) several years ago, I was somewhat familiar with how to trigger a camera. Well… I was familiar with how to trigger a Cannon, but not so much with Panasonic cameras. Cannons use a 5 pin cable which works by closing a circuit to trigger the focus, and closing another circuit to trigger the shutter. The I found that the GH4 was not at all the same. It uses different ranges of resistance, or better said, different ranges of voltage to trigger various functions. The resistance was the part I needed to sort out. While I found a couple articles on line, it was a little interesting getting it to work.
So where does all of this lead us? It leads us to machines taking over the world. Bow to your new masters. When you start to see a project like this come together… there are just no words. You turn the thing on, put in the settings telling it how you want it to behave, and then you press go. After that, it’s just doing what it was told. For the timelapse, I usually have it move, then settle for a second or so (we want a nice sharp image). Then it triggers the camera to shoot an image. Currently it is all set in camera, but changing the length of the exposure would not be difficult, it’s just setting a longer delay between the pin high and pin low. At this point, I could just put the camera into a bulb mode and let the Arduino drive the length. This will be great for things like sunrises where the light levels will change quite a lot. Back to the sequence… Once the camera has fired, it starts the cycle over again. It can be set up for how much distance it moves between images as well. Currently I have the slider working and the pan and tilt are on hold. I built a center disk specifically to take a camera head. I needed to get this up and running for a project we were working on at work. So, I made a major push to get all of this done in my evenings after work. Most of this came together within about a month and I was working on the programming up until about 15 minutes before the first shoot we needed this for. It was a really tight finish. But the video turned out beautiful and our people loved it. After our convention, I was ready for some down time, so what does a technonerd do? Yeah, takes all his camera stuff and heads out on vacation. Here’s a short video I shot from the back porch, again while I was grilling (seeing a trend here?).