diff --git a/libtest.png b/libtest.png index 8208a69..5936a50 100644 Binary files a/libtest.png and b/libtest.png differ diff --git a/libtest.scad b/libtest.scad index 7f70683..2a65f0e 100644 --- a/libtest.scad +++ b/libtest.scad @@ -117,17 +117,17 @@ cable_grommets_y = 0; translate([x5, cable_grommets_y]) cable_grommets(); -translate([x5, cable_grommets_y + 50]) - feet(); +translate([x5 + 80, cable_grommets_y]) + ribbon_clamps(); -translate([x5, cable_grommets_y + 75]) +translate([x5, cable_grommets_y + 60]) fixing_blocks(); -translate([x5, cable_grommets_y + 100]) +translate([x5, cable_grommets_y + 90]) corner_blocks(); translate([x5, cable_grommets_y + 150]) - ribbon_clamps(); + feet(); translate([x5 + 70, cable_grommets_y + 150]) screw_knobs(); diff --git a/printed/ribbon_clamp.scad b/printed/ribbon_clamp.scad index 115f699..37f104c 100644 --- a/printed/ribbon_clamp.scad +++ b/printed/ribbon_clamp.scad @@ -24,69 +24,72 @@ include <../core.scad> use <../vitamins/insert.scad> use <../vitamins/cable_strip.scad> -wall = 2; +wall = 1.6; min_wall = 2 * extrusion_width; screw = M3_cap_screw; -insert = screw_insert(screw); -screw_depth = insert_length(insert) + 1; -function ribbon_clamp_hole_pitch(ways) = ribbon_clamp_slot(ways) + 2 * min_wall + 2 * corrected_radius(insert_hole_radius(insert)); //! Hole pitch -function ribbon_clamp_width() = 2 * (insert_hole_radius(insert) + wall); //! Width -function ribbon_clamp_length(ways) = ribbon_clamp_hole_pitch(ways) + ribbon_clamp_width(); //! Length given ways -function ribbon_clamp_height() = screw_depth + 1; //! Height +function ribbon_clamp_screw_depth(screw = screw) = insert_length(screw_insert(screw)) + 1; +function ribbon_clamp_hole_pitch(ways, screw = screw) = + ribbon_clamp_slot(ways) + 2 * min_wall + 2 * corrected_radius(insert_hole_radius(screw_insert(screw))); //! Hole pitch -module ribbon_clamp_hole_positions(ways, side = undef) //! Place children at hole positions +function ribbon_clamp_width(screw = screw) = 2 * (insert_hole_radius(screw_insert(screw)) + wall); //! Width +function ribbon_clamp_length(ways, screw = screw) = ribbon_clamp_hole_pitch(ways, screw) + ribbon_clamp_width(screw); //! Length given ways +function ribbon_clamp_height(screw = screw) = ribbon_clamp_screw_depth(screw) + 1; //! Height + +module ribbon_clamp_hole_positions(ways, screw = screw, side = undef) //! Place children at hole positions for(x = is_undef(side) ? [-1, 1] : side) - translate([x * ribbon_clamp_hole_pitch(ways) / 2, 0]) + translate([x * ribbon_clamp_hole_pitch(ways, screw) / 2, 0]) children(); -module ribbon_clamp_holes(ways, h = 20) //! Drill screw holes - ribbon_clamp_hole_positions(ways) +module ribbon_clamp_holes(ways, h = 20, screw = screw) //! Drill screw holes + ribbon_clamp_hole_positions(ways, screw) drill(screw_clearance_radius(screw), h); -module ribbon_clamp(ways) { //! Generate STL for given number of ways - stl(str("ribbon_clamp_", ways)); +module ribbon_clamp(ways, screw = screw) { //! Generate STL for given number of ways + screw_d = screw_radius(screw) * 2; + stl(str("ribbon_clamp_", ways, screw_d != 3 ? str("_", screw_d) : "")); - pitch = ribbon_clamp_hole_pitch(ways); - d = ribbon_clamp_width(); - h = ribbon_clamp_height(); - t = h - ribbon_clamp_slot_depth() - wall; + pitch = ribbon_clamp_hole_pitch(ways, screw); + d = ribbon_clamp_width(screw); + h = ribbon_clamp_height(screw); + t = round_to_layer(ribbon_clamp_slot_depth() + wall); + insert = screw_insert(screw); difference() { union() { hull() { translate_z(h - t / 2) - cube([ribbon_clamp_hole_pitch(ways), d, t], center = true); + cube([ribbon_clamp_hole_pitch(ways, screw), d, t], center = true); translate_z(1) cube([pitch, max(wall, d - 2 * (h - t)), 2], center = true); } - ribbon_clamp_hole_positions(ways, -1) + ribbon_clamp_hole_positions(ways, screw, -1) cylinder(d = d, h = h); - ribbon_clamp_hole_positions(ways, 1) + ribbon_clamp_hole_positions(ways, screw, 1) cylinder(d = d, h = h); - } translate_z(h) cube([ribbon_clamp_slot(ways), d + 1, ribbon_clamp_slot_depth() * 2], center = true); - ribbon_clamp_hole_positions(ways) + ribbon_clamp_hole_positions(ways, screw) translate_z(h) rotate(22.5) - insert_hole(insert, screw_depth - insert_length(insert)); + insert_hole(insert, ribbon_clamp_screw_depth(screw) - insert_length(insert)); } } -module ribbon_clamp_assembly(ways) pose([55, 180, 25]) //! Printed part with inserts in place - assembly(str("ribbon_clamp_", ways)) { - h = ribbon_clamp_height(); +module ribbon_clamp_assembly(ways, screw) pose([55, 180, 25]) //! Printed part with inserts in place + assembly(let(screw_d = screw_radius(screw) * 2)str("ribbon_clamp_", ways, screw_d != 3 ? str("_", screw_d) : "")) { + h = ribbon_clamp_height(screw); + insert = screw_insert(screw); stl_colour(pp1_colour) render() - translate_z(h) vflip() ribbon_clamp(ways); + translate_z(h) vflip() ribbon_clamp(ways, screw); - ribbon_clamp_hole_positions(ways) + ribbon_clamp_hole_positions(ways, screw) vflip() insert(insert); } @@ -99,20 +102,24 @@ module ribbon_clamp_fastened_assembly(ways, thickness, screw = screw) { //! Clam vitamin(str(": Tape self amalgamating silicone ",tape_l," x 25mm")); washer = screw_washer(screw); - screw_length = screw_shorter_than(2 * washer_thickness(washer) + thickness + screw_depth); + screw_length = screw_shorter_than(2 * washer_thickness(washer) + thickness + ribbon_clamp_screw_depth(screw)); - ribbon_clamp_assembly(ways); + ribbon_clamp_assembly(ways, screw); color("red") translate_z(tape_thickness / 2) cube([tape_l, tape_width, tape_thickness], center = true); - ribbon_clamp_hole_positions(ways) + ribbon_clamp_hole_positions(ways, screw) vflip() translate_z(thickness) screw_and_washer(screw, screw_length, true); } module ribbon_clamp_20_stl() ribbon_clamp(20); +module ribbon_clamp_8_2_stl() ribbon_clamp(8, M2_dome_screw); //! * Place inserts into the holes and press home with a soldering iron with a conical bit heated to 200°C. module ribbon_clamp_20_assembly() ribbon_clamp_assembly(20); + +//! * Place inserts into the holes and press home with a soldering iron with a conical bit heated to 200°C. +module ribbon_clamp_8_2_assembly() ribbon_clamp_assembly(8, M2_dome_screw); diff --git a/readme.md b/readme.md index 98beca9..a1a33b8 100644 --- a/readme.md +++ b/readme.md @@ -4949,41 +4949,48 @@ Clamp for ribbon cable and polypropylene strip. ### Functions | Function | Description | |:--- |:--- | -| ```ribbon_clamp_height()``` | Height | -| ```ribbon_clamp_hole_pitch(ways)``` | Hole pitch | -| ```ribbon_clamp_length(ways)``` | Length given ways | -| ```ribbon_clamp_width()``` | Width | +| ```ribbon_clamp_height(screw = screw)``` | Height | +| ```ribbon_clamp_length(ways, screw = screw)``` | Length given ways | +| ```ribbon_clamp_width(screw = screw)``` | Width | ### Modules | Module | Description | |:--- |:--- | -| ```ribbon_clamp(ways)``` | Generate STL for given number of ways | -| ```ribbon_clamp_assembly(ways)``` | Printed part with inserts in place | +| ```ribbon_clamp(ways, screw = screw)``` | Generate STL for given number of ways | +| ```ribbon_clamp_assembly(ways, screw)``` | Printed part with inserts in place | | ```ribbon_clamp_fastened_assembly(ways, thickness, screw = screw)``` | Clamp with fasteners in place | -| ```ribbon_clamp_hole_positions(ways, side = undef)``` | Place children at hole positions | -| ```ribbon_clamp_holes(ways, h = 20)``` | Drill screw holes | +| ```ribbon_clamp_hole_positions(ways, screw = screw, side = undef)``` | Place children at hole positions | +| ```ribbon_clamp_holes(ways, h = 20, screw = screw)``` | Drill screw holes | ![ribbon_clamp](tests/png/ribbon_clamp.png) ### Vitamins | Qty | Module call | BOM entry | | ---:|:--- |:---| +| 2 | ```insert(F1BM2)``` | Heatfit insert M2 | | 2 | ```insert(F1BM3)``` | Heatfit insert M3 | | 1 | | Ribbon cable 20 way 100mm | +| 1 | | Ribbon cable 8 way 100mm | +| 2 | ```screw(M2_dome_screw, 8)``` | Screw M2 dome x 8mm | | 2 | ```screw(M3_cap_screw, 10)``` | Screw M3 cap x 10mm | +| 1 | | Tape self amalgamating silicone 11 x 25mm | | 1 | | Tape self amalgamating silicone 26 x 25mm | +| 2 | ```washer(M2_washer)``` | Washer M2 x 5mm x 0.3mm | | 2 | ```washer(M3_washer)``` | Washer M3 x 7mm x 0.5mm | +| 2 | ```star_washer(M2_washer)``` | Washer star M2 x 0.3mm | | 2 | ```star_washer(M3_washer)``` | Washer star M3 x 0.5mm | ### Printed | Qty | Filename | | ---:|:--- | | 1 | ribbon_clamp_20.stl | +| 1 | ribbon_clamp_8_2.stl | ### Assemblies | Qty | Name | | ---:|:--- | | 1 | ribbon_clamp_20_assembly | +| 1 | ribbon_clamp_8_2_assembly | Top diff --git a/tests/foot.scad b/tests/foot.scad index ce28053..2d262ce 100644 --- a/tests/foot.scad +++ b/tests/foot.scad @@ -21,14 +21,14 @@ use <../printed/foot.scad> module feet() if($preview) { - translate([50, 0]) + translate([40, 0]) foot_assembly(3); translate([foot_diameter(insert_foot()) / 2, 0]) fastened_insert_foot_assembly(3); } else { - translate([50, 0]) + translate([40, 0]) foot(); insert_foot(); diff --git a/tests/png/foot.png b/tests/png/foot.png index 99594ac..5c328e1 100644 Binary files a/tests/png/foot.png and b/tests/png/foot.png differ diff --git a/tests/png/ribbon_clamp.png b/tests/png/ribbon_clamp.png index f2c5391..6b5a800 100644 Binary files a/tests/png/ribbon_clamp.png and b/tests/png/ribbon_clamp.png differ diff --git a/tests/ribbon_clamp.scad b/tests/ribbon_clamp.scad index dfaf218..f73cf2a 100644 --- a/tests/ribbon_clamp.scad +++ b/tests/ribbon_clamp.scad @@ -16,20 +16,22 @@ // You should have received a copy of the GNU General Public License along with NopSCADlib. // If not, see . // -include <../utils/core/core.scad> +include <../core.scad> use <../printed/ribbon_clamp.scad> use <../vitamins/wire.scad> -ways = 20; +ways = [8, 20]; +screws = [M2_dome_screw, M3_cap_screw]; module ribbon_clamps() - translate([ribbon_clamp_length(ways) / 2, 0]) - if($preview) { - ribbon_clamp_fastened_assembly(ways, 3); + for(i = [0 : len(screws) - 1]) + translate([ribbon_clamp_length(ways[i]) / 2, i * 30]) + if($preview) { + ribbon_clamp_fastened_assembly(ways[i], 3, screws[i]); - ribbon_cable(ways, 100); - } - else - ribbon_clamp(ways); + ribbon_cable(ways[i], 100); + } + else + ribbon_clamp(ways[i], screws[i]); ribbon_clamps();