Introduction: Development of a 3D Printed Part - Prusa Mendel Hair Dryer Heated Bed Mount
Last night I was printing a frame vertex for a Prusa Mendel based CNC router...and I was having a really hard time with my non heated bed... The part would peel off the bed almost immediately... so I tried the raft feature... and even the raft lines were peeling off rapidly... I knew the problem was with the ABS cooling too rapidly.. but I didn't have the parts nor desire to make a proper heated bed at 1 a.m. I decided to go "hill-billy" on it and came up with this:
It is basically my heat gun pointed in the general direction of the the print.. propped up precariously with a couple spools of filament and a roll of masking tape.. I was sorta surprised as to how well this ghetto setup actually worked... and thinking about it, there are some definite "pros" to this arrangement...
A proper heated bed would probably work better than this arrangement, but I am going to follow my two favorite principles on this one... the KISS principle (Keep it Simple Stupid), and the 80/20 principle (20% of the effort gets 80% of the results)... Therefore I am going to build a hair dryer mount for a slightly less ghetto and hopefully 80% functional heated bed.
And since there don't seem to be a lot of instructables that really dig into the basics of such a task, I am going to include every little detail starting with the basic idea and ending with the usable object with emphasis on the design/creation of the object. While the part I am making is very niche specific, this guide is intended to be very basic/general and geared towards someone with little experience designing a part to be built with a 3D printer or other computer based tool. Think of it as a general guide using a specific example for making something real.
It is basically my heat gun pointed in the general direction of the the print.. propped up precariously with a couple spools of filament and a roll of masking tape.. I was sorta surprised as to how well this ghetto setup actually worked... and thinking about it, there are some definite "pros" to this arrangement...
A proper heated bed would probably work better than this arrangement, but I am going to follow my two favorite principles on this one... the KISS principle (Keep it Simple Stupid), and the 80/20 principle (20% of the effort gets 80% of the results)... Therefore I am going to build a hair dryer mount for a slightly less ghetto and hopefully 80% functional heated bed.
And since there don't seem to be a lot of instructables that really dig into the basics of such a task, I am going to include every little detail starting with the basic idea and ending with the usable object with emphasis on the design/creation of the object. While the part I am making is very niche specific, this guide is intended to be very basic/general and geared towards someone with little experience designing a part to be built with a 3D printer or other computer based tool. Think of it as a general guide using a specific example for making something real.
Step 1: Brainstorm and Design
1: Establish General Position/Location:
The first thing I am going to do is get a general idea of where I want the hair dryer to be... I want it out of the way and I want it to distribute hot air as evenly across the bed as possible. Given those considerations, I came up with the following position:
It looks like the head of my heat gun is about 66mm... If I am going to make a mount for it, I will need a little extra width for the meat of the mount... I'd say 10mm (5mm on each side) would be good enough... therefore I will allocate 76mm for the width of the center section.
... but I am hopefully not going to use my heat gun... I have a cheesy $10 Walmart hair dryer that I am going to try.. so now I will measure how big the center section mount opening needs to be...
The first thing I am going to do is get a general idea of where I want the hair dryer to be... I want it out of the way and I want it to distribute hot air as evenly across the bed as possible. Given those considerations, I came up with the following position:
It looks like the head of my heat gun is about 66mm... If I am going to make a mount for it, I will need a little extra width for the meat of the mount... I'd say 10mm (5mm on each side) would be good enough... therefore I will allocate 76mm for the width of the center section.
... but I am hopefully not going to use my heat gun... I have a cheesy $10 Walmart hair dryer that I am going to try.. so now I will measure how big the center section mount opening needs to be...
Step 2: Draft Your Design - Pt. 1 Center Section
Now is time to start drafting the design... You can use whatever program you like, but as far as free programs are concerned, my preference is OpenSCAD.. I just find it very intuitive.. and it gives you lots of control.. If you are new to drafting and/or don't have or want any programming experience, you may want to try Autodesk 123D. It uses a more visual approach for drafting. I personally don't like using it because it is close enough to other drafting programs I've used that I want to do certain things out of habit, but can't because it works differently... and I just get frustrated.. but you might love it... different strokes for different folks.
...anyways... on to drafting.... with OpenSCAD...
NOTE: I should mention that I am fairly new to OpenSCAD and programming in general, so I may be doing things inefficiently..
The first part I am going to make is the center section, mostly because it will be easier, so I can start printing it while I am drafting the end pieces.. to use time more efficiently..
Of course, to maintain good flow in this instructable, I will order it such that all the drafting is done before the printing..
Let us begin:
The first thing I like to do is open the User manual in my second computer screen so I can reference it easily. The user manual is here:
http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language
Open program and turn on "show axis".. this helps a lot when figuring rotations and translations.. Then save it (and save often) CTRL +S does not save btw... F2 saves....
There are many ways we can draw this part.. I usually union together a bunch of solid objects and then subtract (difference) the excess... I have found that the easiest way for me to make a solid object that is a cylindrical shape combined with a square shape, is to use the function "hull()". To use Hull(), you must start with 2D objects and then linear_extrude() them...
We will first draw the center circle, it is going to be the size of our center hole plus 4mm of meat to the radius to hold the hair dryer in .. I chose 4mm arbitrarily.. it should be more than enough for strength... so we will take the hole diameter, which is 56mm, divided by 2, to get the radius, which is 28mm, plus 4mm of meat.. to get 32mm.
Once you enter the code to draw a circle, go to Design -> Compile & Render (or F6) to see the preview (you will do this after every step hereafter). I also like to change to a top view for 2D shapes. You can use your mouse wheel to zoom and you can click to drag or rotate... or you can go into the View menu and select a view.
You will notice that inside the function, I specified the radius (r = 32), and center = true. The center = true basically aligns the center of the object with the origin. I almost always do this for consistency and ease of translations/rotations (we'll get to that later). Circles are automatically centered, but polygons and solids aren't.. I just always specify it.. also, don't forget your semicolons..
Next we will draw a rectangle for the edges of the center piece... and I am going to make it 16mm high.. that number is sorta arbitrary, and sorta chosen because I already know the dowel protrusions off the side will be 16mm in diameter and that the part will be 16mm thick.. "Why 16mm??" you may ask.. because it is enough and is a nice even number.. If you remember from the sketch, it will be 76mm wide.
Now I want to blend this shape and make it a bit sexier... This is where hull() comes in.. I just put the previous shapes in the hull() function, and bam!, it looks great.
Whenever I put something in a function, I like to indent it. This helps a lot with readability. You can use the TAB button to indent or highlight and CTRL + I. Also, don't forget your ending curly brace.. which I keep at the same indentation as the function heading.
Well, now we have a nice 2D shape.. It's time to give it some depth.. We will use the function linear_extrude().
In case you are wondering, convexity is there to help it render.. I always just set it equal to 10... and twist allows you to make spirals and cork screws..
Now I am going to add the dowel protrusions out the side.. Since everything is centered, all I need to do is make a cylinder and rotate it. First I will draw the cylinder.. I want the dowel protrusions to stick out 20mm (arbitrary dimension) on each side.. so I will take the width, which is 76mm and add 20mm and 20mm more, to get 116mm.
Now I will rotate the cylinder about the y-axis 90 degrees.
Now I will union the two solids. This will allow me to use this solid in the difference() function without subtracting the dowel protrusion cylinder.
Now I will make the hole for the hair dryer. I am going to use difference() to subtract a cylinder that has a diameter of 56mm (28mm radius) from the union I just made...with difference(), you can subtract as many objects you want from one object.
We are almost done with this... but one thing is bugging me.. the curved surfaces are too faceted.. Normally, I would do this step in the beginning, but I didn't in this case to keep the instructions simpler... to make the curves more rounded, we will add the parameter "$fn" to all the curved objects. We are also going to create a global variable called "fn" so that we can change this parameter easily. The reason is because smoothly curved surfaces take a long time to compile and render. It is faster to build the object with faceted surfaces and then smooth them up once at the end when you are ready to export.
With that taken care of, we are ready to export this as an STL. (Design -> Export as STL..) The slicing software used by your printer host software converts the .stl file into g-code instructions for your printer.
Now we can move to the next part...
...anyways... on to drafting.... with OpenSCAD...
NOTE: I should mention that I am fairly new to OpenSCAD and programming in general, so I may be doing things inefficiently..
The first part I am going to make is the center section, mostly because it will be easier, so I can start printing it while I am drafting the end pieces.. to use time more efficiently..
Of course, to maintain good flow in this instructable, I will order it such that all the drafting is done before the printing..
Let us begin:
The first thing I like to do is open the User manual in my second computer screen so I can reference it easily. The user manual is here:
http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language
Open program and turn on "show axis".. this helps a lot when figuring rotations and translations.. Then save it (and save often) CTRL +S does not save btw... F2 saves....
There are many ways we can draw this part.. I usually union together a bunch of solid objects and then subtract (difference) the excess... I have found that the easiest way for me to make a solid object that is a cylindrical shape combined with a square shape, is to use the function "hull()". To use Hull(), you must start with 2D objects and then linear_extrude() them...
We will first draw the center circle, it is going to be the size of our center hole plus 4mm of meat to the radius to hold the hair dryer in .. I chose 4mm arbitrarily.. it should be more than enough for strength... so we will take the hole diameter, which is 56mm, divided by 2, to get the radius, which is 28mm, plus 4mm of meat.. to get 32mm.
Once you enter the code to draw a circle, go to Design -> Compile & Render (or F6) to see the preview (you will do this after every step hereafter). I also like to change to a top view for 2D shapes. You can use your mouse wheel to zoom and you can click to drag or rotate... or you can go into the View menu and select a view.
You will notice that inside the function, I specified the radius (r = 32), and center = true. The center = true basically aligns the center of the object with the origin. I almost always do this for consistency and ease of translations/rotations (we'll get to that later). Circles are automatically centered, but polygons and solids aren't.. I just always specify it.. also, don't forget your semicolons..
Next we will draw a rectangle for the edges of the center piece... and I am going to make it 16mm high.. that number is sorta arbitrary, and sorta chosen because I already know the dowel protrusions off the side will be 16mm in diameter and that the part will be 16mm thick.. "Why 16mm??" you may ask.. because it is enough and is a nice even number.. If you remember from the sketch, it will be 76mm wide.
Now I want to blend this shape and make it a bit sexier... This is where hull() comes in.. I just put the previous shapes in the hull() function, and bam!, it looks great.
Whenever I put something in a function, I like to indent it. This helps a lot with readability. You can use the TAB button to indent or highlight and CTRL + I. Also, don't forget your ending curly brace.. which I keep at the same indentation as the function heading.
Well, now we have a nice 2D shape.. It's time to give it some depth.. We will use the function linear_extrude().
In case you are wondering, convexity is there to help it render.. I always just set it equal to 10... and twist allows you to make spirals and cork screws..
Now I am going to add the dowel protrusions out the side.. Since everything is centered, all I need to do is make a cylinder and rotate it. First I will draw the cylinder.. I want the dowel protrusions to stick out 20mm (arbitrary dimension) on each side.. so I will take the width, which is 76mm and add 20mm and 20mm more, to get 116mm.
Now I will rotate the cylinder about the y-axis 90 degrees.
Now I will union the two solids. This will allow me to use this solid in the difference() function without subtracting the dowel protrusion cylinder.
Now I will make the hole for the hair dryer. I am going to use difference() to subtract a cylinder that has a diameter of 56mm (28mm radius) from the union I just made...with difference(), you can subtract as many objects you want from one object.
We are almost done with this... but one thing is bugging me.. the curved surfaces are too faceted.. Normally, I would do this step in the beginning, but I didn't in this case to keep the instructions simpler... to make the curves more rounded, we will add the parameter "$fn" to all the curved objects. We are also going to create a global variable called "fn" so that we can change this parameter easily. The reason is because smoothly curved surfaces take a long time to compile and render. It is faster to build the object with faceted surfaces and then smooth them up once at the end when you are ready to export.
With that taken care of, we are ready to export this as an STL. (Design -> Export as STL..) The slicing software used by your printer host software converts the .stl file into g-code instructions for your printer.
Now we can move to the next part...
Step 3: Draft Your Design - Pt. 2 End Pieces
We will now draft up the end pieces. I am going to make them symmetrical so I only have to draft one... I know I will have curved pieces, so I will start out with my "fn" variable and set it equal to a relatively low number (20 in this case). I am also going to start with the end that the center section connects to. For this, I am going to make a cylinder. Since I know that it will eventually have a 16mm diameter hole, I will make the diameter 24mm. I will also make the height 16mm so some of the dowel protrusion sticks out the end (it might look cool and also help in separating the pieces).
For ease of construction, I want to orient the part so it matches my drawing. Therefore, I need to rotate the cylinder 90 degrees, which I am going to do about the y-axis. I could have just rotated my view, but I eventually want to make it sit flat on the x-y plane... and I think this will make it easier
Now I will draw the cylinders for the A-frame rod clips. Referring to my drawing, I need to translate in the z-direction -60mm, and in the x direction -86mm with respect to the center of the cylinder at the front face. Since the front face of the cylinder is 8mm positive of the origin, I will translate -78mm (-86mm - 8mm). Also, I will need to rotate the cylinders 90 degrees about the x-axis. Since the A-frame rods are about 8mm in diameter, I will make the diameter of the cylinders 14mm.. I don't want these too thick or they will be too hard to install.. I will make the length (height) 16mm.. for consistency.. Be sure to translate before you rotate.. order does matter..
Well... I actually want two of these cylinders, and I want to space them across the y-axis, centered on the x-z plane... So, I will add a y-value to the translation of this recently added cylinder, and then copy and paste everything, reversing the sign of the y-value of the pasted translate-rotate-cylinder block of code.... and I am going to space them 60mm center-to-center (arbitrary dimension). Therefore, both blocks of code will be identical, except one will have a y-translation of 30mm and the other will be -30mm.
Now I need to connect these solids. I am going to use the cube function. But first, I need to do a quick calculation. I need to know the angle of the two snap cylinders about the z-axis. Using my favorite Native American maiden "SOHCAHTOA" and a right triangle with 30mm and 78mm legs, I get 19.23 degrees. Therefore it will be rotated about the z=axis 19.23 degrees and the y-axis -34.9 degrees. I am going to make this solid 6mm high, 12mm wide, and 200mm long. I will adjust the 200mm dimension after I render it and see where it lands. I also have to do the z-rotation first or I'll get an unwanted twist.
That got me pretty close... I would really like the rectangular pieces to be flush on the bottom of the cylinders.. It looks like I can do a negative z-translation to make it close enough. A couple tweaks/ iterations gets me here:
Now I have all the material I need.. time to start trimming. I'll start by putting the current objects in a union, and then that union in a difference.
From here, I am going to trim all the junk beyond the front face of the first cylinder we drew.. I am also going to shave off 1mm of the face of the cylinder just in case I need it to make all the pieces fit. To do this, I am going to translate a very large cube that has one of its surfaces at x=7mm.
Now I am going to remove the hole that the center piece will fit into.. I could get creative here with tolerances and such, to make the right amount of friction in the press fit... but I am not going to... I figure that since these pieces won't print perfectly round and true, they will already be really tight if the hole is the same size as the dowel.. so I will just sand off material as needed to get a good fit. For this hole, I will just copy the code from the original cylinder and adjust the dimensions.
Now I will remove the holes for the A-frame clips. The threaded rod is really close to 8mm but I am going to make the holes a bit undersized (0.5mm) so they fit tight. I will just copy one of the previous cylinders, remove its y-translation, reduce the radius, and make it extra long.
Now I need to make the slots for the A-frame clips that turn the tubes into clips. I know they obviously have to be smaller than the threaded rod diameter.. how much smaller?... good questions... uh... I'll just make the slots 6mm wide and call it good.. This will be very similar to the previous removal, except that it will be a cube (rectangular prism to be more exact) and it will have a little more negative z-translation.
Now it is time to make the final removal... the one that defines the flat surface that rests on the printer bed... To do this I am first going to rotate everything to make it parallel to the x-y plane.
Now I will translate it so that the rectangular arms are close to flush with the x-y plane and then subtract a really large cube that has one of its surfaces on the x-y plane.
Wait a minute!! This isn't going to work..
I can't just print the ends of the clips over mid air unsupported like that. I need to add some support blocks that I will cut off later.
Finally I will render it with a higher $fn value and then export it as an STL file.
If you made it this far, give yourself a pat on the back... and continue to step 4.
For ease of construction, I want to orient the part so it matches my drawing. Therefore, I need to rotate the cylinder 90 degrees, which I am going to do about the y-axis. I could have just rotated my view, but I eventually want to make it sit flat on the x-y plane... and I think this will make it easier
Now I will draw the cylinders for the A-frame rod clips. Referring to my drawing, I need to translate in the z-direction -60mm, and in the x direction -86mm with respect to the center of the cylinder at the front face. Since the front face of the cylinder is 8mm positive of the origin, I will translate -78mm (-86mm - 8mm). Also, I will need to rotate the cylinders 90 degrees about the x-axis. Since the A-frame rods are about 8mm in diameter, I will make the diameter of the cylinders 14mm.. I don't want these too thick or they will be too hard to install.. I will make the length (height) 16mm.. for consistency.. Be sure to translate before you rotate.. order does matter..
Well... I actually want two of these cylinders, and I want to space them across the y-axis, centered on the x-z plane... So, I will add a y-value to the translation of this recently added cylinder, and then copy and paste everything, reversing the sign of the y-value of the pasted translate-rotate-cylinder block of code.... and I am going to space them 60mm center-to-center (arbitrary dimension). Therefore, both blocks of code will be identical, except one will have a y-translation of 30mm and the other will be -30mm.
Now I need to connect these solids. I am going to use the cube function. But first, I need to do a quick calculation. I need to know the angle of the two snap cylinders about the z-axis. Using my favorite Native American maiden "SOHCAHTOA" and a right triangle with 30mm and 78mm legs, I get 19.23 degrees. Therefore it will be rotated about the z=axis 19.23 degrees and the y-axis -34.9 degrees. I am going to make this solid 6mm high, 12mm wide, and 200mm long. I will adjust the 200mm dimension after I render it and see where it lands. I also have to do the z-rotation first or I'll get an unwanted twist.
That got me pretty close... I would really like the rectangular pieces to be flush on the bottom of the cylinders.. It looks like I can do a negative z-translation to make it close enough. A couple tweaks/ iterations gets me here:
Now I have all the material I need.. time to start trimming. I'll start by putting the current objects in a union, and then that union in a difference.
From here, I am going to trim all the junk beyond the front face of the first cylinder we drew.. I am also going to shave off 1mm of the face of the cylinder just in case I need it to make all the pieces fit. To do this, I am going to translate a very large cube that has one of its surfaces at x=7mm.
Now I am going to remove the hole that the center piece will fit into.. I could get creative here with tolerances and such, to make the right amount of friction in the press fit... but I am not going to... I figure that since these pieces won't print perfectly round and true, they will already be really tight if the hole is the same size as the dowel.. so I will just sand off material as needed to get a good fit. For this hole, I will just copy the code from the original cylinder and adjust the dimensions.
Now I will remove the holes for the A-frame clips. The threaded rod is really close to 8mm but I am going to make the holes a bit undersized (0.5mm) so they fit tight. I will just copy one of the previous cylinders, remove its y-translation, reduce the radius, and make it extra long.
Now I need to make the slots for the A-frame clips that turn the tubes into clips. I know they obviously have to be smaller than the threaded rod diameter.. how much smaller?... good questions... uh... I'll just make the slots 6mm wide and call it good.. This will be very similar to the previous removal, except that it will be a cube (rectangular prism to be more exact) and it will have a little more negative z-translation.
Now it is time to make the final removal... the one that defines the flat surface that rests on the printer bed... To do this I am first going to rotate everything to make it parallel to the x-y plane.
Now I will translate it so that the rectangular arms are close to flush with the x-y plane and then subtract a really large cube that has one of its surfaces on the x-y plane.
Wait a minute!! This isn't going to work..
I can't just print the ends of the clips over mid air unsupported like that. I need to add some support blocks that I will cut off later.
Finally I will render it with a higher $fn value and then export it as an STL file.
If you made it this far, give yourself a pat on the back... and continue to step 4.
Step 4: Print/Clean/Fit Components
It is finally time to start printing... Since this instructable is intended as a general guide for designing things, I will not go into detail on the 3D printing of this particular object.. I will just skim over the basic steps.
Before we get started though, I will list the exact setup I am using.
The first step is to load one of the objects in the host software of your printer. Even though you can fill up your printer bed full of objects, I prefer to do them one at a time. You are less likely to waste a bunch of filament if your print gets messed up when it is almost done. I am going to start with the center section piece.
Next I will generate the G-code..
Now I will print the object and sit back and relax.
.........
Now I am going to double check and make sure I made the hole the right size for my hair dryer..
That looks good... Now I will print one of the end pieces. I will want to make sure it fits the center piece and the A-frame rod before printing the second one.
It is a bit tight, but I clean it up and make it fit.. better too tight than too loose... I can now start printing the next end piece..
Now that all the pieces are printed... I will clean up all the edges, remove the clip support blocks, and make sure the center piece fits the end pieces well.
I accidentally busted the head off one of the end pieces. I was trying to clear out the hole carefully with a drill, but that was not a good idea.. Instead of printing a new piece, I opted to JB Weld it back together.
Before we get started though, I will list the exact setup I am using.
The first step is to load one of the objects in the host software of your printer. Even though you can fill up your printer bed full of objects, I prefer to do them one at a time. You are less likely to waste a bunch of filament if your print gets messed up when it is almost done. I am going to start with the center section piece.
Next I will generate the G-code..
Now I will print the object and sit back and relax.
.........
Now I am going to double check and make sure I made the hole the right size for my hair dryer..
That looks good... Now I will print one of the end pieces. I will want to make sure it fits the center piece and the A-frame rod before printing the second one.
It is a bit tight, but I clean it up and make it fit.. better too tight than too loose... I can now start printing the next end piece..
Now that all the pieces are printed... I will clean up all the edges, remove the clip support blocks, and make sure the center piece fits the end pieces well.
I accidentally busted the head off one of the end pieces. I was trying to clear out the hole carefully with a drill, but that was not a good idea.. Instead of printing a new piece, I opted to JB Weld it back together.
Step 5: Installation/Testing
The final step is to test your design...
It won't take long for this part.. The functionality of my design is purely based on whether or not it can hold a hair dryer aiming at the spot I intended it to, while being somewhat adjustable.. If it does that, it is a success, even if the idea of using a hair dryer as a bed heater is a complete failure.
So here it is installed...
And holding the hair dryer...
During installation, one of the clips busted in half.....
...so I decided to drill holes next to all the clips and reinforce them with zip ties.
As far as adjustment is concerned...
... it looks like I have plenty of adjustment.
It won't take long for this part.. The functionality of my design is purely based on whether or not it can hold a hair dryer aiming at the spot I intended it to, while being somewhat adjustable.. If it does that, it is a success, even if the idea of using a hair dryer as a bed heater is a complete failure.
So here it is installed...
And holding the hair dryer...
During installation, one of the clips busted in half.....
...so I decided to drill holes next to all the clips and reinforce them with zip ties.
As far as adjustment is concerned...
... it looks like I have plenty of adjustment.
Participated in the
Make It Real Challenge