From b07a8ad24557f57e2df08f700d1912d63598501f Mon Sep 17 00:00:00 2001 From: Martin Budden Date: Sun, 16 Feb 2020 14:02:23 +0000 Subject: [PATCH] Added SCS bearing blocks, SCSnUU and SCSnLUU variants --- tests/scs_bearing_blocks.scad | 35 ++++++++ vitamins/scs_bearing_block.scad | 147 +++++++++++++++++++++++++++++++ vitamins/scs_bearing_blocks.scad | 45 ++++++++++ 3 files changed, 227 insertions(+) create mode 100644 tests/scs_bearing_blocks.scad create mode 100644 vitamins/scs_bearing_block.scad create mode 100644 vitamins/scs_bearing_blocks.scad diff --git a/tests/scs_bearing_blocks.scad b/tests/scs_bearing_blocks.scad new file mode 100644 index 0000000..4433c42 --- /dev/null +++ b/tests/scs_bearing_blocks.scad @@ -0,0 +1,35 @@ +// +// NopSCADlib Copyright Chris Palmer 2018 +// nop.head@gmail.com +// hydraraptor.blogspot.com +// +// This file is part of NopSCADlib. +// +// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the +// GNU General Public License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along with NopSCADlib. +// If not, see . +// +include <../core.scad> +use <../utils/layout.scad> + +include <../vitamins/scs_bearing_blocks.scad> + +module scs_bearing_blocks() + layout([for(s = scs_bearing_blocks) 2 * scs_size(s)[0]]) { + scs_bearing_block_assembly(scs_bearing_blocks[$i]); + + if($i > 0) // skip $i==0, since no SCS6LUU long variant to match SCS6UU + translate([0, 60]) + scs_bearing_block_assembly(scs_bearing_blocks_long[$i - 1]); + } + +if($preview) + scs_bearing_blocks(); + diff --git a/vitamins/scs_bearing_block.scad b/vitamins/scs_bearing_block.scad new file mode 100644 index 0000000..e225b83 --- /dev/null +++ b/vitamins/scs_bearing_block.scad @@ -0,0 +1,147 @@ +// +// NopSCADlib Copyright Chris Palmer 2018 +// nop.head@gmail.com +// hydraraptor.blogspot.com +// +// This file is part of NopSCADlib. +// +// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the +// GNU General Public License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along with NopSCADlib. +// If not, see . +// + +// +// SCSnUU and SCSnLUU bearing blocks +// + + +include +include +include + +function scs_size(type) = [type[4],type[6],type[5]]; //! Size of scs bracket bounding block +function scs_hole_offset(type) = type[2]; //! Offset of bearing hole from base of block +function scs_block_center_height(type) = type[6]; //! Height of the center of the block +function scs_block_side_height(type) = type[7]; //! Height of the side of the block, this determines the minimum screw length +function scs_screw(type) = type[11]; //! Screw type +function scs_screw_separation_x(type) = type[8]; //! Screw separation in X direction +function scs_screw_separation_z(type) = type[9]; //! Screw separation in Z direction +function scs_bearing(type) = type[14]; //! Linear bearing used + + +sks_bearing_block_color = grey90; + +module scs_bearing_block(type) { //! Draw the specified SCS bearing block + vitamin(str("scs_bearing_block(", type[0], "): ", type[0], " bearing block")); + + T = type[1]; + h = type[2]; + E = type[3]; + W = type[4]; + assert(W == 2 * E, str("W or E wrong for scs_bearing_block", type[0])); + L = type[5]; + F = type[6]; + G = type[7]; + B = type[8]; + C = type[9]; + K = type[10]; + S1 = type[11]; + S2 = type[12]; + L1 = type[13]; + + module right_trapezoid(base, top, height, h = 0, center = true) {//! A right angled trapezoid with the 90° corner at the origin. 3D when ```h``` is nonzero, otherwise 2D + extrude_if(h, center = center) + polygon(points = [ [0,0], [base, 0], [top, height], [0, height] ]); + } + + boltHoleRadius = screw_clearance_radius(S1); + footHeight = min(0.75, (G - bearing_dia(scs_bearing(type)) - 1.5) / 2); // estimate, not specified on drawings + + color(sks_bearing_block_color) { + linear_extrude(L, center = true) { + bearingRadius = bearing_dia(scs_bearing(type)) / 2; + // center section with bearing hole + difference() { + union() { + translate([-(B - 2 * boltHoleRadius) / 2, -h + footHeight]) + square([B - 2 * boltHoleRadius, G - footHeight]); + for(m = [0, 1]) + mirror([m, 0, 0]) + translate([0 , G - h]) + right_trapezoid(bearingRadius, bearingRadius -F + G, F - G); + } + circle(r = bearingRadius); + } + // add the sides + for(m = [0, 1]) + mirror([m, 0, 0]) { + trapezoidX = boltHoleRadius - 0.5; // estimate, not specified on drawings + sideX = 2 * (K - boltHoleRadius - trapezoidX); + chamfer = 0.5; + assert(sideX > chamfer, "trapezoidX too large in scs_bearing_block"); + translate([B / 2 + boltHoleRadius, -h]) { + square([sideX - chamfer, G]); + translate([sideX, 0]) + rotate(90) + right_trapezoid(G - chamfer, G, chamfer); + translate([sideX, 0]) { + right_trapezoid(trapezoidX - footHeight, trapezoidX, footHeight); + translate([trapezoidX, footHeight]) + rotate(90) + right_trapezoid(T - footHeight, L1 - footHeight, trapezoidX); + } + } + translate([B / 2 - boltHoleRadius, -h]) + mirror([1, 0, 0]) + right_trapezoid(boltHoleRadius, boltHoleRadius + footHeight, footHeight); + } + } + // side blocks with bolt holes + for(x = [-B / 2, B / 2]) + translate([x, G / 2 - h, 0]) + rotate([90, 0, 0]) + linear_extrude(G, center = true) + difference() { + square([boltHoleRadius * 2, L], center = true); + for (y = [-C / 2, C / 2]) + translate([0, y]) + circle(r = boltHoleRadius); + } + } + not_on_bom() no_explode() + linear_bearing(scs_bearing(type)); +} + + +module scs_bearing_block_assembly(type, screw_length, screw_type) { //! Assembly with screws and nuts in place + + scs_bearing_block(type); + + G = scs_block_side_height(type); + h = scs_hole_offset(type); + + screw_type = screw_type ? screw_type : scs_screw(type); + screw_length = screw_length ? screw_length : screw_longer_than(G + 10); + washer_type = screw_washer(screw_type); + washer_thickness = washer_thickness(washer_type); + + screw_separation_x = scs_screw_separation_x(type); + screw_separation_z = scs_screw_separation_z(type); + + for(x = [-screw_separation_x, screw_separation_x], z = [-screw_separation_z, screw_separation_z]) + translate([x / 2, G - h, z / 2]) + rotate([-90, 0, 0]) { + screw(screw_type, screw_length); + translate_z(-screw_length + washer_thickness) + nut(screw_nut(screw_type)) + washer(washer_type); + } +} + diff --git a/vitamins/scs_bearing_blocks.scad b/vitamins/scs_bearing_blocks.scad new file mode 100644 index 0000000..ad01589 --- /dev/null +++ b/vitamins/scs_bearing_blocks.scad @@ -0,0 +1,45 @@ +// +// NopSCADlib Copyright Chris Palmer 2018 +// nop.head@gmail.com +// hydraraptor.blogspot.com +// +// This file is part of NopSCADlib. +// +// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the +// GNU General Public License as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along with NopSCADlib. +// If not, see . +// + +// +// SCS bearing blocks +// + +include +include +include + +// T h E W L F G B C K S1 S2 L1 LB +SCS6UU = ["SCS6UU", 6, 9, 15, 30, 25, 18, 15, 20, 15, 5, M4_cap_screw, 3.4, 8, LM6UU]; +SCS8UU = ["SCS8UU", 6, 11, 17, 34, 30, 22, 18, 24, 18, 5, M4_cap_screw, 3.4, 8, LM8UU]; +SCS10UU = ["SCS10UU", 8, 13, 20, 40, 35, 26, 21, 28, 21, 6, M5_cap_screw, 4.3, 12, LM10UU]; +SCS12UU = ["SCS12UU", 8, 15, 21, 42, 36, 28, 24, 30.5, 26, 5.75, M5_cap_screw, 4.3, 12, LM12UU]; +SCS16UU = ["SCS16UU", 9, 19, 25, 50, 44, 38.5, 32.5, 36, 34, 7, M5_cap_screw, 4.3, 12, LM16UU]; + +SCS8LUU = ["SCS8LUU", 6, 11, 17, 34, 58, 22, 18, 24, 42, 5, M4_cap_screw, 3.4, 8, LM8LUU]; +SCS10LUU = ["SCS10LUU", 8, 13, 20, 40, 68, 26, 21, 28, 45, 6, M5_cap_screw, 4.3, 12, LM10LUU]; +SCS12LUU = ["SCS12LUU", 8, 15, 21, 42, 70, 28, 24, 30.5, 50, 5.75, M5_cap_screw, 4.3, 12, LM12LUU]; +SCS16LUU = ["SCS16LUU", 9, 19, 25, 50, 85, 38.5, 32.5, 36, 60, 7, M5_cap_screw, 4.3, 12, LM16LUU]; + + +scs_bearing_blocks = [SCS6UU, SCS8UU, SCS10UU, SCS12UU, SCS16UU]; +scs_bearing_blocks_long = [SCS8LUU, SCS10LUU, SCS12LUU, SCS16LUU]; + +use +