This is an OpenSCAD library to generate an ergonomic handle that distributes hand contact pressure as evenly as possible.
The dimensions in this model are based on several research papers using anthropometric data from various populations around the world. The handle profile is based on a 2020 study in which gripping hands were measured with a contour gauge to derive the correct curves for an ergonomic handle.
All of these studies are cited and linked in my blog article "Whose hands are biggest? You may be surprised."
I expanded on the handle contour study by generalizing it to be scalable to any size of hand. Knowing that the handle height is based on metacarpal breadth (hand width) and the handle cross section sizes are based on hand length, one can generate vertical and horizontal scale factors for the curve control points given in the study, and thereby obtain a handle scaled correctly to any size hand. My model also correctly accounts for metacarpal breadth expansion when the fingers are in a gripping position.
If you want a longer handle, then specify a bigger hand width. If you want a thicker handle, specify a longer hand length.
Update: Version 5 adds finger grooves, but not recommended because then only one size of hand can comfortably grasp the handle.
Place this in a searchable location, like the same directory as your script, and near the top, put this line:
use <ergonomic_handle.scad>
ergonomic_handle(hand_length=186, hand_width=85, flair=true, bottomcapext=0, topext=0, groovespc=0, tiltangle=110, fn=64, halfrotate=false);
Renders the body of an ergonimic handle. The handle is oriented so that the top surface is centered at the origin.
Parameters:
hand_length
= length of hand from tip of middle finger to first crease on wrist. Defaults to default_hand_length()
setting (186 for average male hand).hand_width
= metacarpal breadth; width of the four fingers where they meet the palm. Defaults to default_hand_width()
setting (85 for average male hand).flair
= true to flare out the top and bottom of front edge, for better pull force. When flare=false, the handle is generated as described in the referenced study. Defaults to true.bottomcapext
= bottom cap extension. 0=flat bottom (default). Suggest values 3 to 8.topext
= top extension, curves extrapolated upward by this amount. 0=no extension (default). The extension extends above the origin.groovespc
= groove spacing for improved grip. 0=none (default). Suggest 6-10 mm spacing. Grooves are 1.2 mm wide and 0.6 mm deep.fingergroove
= finger grooves. false=no finger grooves (default). true=include (this disables groovespc
). Warning: Enabling this setting causes the handle to fit only the hand for which it is sized! The grooves are un-ergonomic and uncomfortable when the handle size doesn't match the hand.tiltangle
= handle tilt angle. 110° (default) recommended. Should be no less than 90.fn
= number of facets (default 64) in elliptical cross section as well as vertical slices.halfrotate
= whether to rotate polygon vertices half of a segment around the ellipse (default false). Useful only for overlapping two low-poly handles for interesting textures (see demo).Supporting modules:
ergonomic_handle_top_ellipse(hand_length, hand_width, topext, tiltangle, fn);
Returns a polygon corresponding to the top surface of the handle (including extension). This is useful for designing a structure to fit on top of the handle.
Parameters are the same as described above. All have defaults if omitted.
ergonomic_handle_bottom_ellipse(hand_length, hand_width, tiltangle, fn);
Returns a polygon corresponding to the bottom surface of the handle (excluding bottom cap extension). Useful when not using a bottom cap and you want to match something with the bottom of the handle.
Parameters are the same as described above. All have defaults if omitted.
In addition, ergonomic_handle_height(hand_width)
may be used to get the height of the basic handle body without extensions. This is the same as hand_width*metacarpal_expansion
.
The handle is rendered with the top center at origin. The bottom of the handle (excluding extension cap) is ergonomic_handle_height()
below the origin.
ergonomic_handle_v5.scad | 17.0KB | |
ergonomic_handle_v5.stl | 2.3MB |