Monday, August 4, 2014

Day 343 - Customizable Cone Hinge

Today we made a cone hinge module that can be used inside other projects:


Thingiverse link: http://www.thingiverse.com/thing:436737

Settings: Optimized for a MakerBot Replicator 2 with default .3mm/low settings, with raft but (and this is key) no supports. For different printers, to change scale, or for tighter/looser hinges, try changing the clearances in the Customizer at the Thingiverse link.

Technical notes, OpenSCAD flavor: This is a conical hinge, so never needs support material. The picture below shows a cross-section about halfway through.


The space between the protruding cones and the cone-shaped holes is controlled by a parameter called clearance, and the space between the hinge and the adjacent bars is controlled by the parameter called gap. A non-customizable parameter called fudge allows us to push things imperceptibly one way or another so as to avoid having identical duplicate triangles in our output mesh. Here is the full OpenSCAD code for this object:

// mathgrrl cone hinge

//////////////////////////////////////////////////////
// parameters

// Length of the complete hinge
length = 20;

// Height (diameter) of the hinge
height = 3;

// Clearance between cones and holes
clearance = .7;

// Clearance between hinge and sides
gap = .6;

// Parameters that the user does not get to specify
$fn=24*1;
border = 2*1;
fudge = .01*1; // to preserve mesh integrity
corner = 0*1; // space between hinge and corner
hinge_radius = height/2;
cone_height = 1.5*hinge_radius;

//////////////////////////////////////////////////////
// renders

rotate(90,[0,1,0])
translate([-hinge_radius,0,0])
hinge();

translate([0,hinge_radius+gap,0]) bar();
translate([0,-2*border-hinge_radius-gap,0]) bar();

//////////////////////////////////////////////////////
// module for hinge

module hinge(){
rad = hinge_radius;
clr = clearance;
len = (length-2*corner)/3;
con = cone_height;
// left outside hinge = (cylinder+box)-cone
difference(){
union(){
translate([0,0,corner]) cylinder(h=len-clr,r=rad);
translate([-rad,0,corner]) cube([2*rad,rad+gap,len-clr]);
}
translate([0,0,corner+len-con-clr+fudge]) cylinder(h=con,r1=0,r2=rad);
}
// inside hinge = cylinder+box+cone+cone
union(){
translate([0,0,corner+len]) cylinder(h=len,r=rad);
translate([-rad,-rad-gap,corner+len]) cube([2*rad,rad+gap,len]);
translate([0,0,corner+len-con]) cylinder(h=con,r1=0,r2=rad);
translate([0,0,corner+2*len]) cylinder(h=con,r1=rad,r2=0);
}
// right outside hinge = (cylinder+box)-cone
difference(){
union(){
translate([0,0,corner+2*len+clr]) cylinder(h=len-clr,r=rad);
translate([-rad,0,corner+2*len+clr]) cube([2*rad,rad+gap,len-clr]);
}
translate([0,0,corner+2*len+clr-fudge]) cylinder(h=con,r1=rad,r2=0);
}
}

//////////////////////////////////////////////////////
// module for bar shape

module bar(){
cube([length,2*border,height]);
}

No comments:

Post a Comment