1//////////////////////////////////////////////////////////////////////
  2// LibFile: ball_bearings.scad
  3//   Models for standard ball bearing cartridges.
  4// Includes:
  5//   include <BOSL2/std.scad>
  6//   include <BOSL2/ball_bearings.scad>
  7// FileGroup: Parts
  8// FileSummary: Models for standard ball bearing cartridges.
  9//////////////////////////////////////////////////////////////////////
 10
 11
 12
 13// Section: Ball Bearing Models
 14
 15// Module: ball_bearing()
 16// Synopsis: Creates a standardized ball bearing assembly.
 17// SynTags: Geom
 18// Topics: Parts, Bearings
 19// See Also: linear_bearing(), lmXuu_bearing(), lmXuu_housing()
 20// Description:
 21//   Creates a model of a ball bearing assembly.
 22// Arguments:
 23//   trade_size = String name of a standard ball bearing trade size.  ie: "608", "6902ZZ", or "R8"
 24//   id = Inner diameter of ball bearing assembly.
 25//   od = Outer diameter of ball bearing assembly.
 26//   width = Width of ball bearing assembly.
 27//   anchor = Translate so anchor point is at origin (0,0,0).  See [anchor](attachments.scad#subsection-anchor).  Default: `CENTER`
 28//   spin = Rotate this many degrees around the Z axis after anchor.  See [spin](attachments.scad#subsection-spin).  Default: `0`
 29//   orient = Vector to rotate top towards, after spin.  See [orient](attachments.scad#subsection-orient).  Default: `UP`
 30// Example:
 31//   ball_bearing("608", $fn=72);
 32// Example:
 33//   ball_bearing("608ZZ", $fn=72);
 34// Example:
 35//   ball_bearing("R8", $fn=72);
 36// Example:
 37//   ball_bearing(id=12,od=32,width=10,shield=false, $fn=72);
 38module ball_bearing(trade_size, id, od, width, shield=true, anchor=CTR, spin=0, orient=UP) {
 39    info = is_undef(trade_size)? [id, od, width, shield] :
 40        ball_bearing_info(trade_size);
 41    check = assert(all_defined(info), "Bad Input");
 42    id = info[0];
 43    od = info[1];
 44    width = info[2];
 45    shield = info[3];
 46    mid_d = (id+od)/2;
 47    wall = (od-id)/2/3;
 48    color("silver")
 49    attachable(anchor,spin,orient, d=od, l=width) {
 50        if (shield) {
 51            tube(id=id, wall=wall, h=width);
 52            tube(od=od, wall=wall, h=width);
 53            tube(id=id+0.1, od=od-0.1, h=(wall*2+width)/2);
 54        } else {
 55            ball_cnt = floor(PI*mid_d*0.95 / (wall*2));
 56            difference() {
 57                union() {
 58                    tube(id=id, wall=wall, h=width);
 59                    tube(od=od, wall=wall, h=width);
 60                }
 61                torus(r_maj=mid_d/2, r_min=wall);
 62            }
 63            for (i=[0:1:ball_cnt-1]) {
 64                zrot(i*360/ball_cnt) right(mid_d/2) sphere(d=wall*2);
 65            }
 66        }
 67        children();
 68    }
 69}
 70
 71
 72
 73// Section: Ball Bearing Info
 74
 75
 76// Function: ball_bearing_info()
 77// Synopsis: Returns size info for a standardized ball bearing assembly.
 78// Topics: Parts, Bearings
 79// See Also: ball_bearing(), linear_bearing(), lmXuu_info()
 80// Description:
 81//   Get dimensional info for a standard metric ball bearing cartridge.
 82//   Returns `[SHAFT_DIAM, OUTER_DIAM, WIDTH, SHIELDED]` for the cylindrical cartridge.
 83// Arguments:
 84//   size = Inner diameter of lmXuu bearing, in mm.
 85function ball_bearing_info(trade_size) =
 86    assert(is_string(trade_size))
 87    let(
 88        IN = 25.4,
 89        data = [
 90            // trade_size, ID,     OD,      width,  shielded
 91            [      "R2",  1/8*IN,  3/8*IN,  5/32*IN, false],
 92            [      "R3", 3/16*IN,  1/2*IN,  5/32*IN, false],
 93            [      "R4",  1/4*IN,  5/8*IN, 0.196*IN, false],
 94            [      "R6",  3/8*IN,  7/8*IN,  7/32*IN, false],
 95            [      "R8",  1/2*IN,  9/8*IN,   1/4*IN, false],
 96            [     "R10",  5/8*IN, 11/8*IN,  9/32*IN, false],
 97            [     "R12",  3/4*IN, 13/8*IN,  5/16*IN, false],
 98            [     "R14",  7/8*IN, 15/8*IN,   3/8*IN, false],
 99            [     "R16",  8/8*IN, 16/8*IN,   3/8*IN, false],
100            [     "R18",  9/8*IN, 17/8*IN,   3/8*IN, false],
101            [     "R20", 10/8*IN, 18/8*IN,   3/8*IN, false],
102            [     "R22", 11/8*IN, 20/8*IN,  7/16*IN, false],
103            [     "R24", 12/8*IN, 21/8*IN,  7/16*IN, false],
104
105            [    "R2ZZ",  1/8*IN,  3/8*IN,  5/32*IN, true ],
106            [    "R3ZZ", 3/16*IN,  1/2*IN,  5/32*IN, true ],
107            [    "R4ZZ",  1/4*IN,  5/8*IN, 0.196*IN, true ],
108            [    "R6ZZ",  3/8*IN,  7/8*IN,  7/32*IN, true ],
109            [    "R8ZZ",  1/2*IN,  9/8*IN,   1/4*IN, true ],
110            [   "R10ZZ",  5/8*IN, 11/8*IN,  9/32*IN, true ],
111            [   "R12ZZ",  3/4*IN, 13/8*IN,  5/16*IN, true ],
112            [   "R14ZZ",  7/8*IN, 15/8*IN,   3/8*IN, true ],
113            [   "R16ZZ",  8/8*IN, 16/8*IN,   3/8*IN, true ],
114            [   "R18ZZ",  9/8*IN, 17/8*IN,   3/8*IN, true ],
115            [   "R20ZZ", 10/8*IN, 18/8*IN,   3/8*IN, true ],
116            [   "R22ZZ", 11/8*IN, 20/8*IN,  7/16*IN, true ],
117            [   "R24ZZ", 12/8*IN, 21/8*IN,  7/16*IN, true ],
118
119            [     "608",   8,  22,   7, false],
120            [     "629",   9,  26,   8, false],
121            [     "635",   5,  19,   6, false],
122            [    "6000",  10,  26,   8, false],
123            [    "6001",  12,  28,   8, false],
124            [    "6002",  15,  32,   9, false],
125            [    "6003",  17,  35,  10, false],
126            [    "6007",  35,  62,  14, false],
127            [    "6200",  10,  30,   9, false],
128            [    "6201",  12,  32,  10, false],
129            [    "6202",  15,  35,  11, false],
130            [    "6203",  17,  40,  12, false],
131            [    "6204",  20,  47,  14, false],
132            [    "6205",  25,  52,  15, false],
133            [    "6206",  30,  62,  16, false],
134            [    "6207",  35,  72,  17, false],
135            [    "6208",  40,  80,  18, false],
136            [    "6209",  45,  85,  19, false],
137            [    "6210",  50,  90,  20, false],
138            [    "6211",  55, 100,  21, false],
139            [    "6212",  60, 110,  22, false],
140            [    "6301",  12,  37,  12, false],
141            [    "6302",  15,  42,  13, false],
142            [    "6303",  17,  47,  14, false],
143            [    "6304",  20,  52,  15, false],
144            [    "6305",  25,  62,  17, false],
145            [    "6306",  30,  72,  19, false],
146            [    "6307",  35,  80,  21, false],
147            [    "6308",  40,  90,  23, false],
148            [    "6309",  45, 100,  25, false],
149            [    "6310",  50, 110,  27, false],
150            [    "6311",  55, 120,  29, false],
151            [    "6312",  60, 130,  31, false],
152            [    "6403",  17,  62,  17, false],
153            [    "6800",  10,  19,   5, false],
154            [    "6801",  12,  21,   5, false],
155            [    "6802",  15,  24,   5, false],
156            [    "6803",  17,  26,   5, false],
157            [    "6804",  20,  32,   7, false],
158            [    "6805",  25,  37,   7, false],
159            [    "6806",  30,  42,   7, false],
160            [    "6900",  10,  22,   6, false],
161            [    "6901",  12,  24,   6, false],
162            [    "6902",  15,  28,   7, false],
163            [    "6903",  17,  30,   7, false],
164            [    "6904",  20,  37,   9, false],
165            [    "6905",  25,  42,   9, false],
166            [    "6906",  30,  47,   9, false],
167            [    "6907",  35,  55,  10, false],
168            [    "6908",  40,  62,  12, false],
169            [   "16002",  15,  22,   8, false],
170            [   "16004",  20,  42,   8, false],
171            [   "16005",  25,  47,   8, false],
172            [   "16100",  10,  28,   8, false],
173            [   "16101",  12,  30,   8, false],
174
175            [   "608ZZ",   8,  22,   7, true ],
176            [   "629ZZ",   9,  26,   8, true ],
177            [   "635ZZ",   5,  19,   6, true ],
178            [  "6000ZZ",  10,  26,   8, true ],
179            [  "6001ZZ",  12,  28,   8, true ],
180            [  "6002ZZ",  15,  32,   9, true ],
181            [  "6003ZZ",  17,  35,  10, true ],
182            [  "6007ZZ",  35,  62,  14, true ],
183            [  "6200ZZ",  10,  30,   9, true ],
184            [  "6201ZZ",  12,  32,  10, true ],
185            [  "6202ZZ",  15,  35,  11, true ],
186            [  "6203ZZ",  17,  40,  12, true ],
187            [  "6204ZZ",  20,  47,  14, true ],
188            [  "6205ZZ",  25,  52,  15, true ],
189            [  "6206ZZ",  30,  62,  16, true ],
190            [  "6207ZZ",  35,  72,  17, true ],
191            [  "6208ZZ",  40,  80,  18, true ],
192            [  "6209ZZ",  45,  85,  19, true ],
193            [  "6210ZZ",  50,  90,  20, true ],
194            [  "6211ZZ",  55, 100,  21, true ],
195            [  "6212ZZ",  60, 110,  22, true ],
196            [  "6301ZZ",  12,  37,  12, true ],
197            [  "6302ZZ",  15,  42,  13, true ],
198            [  "6303ZZ",  17,  47,  14, true ],
199            [  "6304ZZ",  20,  52,  15, true ],
200            [  "6305ZZ",  25,  62,  17, true ],
201            [  "6306ZZ",  30,  72,  19, true ],
202            [  "6307ZZ",  35,  80,  21, true ],
203            [  "6308ZZ",  40,  90,  23, true ],
204            [  "6309ZZ",  45, 100,  25, true ],
205            [  "6310ZZ",  50, 110,  27, true ],
206            [  "6311ZZ",  55, 120,  29, true ],
207            [  "6312ZZ",  60, 130,  31, true ],
208            [  "6403ZZ",  17,  62,  17, true ],
209            [  "6800ZZ",  10,  19,   5, true ],
210            [  "6801ZZ",  12,  21,   5, true ],
211            [  "6802ZZ",  15,  24,   5, true ],
212            [  "6803ZZ",  17,  26,   5, true ],
213            [  "6804ZZ",  20,  32,   7, true ],
214            [  "6805ZZ",  25,  37,   7, true ],
215            [  "6806ZZ",  30,  42,   7, true ],
216            [  "6900ZZ",  10,  22,   6, true ],
217            [  "6901ZZ",  12,  24,   6, true ],
218            [  "6902ZZ",  15,  28,   7, true ],
219            [  "6903ZZ",  17,  30,   7, true ],
220            [  "6904ZZ",  20,  37,   9, true ],
221            [  "6905ZZ",  25,  42,   9, true ],
222            [  "6906ZZ",  30,  47,   9, true ],
223            [  "6907ZZ",  35,  55,  10, true ],
224            [  "6908ZZ",  40,  62,  12, true ],
225            [ "16002ZZ",  15,  22,   8, true ],
226            [ "16004ZZ",  20,  42,   8, true ],
227            [ "16005ZZ",  25,  47,   8, true ],
228            [ "16100ZZ",  10,  28,   8, true ],
229            [ "16101ZZ",  12,  30,   8, true ],
230        ],
231        found = search([trade_size], data, 1)[0]
232    )
233    assert(found!=[], str("Unsupported ball bearing trade size: ", trade_size))
234    select(data[found], 1, -1);
235
236
237
238// vim: expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap