//see posting in mikrocontroller.net $fn=128; // accuracy of circles (number of facets) //pin location measurements //from photo: /*xf= -0.009291; xo=450;u0=-48;u1=-56;u2=126;u3=260;u4=450;//u1 should be -67 according to photos, but it makes walls too thin :(. u2 + 10 yf=-0.009291;yo=639;v1=259;v2=530;v3=625;v4=881;v5=1147; // v5 + 10 */ //from weller PDF vector graphics (https://media.digikey.com/pdf/Data%20Sheets/Cooper%20Tool%20All%20Brands%20PDFs/WX1_2_D2_A2_Man.pdf) - does not work but maybe because of slightly incorrect scaling, if this is the case then could be most accurate: /* xf= -0.5; xo=252.776;u0=242.989;u1=242.989;u2=245.990;u3=249.133;u4=252.776; yf=0.5; yo=405.662;v1=413.013;v2=408.140;v3=406.027;v4=402.068;v5=397.746; */ // from CMM optical measurement machine - close enough to work :). // Note that v3 is not measured directly as this location did not exist on my connector - is calculated from v5 and v4 assuming equal spacing. Some numbers are also an average of multiple readings/locations (e.g. v5). xf=1; xo=135.7;u0=140.437;u1=140.437;u2=138.952;u3=137.445;u4=135.7; yf=-1; yo=216.587;v1=213.037;v2=215.501;v3=216.35;v4=218.67;v5=220.9895; x0=(u0-xo)*xf; x1=(u1-xo)*xf; x2=(u2-xo)*xf; x3=(u3-xo)*xf; x4=(u4-xo)*xf; x5=-x3; x6=-x2; x7=-x1; x8=-x0; y1=(v1-yo)*yf; y2=(v2-yo)*yf; y3=(v3-yo)*yf; y4=(v4-yo)*yf; y5=(v5-yo)*yf; r1=13.4/2;//Nose r2=13.6/2;//Socket holder outside = round slot inside r3=15.5/2;//round slot outside r4=17.4/2;//bayonet web r5=18.2/2;//outer body r6=1.7/2;//hole size for contact pin at top z0=0; z1=1;//cable space *not used* z2=4;//start of the bottom of the round slot z3=5;//contact lock (not used yet) z4=13;//upper end of the contacts z5=13;//lower bayonet track z6=16;//upper bayonet track z7=17;//top edge // following dimensions are for the contacts I used (from a binder series 678 connector salvaged from a scrapped JBC station) // I have seen slightly different dimensions from other binder series 678 contacts - would suggest measurement before using my values! r7=2.4/2;//hole size for contacts at bottom *needs to be drilled out to 2.5mm after printing* z8=1;//height of lip to retain contacts z9=9;//height from top of contact to retaining feature (measured as 8.7). This is what I think can change with other binder contacts! w0=1;//contact retaining slot width h0=1.9;//contact retaining slot height at top (from centre of hole) h1=1.6;//contact retaining slot height at bottom (from centre of hole) //square base with holes for m3 base_xy=25;//x and y dims of base base_z=3;//base z height base_rad=3.2;//radius of base edges and holes base_circle=base_xy/2-base_rad;//radii offset difference(){ union(){ cylinder(z7,r5,r5);//Body //base with rounded corners translate([base_circle,base_circle,0])cylinder(base_z,base_rad,base_rad); translate([-base_circle,base_circle,0])cylinder(base_z,base_rad,base_rad); translate([base_circle,-base_circle,0])cylinder(base_z,base_rad,base_rad); translate([-base_circle,-base_circle,0])cylinder(base_z,base_rad,base_rad); translate([-base_circle,-base_xy/2,0])cube([base_circle*2,base_xy,base_z]); rotate(90)translate([-base_circle,-base_xy/2,0])cube([base_circle*2,base_xy,base_z]); } //holes in base (pitch of 18.6mm) translate([base_circle,base_circle,0])cylinder(base_z,base_rad/2,base_rad/2); translate([-base_circle,base_circle,0])cylinder(base_z,base_rad/2,base_rad/2); translate([base_circle,-base_circle,0])cylinder(base_z,base_rad/2,base_rad/2); translate([-base_circle,-base_circle,0])cylinder(base_z,base_rad/2,base_rad/2); difference(){union(){//upper bayonet translate([0,0,z5])cube([10,10,z6-z5]);//square of the bayonet path translate([-2,-10,z5])cube([4.0,20,10]);//both bayonet inputs } translate([0, 0,0])cylinder(20,r4,r4);//Body of the bayonet track translate([4,5.8,0])cylinder(20,2,2);//Rastnase snapping hill translate([10.2,-6,0])rotate(18)cube([9,9,20]);//statements square } rotate(180)difference(){union(){ //lower bayonet translate([0,0,z5])cube([10,10,z6-z5]);//square of the bayonet path // translate([-2,-10,11.1])cube([4.0,20,10]);//both bayonet inputs } translate([0, 0,0])cylinder(20,r4,r4);//Body of the bayonet track translate([4,5.8,0])cylinder(20,2,2);//Rastnase snapping hill translate([10.2,-6,0])rotate(18)cube([9,9,20]);//statements square } translate([ 0, 0,z4])cylinder(15,r2,r3);//Indentation inside (contact plane) difference(){ translate([0,0,4])cylinder(23,r3,r3);//round slot outside translate([0,0,1])cylinder(25,r2,r2);//round slot inside } translate ([0.0, r1-0.05, z2]) cylinder (z4-z2+1,1.1,1.1); // nose at pin 9 //note that un-used pins are removed here //holes for pins // translate([x2,y1,-1])cylinder(z7,r6,r6);//1 // translate([x4,y1,-1])cylinder(z7,r6,r6);//9 translate([x6,y1,-1])cylinder(z7,r6,r6);//8 // translate([x0,y2,-1])cylinder(z7,r6,r6);//2 translate([x8,y2,-1])cylinder(z7,r6,r6);//7 // translate([x3,y3,-1])cylinder(z7,r6,r6);//A // translate([x5,y3,-1])cylinder(z7,r6,r6);//C translate([x1,y4,-1])cylinder(z7,r6,r6);//3 translate([x4,y4,-1])cylinder(z7,r6,r6);//B translate([x7,y4,-1])cylinder(z7,r6,r6);//6 translate([x3,y5,-1])cylinder(z7,r6,r6);//4 translate([x5,y5,-1])cylinder(z7,r6,r6);//5 //larger holes for contacts // translate([x2,y1,-z8])cylinder(z4,r7,r7);//1 // translate([x4,y1,-z8])cylinder(z4,r7,r7);//9 translate([x6,y1,-z8])cylinder(z4,r7,r7);//8 // translate([x0,y2,-z8])cylinder(z4,r7,r7);//2 translate([x8,y2,-z8])cylinder(z4,r7,r7);//7 // translate([x3,y3,-z8])cylinder(z4,r7,r7);//A // translate([x5,y3,-z8])cylinder(z4,r7,r7);//C translate([x1,y4,-z8])cylinder(z4,r7,r7);//3 translate([x4,y4,-z8])cylinder(z4,r7,r7);//B translate([x7,y4,-z8])cylinder(z4,r7,r7);//6 translate([x3,y5,-z8])cylinder(z4,r7,r7);//4 translate([x5,y5,-z8])cylinder(z4,r7,r7);//5 //slots for contact retention (upper, wider) // translate([x2,y1,z4-(z8+z9)])rotate(45)translate([-w0/2,0,0])cube([w0,h0,z4]);//1 // translate([x4,y1,z4-(z8+z9)])rotate(180)translate([-w0/2,0,0])cube([w0,h0,z4]);//9 translate([x6,y1,z4-(z8+z9)])rotate(-90)translate([-w0/2,0,0])cube([w0,h0,z4]);//8 // translate([x0,y2,z4-(z8+z9)])rotate(140)translate([-w0/2,0,0])cube([w0,h0,z4]);//2 translate([x8,y2,z4-(z8+z9)])rotate(-90)translate([-w0/2,0,0])cube([w0,h0,z4]);//7 // translate([x3,y3,z4-(z8+z9)])rotate(0)translate([-w0/2,0,0])cube([w0,h0,z4]);//A // translate([x5,y3,z4-(z8+z9)])rotate(0)translate([-w0/2,0,0])cube([w0,h0,z4]);//C translate([x1,y4,z4-(z8+z9)])rotate(90)translate([-w0/2,0,0])cube([w0,h0,z4]);//3 translate([x4,y4,z4-(z8+z9)])rotate(0)translate([-w0/2,0,0])cube([w0,h0,z4]);//B translate([x7,y4,z4-(z8+z9)])rotate(-90)translate([-w0/2,0,0])cube([w0,h0,z4]);//6 translate([x3,y5,z4-(z8+z9)])rotate(270)translate([-w0/2,0,0])cube([w0,h0,z4]);//4 translate([x5,y5,z4-(z8+z9)])rotate(-270)translate([-w0/2,0,0])cube([w0,h0,z4]);//5 //slots for contact retention (lower, narrow) // translate([x2,y1,0])rotate(45)translate([-w0/2,0,0])cube([w0,h1,z4-z9]);//1 // translate([x4,y1,0])rotate(180)translate([-w0/2,0,0])cube([w0,h1,z4-z9]);//9 translate([x6,y1,0])rotate(-90)translate([-w0/2,0,0])cube([w0,h1,z4-z9]);//8 // translate([x0,y2,0])rotate(140)translate([-w0/2,0,0])cube([w0,h1,z4-z9]);//2 translate([x8,y2,0])rotate(-90)translate([-w0/2,0,0])cube([w0,h1,z4-z9]);//7 // translate([x3,y3,0])rotate(0)translate([-w0/2,0,0])cube([w0,h1,z4-z9]);//A // translate([x5,y3,0])rotate(0)translate([-w0/2,0,0])cube([w0,h1,z4-z9]);//C translate([x1,y4,0])rotate(90)translate([-w0/2,0,0])cube([w0,h1,z4-z9]);//3 translate([x4,y4,0])rotate(0)translate([-w0/2,0,0])cube([w0,h1,z4-z9]);//B translate([x7,y4,0])rotate(-90)translate([-w0/2,0,0])cube([w0,h1,z4-z9]);//6 translate([x3,y5,0])rotate(270)translate([-w0/2,0,0])cube([w0,h1,z4-z9]);//4 translate([x5,y5,0])rotate(-270)translate([-w0/2,0,0])cube([w0,h1,z4-z9]);//5 // translate([x5,y5,-5])text("1"); } // pin names not used /* translate([x2+0.3,y1-1.9,z4])linear_extrude(0.2)text("1",1); translate([x4-0.4,y1-1.9,z4])linear_extrude(0.2)text("9",1); translate([x6-0.9,y1-1.9,z4])linear_extrude(0.2)text("8",1); translate([x0+1.0,y2-0.9,z4])linear_extrude(0.2)text("2",1); translate([x8-1.8,y2-0.9,z4])linear_extrude(0.2)text("7",1); translate([x3+0.0,y3+1.0,z4])linear_extrude(0.2)text("A",1); translate([x5-0.6,y3+1.0,z4])linear_extrude(0.2)text("C",1); translate([x1+1.0,y4+0.2,z4])linear_extrude(0.2)text("3",1); translate([x4-0.4,y4+1.0,z4])linear_extrude(0.2)text("B",1); translate([x7-1.7,y4+0.2,z4])linear_extrude(0.2)text("6",1); translate([x3-0.2,y5+0.9,z4])linear_extrude(0.2)text("4",1); translate([x5-0.6,y5+0.9,z4])linear_extrude(0.2)text("5",1); */