// Pin Connectors V2 // Tony Buser <tbuser@gmail.com> // pinhole(h=5); // test(); // pintack(h=10); // pinpeg(h=20); module test() { tolerance = 0.3; translate([-12, 12, 0]) pinpeg(h=20); translate([12, 12, 0]) pintack(h=10); difference() { union() { translate([0, -12, 2.5]) cube(size = [59, 20, 5], center = true); translate([24, -12, 7.5]) cube(size = [12, 20, 15], center = true); } translate([-24, -12, 0]) pinhole(h=5, t=tolerance); translate([-12, -12, 0]) pinhole(h=5, t=tolerance, tight=false); translate([0, -12, 0]) pinhole(h=10, t=tolerance); translate([12, -12, 0]) pinhole(h=10, t=tolerance, tight=false); translate([24, -12, 15]) rotate([0, 180, 0]) pinhole(h=10, t=tolerance); } } module pinhole(h=10, r=4, lh=3, lt=1, t=0.3, tight=true) { // h = shaft height // r = shaft radius // lh = lip height // lt = lip thickness // t = tolerance // tight = set to false if you want a joint that spins easily union() { pin_solid(h, r+(t/2), lh, lt); cylinder(h=h+0.2, r=r); // widen the cylinder slightly // cylinder(h=h+0.2, r=r+(t-0.2/2)); if (tight == false) { cylinder(h=h+0.2, r=r+(t/2)+0.25); } // widen the entrance hole to make insertion easier translate([0, 0, -0.1]) cylinder(h=lh/3, r2=r, r1=r+(t/2)+(lt/2)); } } module pin(h=10, r=4, lh=3, lt=1, side=false) { // h = shaft height // r = shaft radius // lh = lip height // lt = lip thickness // side = set to true if you want it printed horizontally if (side) { pin_horizontal(h, r, lh, lt); } else { pin_vertical(h, r, lh, lt); } } module pintack(h=10, r=4, lh=3, lt=1, bh=3, br=8.75) { // bh = base_height // br = base_radius union() { cylinder(h=bh, r=br); translate([0, 0, bh]) pin(h, r, lh, lt); } } module pinpeg(h=20, r=4, lh=3, lt=1) { union() { translate([0, -h/4+0.05, 0]) pin(h/2+0.1, r, lh, lt, side=true); translate([0, h/4-0.05, 0]) rotate([0, 0, 180]) pin(h/2+0.1, r, lh, lt, side=true); } } // just call pin instead, I made this module because it was easier to do the rotation option this way // since openscad complains of recursion if I did it all in one module module pin_vertical(h=10, r=4, lh=3, lt=1) { // h = shaft height // r = shaft radius // lh = lip height // lt = lip thickness difference() { pin_solid(h, r, lh, lt); // center cut translate([-r*0.5/2, -(r*2+lt*2)/2, h/4]) cube([r*0.5, r*2+lt*2, h]); translate([0, 0, h/4]) cylinder(h=h+lh, r=r/2.5, $fn=20); // center curve // translate([0, 0, h/4]) rotate([90, 0, 0]) cylinder(h=r*2, r=r*0.5/2, center=true, $fn=20); // side cuts translate([-r*2, -lt-r*1.125, -1]) cube([r*4, lt*2, h+2]); translate([-r*2, -lt+r*1.125, -1]) cube([r*4, lt*2, h+2]); } } // call pin with side=true instead of this module pin_horizontal(h=10, r=4, lh=3, lt=1) { // h = shaft height // r = shaft radius // lh = lip height // lt = lip thickness translate([0, h/2, r*1.125-lt]) rotate([90, 0, 0]) pin_vertical(h, r, lh, lt); } // this is mainly to make the pinhole module easier module pin_solid(h=10, r=4, lh=3, lt=1) { union() { // shaft cylinder(h=h-lh, r=r, $fn=30); // lip // translate([0, 0, h-lh]) cylinder(h=lh*0.25, r1=r, r2=r+(lt/2), $fn=30); // translate([0, 0, h-lh+lh*0.25]) cylinder(h=lh*0.25, r2=r, r1=r+(lt/2), $fn=30); // translate([0, 0, h-lh+lh*0.50]) cylinder(h=lh*0.50, r1=r, r2=r-(lt/2), $fn=30); // translate([0, 0, h-lh]) cylinder(h=lh*0.50, r1=r, r2=r+(lt/2), $fn=30); // translate([0, 0, h-lh+lh*0.50]) cylinder(h=lh*0.50, r1=r+(lt/2), r2=r-(lt/3), $fn=30); translate([0, 0, h-lh]) cylinder(h=lh*0.25, r1=r, r2=r+(lt/2), $fn=30); translate([0, 0, h-lh+lh*0.25]) cylinder(h=lh*0.25, r=r+(lt/2), $fn=30); translate([0, 0, h-lh+lh*0.50]) cylinder(h=lh*0.50, r1=r+(lt/2), r2=r-(lt/2), $fn=30); // translate([0, 0, h-lh]) cylinder(h=lh, r1=r+(lt/2), r2=1, $fn=30); // translate([0, 0, h-lh-lt/2]) cylinder(h=lt/2, r1=r, r2=r+(lt/2), $fn=30); } }