T-hook: Prosthetic Design for 3D Printing
by marc.cryan in Workshop > 3D Printing
9468 Views, 14 Favorites, 0 Comments
T-hook: Prosthetic Design for 3D Printing
Purpose:
Build a printable version of the Trautman Hook, an out-of production prosthetic device.
Overview:
This is derived from work by the the Open Prosthetic Project. Here is the description from their webpage:
The Open Prosthetics Project is producing useful innovations in the field of prosthetics and freely sharing the designs. This project is an open source collaboration between users, designers and funders with the goal of making our creations available for anyone to use and build upon. Our hope is to use this and our complementary sites to create a core group of “lead users,” and to speed up and amplify the impact of their innovations in the industry.
http://openprosthetics.org/
This instructable will start with some information on their design, then we will make modifications to create a version that can be built using low cost 3D printing technology.
Hopefully, we will end up with a robust working model that can be easily reproduced. I probably won't get there with just this instructable, but I hope that this will be useful to others with the same goal.
I should note that I don't represent any of these groups. I also make alot of mistakes.
Attributions:
This is entirely built on the work of the open source community, including:
OpenProsthetics http://openprosthetics.org/
Makerbot http://www.makerbot.com/
RepRap http://reprap.org/
Thingiverse http://www.thingiverse.com/
OpenSCAD http://openscad.org/
Blender http://www.blender.org/
Skeinforge http://blog.makerbot.com/2009/11/03/skeinforge-0006/
Replicator G http://replicat.org/
Collect Resources
Open Prosthetics as already done design and prototyping work. I am just building off their work in a way that seems compatable with the MakerBot 3D printing equipment.
Bre Prettis at Makerbot pointed me towards this project, he posted STL files here: http://www.thingiverse.com/thing:2114
Availble resources include:
Previus work (drawings, photos) - http://openprosthetics.org/concepts/55/the-trautman-hook
(they have also posted their design files, but I can't seem to open them)
STL files - http://www.thingiverse.com/thing:2114
Patents - http://www.google.com/patents? id=Asx5AAAAEBAJ&printsec=drawing&zoom=4#v=onepage&q&f=false
Equipment and Software
Physical:
Makerbot http://www.makerbot.com/
Software:
OpenSCAD http://openscad.org/
Blender http://www.blender.org/
Skeinforge http://blog.makerbot.com/2009/11/03/skeinforge-0006/
Replicator G http://replicat.org/
Top Finger - in OpenSCAD
-try to print STL files as they are
-Modify the STL files to make them printable
-Modify the CAD files to make them printable
-Build a new CAD file
I chose to build the design using OpenSCAD. This program allows you to write code for physical objects. It is growing in popularity and is used heavily on thingiverse.com
OpenSCAD is documented here - http://openscad.org/
With a wiki here - http://en.wikibooks.org/wiki/OpenSCAD_User_Manual
I'm working with primative solids that will be manupulated with tranformations and CSG modeling.
The basic steps are:
-define a simple obect (primative solid) and put it somewhere (transform)
-define another obect and then add, subtract or overalap it with the other object
Doing this you can build anything you want
- Build part using primatives, tranformations, and combinations
- Compile to view part with solids and cuts shown(F5)
- Comple and Render to show the final part (F6)
- Export as STL after rendering
////////////// Open SCAD code ///////////////////
/*
Make each piece as a seperate module, then join them all together.
Units are in mills - scalled at the end
*/
//ARC
module arc(){
difference(){
cylinder(h=200, r=1400);
cylinder(h=200, r=1200);
translate( [-1500,-1400,0]){
cube(size = [3000,2050,200], center =false);}
translate([-1400,600,0]){
cube(size=[800,200,200], center= false);}
}
}
//FingerTip
module tip(){
rotate([90,0,0])
translate([875,0,-800]){
intersection(){
cube(size=[700,700,150]);
cylinder(h=150,r=700);
}
}
}
//Joint
module joint(){
translate([-800,1000,0]){
difference(){
cylinder(h=200, r=180);
cylinder(h=200, r=90);
}
}
translate([-1050,805,0]){
cylinder(h=200, r=100);
}
}
//draw the whole thing
scale([0.0254,0.0254,0.0254]){ //this scale seems correct in blender
union(){
arc();
tip();
joint();
}
}
Use Blender - Check Size and Clean Up
The process of taking a part from a design to a print are here: http://wiki.makerbot.com/how-to-print As far as I can tell, this is the best place to start.
What I have here are pretty much notes to myself.
**
Next I opened the STL in Blender.
I've had some trouble telling what scale I am in using openSCAD. So I imported the STL we just generated along with an STL of a know size. I used a 3cm snowflake from thingiverse(attribution).
My first scale was way, way off. The finger was so big blender seemed to be having trouble displaying it.
Luckily in openSCAD rescalling is easy. [descripion ]
Next - Makerbot recomends deleting multiple vertices
Tab-> A-> mesh ->delete multiple vertices [check]
Now we can export another cleaned up version of the STL.
Use Skeingforge to Make G-code
Skeingeforge slices up the SLA and produces the path that the extruder will follow. This software has many settings. I am lucky that the default has been working well.
Again the real info is here: http://wiki.makerbot.com/how-to-print#toc9
Here are some images.
Setup and Print Using ReplicatorG
Read more and get it here: http://replicat.org/
Setup machine
center platform
position nozzle
preheat nozzle
test extrude
Import Gcode into replicatorG
Build!!
Again - I am just folliwing the steps here: http://wiki.makerbot.com/how-to-print
Take a Look at What You Have
If you think about it it, this is a bit mind blowing.
If you look at the actuall part, you will see room for improvement.
So, what are the problems?
- I lost the hole, it is filled in thicker then any other part of the peice.
-I have know idea if this will fit with the other pieces, as they don't exist yet.
Should we fix stuff now or move ahead?
- I'm going to plow ahead, then go back and fix everthing at once (or give up and go to bed).
- The whole can be drilled out for now, there must be something off in the software chain.
- Once we make the other pieces we can see what fits and what doesnt.
The Other Parts: Bottom Hook
Now, got back to openSCAD and code up the next part. Alot of what I have done in this version is based on measuring a 2D print out adn then guessing. I'm sure there is a better way to do this, but here we are.
You can import multiple STLs into Blender put them together to see if they fit. This is a good way to check for major errors, such that one part is 100x's to big. But I personally can't really tell if there are little prolblems. I find that I am very good at pretending they will fit together.
Once the rendering looks like it might work. Follow same steps as before, to build the part:
- openSCAD -> export STL
- Blender -> open STL -> clean -> export STL
- Skeinforg -> open clean STL -> export G-code
- ReplicatorG -> import G-code -> setup -> build!
//////// openSCAD CODE ////////////////////
/*
Make each piece as a seperate module, then join them all together.
Units are in mills - scalled at the end
*/
//ARC
//started with finger_top
//translate and flip the arc
//translate and flip the joint, modify to approximate the picture
module arc(){
translate([0,1450,200]){ //shift
rotate([180,0,0]){ //rotate
difference(){ //same as finger_top
cylinder(h=200, r=1400);
cylinder(h=200, r=1200);
translate( [-1500,-1400,0]){
cube(size = [3000,2050,200], center =false);}
translate([-1500,600,0]){
cube(size=[800,475,200], center= false);}
}
}
}
}
//FingerTip
module tip(){
rotate([90,0,0])
translate([875,0,-800]){
intersection(){
cube(size=[700,700,150]);
cylinder(h=150,r=700);
}
}
}
//Joint
module joint(){
union(){
/* translate([0,1450,200]){ //shift
rotate([180,0,0]){ //rotate
translate([-800,1000,0]){
cylinder(h=200, r=180);}
}
}
*/
translate([-1175,275,0]){ //reinforce pivot
cube(size=[560,320,200]);}
}
translate([-1550,125,0]){ //tail
rotate([0,0,20])
cube(size=[650,200,200]);}
}
module hole(){
translate([-880,650,0]){
cylinder(h=250,r=175);}
}
// draw the solids
module solid(){
union(){
arc();
tip();
joint();
}
}
//draw the whole thing and scale
scale([0.025,0.025,0.025]){ //scale to 0.0254 when done drafting
//scale([1,1,1]){
difference(){
solid();
hole();
}
}
The Other Parts: Anchor
This Anchor piece is where it all comes together. All the parts will need to interact with the anchor. There is no way I am going to get this right the first time. So I did what I could and printed it up.
/////////////////// openSCAD ////////////////////////
/* ANCHOR
*/
scale([0.025,0.025,0.025]){
union(){
//rounded end with hole
translate([1000,0,0]){
difference(){
cylinder(h=190, r=160);
cylinder(h=190,r=80);
}
}
//big piece
translate([0,0,0]){
cube(size = [900,300,190], center=false);
}
//rect upright
translate([800,80,0]){
rotate(4,0,0){
cube(size = [250,450,190], center=false);
}
}
//shark fin
difference(){
translate([0,0,0]){
cube(size=[550,400,190],center=false);
}
translate([550,425,0]){
cylinder(h=190,r=125);
}
}
translate([300,400,0]){
cylinder(h=190,r=125);
}
//thicker base to the left
translate([-150,0,0]){
cube(size=[250,400,300],center=false);
}
//threaded portion (place holder)
translate([-500,0,0]){
cube(size=[500,300,190],center=false);
}
}
}
Side Brackets
Ideally the side brackets would be printed up as part of the bottom finger. But this looks like it will require a filler material (or something). You can print one bracket, but then everything else will be floating in space in bad ways.
The bracket without the bottom finger is a pretty simple part. So I gave it a go. We will have to figure out how to attach the peices later.
//////////////////////////// open SCAD Code /////////////////////////////////
//side bracket
scale([0.025,0.025,0.025]){
difference(){
intersection(){
cube(size = [725,1300,200], center = false);
translate([1000,0,0]){
cylinder(h=200, r = 1400);
}
}
translate([350,300,0]){
cylinder(h=200,r=60);
}
translate([500,1100,0]){
cylinder(h=200,r=60);
}
}
}
All the Parts
Now we have a nice pile of plastic parts.
I took a bunch of pictures to show how everthing almost fits together.
Now we have a first draft of the assembly. This took me two evenings and a morning to do, Thsi is my first design done like this so that time includes installing all the software and reading some instructions. Thanks to the Open Source community, this cost almost nothing.
The next step, is to get the part to actually work!!
THE FILES - T-hook_X01.zip
Here are all the files I have generated for version X01
This includes:
- OpenSCAD source - *.scad
- OpenSCAD STL ouput - *.stl
- Blender STL output *_cleaned_x01.stl
- Skeiforge Gcode ouput *_export.gcade
Downloads
Make It Work Then Update the Code and Try Again!
This instructable might end here. But here are the next few steps that are needed.
- Make it work - drill holes, file, glue, whatever
- Re-design - rework the code based on what we have learned
- Try it again! - Print everthing out and see if it works
- Will these be strong enough for any practical use? - maybe HDPE is a better material then ABS?
- Thread - how to get a thread on the base of the anchor
- How to attach the side brackets?
- Optimize printing - can the whole thing be printed at once?
- Size - does the whole thing need to be bigger?
- Alternatives - instead of working from an existing design that might not be printable, build up a similair assembly using parts known to be printable