Tobbogan Camera Slider
So, in THE BEFORE TIMES, it was at my friends Christmas party and they’re like “Hey Victor, want a thing for parts”?
To which the answer is ALWAYS “yes”.
And so they hand me a Cricut Expression, explaining that the manufacturer had basically rendered it a brick by updating the software such that it could not be used any more.
Now, for years I had entertained the idea of reviving it into a GCODE based papercutter. And then I decided that I’m too lazy to learn YET ANOTHER GCODE SENDING SOFTWARE and, instead, decided to tear it apart and salvage what I could. After all, there was sure to be a TON of nifty treasures hidden inside its beige exterior. AND THERE WAS.
But most relevant to this project is it’s X-axis rail, motor, belt, and carriage, which could all be extracted from the machine with relatively little fuss.
Well, after literally tearing the entire device apart, of course.
One look at that assembly and I knew I’d finally have the chance to make something I’ve been wanting to build for a while: A camera slider.
Being the type of artist that likes to shoot lots of pictures quickly so that other people can view them equally quickly, I’ve been wanting a small camera slider to shoot video with for a while. It makes time lapses more entertaining, if nothing else. But I also didn’t want to spend any extra money on this, so I decided to ONLY USE WHAT I HAD ON HAND.
I repeat, I purchased nothing for this project.
I also decided that I didn’t want to 3d print anything for it either. I wanted to make it quickly and force myself to not NEED perfection. And nothing tickles that perfection itch like busting out a set a calipers and measuring every square millimeter of a part to recreate it in CAD.
And, of course, an Arduino: the universal electronics Duck Tape for makers everywhere.
As a result, building this took one day and coding it took the next.
And I dare say it came out nicely. I mean, it works, right?!
It has a little metal plate on the carriage right now for my magnetic GoPro and phone holders to attach to, but I could put a tripod ball head on there at some point. If I feel like it.
So here is the program flow:
- A splash screen with the name and current firmware version number gets thrown onto the LCD and it plays a tune through the stepper motor. Right now I’ve got it playing “In the Hall of the Mountain King”.
- It then homes the machine. As it homes, it’s counting its steps until it hits the endstop. For the initial home it doesn’t DO anything with this number but whatever.
- The user is then instructed to set the outer bound for the camera move. The stepper is released so you can slide it to any point along the rail without much resistance.
- Once you push the button, it homes again, AGAIN counting its steps home.
- At this point you finally land in the main loop where you are presented with the speed control. Really, the speed is controllable at all times, but this is the first time you get to see the numerical setting of the speed value.
- When you push the button again, it begins the move, counting down the steps to get back to the position you set, then it goes back home.
On the subject of speed: I wanted to keep the speed variable throughout the camera move. So, rather than setting a speed and using the stepper motor speed function, the speed is actually adjusted by ONESTEP-ing the stepper in a loop with a delay ranging from 0ms to 1000ms depending on the position of the knob. It iterates this move until reaches the step count measured earlier or until it hits the endstop.
I chose to do it this way because, effectively, you get a chance to do a dress rehearsal with the camera move, adjusting the speed as you like, without having to let it cycle through the whole move. You could also make adjusting the speed mid-move a creative choice. - It then updates the step count with the new value gather during the going home motion, just in case any kind of mechanical issue hindered the outgoing motion of the carriage. And then it waits for the button to be pressed again.
As you can see, this is super simple motion control. No ramping, no programmed moves, just dead simple motion. And it’s good. The simplicity makes it flexible. This firmware can be put on any hardware with a knob, an endstop, and a button with minimal modification. It doesn’t even NEED a screen.
I’m SUPER proud of this code. It’s fast, clean, and probably the most commented code I’ve ever written. And it’s small; just under 8500 bytes.
Feel free to use my code for whatever you want. If you find ways of making it faster/better/more feature rich, let me know!