X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=cable-splice-clamp.scad;h=f71c848756b259723e6fcb078acf912114ec9a5f;hp=7533bcdf9ff4626741427e26bd6349948963a355;hb=6371b5cb46cde0d570f2283d800d0c674e265873;hpb=a0ece72c445d38570668fc4f5319b44c96c4336f diff --git a/cable-splice-clamp.scad b/cable-splice-clamp.scad index 7533bcd..f71c848 100644 --- a/cable-splice-clamp.scad +++ b/cable-splice-clamp.scad @@ -1,91 +1,138 @@ // -*- C -*- -cable_maxdia = 12; -cable_mindia = 6; -strap_width = 4 + 0.5; -total_len = 70; +include -wallmin = 1.5; +rnom = 3.5 / 2; -strap_count = 2; +// alpha is slope angle, which is half of inner concave angle that +// wire sits in +alpha = 40; // degrees -strap_wall_h = 1.5; -strap_wall_l = 2.0; +// mu is minimum number of cable radii that cable tangent point (line) +// with splint ought to be away from edge of split +mu = 1/4; -delta_ellipse = 0.45; +// wall thickness, and base width as fraction of cable size +wall_r = 2.5 / 6.5; +base_r = 0.75; -// calculated +total_len = 60; -delta_shift = 1 - delta_ellipse; +strap_width = 3.0 + 0.5; -roundoff_rad = cable_maxdia/2 * sqrt(delta_shift) - + cable_mindia/2 * (1-sqrt(delta_shift)); +strap_count = 4; -outerdia = 2*(roundoff_rad / cos(30) + wallmin); +// for cross-section calculations: +// +// origin O is at intersection of straight line segments forming walls +// C is centre of circle (wire x-section) (of radius r or radius 1) +// which is tangent to lines +// T is said tangent points +// B is inner base point, which is extension of line from B by mu*r -delta_shift_gap = (cable_maxdia-cable_mindia) * delta_shift; +sina = sin(alpha); +cosa = cos(alpha); +tana = sina/cosa; -module CrossSection(plus=0) { +// blah_r is blah where r=1 +// d_AB is distance AB +// dy_AB is " " " vertical component + +d_OT_r = tana; +d_OB_r = tana + mu; + +d_OC_r = 1/cosa; + +dy_OB_r = d_OB_r * sina; + +// *0 and *1 relate to smallest and largest wire +// r[01] is radius +// r10 is radius ratio + +r10 = d_OC_r / dy_OB_r; + +r0 = rnom / sqrt(r10); +r1 = rnom * sqrt(r10); + +x_B_r = d_OB_r * cosa; +y_B_r = -dy_OB_r; + +x_T_r = sina; +y_T_r = -tana * sina; + +wall_x_r = wall_r / tan(90-alpha); + +top = wall_r * r1 - (d_OC_r - 1) * r0; +basew = base_r * rnom; + +echo("dias", r0*2, r1*2, "ratio",r1/r0); + +module CrossSectionHalf(plus=0) { difference(){ - for (dx = [-plus, 0, plus]) - translate([dx, 0]) - circle(r= outerdia/2, $fn=6); - - intersection(){ - scale([cable_maxdia, - cable_maxdia * delta_shift + cable_mindia * delta_ellipse]) - circle(r= sqrt(0.5) * delta_shift + 0.5 * delta_ellipse, $fn=4); - circle(r= roundoff_rad, $fn=20); - } + polygon([[-0.1, y_T_r * r0], + [x_T_r * r0, y_T_r * r0], + [x_B_r * r1, y_B_r * r1], + [x_B_r * r1 + wall_x_r * rnom + plus, y_B_r * r1], + [basew + plus, top], + [-0.1, top]]); + translate([0, -d_OC_r * r0]) + circle(r = r0); + } +} - square(center=true, [40, delta_shift_gap]); +module CrossSection(plus=0) { + for (m=[0,1]) { + mirror([m,0]) + CrossSectionHalf(plus); } } module CrossSectionDemo(){ ////toplevel - color("blue"){ - translate([0, delta_shift_gap/2, 0]){ - difference(){ - circle(r = cable_maxdia/2, $fn=20); - circle(r = cable_mindia/2, $fn=20); - } - } + color("black") CrossSection(2); + CrossSection(); + for (rc=[["red", r1], + ["blue",r0]]) { + color(rc[0]) translate([0, -d_OC_r * rc[1]]) circle(r = rc[1]); } - - linear_extrude(height=20) - CrossSection(0); - - color("red") - linear_extrude(height=1) - CrossSection(2); } -module CompleteClamp(){ ////toplevel - linear_extrude(height=total_len) - CrossSection(); - - for (i=[0 : strap_count]){ - if (i*2 != strap_count) { - translate([0, 0, - total_len * (i + 0.5) / (strap_count + 1)]) - for (m=[0,1]){ - mirror([0,0,m]) - translate([0,0, strap_width/2]) - linear_extrude(height=strap_wall_l) - CrossSection(strap_wall_h); +strap_wall_h = 1.5; +strap_wall_l = 2.0; + +writing_dx = total_len / 3; +writing_dy = basew*2; + +module HalfClamp(){ ////toplevel + difference(){ + rotate([90,0,0])rotate([0,90,0]){ + linear_extrude(height=total_len) + CrossSection(); + + for (i=[0 : strap_count]){ + if (i*2 != strap_count) { + translate([0, 0, + total_len * (i + 0.5) / (strap_count + 1)]) + for (m=[0,1]){ + mirror([0,0,m]) + translate([0,0, strap_width/2]) + linear_extrude(height=strap_wall_l) + CrossSection(strap_wall_h); + } } + } } + + translate([0, -basew, top]) + Commitid_BestCount([writing_dx, writing_dy]); } } -module HalfPrint(){ ////toplevel - intersection(){ - rotate([-90,0,-90]) - CompleteClamp(); - translate([-100,-100,0]) cube([1000,200,200]); - } +module HalfClampPrint(){ ////toplevel + rotate([180,0,0]) + HalfClamp(); } +//CrossSection(); //CrossSectionDemo(); -//CompleteClamp(); -HalfPrint(); +//HalfClamp(); +HalfClampPrint();