OpenSCAD Screwdriver Handle

I’ve needed to make a couple of handles for some homemade tools over the past few years, and I’ve always like the look and feel of the traditional screwdriver handle, so I made a semi-parametric OpenSCAD handle.

You may need to make changes for the actual tool holding aspect. I’ve used epoxy, as well as a flat, and in one simple case, just an interference fit (it worked just fine for the low torque tool.)

Here’s the code:

//Tool Handle - SGN 2016
//modified 2020
//STILL HAVE TO MAKE CHANGES FOR TOOL HOLDING


handle_height = 45;
handle_diameter = 25;
tool_diameter = 13.12;
tool_height = 7.2;
handle_cutout_diameter = 6.5;
toroid_adj = -9; //have to sometimes adjust height of toroid 


difference(){
union(){
//main handle
cylinder(h = handle_height, d = handle_diameter, $fn = 18);


//ball on top of handle
translate([0,0,handle_height + 0.25])
sphere(d = handle_diameter - 0.25, $fn = 100);

//BOTTOM CONES
union(){    
translate([0,0,-21])
cylinder(h = 2, d = handle_diameter - 2, $fn = 18);
    
translate([0,0,-23])
cylinder(h = 2, d1 = handle_diameter - 4, d2 = handle_diameter - 2, $fn = 18);

translate([0,0,-19])
cylinder(h = 3, d1 = handle_diameter - 2, d2 = handle_diameter - 7, $fn = 18);
}    

//MID-BOTTOM CONES FOR TOROID
translate([0,0,-10])
cylinder(h = 10, d1 = handle_diameter - 11, d2 = handle_diameter, $fn = 18); //$fn = 64

//translate([0,0,-18])
//cylinder(h = 12, d1 = 19, d2 = 14, $fn = 18); //$fn = 64

translate([0,0,-19])
cylinder(h = 28, d1 = handle_diameter - 2.7, d2 = handle_diameter - 11, $fn = 64); //$fn = 64

}



//internal cutouts for main handle texture
for ( i = [0 : 5] ){
    rotate( i * 60, [0, 0, 1]){
    translate([(0.5 * handle_diameter) + 1, 0, -8])
    cylinder(h = handle_height + 20, d = handle_cutout_diameter, $fn = 16);
    //translate([12,0,5])
    //sphere(d = 6, $fn = 64);
    //translate([12,0,43])
    //sphere(d = 6, $fn = 64);
    }
}


translate([0,0,-30])    
//internal cutouts for bottom handle texture
for ( i = [0 : 5] ){
    rotate( i * 60, [0, 0, 1]){
    translate([(handle_diameter * 0.5), 0, 5])
    cylinder(h = 12, d = handle_cutout_diameter - 2, $fn = 64);
    
    }
}

//toroid to cut out of bottom of handle
translate([0, 0, toroid_adj]){
rotate_extrude(convexity = 10, $fn = 64)
translate([handle_diameter - 5, 0, 0])
circle(r = (0.5 * handle_diameter) - 0.5 , $fn = 128);
}


//TOOL HOLDING PART!
translate([0,0,-25])
cylinder(h = 12, d = 10.1, $fn = 6);

//SCREWDRIVER HOLDING PART
union(){
translate([0,0,-25])
cylinder(d = 3.7, h = 15.5, $fn = 64);

translate([0,0,-18])
cylinder(d1 = tool_diameter + 0.03, d2 = tool_diameter - 7, h = 5.5, $fn = 64);

translate([0,0,-25])
cylinder(d = tool_diameter, h = tool_height, $fn = 64);
}
}