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//   shield = Does the ball bearing assembly have a shield.
 28//   flange = Does the ball bearing assembly have a flange.
 29//   fd = Diameter of the flange (only used if `flange=true`).
 30//   fw = Width of the flange (only used if `flange=true`).
 31//   anchor = Translate so anchor point is at origin (0,0,0).  See [anchor](attachments.scad#subsection-anchor).  Default: `CENTER`
 32//   spin = Rotate this many degrees around the Z axis after anchor.  See [spin](attachments.scad#subsection-spin).  Default: `0`
 33//   orient = Vector to rotate top towards, after spin.  See [orient](attachments.scad#subsection-orient).  Default: `UP`
 34// Example:
 35//   ball_bearing("608", $fn=72);
 36// Example:
 37//   ball_bearing("608ZZ", $fn=72);
 38// Example:
 39//   ball_bearing("R8", $fn=72);
 40// Example:
 41//   ball_bearing(id=12,od=32,width=10,shield=false, $fn=72);
 42// Example:
 43//   ball_bearing("MF105ZZ", $fn=72);
 44// Example:
 45//   ball_bearing("F688ZZ", $fn=72);
 46// Example:
 47//   ball_bearing(id=12,od=24,width=6,shield=true, flange=true, fd=26.5, fw=1.5, $fn=72);
 48module ball_bearing(trade_size, id, od, width, shield=true, flange=false, fd, fw, anchor=CTR, spin=0, orient=UP) {
 49    info = is_undef(trade_size)? [id, od, width, shield, flange, fd, fw] :
 50        ball_bearing_info(trade_size);
 51    check = assert(all_defined(select(info, 0,4)), "Bad Input");
 52    if(flange){
 53        assert(!is_undef(fd), "If flange is set you must specify it's diameter");
 54        assert(!is_undef(fw), "If flange is set you must specify it's width");
 55    }
 56    id = info[0];
 57    od = info[1];
 58    width = info[2];
 59    shield = info[3];
 60    flange = info[4];
 61    fd = info[5];
 62    fw = info[6];
 63    mid_d = (id+od)/2;
 64    wall = (od-id)/2/3;
 65    color("silver")
 66    attachable(anchor,spin,orient, d=od, l=width) {
 67        if (shield) {
 68            tube(id=id, wall=wall, h=width);
 69            tube(od=od, wall=wall, h=width);
 70            tube(id=id+0.1, od=od-0.1, h=(wall*2+width)/2);
 71            if (flange){
 72                translate([0,0,-width/2+fw/2])tube(id=od, od=fd, h=fw);
 73            }
 74        } else {
 75            ball_cnt = floor(PI*mid_d*0.95 / (wall*2));
 76            difference() {
 77                union() {
 78                    tube(id=id, wall=wall, h=width);
 79                    tube(od=od, wall=wall, h=width);
 80                }
 81                torus(r_maj=mid_d/2, r_min=wall);
 82            }
 83            for (i=[0:1:ball_cnt-1]) {
 84                zrot(i*360/ball_cnt) right(mid_d/2) sphere(d=wall*2);
 85            }
 86            if (flange){
 87                translate([0,0,-width/2+fw/2])tube(id=od, od=fd, h=fw);
 88            }
 89        }
 90
 91
 92        children();
 93    }
 94}
 95
 96
 97
 98// Section: Ball Bearing Info
 99
