Skip to content

Instantly share code, notes, and snippets.

@ednisley
Created January 26, 2023 01:00
Show Gist options
  • Save ednisley/4ab9639daa08bb2af940fa50473fe5c6 to your computer and use it in GitHub Desktop.
Save ednisley/4ab9639daa08bb2af940fa50473fe5c6 to your computer and use it in GitHub Desktop.
OpenSCAD source code: comfy finger grip for tailor's clapper
// Oak ironing weight finger grips
// Ed Nisley KE4ZNU 2023-01
Layout = "Show"; // [Block,Grip,Show,Build]
//- Extrusion parameters must match reality!
/* [Hidden] */
ThreadThick = 0.25;
ThreadWidth = 0.40;
HoleWindage = 0.2;
Protrusion = 0.1; // make holes end cleanly
inch = 25.4;
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
ID = 0;
OD = 1;
LENGTH = 2;
//----------
// Dimensions
// Length along X axis
Block = [250.0,50.0,39.0]; // overall wood block
BlockRadius = 10.0;
CornerRadius = 10.0;
Kerf = 0.2;
Socket = [160.0,25.0,6.5]; // raw recess into block
SocketRadius = Socket.y/2;
echo(Socket=Socket,SocketRadius=SocketRadius);
WallThick = ThreadWidth; // Thinnest printed wall
Clearance = 0.5; // between grip and recess
GripBlock = Socket - [2*Clearance,2*Clearance,Clearance];
GripBlockRadius = SocketRadius - Clearance;
echo(GripBlock=GripBlock);
GripDepth = 5.0; // finger grip recess
GripRecess = [GripBlock.x - 2*WallThick,GripBlock.y - 2*WallThick,GripDepth];
GripRecessRadius = GripBlockRadius - WallThick;
echo(GripRecess=GripRecess,GripRecessRadius=GripRecessRadius);
GripChordRadius = (pow(GripDepth,2) + pow(GripRecess.y,2)/4) / (2*GripDepth);
echo(GripChordRadius=GripChordRadius);
NumSides = 4*8;
//----------
// Shapes
module WoodBlock() {
difference() {
hull()
for (i=[-1,1], j=[-1,1]) // rounded block
translate([i*(Block.x/2 - BlockRadius),j*(Block.y/2 - BlockRadius),-Block.z/2])
cylinder(r=BlockRadius,h=Block.z,$fn=NumSides);
for (j=[-1,1]) // grip socket
translate([0,j*(Block.y/2 + Protrusion),0])
rotate([j*90,0,0])
hull() {
for (i=[-1,1])
translate([i*(Socket.x/2 - SocketRadius),(Socket.y/2 - SocketRadius),0])
cylinder(r=SocketRadius,h=Socket.z + Protrusion,$fn=NumSides);
}
cube([2*Block.x,2*Block.y,Kerf],center=true);
}
}
module Grip() {
difference() {
hull()
for (i=[-1,1]) // overall grip block
translate([i*(GripBlock.x/2 - GripBlockRadius),0,0])
cylinder(r=GripBlockRadius,h=GripBlock.z,$fn=NumSides);
hull() {
for (i=[-1,1]) // grip recess
translate([i*(GripBlock.x/2 - GripRecessRadius - WallThick),
0,
GripChordRadius + GripBlock.z - GripDepth])
sphere(r=GripChordRadius,$fn=NumSides);
}
}
}
//----------
// Build them
if (Layout == "Block")
WoodBlock();
if (Layout == "Grip")
Grip();
if (Layout == "Show") {
color("Brown")
WoodBlock();
color("Silver")
for (j=[-1,1])
translate([0,j*(Block.y/2 - GripBlock.z),0])
rotate([j*-90,0,0])
Grip();
}
if (Layout == "Build") {
for (i=[-1,1])
translate([i*(Block.y/2 - GripBlock.z),0,0])
rotate([0,0,90])
Grip();
}
@ednisley
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment