Printable Parametric Prosthetics: Design Features

Parametric fingers - different lengths, same scale, with no distortion to hardware
Parametric fingers – different lengths, same scale, with no distortion to hardware

I’m not ashamed to admit it – I’m proud of these parametric designs like few of my other designs.  I’ve worked to make this design as customizable and organic as possible.  The two modules that define each finger can be customized in two important ways – they can be lengthened1 as well as scaled up or down – without any distortion or change in the size of the holes for the hardware, elastic cords, or tension cords.

Parametric fingers - with grippy bits
Parametric fingers – with grippy bits

Being able to lengthen2 the finger segments is important because it allows the user to create fingers of different lengths, as normal fingers are of different lengths, all without having to actually scale the fingers to different sizes and without causing a change in each finger’s diameter.

As I’ve discussed in earlier posts, being able to scale the parts up and down without distortion to the hardware holes is important because it allows users to use standard hardware throughout different designs.

For now, it’s back to work on the parametric palm to ensure a proper fit with these parts.

Default Series Title
  1. Or shortened []
  2. Or shorten []

Printable Parametric Prosthetics and OpenSCAD: Parametric Optimization

Picking parametric fingers
Picking parametric fingers

This post is intended as a set of “guidelines” to creating a parametric design in OpenSCAD.

Last Sunday afternoon was spent working out a parametric design for printable prosthetic fingers.  Using the OpenSCAD function “hull” it’s relatively easy to crank out a nifty organic appearing design.  Admittedly, you have to have a working knowledge the basic union/difference/intersection function first.  However, once you do it’s really quite easy.

The feature of the design I’m most proud of is the “nail” part of the finger tip.  I designed the “nail” by using the OpenSCAD function “intersection()” on two cylinders.  The little “nubs”1 consist of a small cube, rotated so a corner is pointed straight up combined, with an identically situated cube rotated slightly.

When I’m designing something to be parametric, I usually don’t really start out designing it that way.  I first strive to create a form in OpenSCAD that resembles closely the thing I wish to design.  Then, I poke through the design code looking for those elements that are related to the design aspects I’m interested in changing based on parameters.  Once located, I replace those parts of the design code with variables that can be specified when the module is called.  I realize this is kind of a “high level” description of my design process for parametric things, but it’s still the best description.

Since last Sunday I’ve really done a lot with the design.  Some simplifying and a lot of improvements.  In the next post I’ll go over these features.  I’m really excited to show these off.  :)

Default Series Title Default Series Title
  1. Meant to give the finger grip and texture []

Printable Prosthetics Fingers and OpenSCAD Design Tips

Solid finger tip for Cyborg Beast
Solid finger tip for Cyborg Beast

Above is my first attempt at designing a “solid” finger for the Cyborg Beast DIY printable prosthetic in OpenSCAD.1 The reason this is a “solid” finger is that I haven’t subtracted out any material to allow this partial finger to connect with anything else.

The problem with scaling (up or down) any design that requires fasteners and hardware is that when you do, the holes for the hardware are similarly scaled.  This leads to more post-printing work drilling holes to widen them or to find larger fasteners that won’t rattle around in too-large holes.

Thus, if the hardware consists of 3mm screws, the holes for the hardware should be 3mm no matter how much the parts are scaled up or down.  To make matters more interesting, not all holes in the model should be excepted from scaling.  The above finger tip has a plastic end that is supposed to fit into a mid-finger piece – and those parts should be scaled up or down according to the size of the overall hand.  Thus, some voids should be scaled2 and others not at all.3

I’m rather happy with how this finger has turned out so far.  It has most of what I understand to be the essential features of the Cyborg Beast fingertips, including little nubs along the finger pad to allow for gripping.  I intend to make this an option, in case a user would rather use something like Plasti-Dip to make grippy finger pads, rather than relying on printed plastic bumps.

However, converting a decent design into a parametric design requires a little more work.  The way I go about designing a parametric model is to first design one instance of the thing, in this case the finger tip.  My next step is to poke through the OpenSCAD code to locate those aspects parts that contribute to the models’ essential features – length of the finger tip, for instance.  Once I’ve found these bits, I then try to modify them so that I can insert different variables and arrive at sane variations on the model.

Wish me luck!4

Default Series Title
  1. If this is your first time tuning in, check out the prior posts in this series using the links at the bottom of this post []
  2. Where parts meet []
  3. Such as holes for hardware []
  4. See, this is a post about finger tips and design tips!  Oh, man, I crack myself up! []

OpenSCAD Intermediates: How to Make Complex Organic Shapes

Cyborg Beast OpenSCAD prototype
Cyborg Beast OpenSCAD prototype

OpenSCAD tutorials for the MakerBot blog.  In that OpenSCAD tutorial series I covered the basics of the OpenSCAD interface, how to make 2D forms, how to make some basic 3D forms, how to position those forms in 3D space, the different ways to combine forms, how to create mashups of one or more existing STL’s and OpenSCAD forms, how to use modules to reuse your code to make your life easier, how to extrude flat 2D forms into 3D forms, and how to fix design problems.  One of the last tutorials was on how to make organic looking shapes using OpenSCAD.1  However, I have a few design tricks left to share.  A little over 18 months ago I left off the series suggesting as new topics.2 There’s one particular “trick” I am using a lot as I work on designing a printable parametric prosthetic. This trick is somewhat easier to explain using pictures.  Suppose you wanted to make a shape that looked something like a “jack,” but you wanted it to have curved surfaces at the center.  Let’s see what happens when we try to use the “hull()” command.  Do do this, we’ll make a sphere at the center and put eight more spheres around it.  The code for this example is basically irrelevant, but I’ll provide it anyhow.