100
101// Function: ball_bearing_info()
102// Synopsis: Returns size info for a standardized ball bearing assembly.
103// Topics: Parts, Bearings
104// See Also: ball_bearing(), linear_bearing(), lmXuu_info()
105// Description:
106//   Get dimensional info for a standard metric ball bearing cartridge.
107//   Returns `[SHAFT_DIAM, OUTER_DIAM, WIDTH, SHIELDED, FLANGED, FLANGE_DIAM, FLANGE_WIDTH]` for the cylindrical cartridge.
108// Arguments:
109//   size = Inner diameter of lmXuu bearing, in mm.
110function ball_bearing_info(trade_size) =
111    assert(is_string(trade_size))
112    let(
113        IN = 25.4,
114        data = [
115            // trade_size, ID,     OD,      width,  shielded, flanged, fd, fw 
116            [      "R2",  1/8*IN,  3/8*IN,  5/32*IN, false,   false,   0,  0 ],
117            [      "R3", 3/16*IN,  1/2*IN,  5/32*IN, false,   false,   0,  0 ],
118            [      "R4",  1/4*IN,  5/8*IN, 0.196*IN, false,   false,   0,  0 ],
119            [      "R6",  3/8*IN,  7/8*IN,  7/32*IN, false,   false,   0,  0 ],
120            [      "R8",  1/2*IN,  9/8*IN,   1/4*IN, false,   false,   0,  0 ],
121            [     "R10",  5/8*IN, 11/8*IN,  9/32*IN, false,   false,   0,  0 ],
122            [     "R12",  3/4*IN, 13/8*IN,  5/16*IN, false,   false,   0,  0 ],
123            [     "R14",  7/8*IN, 15/8*IN,   3/8*IN, false,   false,   0,  0 ],
124            [     "R16",  8/8*IN, 16/8*IN,   3/8*IN, false,   false,   0,  0 ],
125            [     "R18",  9/8*IN, 17/8*IN,   3/8*IN, false,   false,   0,  0 ],
126            [     "R20", 10/8*IN, 18/8*IN,   3/8*IN, false,   false,   0,  0 ],
127            [     "R22", 11/8*IN, 20/8*IN,  7/16*IN, false,   false,   0,  0 ],
128            [     "R24", 12/8*IN, 21/8*IN,  7/16*IN, false,   false,   0,  0 ],
129
130            [    "R2ZZ",  1/8*IN,  3/8*IN,  5/32*IN, true,    false,   0,  0  ],
131            [    "R3ZZ", 3/16*IN,  1/2*IN,  5/32*IN, true,    false,   0,  0  ],
132            [    "R4ZZ",  1/4*IN,  5/8*IN, 0.196*IN, true,    false,   0,  0  ],
133            [    "R6ZZ",  3/8*IN,  7/8*IN,  7/32*IN, true,    false,   0,  0  ],
134            [    "R8ZZ",  1/2*IN,  9/8*IN,   1/4*IN, true,    false,   0,  0  ],
135            [   "R10ZZ",  5/8*IN, 11/8*IN,  9/32*IN, true,    false,   0,  0  ],
136            [   "R12ZZ",  3/4*IN, 13/8*IN,  5/16*IN, true,    false,   0,  0  ],
137            [   "R14ZZ",  7/8*IN, 15/8*IN,   3/8*IN, true,    false,   0,  0  ],
138            [   "R16ZZ",  8/8*IN, 16/8*IN,   3/8*IN, true,    false,   0,  0  ],
139            [   "R18ZZ",  9/8*IN, 17/8*IN,   3/8*IN, true,    false,   0,  0  ],
140            [   "R20ZZ", 10/8*IN, 18/8*IN,   3/8*IN, true,    false,   0,  0  ],
141            [   "R22ZZ", 11/8*IN, 20/8*IN,  7/16*IN, true,    false,   0,  0  ],
142            [   "R24ZZ", 12/8*IN, 21/8*IN,  7/16*IN, true,    false,   0,  0  ],
143
144            [     "608",   8,  22,   7, false, false, 0, 0 ],
145            [     "629",   9,  26,   8, false, false, 0, 0 ],
146            [     "635",   5,  19,   6, false, false, 0, 0 ],
147            [    "6000",  10,  26,   8, false, false, 0, 0 ],
148            [    "6001",  12,  28,   8, false, false, 0, 0 ],
149            [    "6002",  15,  32,   9, false, false, 0, 0 ],
150            [    "6003",  17,  35,  10, false, false, 0, 0 ],
151            [    "6007",  35,  62,  14, false, false, 0, 0 ],
152            [    "6200",  10,  30,   9, false, false, 0, 0 ],
153            [    "6201",  12,  32,  10, false, false, 0, 0 ],
154            [    "6202",  15,  35,  11, false, false, 0, 0 ],
155            [    "6203",  17,  40,  12, false, false, 0, 0 ],
156            [    "6204",  20,  47,  14, false, false, 0, 0 ],
157            [    "6205",  25,  52,  15, false, false, 0, 0 ],
158            [    "6206",  30,  62,  16, false, false, 0, 0 ],
159            [    "6207",  35,  72,  17, false, false, 0, 0 ],
160            [    "6208",  40,  80,  18, false, false, 0, 0 ],
161            [    "6209",  45,  85,  19, false, false, 0, 0 ],
162            [    "6210",  50,  90,  20, false, false, 0, 0 ],
163            [    "6211",  55, 100,  21, false, false, 0, 0 ],
164            [    "6212",  60, 110,  22, false, false, 0, 0 ],
165            [    "6301",  12,  37,  12, false, false, 0, 0 ],
166            [    "6302",  15,  42,  13, false, false, 0, 0 ],
167            [    "6303",  17,  47,  14, false, false, 0, 0 ],
168            [    "6304",  20,  52,  15, false, false, 0, 0 ],
169            [    "6305",  25,  62,  17, false, false, 0, 0 ],
170            [    "6306",  30,  72,  19, false, false, 0, 0 ],
171            [    "6307",  35,  80,  21, false, false, 0, 0 ],
172            [    "6308",  40,  90,  23, false, false, 0, 0 ],
173            [    "6309",  45, 100,  25, false, false, 0, 0 ],
174            [    "6310",  50, 110,  27, false, false, 0, 0 ],
175            [    "6311",  55, 120,  29, false, false, 0, 0 ],
176            [    "6312",  60, 130,  31, false, false, 0, 0 ],
177            [    "6403",  17,  62,  17, false, false, 0, 0 ],
178            [    "6800",  10,  19,   5, false, false, 0, 0 ],
179            [    "6801",  12,  21,   5, false, false, 0, 0 ],
180            [    "6802",  15,  24,   5, false, false, 0, 0 ],
181            [    "6803",  17,  26,   5, false, false, 0, 0 ],
182            [    "6804",  20,  32,   7, false, false, 0, 0 ],
183            [    "6805",  25,  37,   7, false, false, 0, 0 ],
184            [    "6806",  30,  42,   7, false, false, 0, 0 ],
185            [    "6900",  10,  22,   6, false, false, 0, 0 ],
186            [    "6901",  12,  24,   6, false, false, 0, 0 ],
187            [    "6902",  15,  28,   7, false, false, 0, 0 ],
188            [    "6903",  17,  30,   7, false, false, 0, 0 ],
189            [    "6904",  20,  37,   9, false, false, 0, 0 ],
190            [    "6905",  25,  42,   9, false, false, 0, 0 ],
191            [    "6906",  30,  47,   9, false, false, 0, 0 ],
192            [    "6907",  35,  55,  10, false, false, 0, 0 ],
193            [    "6908",  40,  62,  12, false, false, 0, 0 ],
194            [   "16002",  15,  22,   8, false, false, 0, 0 ],
195            [   "16004",  20,  42,   8, false, false, 0, 0 ],
196            [   "16005",  25,  47,   8, false, false, 0, 0 ],
197            [   "16100",  10,  28,   8, false, false, 0, 0 ],
198            [   "16101",  12,  30,   8, false, false, 0, 0 ],
199
200            [   "608ZZ",   8,  22,   7, true, false, 0, 0 ],
201            [   "629ZZ",   9,  26,   8, true, false, 0, 0 ],
202            [   "635ZZ",   5,  19,   6, true, false, 0, 0 ],
203            [  "6000ZZ",  10,  26,   8, true, false, 0, 0 ],
204            [  "6001ZZ",  12,  28,   8, true, false, 0, 0 ],
205            [  "6002ZZ",  15,  32,   9, true, false, 0, 0 ],
206            [  "6003ZZ",  17,  35,  10, true, false, 0, 0 ],
207            [  "6007ZZ",  35,  62,  14, true, false, 0, 0 ],
208            [  "6200ZZ",  10,  30,   9, true, false, 0, 0 ],
209            [  "6201ZZ",  12,  32,  10, true, false, 0, 0 ],
210            [  "6202ZZ",  15,  35,  11, true, false, 0, 0 ],
211            [  "6203ZZ",  17,  40,  12, true, false, 0, 0 ],
212            [  "6204ZZ",  20,  47,  14, true, false, 0, 0 ],
213            [  "6205ZZ",  25,  52,  15, true, false, 0, 0 ],
214            [  "6206ZZ",  30,  62,  16, true, false, 0, 0 ],
215            [  "6207ZZ",  35,  72,  17, true, false, 0, 0 ],
216            [  "6208ZZ",  40,  80,  18, true, false, 0, 0 ],
217            [  "6209ZZ",  45,  85,  19, true, false, 0, 0 ],
218            [  "6210ZZ",  50,  90,  20, true, false, 0, 0 ],
219            [  "6211ZZ",  55, 100,  21, true, false, 0, 0 ],
220            [  "6212ZZ",  60, 110,  22, true, false, 0, 0 ],
221            [  "6301ZZ",  12,  37,  12, true, false, 0, 0 ],
222            [  "6302ZZ",  15,  42,  13, true, false, 0, 0 ],
223            [  "6303ZZ",  17,  47,  14, true, false, 0, 0 ],
224            [  "6304ZZ",  20,  52,  15, true, false, 0, 0 ],
225            [  "6305ZZ",  25,  62,  17, true, false, 0, 0 ],
226            [  "6306ZZ",  30,  72,  19, true, false, 0, 0 ],
227            [  "6307ZZ",  35,  80,  21, true, false, 0, 0 ],
228            [  "6308ZZ",  40,  90,  23, true, false, 0, 0 ],
229            [  "6309ZZ",  45, 100,  25, true, false, 0, 0 ],
230            [  "6310ZZ",  50, 110,  27, true, false, 0, 0 ],
231            [  "6311ZZ",  55, 120,  29, true, false, 0, 0 ],
232            [  "6312ZZ",  60, 130,  31, true, false, 0, 0 ],
233            [  "6403ZZ",  17,  62,  17, true, false, 0, 0 ],
234            [  "6800ZZ",  10,  19,   5, true, false, 0, 0 ],
235            [  "6801ZZ",  12,  21,   5, true, false, 0, 0 ],
236            [  "6802ZZ",  15,  24,   5, true, false, 0, 0 ],
237            [  "6803ZZ",  17,  26,   5, true, false, 0, 0 ],
238            [  "6804ZZ",  20,  32,   7, true, false, 0, 0 ],
239            [  "6805ZZ",  25,  37,   7, true, false, 0, 0 ],
240            [  "6806ZZ",  30,  42,   7, true, false, 0, 0 ],
241            [  "6900ZZ",  10,  22,   6, true, false, 0, 0 ],
242            [  "6901ZZ",  12,  24,   6, true, false, 0, 0 ],
243            [  "6902ZZ",  15,  28,   7, true, false, 0, 0 ],
244            [  "6903ZZ",  17,  30,   7, true, false, 0, 0 ],
245            [  "6904ZZ",  20,  37,   9, true, false, 0, 0 ],
246            [  "6905ZZ",  25,  42,   9, true, false, 0, 0 ],
247            [  "6906ZZ",  30,  47,   9, true, false, 0, 0 ],
248            [  "6907ZZ",  35,  55,  10, true, false, 0, 0 ],
249            [  "6908ZZ",  40,  62,  12, true, false, 0, 0 ],
250            [ "16002ZZ",  15,  22,   8, true, false, 0, 0 ],
251            [ "16004ZZ",  20,  42,   8, true, false, 0, 0 ],
252            [ "16005ZZ",  25,  47,   8, true, false, 0, 0 ],
253            [ "16100ZZ",  10,  28,   8, true, false, 0, 0 ],
254            [ "16101ZZ",  12,  30,   8, true, false, 0, 0 ],
255
256            [  "MF52ZZ",   2,   5,   2, true,  true,   6.2,  0.6 ],
257            [  "MF63ZZ",   3,   6, 2.5, true,  true,   7.2,  0.6 ],
258            [  "MF74ZZ",   4,   7, 2.5, true,  true,   8.2,  0.6 ],
259            [  "MF83ZZ",   3,   8, 2.5, true,  true,   9.2,  0.6 ],
260            [  "MF85ZZ",   5,   8, 2.5, true,  true,   9.2,  0.6 ],
261            [  "MF95ZZ",   5,   9, 2.5, true,  true,  10.2,  0.6 ],
262            [ "MF105ZZ",   5,  10,   3, true,  true,  11.2,  0.6 ],
263            [ "MF117ZZ",   7,  11, 2.5, true,  true,  12.2,  0.6 ],
264            [ "MF128ZZ",   8,  12, 3.5, true,  true,  13.6,  0.8 ],
265            [ "MF148ZZ",   8,  14, 3.5, true,  true,  15.6,  0.8 ],
266            [ "F6700ZZ",  10,  15,   4, true,  true,  16.8,  0.8 ],
267            [ "F6701ZZ",  12,  18,   4, true,  true,  19.8,  0.8 ],
268            [ "F6800ZZ",  10,  19,   5, true,  true,  21.1,  1.1 ],
269            [ "F6801ZZ",  12,  21,   5, true,  true,  23.1,  1.1 ],
270            [ "F6802ZZ",  15,  24,   5, true,  true,  26.1,  1.1 ],
271            [ "F6803ZZ",  17,  26,   5, true,  true,  28.1,  1.1 ],
272            [ "F6804ZZ",  20,  32,   7, true,  true,    35,  1.5 ],
273            [ "F6805ZZ",  25,  37,   7, true,  true,  40.2,  1.5 ],
274            [ "F6900ZZ",  10,  22,   6, true,  true,  24.5,  1.5 ],
275            [ "F6901ZZ",  12,  24,   6, true,  true,  26.5,  1.5 ],
276            
277            [  "F683ZZ",   3,   7,   3, false, true,   8.1,  0.6 ],
278            [  "F684ZZ",   4,   9,   4, false, true,  10.3,  0.6 ],
279            [  "F685ZZ",   5,  11,   5, false, true,  12.5,  1   ],
280            [  "F686ZZ",   6,  13,   5, false, true,    15,  1   ],
281            [  "F687ZZ",   7,  14,   5, false, true,    16,  1   ],
282            [  "F688ZZ",   8,  16,   5, false, true,    18,  1   ],
283            [  "F689ZZ",   9,  17,   5, false, true,    19,  1   ],
284            [ "F6900ZZ",  10,  22,   6, false, true,    25,  1.5 ],
285            [ "F6901ZZ",  12,  24,   6, false, true,  26.5,  1.5 ],
286            [ "F6902ZZ",  15,  28,   7, false, true,  31.5,  1.5 ],
287            [ "F6903ZZ",  17,  30,   7, false, true,  33.5,  1.5 ],
288            [ "F6904ZZ",  20,  37,   9, false, true,  40.5,  1.5 ],
289            [ "F6905ZZ",  25,  42,   9, false, true,  45.5,  1.5 ],
290            [ "F6000ZZ",  10,  26,   8, false, true,  28.5,  1.5 ],
291            [ "F6001ZZ",  12,  28,   8, false, true,  30.5,  1.5 ],
292            [ "F6001ZZ",  15,  32,   9, false, true,  34.5,  1.5 ],
293            [ "F6003ZZ",  17,  35,  10, false, true,  37.5,  1.5 ],
294            [ "F6004ZZ",  20,  42,  12, false, true,  44.5,  1.5 ],
295            [ "F6005ZZ",  25,  47,  12, false, true,  49.5,  1.5 ],
296            [ "F6006ZZ",  30,  55,  13, false, true,  57.5,  1.5 ],
297        ],
298        found = search([trade_size], data, 1)[0]
299    )
300    assert(found!=[], str("Unsupported ball bearing trade size: ", trade_size))
301    select(data[found], 1, -1);
302
303
304
305// vim: expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap