134 lines
4.0 KiB
OpenSCAD
134 lines
4.0 KiB
OpenSCAD
|
// 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);
|
||
|
}
|
||
|
}
|