sphere(r=10);
rotate([0,0,0]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,0,90]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,0,180]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,0,270]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,180,0]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,180,90]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,180,180]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,180,270]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);

There’s a much easier way to create the 8 “orbiting” spheres, but that’s another post unto itself.  :)  Here’s what the above code will create:

Nine little spheres (I named one of them Pluto!)
Nine little spheres (I named one of them Pluto!)

Now, let’s use the “hull()” command to wrap around these spheres.

hull()
{
sphere(r=10);
rotate([0,0,0]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,0,90]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,0,180]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,0,270]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,180,0]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,180,90]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,180,180]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
rotate([0,180,270]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10);
)

That code will make this:

Nine spheres to... a box?
Nine spheres to… a box?

The result looks nothing like a jack! It looks more like a box with rounded edges. The limitation with the “hull()” command3 is that it connects all the outside points from the various shapes.  The result is more like what the objects would look like if you covered them in plastic wrap – but not what they would look like if you tried to use shrink wrap.4 However, our goal is to get a jack.  How should we go about this?  The same way we eat an elephant.56 We need to use “hull()” multiple times7 to connect the central sphere to the eight surrounding spheres.

hull() { sphere(r=10);
rotate([0,0,0]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10); }
hull() { sphere(r=10);
rotate([0,0,90]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10); }
hull() { sphere(r=10);
rotate([0,0,180]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10); }
hull() { sphere(r=10);
rotate([0,0,270]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10); }
hull() { sphere(r=10);
rotate([0,180,0]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10); }
hull() { sphere(r=10);
rotate([0,180,90]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10); }
hull() { sphere(r=10);
rotate([0,180,180]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10); }
hull() { sphere(r=10);
rotate([0,180,270]) translate([100,100,100*pow(2,0.5)/1.5]) sphere(r=10); }

The result would look like:

Much better!
Much better!

By breaking the overall design into pieces, you can use the “hull()” command to connect pieces of the design to one another in a seemingly organic fashion.  Here’s a set of pictures of my most recent work that uses these design tricks.

This slideshow requires JavaScript.

  1. Full list here:

    1. OpenSCAD Basics: The Setup
    2. OpenSCAD Basics: 2D Forms
    3. OpenSCAD Basics: 3D Forms
    4. OpenSCAD Basics: Manipulating Forms
    5. OpenSCAD Intermediates: Combining Forms
    6. OpenSCAD Intermediates: Mashups
    7. OpenSCAD Intermediates: Modularity
    8. OpenSCAD Intermediates: Extruding 2D Objects
    9. OpenSCAD Intermediates: Fixing Design Problems
    10. OpenSCAD Intermediates: How to Make Organic Shapes
    11. OpenSCAD Design Tips
    12. OpenSCAD Design Tips: How to Make a Customizable Thing

    []

  2. These are, in no particular order:

    • How to sketch an object with OpenSCAD
    • How to easily make regular solids – other than cubes and cylinders, like hexagons, pentagons, octagons, etc
    • How to easily make symmetrical solids
    • How to easily make irregular, but symmetrical solids

    []

  3. I almost typed “problem,” but in this case it probably is just a feature []
  4. That’s the best analogy I can come up with []
  5. One bite at a time. []
  6. It’s such a damn shame when a cool domain name is taken – and there’s nothing there.  Such as eatanelephant.com []
  7. 8 times []

Has it really been that long?

2012. calendarI just fired up OpenSCAD, my 3D design program of choice, and then it occurred to me that it’s been quite a while since I’ve used it.  A quick search for *.SCAD files on my hard drive revealed I haven’t updated any OpenSCAD documents since 5/13/2012. 1

That’s more than two months!  How can this be?!  I’ve got a pile of ideas stacking up.

How do you organize your ideas?  I created an e-mail address for myself “ideas@DOMAIN.com,” jot down the ideas, and send them to myself constantly.  If I have paper, I’ll sketch the idea out, take a picture, and e-mail the picture to this same address.  I think I probably send myself about two or three e-mails a day.

I can’t wait to jump back into OpenSCAD and work on some of these ideas!!!

  1. Photo courtesy of Asja Borošvia Compfight []

DrawBot – Printed Parts

So far I’ve got three types of printed parts:

  1. Spools
    1. These spools hold the monofilament and are friction fit onto the motor shaft.  You can check out the designs on Thingiverse.
  2. Motor Mounts
    1. The Thingiverse page actually has a lot of information about the motor mounts.  They’re designed in OpenSCAD and are mostly parametric.  Since I’m mounting these motors inside a box, the mounts are designed to go into the corners of the box.
  3. John Abella’s Gondola
    1. I haven’t hooked everything up yet, so I don’t know how well this will work.  I can’t wait to find out!
  4. Arduino Mount
    1. I’m kicking around some ideas for how this would work.  Ideally, I’ll end up designing a bracket that the Arduino and motor shield can just snap into.
Default Series Title

Oh, OpenSCAD…

One of things I really like about OpenSCAD is how anything I make in it is guaranteed to be manifold.  It’s a solid modeler and by manipulating, adding, and subtracting solids – I should always end up with another solid.  I exported two of the parts necessary for a Pez Powered Disc Shooter only to discover that OpenSCAD refused to compile one of the parts – because that part had some polygons with an incorrect winding order.  Mind, I had no problems exporting the part in the first place – but importing it back?  Nope.

Oh, OpenSCAD, is our love affair over so soon?