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