Introduction: 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/
Step 1: Collect Resources
There has already been alot of work done by the Open Prosthetics group. It is documented here. http://openprosthetics.org/concepts/55/the-trautman-hook.
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
Step 2: 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/
Step 3: 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();
}
}
Step 4: 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.
Step 5: 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.
Step 6: Setup and Print Using ReplicatorG
To drive the machine we will use ReplicatorG. This will take the Gcode generated from the STL file, which was output from openSCAD code, and acutually tell teh machine what to do.
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
Step 7: Take a Look at What You Have
Now we have gone from some info on the internet to a physical part on the workbench.
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.
Step 8: 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();
}
}
Step 9: 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);
}
}
}
Step 10: 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);
}
}
}
Step 11: 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!!
Step 12: 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
Attachments
Step 13: 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

Participated in the
Humana Health by Design Contest
13 Comments
13 years ago on Introduction
As I look at this, it seems more of a proof-of-principle rather than a fully functional T-hook. The material used by most 3D printers wouldn't be strong enough to deploy on a Trautman, I think. Am I right about this, or is there something I've missed?
Reply 13 years ago on Introduction
it seems more of a proof-of-principle rather than a fully functional T-hook
You are correct. As of 4-11-10 I do not have a functional device. This instructable is focused on the design process using open source software and low-cost open source hardware.
RepRap and Makerbot use a filimanet of melted plastic to build up parts. This makes a pretty good part, but I haven't tested the stength myself.
If I get more done, I will add it to this instructable.
-Marc
Reply 13 years ago on Introduction
Could this be used to make a mold instead? Perhaps then cast something more durable? I know a lot of people have experimented with casting aluminum, right?
Reply 11 years ago on Introduction
Could the sufficient strength be achieved if a 3D-printed honeycomb core was wrapped with glass fiber mats and brushed with some resin? It would probably be easier to manufacture a single copy this way instead of making a complete mold for casting.
Reply 13 years ago on Introduction
Could this be used to make a mold instead?
Probably - but the real goal is a direct-to-manufacture part. Something that can be designed, printed, and used in about an hour.
I have little experience with prosthetics, so I can't really say if this would be useful, but it seems worth a try.
-Marc
Reply 13 years ago on Introduction
Interesting question! How does cast aluminum compare in strength to a machined part?
Reply 13 years ago on Introduction
Asking the wrong guy! I just connected the two without knowing much about either!
Reply 13 years ago on Introduction
Okay, thanks. I still think it is a tremendous project! There are 3D printers that use sintered metal (I saw a cool one at the Maker Faire a couple of years ago), so this technique is potentially practical for deployed prostheses.
11 years ago on Introduction
I would love to see it added to the 3D print group I have just started
https://www.instructables.com/group/3Dprint/
Thanks
13 years ago on Introduction
You might want to say how this is designed to be used, it's not immediately obvious.
L
Reply 13 years ago on Introduction
Agreed - I am not really sure myself. I have been working from only images and files. What I've made so far is not functional.
Here is an image of a similair device in use:
http://www.thingiverse.com/image:11886
-Marc
Reply 13 years ago on Introduction
I think it's probably important to the project to learn how the device is to be used, and reference other models in production. You wouldn't want to succeed only to find people telling you there's something better on the market. Why is this design out of production?
L
13 years ago on Introduction
Sweet! I have added your I'ble to the OPP and AT groups.