Life is dynamic, we see movement all of the time, and we move while we're perceiving it, yet when we document our videos usually a tripod is your best bet, unless you want a shaking footage, enter camera gear, they come in all shapes and sizes, to serve different function, there are gimbals, turntables and slider, the latter is the one I like the footage and feeling it gives the most, so I decided to make a DIY small camera slider, which can be useful to showcase different projects and small scale items, it can be used to record time lapse videos to document memories and processes and can be very useful in visualizing products as it creates an extra dimension a still image cannot convey.
An example of a mobile camera slider, although such equipment can be brought directly from the market, they are rather expensive, for example the one in the photo costs about 240 US dollars, and isn't motorized.
Fusion 360
Rhino 3D
Ultimaker cura.
My design process went as follows:
Conceptual sketching.
Getting exact measurements for my components.
Sketching on fusion 360 to properly dimension my drawings.
Extruding the 2D wooden parts.
Defining the joints of the parts on fusion 360.
Importing the components to fusion 360 and making suitable holes and mounts for them.
Exporting the files of the 2D parts as a DXF.
Importing the files to Rhino 3D to arrange the DXF files in a cutting board and to creating the living hinges
Designing the 3D printed parts in fusion 360.
Exporting the 3D printed parts as an STL mesh.
I started out by roughly drawing the parts I need, and started thinking about how they would be assembled together
For some components dimensions were easily found online, so I searched for those dimensions.
For other, either I couldn't find the dimensions online or there were a wide variety of the same product on the internet, I resorted to using the caliper to measure those components accurately.
I drew the sketches I had previously planned on fusion 360, but this time the sketches are drawn with proper accurate dimensions to accommodate the different components or to allow for good and easy to assemble joints.
I used a variety of joints in the project, the most used one was the T joint.
I extruded the sketches that I had drawn in the previous step as new components so that I could define joints between the different components.
The thickness of the extrusion was 3 mm to resemble the plywood sheets I will be using in the fabrication phase.
I did this for every unique 2D part in the project.
I defined joints between the different T slots in the design to check whether everything fits perfectly to prepare for the fabrication phase.
Some sketches are used in more than one part so I copied them to.
I downloaded some components from grabcad.com, namely an Arduino Uno model, Nema 17 stepper motor, a4988 stepper motor driver, and a large breadboard, I found the STEP file format to be the most suitable for me so I downloaded my models in it whenever possible.
I components I downloaded where used to check that all components will fit in their desired places inside the assembly.
Another reason for importing the models is to get the accurate and exact location for the screws need to fix the parts.
For most of the parts the part is exactly the same as the sketch defining it.
However in the parts where holes were made according to the imported models, the face containing the holes was projected onto a plane to create a sketch which can be exported in the DXF format.
I search for the dimensions of a living hinge, different spacing give varying degrees of flexibility, I chose my spacing to be around 2mm to given enough flexibility for the curvature I have in my design (diameter of 30mm) (tested for validation).
After designing the living hinges I have all the drawings I need to start fabrication, I just need to place them in the board in an efficient way, I used rhino for that.
I started the design as usual with a sketch, I sketched on the wooden part to ensure they fit together when they are fabricated.
I duplicated the part I sketched, made another extrusion on top of it to hold the stand, we'll call this part the rotating base.
After finishing a rough sketch of the rotating base I filleted the edges to be more comfortable to use in hand.
Also I noticed that the materials are getting mixed up so I changed the appearance of the wooden parts to resemble wood, I didn't color PLA parts black however because it's not the best color to model with as it hides most of the bodies details.
I then created the lower part of that stand with a bunch of extrusions
And just like what we did with the rotating base the bottom part of the stand was filleted as well to provide a more user friendly experience.
I added a hook to the part to hold a rubber band so the stand can grip the phone used as a camera in the device.
It started with a sketch in which I determined the shape of the hook then I extruded, and filleted it, mirrored it because we need two hooks and joined them with the rest of the stand part.
Similar to the bottom part the top part is very similar, and of course all parts are filleted to give a more refined look and be more user friendly.
I just selected the body I wanted to export and selected to export it as an STL.
The software I used for fabrication is:
Laser works to translate my DXF file to gcode the laser cutting machine can understand.
Ultimaker Cura to translate my STL meshes to gcode for the 3D printer.
My fabrication process consisted of:
Laser cutting the parts
3D printing the parts
Assembling parts together.
The first step was to import the DXF file into laser works
Then I had to choose which lines are to be cut and which ones are to be scanned, in my case all of my lines were to be cut.
After selecting the mode to be cut I needed to specify the cutting speed and power, which in my case and according to the fab lab specialist were 15 for the speed and 78 for the power.
After that I should check for overlapping lines as they can cause problems.
The next step is to send the file to the laser cutter, track frame to ensure the laser will stay within the boundary of my board and start the cutting.
Cutting is complete.
This step is also very simple I just loaded the files to Cura, each file alone so that if something went wrong the damage is minimal.
I sat the layer height to 0.3 mm to print faster, the temperature to 215 to suit the PLA filament, the rest of the.
I then choose the location and the orientation of my part to minimize the supports as much as possible.
I also used the support blocker feature to remove the supports in the screw holes.
Preview the print, and create the gcode.
I try to name the part something descriptive, unique and contains useful information about the print such as it's time, weight the and materials used and its color, black PLA in my case, then I put the file on a regular SD card as the printer doesn't accept anything but such memory card.
The printer heats the bed, starts printing, I observe the first couple of layers to ensure everything is alright and come to check on it every now and then.
The parts are printed with good finish and can be used without any post processing.
The first part, the rotating base, took 26 minutes and 5 grams to print
The second part, the bottom part of the stand took 45 mins and 9 grams
The third part, the top part of the stand took 33 mins to print and 6 grams.
A short video showing the mechanism of the 3D printed phone holder.
Assembling the parts was easy it was just a matter of fixing the T slot joints together with screws.
Other joints were used in different parts of the project where T slots weren't the optimum choice.
The 3D printed parts were also joined together with screws and joined to the wooden part via screws.
All the screws used in the project were M3 screws and their bolts, however they were used with varying lengths to achieve different goals and depending on the part.
Large breadboard.
Arduino UNO
Nema 17 stepper motor.
a4988 stepper motor driver.
Voltage regulator to lower the voltage from 9 volts to 5 volts.
9 Volts power adaptor.
IR proximity sensor.
Potentiometer
Switch
Push button.
LCD 16x2 with I2C interface.
A ton of jumper wires.
Input components:
Potentiometer.
Push button
Sensing devices:
IR proximity sensor.
Action components:
Stepper motor
16x2 LCD
The circuit starts with a 9 volts power supply, it is the only source of current in the circuit.
The 9v current is connected to a voltage regulator, which spits out 5v volts, those 5 volts are very useful as they will power most of our electronics, while the 9v will only be used to power the motor.
The a4988 stepper motor driver takes 9v volts to power the motor, and 5v to power its logic.
The driver is also connected to pins 8, 9, and 10 in the Arduino, as they control the steps, direction, and whether the motor is enabled or not respectively.
And last but not least the driver is also connected to the motor, the motor has 2 coils, coil A and coil B and the driver has a special outlet a special cable can be connected to to connect the 2 ends of the 2 coils of the motor.
The motor can be used with a wide range of voltages which range from 8 volts to 35 volts, the driver however supplies it with 9 volts, which also matches the power of out power supply.
Now for the control devices, we have a potentiometer, a push button and a switch, in addition to a sensing device which is the IR proximity sensor.
The potentiometer acts as a voltage divider allowing us to send analog signal to the Arduino, it is connected to the positive 5v and the ground and its middle branch connected to pin A0 in the Arduino.
The push button is connected to pin number 12 in the Arduino, while it other end is connected to the ground to utilize the INPUT_PULLUP state in Arduino.
The IR proximity sensor is connected to pin A1 in the Arduino with its power ends connected to the ground and the 5v, it is calibrated using the potentiometer on its board, it outputs digital readings though, I didn't use the analog option as it wasn't useful and would add to the complexity of the code without benefit.
The switch is just to cut the power coming from the source so no power flows in the whole circuit.
The LCD with the I2C module is one of simplest to work with, it has 4 pins, 2 power pins which are connected to 5v and ground and a serial data pin which is connected to A4 pin on the Arduino board and a serial clock pin which is connected to pin A5 on the Arduino board.
As I couldn't find many of the components I needed on the free Autodesk Tinker Cad, and I had problems downloading fritzing, I drew a diagram explaining my circuit on adobe illustrator.
The power source I used was a 9V adaptor plugged onto the wall socket.
My choice for 9 volts depended on many factors most notable of which are:
Any voltage between 8 and 35 volts is enough to operate the motor.
The a4988 stepper motor driver's recommended voltage to drive the motor is 9 volts.
For the electronic components in the circuit a voltage regulator can easily regulate the 9v of the power supply to 5v which can be used by the rest of the components safely.
This first section of the code is used to include the LiquidCrystal_I2C library to control the LCD using the I2C connection protocol.
The next step is to define some variables and pins to give them understandable names instead or arbitrary numbers.
The next block is concerned with the pin mode of the pins, whether they are outputs, inputs or inputs that should be pulled up.
In the next section, I initiated the serial monitor for troubleshooting anything that misbehaves in the circuit, then I started the LCD and started it's backlighting.
In this step I'm mapping the reading of the potentiometer which can take up a value from 0 all the way up to 1023 to a range of delay in microsecond that works well with the motor in the eighth step mode, the delay shouldn't be less than 100 microseconds and more than 2000 microseconds the rotation becomes so slow that it is boring.
In the next step I want the LCD to print the value of the delay, to make the program user friendly I started by printing a message that says what the LCD will be printing, then I moved to the next line and printed the actual delay stored in the variable t.
I sat a delay of 250 milliseconds so that the LCD doesn't refresh so quickly the text becomes fainted.
This part is concerned with the homing, the stepper motor should rotate in a direction that brings the carriage closer to the IR sensor as long as the carriage isn't near the sensor enough to make it's reading equals 0. This motion is not user controllable and it's speed it set to the maximum the motor can handle so that the homing can happen always to make the device usable at anytime by the user.
(The IR sensor gives 1 as a reading when nothing is blocking it)
The movement is done though a custom function called move which I created, the function takes in an integer as an argument and sends pulses to the step pin of the driver at certain intervals which is defined by the variable t.
When the motor is homes and the push button is pressed the motor moves in the opposite direction a specified number of steps, since we are in the microstepping mode with eighth step, the motor takes up 800 steps to make a full revolution, the length of the lead screw I have is about 40 cm and with a small portion of it used by the coupler and a small portion used by the end pillow I have about 35 cm which are covered by 35 revolution of the motor, so the function move should be performed 800*35 times to reach the end of the rail.
However the speed at which the carriage moves is defined by the user using the potentiometer which derives the variable t which is places in this block as an argument in the function move.
The integration of the modules happened on many stages:
The first stage was to mount the different components on the base of first part, the components mounted are the Arduino, the stepper motor, the breadboard, and the a4988 driver.
The second part was to install the IR sensor under the base to sense the carriage.
Then I tried testing the IR sensor to calibrate the its range
After that the whole mechanical assembly is assembled which includes connecting the motor to the lead screw via a 5 to 8 mm coupler, and attaching the lead screw to the end pillow.
Then comes the part of testing without the complete enclosure, I uploaded the code to the arduino and started testing
After the testing is complete it's time to assemble the controls onto the casing of the device.
Demo 1: showing the project in action
Demo 2: showing the project in action
Demo 3: footage taken by the device
Demo 4: footage taken by the device
I received a lot of help from the instructors in the wiring and getting the stepper motor to work, and I really learned a lot about stepper motors and circuits in the process.
I also received a lot of help from my peers at the lab, in finding the tools and using them, in one of my prototypes I needed to expand a hole and someone suggested using a drill, which I haven't used before, I also used a dremel, and the whole thing was extremely fun.
A friend suggested lowering the speed on the laser cutting machine since her cuts weren't so good, which I did, and without such advice I would've wasted a whole sheet.
I had help with using laser works as I didn't know how to use different functionality like deleting the overlapping lines for example.
I've had some help from the fab lab specialist when I was going to print a part that's not properly supported, she suggested creating a box where there's no support to keep critical parts without support but support the rest of the model normally.
During my final documentation of the project I wanted to capture a video for the device in action, so I had my peers of the lab either operating the device, or taking the video while I did.
And I received tremendous indirect help from the maker community from the video, tutorials and articles they post for free on the internet, which are two many to mention, however, if not for this great maker spirit I wouldn't have been able to turn the motor on :"
I also tried to pay back the community by helping people who asked me about the living hinges as I had previously done one in week 2, I helped one of my peers with the dimensions of the buttons as he was in a hurry, I shot videos for a peer while he was operating is gimbal device.
I got stuck many times during the project, the first time was with how to get started in the first place, as I had no idea about what a stepper motor was, as searched for it, to understand what is it and how to operate is, but it was pretty complex, and using a motor driver made things much much easier as I didn't have to control the 4 wires of the coil to induce steps, I had to communicate with only 2 pins the step and the direction pins on the driver.
But drivers such as the a4988 aren't always that smooth to work with, I spent a whole week trying to get mine to work before I knew that it was faulty and needed to be replaced so I had to start the project at a very late stage.
Another challenge for me was the the stepper motor needed very fast steps to move quickly and the only way I could regulate the time between steps was with the delay function, which was too slow as the minimum time it could delay was 1 milliseconds, so I asked the instructor whether there was an option to enter fractions in the delay function some through an overloaded methods or something and he suggested to use the delayMicroseconds method instead, which I did.
The delayMicrosecond itself imposed another problem, as there was a minimum of time that needs to be delayed between each step so the motor can actually execute this step, and this time is determined according to the microstepping mode chosen, for example for a full step it is 400 microseconds and for a 1/16 step it is 20 microseconds, however I didn't know this and the motor didn't work for no apparent reason for me because I had sat this delay time so low.
Another problem I ran into was with the T slots, I had defined their width in the assembly to be 6 mm wide, but they broke under the weight of the motor, so I increased their width to 12 mm and things became much better, I also increased their number to decrease the load on each tab.
The last problem I ran into was with the algorithm of the code it self, the Arduino takes a couple of milliseconds to execute the code sent to it, so in case of complex code and many instructions in the loop, the delay could get so big that it may interfere with the delay between the steps sent to the driver, and through my understanding of such problem I decided to use for and while loops so that when the motor is moving no other code is running so the delay between steps in kept as minimum.
I wouldn't have used the motor driver expansion board so that I can control the microstepping mode through the user interface to enable either a faster or a more smooth motion depending on the will of the user, but since that expansion board is a lot more convenient and the time was very tight I ended up settling for one eighth of a step which is something in between a full step and a 1/16th step.
If I could redo the project I would also choose to work with a different driver than the a4988 because I learned from this video (https://www.youtube.com/watch?v=Lx40lJkk9NQ) that the TMC2208 driver can run the stepper motor at very low noise level, like almost as if it was silent, which is something that was really needed in this type of project.