Browse Source

Added bowden extruders, adapted from thingiverse custom i3 direct drive extruder.

Thomas Buck 6 years ago
parent
commit
c0e496006e
4 changed files with 662 additions and 57 deletions
  1. 447
    0
      lib/extruder.scad
  2. 137
    56
      lib/linear_bearing.scad
  3. 60
    0
      lib/rounded.scad
  4. 18
    1
      xyRepRap.scad

+ 447
- 0
lib/extruder.scad View File

@@ -0,0 +1,447 @@
1
+
2
+// adapted from https://www.thingiverse.com/thing:1383913
3
+
4
+// #######################################################
5
+// ###################### Extruders ######################
6
+// #######################################################
7
+
8
+include <rounded.scad>
9
+include <nema.scad>
10
+include <tslot_xy.scad>
11
+
12
+draw_extruder = false;
13
+
14
+extruder_width = nema17_size;
15
+extruder_depth = 15;
16
+extruder_height_m = 15; // material below motor
17
+extruder_cover_d = 12;
18
+
19
+extruder_filament_d = 1.75;
20
+
21
+extruder_gear_od = 12; // outer diameter: mk8 = 9, mk7 = 12
22
+extruder_gear_ed = 10.25; // effective diameter: mk8 = 6.75, mk7 = 10.25
23
+extruder_gear_groove_width = 3.5;
24
+
25
+fillet = 1.5;
26
+
27
+extruder_supports = true;
28
+extruder_brass_tube = false;
29
+extruder_lever_with_switch = true;
30
+
31
+// bearing 624
32
+extruder_bearing_od = 13;
33
+extruder_bearing_id = 4;
34
+extruder_bearing_h = 5;
35
+
36
+extruder_filament_offset = (extruder_gear_ed + extruder_filament_d) / 2;
37
+
38
+echo(extruder_filament_offset=extruder_filament_offset);
39
+
40
+bracket_height = 8;
41
+bracket_width = extruder_height_m;
42
+bracket_width_add = 10;
43
+bracket_dist_add = 1;
44
+
45
+extruder_bearing_x = extruder_filament_offset + (extruder_filament_d / 2) + (extruder_bearing_od / 2); 
46
+
47
+lever_h = 12;
48
+
49
+// #######################################################
50
+
51
+if (draw_extruder)
52
+    extruder(30, true);
53
+
54
+module extruder(slot, draw_slot = false) {
55
+    translate([-nema17_size / 2 - bracket_dist_add, 0, slot + bracket_height + 10])
56
+    rotate([-90, 0, 0])
57
+        extruder_assembly();
58
+    
59
+    color("green")
60
+    extruder_bracket(slot);
61
+    
62
+    if (draw_slot)
63
+    %translate([bracket_height, -100, 0])
64
+        tslot_y(slot, 300);
65
+}
66
+
67
+module extruder_bracket(slot) {
68
+    difference() {
69
+        union() {
70
+            translate([bracket_height, 0, slot])
71
+                cube([slot, bracket_width + bracket_width_add, bracket_height]);
72
+            
73
+            cube([bracket_height, bracket_width + bracket_width_add, slot + bracket_height]);
74
+            
75
+            translate([-nema17_size - bracket_dist_add, 0, slot])
76
+                cube([nema17_size + bracket_dist_add, bracket_width, bracket_height]);
77
+        }
78
+        
79
+        translate([bracket_height + slot / 2, (bracket_width + bracket_width_add) / 2, slot - 1])
80
+            cylinder(d = 4.4, h = bracket_height + 2);
81
+        
82
+        translate([-1, (bracket_width + bracket_width_add) / 2, slot / 2])
83
+            rotate([0, 90, 0])
84
+            cylinder(d = 4.4, h = bracket_height + 2);
85
+        
86
+        translate([-bracket_height - 14, 0, slot + bracket_height + 6])
87
+            rotate([-90, 0, 0])
88
+            extruder_screw_holes_main();
89
+    }
90
+}
91
+
92
+module extruder_assembly() {
93
+    color("cyan") extruder_holder();
94
+    color("yellow") extruder_top_plate();
95
+    color("orange") extruder_cover(); 
96
+    
97
+    if (!extruder_lever_with_switch) {
98
+        color("red")
99
+        extruder_lever();
100
+    } else {
101
+        color("red")
102
+        translate([6, 0, 62.4 - 4.9])
103
+            extruder_lever_switch();
104
+    }
105
+
106
+    color("silver", 0.5)
107
+    %extruder_bearing();     
108
+    
109
+    // Filament mockup
110
+    color("blue", 0.25)
111
+    %translate([extruder_filament_offset, 0, -15])
112
+        cylinder(d=extruder_filament_d, h=100, $fn=64);
113
+    
114
+    // NEMA17 mockup
115
+    color("gray")
116
+    %translate([-nema17_size / 2, 30 + 10, extruder_height_m])
117
+        rotate([90, 0, 0])
118
+        nema17(30);
119
+}
120
+
121
+module extruder_holder() {
122
+   difference() {
123
+        union() {
124
+            translate([-extruder_width/2, 0, 0])
125
+                rounded_cube(extruder_width, 10, extruder_height_m, 0, fillet, 0);
126
+            
127
+            translate([-extruder_width/2, -6, extruder_height_m])
128
+                rounded_cube(extruder_width, 16, 11, fillet,fillet,fillet);
129
+            
130
+            translate([-extruder_width/2, -6, extruder_height_m-5])
131
+                rounded_cube(extruder_width, 16, 10, 0,0,fillet);
132
+            
133
+            translate([extruder_filament_offset-5,0, extruder_height_m+10])
134
+                cube([10, 7.5, 9]); // tip for flex filament
135
+            
136
+            translate([-12,0, extruder_height_m+10.9])
137
+                cylinder(d2 = 5, d1=8, h=2.1, $fn=64); // spring
138
+        }
139
+        
140
+        translate([-extruder_width/2-0.15, -15, 0.1])
141
+            rounded_cube(extruder_width+0.3, 15, extruder_height_m, fillet,fillet,fillet); 
142
+        
143
+        translate([0,10.1,extruder_height_m+21.5])
144
+            rotate([90,0,0])
145
+            cylinder(d=23, h=2.6, $fn=64);
146
+        
147
+        translate([-12,0, extruder_height_m+11])
148
+            cylinder(r = 1.5, h=20, $fn=64, center=true); //spring
149
+        
150
+        //hotend mount
151
+        translate([extruder_filament_offset,0, 0]) {
152
+            extruder_hotend_mount();
153
+            translate([-5.1,-10,20])
154
+                cube([10.2, 10, 20]);
155
+        }
156
+        
157
+        //motor screws
158
+        translate([-31/2, -6, extruder_height_m+6])
159
+        rotate([-90, 0, 0]) {
160
+            cylinder(r = 1.6, h = 25,  $fn=32);
161
+            cylinder(r = 3.1, h = 6,  $fn=32, center=true);
162
+        }
163
+        translate([ 31/2, -6, extruder_height_m+6])
164
+        rotate([-90, 0, 0]) {
165
+            cylinder(r = 1.6, h = 25,  $fn=32);
166
+            cylinder(r = 3.1, h = 6,  $fn=32, center=true);
167
+        }
168
+
169
+        extruder_screw_holes_main();
170
+        extruder_flex_guide();
171
+    }  
172
+    
173
+    // tip extruder_supports
174
+    if (extruder_supports)
175
+        for (xx =[-5.2, -2.5, 0, 2.5, 4.7])
176
+            translate([extruder_filament_offset+xx, 7.6, extruder_height_m+11.4])
177
+                cube ([0.55, 2.4, 8]);
178
+}    
179
+
180
+module extruder_top_plate() {
181
+    difference() {
182
+        hull() {
183
+            translate([-14.5, 6, extruder_height_m+39.5]) rotate([-90, 0, 0]) cylinder(r=3, h=4, $fn=32);            
184
+            translate([-18, 6, extruder_height_m+36]) rotate([-90, 0, 0]) cylinder(r=3, h=4, $fn=32);
185
+            translate([-18, 6, extruder_height_m+29]) rotate([-90, 0, 0]) cylinder(r=3, h=4, $fn=32);
186
+            translate([ 31/2, 6, extruder_height_m+37]) rotate([-90, 0, 0]) cylinder(r = 5.5, h=4, $fn=32);  
187
+            translate([18, 6, extruder_height_m+29]) rotate([-90, 0, 0]) cylinder(r=3, h=4, $fn=32);
188
+        }
189
+
190
+        
191
+        translate([0,10.1,extruder_height_m+21.5]) rotate([90,0,0]) cylinder(d=24, h=5, $fn=64);
192
+        
193
+        //mount holes
194
+        translate([-31/2, 5.9, extruder_height_m+37]) rotate([-90, 0, 0]) { 
195
+            cylinder(r = 1.6, h = 5,  $fn=32);
196
+            cylinder(r = 3.5, h = 2,  $fn=32);            
197
+        }
198
+        translate([ 31/2, 5.9, extruder_height_m+37]) rotate([-90, 0, 0]) {
199
+            hd = extruder_brass_tube ? 4.2 : 3;
200
+            cylinder(d = hd, h = 5,  $fn=32);
201
+        }
202
+    }
203
+}
204
+
205
+module extruder_lever() {
206
+    translate([0, 0, extruder_height_m])
207
+    difference() {
208
+        union() {
209
+            hull() {
210
+                translate([-8, -(lever_h/2), 32.5])
211
+                    rounded_cube(38-14+fillet, lever_h, 10, noback = true);
212
+                
213
+                translate([-13, -(lever_h/2), 39.5])
214
+                    rotate([-90, 0, 0])
215
+                    rounded_cylinder(3, lever_h-1, fillet, true, true);
216
+                
217
+                translate([-13, -(lever_h/2), 35.5])
218
+                    rotate([-90, 0, 0])
219
+                    rounded_cylinder(3, lever_h-1, fillet, true, true);
220
+            }
221
+            
222
+            // lever tip
223
+            hull() {
224
+                translate([-13, -(lever_h/2), 39.5])
225
+                    rotate([-90, 0, 0])
226
+                    rounded_cylinder(3, lever_h-1, fillet, true, true);
227
+                
228
+                translate([-13, -(lever_h/2), 35.5])
229
+                    rotate([-90, 0, 0])
230
+                    rounded_cylinder(3, lever_h-1, fillet, true, true);
231
+                
232
+                translate([-18.5, -(lever_h/2), 35.5])
233
+                    rotate([-90, 0, 0])
234
+                    rounded_cylinder(3, lever_h-1, fillet, true, true);
235
+                
236
+                translate([-25, -(lever_h/2), 39.5])
237
+                    rotate([-90, 0, 0])
238
+                    rounded_cylinder(3, lever_h-1, fillet, true, true);
239
+            }
240
+            
241
+            // bearing holder arm
242
+            hull() {
243
+                translate([extruder_bearing_x-extruder_bearing_od/2+1, -(lever_h/2), 21.5]) 
244
+                    rounded_cube(extruder_bearing_od/2, lever_h, 15);
245
+                
246
+                translate([ 31/2, -(lever_h/2), 37])
247
+                    rotate([-90, 0, 0])
248
+                    rounded_cylinder(r = 5.5, h = lever_h, rrnd=fillet,  $fn=64);
249
+                
250
+                translate([extruder_bearing_x, 0, 21.5])
251
+                    rotate([-90, 0, 0])
252
+                    rounded_cylinder((extruder_bearing_od-2)/2, lever_h, center=true);
253
+                
254
+                if (extruder_bearing_od <= 16)
255
+                    translate([min((extruder_bearing_x+2),20-(extruder_bearing_od-2)/2), 0, 21.5])
256
+                        rotate([-90, 0, 0])                
257
+                        rounded_cylinder((extruder_bearing_od-2)/2, lever_h, center=true);  
258
+            }
259
+
260
+            //spring tip
261
+            translate([-12,0, 30.5]) cylinder(d1 = 5, d2=8, h=2.1, $fn=64);
262
+            
263
+            //filament tip
264
+            translate([extruder_filament_offset,0, 30])
265
+                cylinder(d1 = 6, d2=10, h=3, $fn=64); 
266
+        }
267
+        
268
+        translate([extruder_filament_offset, 0, 42.5-3])
269
+            cylinder(d1 = 4, d2=5, h=3, $fn=64);
270
+        
271
+        //mounting hole
272
+        translate([ 31/2, -(lever_h/2), 37])
273
+        rotate([-90, 0, 0]) {
274
+            hd = extruder_brass_tube ? 4.2 : 3;
275
+            cylinder(d=hd, h = 20,  $fn=32);
276
+            cylinder(d=8, h = 7,  $fn=32, center=true);
277
+        }
278
+            
279
+        translate([extruder_bearing_x, 0, 21.5])
280
+        rotate([-90, 0, 0]) {
281
+            difference() {
282
+                cylinder(d=extruder_bearing_od+2, h=extruder_bearing_h+0.5, $fn=64, center=true);
283
+                
284
+                difference() {
285
+                    cylinder(d=extruder_bearing_id+(extruder_bearing_od-extruder_bearing_id)/3, h=extruder_bearing_h+0.5, $fn=64, center=true);
286
+                    
287
+                    cylinder(d=extruder_bearing_od, h=extruder_bearing_h+0.1, $fn=64, center=true);
288
+                }
289
+            }
290
+            
291
+            cylinder(d=extruder_bearing_id*0.95, h=20, $fn=64, center=true);
292
+        }
293
+
294
+        //translate([extruder_filament_offset, -(extruder_bearing_h)/2, 0]) cube([20, extruder_bearing_h+0.1, 21.5]); 
295
+        
296
+        // filament hole
297
+        translate([extruder_filament_offset,0, 25])
298
+            cylinder(d=4.2, h=20, $fn=64);
299
+        
300
+        // spring screw
301
+        translate([-12,0, 32.5]) { 
302
+            cylinder(r = 1.6, h=30, $fn=64, center=true);
303
+            
304
+            translate([-3, -3.3, 3])
305
+                cube([6, 10, 3.0]);
306
+        }
307
+    }       
308
+}
309
+
310
+module extruder_switch_model() {
311
+    $fn = 15;
312
+    
313
+    difference() {
314
+        union() {
315
+            cube([12.8, 5.8, 6.2]);
316
+            
317
+            translate([-0.5, (5.8 - 4) / 2, 6.2 + 2.5])
318
+                rotate([0, 11, 0])
319
+                cube([13.5, 4.0, 0.3]);
320
+            
321
+            translate([0.9, 5.8 / 2, -4.0])
322
+                cylinder(d = 0.8, h = 4.0);
323
+            translate([12.8 - 0.9, 5.8 / 2, -4.0])
324
+                cylinder(d = 0.8, h = 4.0);
325
+            translate([12.8 / 2, 5.8 / 2, -4.0])
326
+                cylinder(d = 0.8, h = 4.0);
327
+        }
328
+        
329
+        translate([3.1, 5.9, 1.0])
330
+            rotate([90, 0, 0])
331
+            cylinder(d = 2.0, 6.0);
332
+        translate([3.1 + 6.5, 5.9, 1.0])
333
+            rotate([90, 0, 0])
334
+            cylinder(d = 2.0, 6.0);
335
+    }
336
+}
337
+
338
+module extruder_lever_switch() {
339
+    $fn = 20;
340
+    
341
+    translate([-6, 0, extruder_height_m - 77.4 + 4.9])
342
+        extruder_lever();
343
+    
344
+    %translate([-9 + 0.5, 3, 0])
345
+        rotate([180, -90, 0])
346
+        extruder_switch_model();
347
+    
348
+    difference() {
349
+        cylinder(d = 9.0, h = 13.0);
350
+        
351
+        translate([0, 0, -0.1])
352
+            cylinder(d1 = 5.1, d2 = 2.5, h = 13.2);
353
+        
354
+        translate([-5.5, -15, 0])
355
+            cube([5, 30, 13.1]);
356
+        
357
+        translate([-9 + 0.5, 3, 0])
358
+            rotate([180, -90, 0])
359
+            extruder_switch_model();
360
+    }
361
+    
362
+    difference() {
363
+        union() {
364
+            translate([-11, 3.0, 0])
365
+                cube([11, 1.5 + 1.5, 13]);
366
+            translate([-11, -6.0, -3])
367
+                cube([11, 1.5 + 1.5, 13 + 3]);
368
+        }
369
+        
370
+        for (off = [-1 : 0.1 : 1]) {
371
+            translate([-7.5 + off, 10, 3.1])
372
+                rotate([90, 0, 0])
373
+                cylinder(d = 2.5, 20.0);
374
+            translate([-7.5 + off, 10, 9.6])
375
+                rotate([90, 0, 0])
376
+                cylinder(d = 2.5, 20.0);
377
+        }
378
+    }
379
+}
380
+
381
+module extruder_cover() {
382
+    difference() {
383
+        union() {
384
+            translate([-extruder_width/2, -extruder_cover_d, 0])
385
+                rounded_cube(extruder_width, extruder_cover_d, extruder_height_m, fillet,fillet,fillet);        
386
+            translate([extruder_filament_offset-5,-6, extruder_height_m-1])
387
+                cube ([10, 6, 20]);    
388
+        }
389
+        
390
+        translate([extruder_filament_offset,0,0])
391
+            extruder_hotend_mount();
392
+        
393
+        extruder_screw_holes_main();
394
+        extruder_flex_guide();
395
+    }
396
+}
397
+
398
+module extruder_hotend_mount() {
399
+    cylinder(d=4.2, h=46, $fn=64);
400
+    cylinder(d=5.8, h=8, $fn=64);
401
+}
402
+
403
+module extruder_screw_holes_main() {
404
+    translate([extruder_width/2-5.5, -extruder_cover_d, extruder_height_m/2]) rotate([-90, 0, 0]) {
405
+        cylinder(r = 1.6, h = 50,  $fn=32);
406
+        cylinder(r = 3.2, h = 11,  $fn=32, center=true);
407
+    } 
408
+    translate([-extruder_width/2+5.5, -extruder_cover_d, extruder_height_m/2]) rotate([-90, 0, 0]) {
409
+        cylinder(r = 1.6, h = 50,  $fn=32);
410
+        cylinder(r = 3.2, h = 11,  $fn=32, center=true);
411
+    }    
412
+    translate([extruder_width/2-5.5, extruder_depth-4, extruder_height_m/2]) rotate([-90, 0, 0]) cylinder( d = 6.6, h = 4.1, $fn=6);
413
+    translate([-extruder_width/2+5.5, extruder_depth-4, extruder_height_m/2]) rotate([-90, 0, 0]) cylinder( d = 6.6, h = 4.1, $fn=6);
414
+}
415
+
416
+module extruder_flex_guide() {
417
+    difference() {
418
+        translate([0, -10, extruder_height_m+6+31/2]) rotate([-90, 0, 0]) cylinder(d=extruder_gear_od+1, h=20, $fn=64);
419
+        intersection() {
420
+            translate([0, -10, extruder_height_m+6+31/2]) rotate([-90, 0, 0]) cylinder(d=extruder_gear_od+1, h=20, $fn=64);
421
+            translate([0, 0, extruder_height_m+6+31/2]) rotate([90, 0, 0]) rotate_extrude($fn=64) {
422
+                translate([extruder_gear_ed/2 + (extruder_gear_od - extruder_gear_ed)/2 +0.5, 0, 0])
423
+                resize([(extruder_gear_od-extruder_gear_ed), extruder_gear_groove_width]) circle(d = extruder_gear_od-extruder_gear_ed, $fn=64);
424
+            }
425
+        }
426
+    }
427
+    
428
+    translate([0, 3.5, extruder_height_m+6+31/2]) rotate([-90, 0, 0]) cylinder(d1=extruder_gear_od+1, d2 = extruder_gear_od+2, h=0.55, $fn=64);
429
+    translate([0, 4, extruder_height_m+6+31/2]) rotate([-90, 0, 0]) cylinder(d=extruder_gear_od+2, h=20, $fn=64);
430
+    
431
+    translate([0, -3.5, extruder_height_m+6+31/2]) mirror([0,1,0]) rotate([-90, 0, 0]) cylinder(d1=extruder_gear_od+1, d2 = extruder_gear_od+2, h=0.55, $fn=64);
432
+    translate([0, -4, extruder_height_m+6+31/2]) mirror([0,1,0]) rotate([-90, 0, 0]) cylinder(d=extruder_gear_od+2, h=20, $fn=64);    
433
+
434
+    translate([extruder_bearing_od/2 + extruder_gear_ed/2 + extruder_filament_d,-10, extruder_height_m+6+31/2]) {
435
+        rotate([-90, 0, 0]) cylinder(d=extruder_bearing_od+1, h=20, $fn=64);
436
+        translate([0,0,-(extruder_bearing_od+1)/2]) cube([(extruder_bearing_od+1)/2, 20, (extruder_bearing_od+1)/2]);
437
+    }
438
+}
439
+
440
+module extruder_bearing() {
441
+    translate([extruder_bearing_od/2 + extruder_gear_ed/2+extruder_filament_d, 0, extruder_height_m+6+31/2]) {
442
+        difference() {
443
+            rotate([-90, 0, 0]) cylinder(d=extruder_bearing_od, h=extruder_bearing_h, $fn=64, center=true);
444
+            rotate([-90, 0, 0]) cylinder(d=extruder_bearing_id, h=extruder_bearing_h+0.1, $fn=64, center=true);
445
+        }
446
+    }   
447
+}

+ 137
- 56
lib/linear_bearing.scad View File

@@ -111,7 +111,17 @@ draw_y_carriage = false;
111 111
 draw_y_carriage_idlers = true;
112 112
 draw_rail_len = 200;
113 113
 
114
-// TODO get ready to actually print these
114
+print_x_carriage = false;
115
+print_x_carriage_clamps = false;
116
+print_e3d_mount = false;
117
+print_e3d_fans = false;
118
+print_fan_mount = false;
119
+print_sensor_mount = false;
120
+
121
+print_y_carriage_a = false;
122
+print_y_carriage_b = false;
123
+print_y_carriage_a_clamps = false;
124
+print_y_carriage_b_clamps = false;
115 125
 
116 126
 module nut_cut() {
117 127
     translate([-nut_cut_width / 2, 2, nut_cut_off - nut_cut_height]) {
@@ -151,20 +161,49 @@ module generate_spacer(pos) {
151 161
         bearing_spacer(pos[2] + 0.5 + ((idler_outer_height - bearing_height) / 2), 2, 1, true, 3);
152 162
 }
153 163
 
154
-module y_carriage(idler_a = [0, 0, 0], idler_b = [0, 0, 0]) {
164
+module y_carriage(idler_a = [0, 0, 0], idler_b = [0, 0, 0], block = true, clamp = true) {
155 165
     $fn = 20;
156 166
     
157 167
     // attaching to x-rails
158
-    color("green")
159 168
     translate([y_carriage_width, 0, -y_carriage_block_height])
160 169
     difference() {
161
-        cube([x_rail_mount_width, y_carriage_length, y_carriage_block_height + y_carriage_wall]);
170
+        union() {
171
+            color("green")
172
+            cube([x_rail_mount_width, y_carriage_length, y_carriage_block_height + y_carriage_wall]);
173
+            
174
+            // idlers for the corexy belts
175
+            translate([-y_carriage_width, 0, y_carriage_wall + y_carriage_block_height]) {
176
+                if (draw_y_carriage_idlers) {
177
+                    %translate(idler_a)
178
+                        bearing_idler();
179
+                    
180
+                    %translate(idler_b)
181
+                        bearing_idler();
182
+                }
183
+                
184
+                generate_spacer(idler_a);
185
+                generate_spacer(idler_b);
186
+            }
187
+        }
188
+        
189
+        if (!block) {
190
+            translate([-y_carriage_width, 0, 0])
191
+                cube([y_carriage_width, y_carriage_length, 100]);
192
+            
193
+            translate([0, 0, -10])
194
+                cube([y_carriage_width, y_carriage_length, 20]);
195
+        }
162 196
         
163 197
         translate([0, -1, y_carriage_block_height])
164 198
             cube([x_rail_cutout_z, y_carriage_length + 2, y_carriage_wall + 1]);
165 199
         
166
-        translate([0, -1, y_carriage_block_height - (x_rail_cutout_x / 2)])
167
-            cube([y_carriage_block_width + 1, y_carriage_length + 2, x_rail_cutout_x]);
200
+        if (clamp) {
201
+            translate([0, -1, y_carriage_block_height - (x_rail_cutout_x / 2)])
202
+                cube([y_carriage_block_width + 1, y_carriage_length + 2, x_rail_cutout_x]);
203
+        } else {
204
+            translate([0, -1, y_carriage_block_height - (x_rail_cutout_x / 2)])
205
+                cube([y_carriage_block_width + 1, y_carriage_length + 2, 100]);
206
+        }
168 207
         
169 208
         translate([0, (y_carriage_length - x_rail_cutout_y) / 2, y_carriage_block_height])
170 209
             cube([y_carriage_block_width + 1, x_rail_cutout_y, y_carriage_wall + 1]);
@@ -193,6 +232,7 @@ module y_carriage(idler_a = [0, 0, 0], idler_b = [0, 0, 0]) {
193 232
     }
194 233
     
195 234
     // attaching to y-rail
235
+    if (block)
196 236
     color("green")
197 237
     difference() {
198 238
         union() {
@@ -230,6 +270,7 @@ module y_carriage(idler_a = [0, 0, 0], idler_b = [0, 0, 0]) {
230 270
         }
231 271
     }
232 272
     
273
+    if (block)
233 274
     color("magenta")
234 275
     translate([(lm8uu_outer + lm8uu_dia_add) / 2 + y_carriage_rail_support, 0, 0])
235 276
     rotate([-90, 0, 0]) {
@@ -239,20 +280,6 @@ module y_carriage(idler_a = [0, 0, 0], idler_b = [0, 0, 0]) {
239 280
         %translate([0, 0, y_carriage_length - lm8uu_height - y_carriage_rail_support])
240 281
             lm8uu();
241 282
     }
242
-    
243
-    // idlers for the corexy belts
244
-    translate([0, 0, y_carriage_wall]) {
245
-        if (draw_y_carriage_idlers) {
246
-            translate(idler_a)
247
-                bearing_idler();
248
-            
249
-            translate(idler_b)
250
-                bearing_idler();
251
-        }
252
-        
253
-        generate_spacer(idler_a);
254
-        generate_spacer(idler_b);
255
-    }
256 283
 }
257 284
 
258 285
 module belt_fix() {
@@ -274,9 +301,10 @@ module belt_fix() {
274 301
     }
275 302
 }
276 303
 
277
-module belt_mount(top, up) {
304
+module belt_mount(top, up, block, clamp) {
278 305
     $fn = 15;
279 306
     
307
+    if (block)
280 308
     difference() {
281 309
         color("green")
282 310
         if (top) {
@@ -309,50 +337,61 @@ module belt_mount(top, up) {
309 337
         }
310 338
     }
311 339
     
312
-    if (up) {
313
-        if (top) {
314
-            translate([0, x_carriage_belt_block_length + x_carriage_block_off, x_carriage_belt_block_height - x_carriage_block_height])
315
-                belt_fix();
316
-        } else {
317
-            translate([0, x_carriage_belt_block_length + x_carriage_block_off, x_carriage_belt_block_height_b - x_carriage_block_height])
318
-                belt_fix();
319
-        }
320
-    } else {
321
-        if (top) {
322
-            translate([0, -x_carriage_block_length - x_carriage_block_off, x_carriage_belt_block_height - x_carriage_block_height])
323
-                belt_fix();
340
+    if (clamp) {
341
+        if (up) {
342
+            if (top) {
343
+                translate([0, x_carriage_belt_block_length + x_carriage_block_off, x_carriage_belt_block_height - x_carriage_block_height])
344
+                    belt_fix();
345
+            } else {
346
+                translate([0, x_carriage_belt_block_length + x_carriage_block_off, x_carriage_belt_block_height_b - x_carriage_block_height])
347
+                    belt_fix();
348
+            }
324 349
         } else {
325
-            translate([0, -x_carriage_block_length - x_carriage_block_off, x_carriage_belt_block_height_b - x_carriage_block_height])
326
-                belt_fix();
350
+            if (top) {
351
+                translate([0, -x_carriage_block_length - x_carriage_block_off, x_carriage_belt_block_height - x_carriage_block_height])
352
+                    belt_fix();
353
+            } else {
354
+                translate([0, -x_carriage_block_length - x_carriage_block_off, x_carriage_belt_block_height_b - x_carriage_block_height])
355
+                    belt_fix();
356
+            }
327 357
         }
328 358
     }
329 359
 }
330 360
 
331
-module belt_mounts() {
361
+module belt_mounts(block=true, clamp=true) {
332 362
     translate([0, x_carriage_belt_off, 0])
333
-        belt_mount(false, true);
363
+        belt_mount(false, true, block, clamp);
334 364
     
335 365
     translate([0, x_carriage_length - x_carriage_belt_off - x_carriage_belt_block_length, 0])
336
-        belt_mount(true, false);
366
+        belt_mount(true, false, block, clamp);
337 367
     
338 368
     translate([x_carriage_width - x_carriage_belt_block_width, x_carriage_belt_off, 0])
339
-        belt_mount(true, true);
369
+        belt_mount(true, true, block, clamp);
340 370
     
341 371
     translate([x_carriage_width - x_carriage_belt_block_width, x_carriage_length - x_carriage_belt_off - x_carriage_belt_block_length, 0])
342
-        belt_mount(false, false);
372
+        belt_mount(false, false, block, clamp);
343 373
 }
344 374
 
345
-module x_carriage() {
375
+module x_carriage(with_body=true, with_tool=true, with_clamps=true, with_fan=true, with_cool=true, with_sensor=true) {
346 376
     $fn = 20;
377
+     
378
+    if (!with_body) {
379
+        if (with_clamps) {
380
+            translate([0, 0, x_carriage_wall])
381
+                belt_mounts(with_body, with_clamps);
382
+        }
383
+    }
347 384
     
348
-    //color("green")
385
+    if (with_body)
349 386
     difference() {
350 387
         union() {
351
-            color("green")
352
-            cube([x_carriage_width, x_rail_dist + (2 * x_carriage_len_add), x_carriage_wall]);
388
+            if (with_body) {
389
+                color("green")
390
+                cube([x_carriage_width, x_rail_dist + (2 * x_carriage_len_add), x_carriage_wall]);
391
+            }
353 392
             
354 393
             translate([0, 0, x_carriage_wall])
355
-                belt_mounts();
394
+                belt_mounts(with_body, with_clamps);
356 395
         }
357 396
         
358 397
         // big center cutout
@@ -466,20 +505,26 @@ module x_carriage() {
466 505
             nut_cut();
467 506
     }
468 507
     
469
-    translate([(x_carriage_width - sensor_mount_width) / 2, -sensor_mount_wall, 0])
470
-        sensor_mount();
508
+    if (with_sensor) {
509
+        translate([(x_carriage_width - sensor_mount_width) / 2, -sensor_mount_wall, 0])
510
+            sensor_mount();
511
+    }
471 512
     
472
-    translate([(x_carriage_width - sensor_mount_width) / 2, x_carriage_length, 0]) {
473
-        radial_fan_mount(true);
474
-        
475
-        translate([0, 15 + sensor_mount_wall, 0])
476
-            radial_fan_mount(false);
513
+    if (with_cool) {
514
+        translate([(x_carriage_width - sensor_mount_width) / 2, x_carriage_length, 0]) {
515
+            radial_fan_mount(true);
516
+            
517
+            translate([0, 15 + sensor_mount_wall, 0])
518
+                radial_fan_mount(false);
519
+        }
477 520
     }
478 521
     
479
-    e3d_v6_triple_mount();
522
+    e3d_v6_triple_mount(with_tool, with_fan);
480 523
 }
481 524
 
482 525
 module radial_fan_mount(with_fan = true) {
526
+    $fn = 15;
527
+    
483 528
     color("yellow")
484 529
     universal_mount_plate();
485 530
     
@@ -550,6 +595,7 @@ module fan_5015() {
550 595
 }
551 596
 
552 597
 module universal_mount_plate() {
598
+    $fn = 20;
553 599
     difference() {
554 600
         cube([sensor_mount_width, sensor_mount_wall, x_carriage_wall]);
555 601
         
@@ -597,8 +643,8 @@ module sensor_mount() {
597 643
     }
598 644
 }
599 645
 
600
-module e3d_v6_triple_mount() {
601
-    if (draw_e3d_hotends)
646
+module e3d_v6_triple_mount(with_tool, with_fan) {
647
+    if (draw_e3d_hotends && with_tool)
602 648
     translate([x_carriage_width / 2, x_carriage_length / 2, -e3d_v6_height + x_carriage_wall + e3d_v6_z_off]) {
603 649
         
604 650
         color("red")
@@ -618,6 +664,7 @@ module e3d_v6_triple_mount() {
618 664
     echo(m3_screw_len=e3d_clamp_length + (2 * e3d_clamp_b_length));
619 665
     
620 666
     // hotend clamp center piece
667
+    if (with_tool)
621 668
     translate([(x_carriage_width - e3d_clamp_width) / 2, (x_carriage_length - e3d_clamp_length) / 2, x_carriage_wall])
622 669
     difference() {
623 670
         union() {
@@ -679,7 +726,9 @@ module e3d_v6_triple_mount() {
679 726
             cylinder(d = e3d_upper_small_dia + e3d_clamp_dia_add, h = e3d_clamp_height + 2);
680 727
     }
681 728
     
682
-    e3d_v6_triple_fan();
729
+    if (with_fan) {
730
+        e3d_v6_triple_fan();
731
+    }
683 732
 }
684 733
 
685 734
 module simple_fan() {
@@ -808,6 +857,38 @@ module fan_duct(fan_width, diff) {
808 857
     }
809 858
 }
810 859
 
860
+if (print_x_carriage) {
861
+    x_carriage(true, false, false, false, false, false);
862
+}
863
+
864
+if (print_x_carriage_clamps) {
865
+    x_carriage(false, false, true, false, false, false);
866
+}
867
+
868
+if (print_e3d_mount) {
869
+    x_carriage(false, true, false, false, false, false);
870
+}
871
+
872
+if (print_e3d_fans) {
873
+    x_carriage(false, false, false, true, false, false);
874
+}
875
+
876
+if (print_fan_mount) {
877
+    x_carriage(false, false, false, false, true, false);
878
+}
879
+
880
+if (print_sensor_mount) {
881
+    x_carriage(false, false, false, false, false, true);
882
+}
883
+
884
+if (print_y_carriage_a || print_y_carriage_a_clamps) {
885
+    y_carriage(idler_a_blue, idler_b_blue, print_y_carriage_a, print_y_carriage_a_clamps);
886
+}
887
+
888
+if (print_y_carriage_b || print_y_carriage_b_clamps) {
889
+    y_carriage(idler_a_red, idler_b_red, print_y_carriage_b, print_y_carriage_b_clamps);
890
+}
891
+
811 892
 if (draw_y_carriage) {
812 893
     translate([(lm8uu_outer + lm8uu_dia_add) / 2 + y_carriage_rail_support, 0, 0])
813 894
     rotate([-90, 0, 0]) {

+ 60
- 0
lib/rounded.scad View File

@@ -0,0 +1,60 @@
1
+
2
+
3
+module rounded_cube(x, y, z, rx=fillet, ry=fillet, rz=fillet, noback=true, nobottom=false, notop=false) {
4
+    $fs = 0.15;
5
+    union() {
6
+        
7
+        if (rx == ry && ry == rz) {
8
+             minkowski() {
9
+                translate([rx, rx, rx])cube([x-rx*2, y-rx*2, z-rx*2]);                
10
+                sphere(r = rx);
11
+            }           
12
+        } else {
13
+            minkowski() {
14
+                translate([rz+ry, rz+rx, rz+ry])cube([x-rz*2-ry*2, y-rz*2-rx*2, z-rx*2-ry*2]);
15
+                cylinder(r = rz, h = 0.01);
16
+                rotate ([0, 90, 0]) cylinder(r = rx, h = 0.01);
17
+                rotate ([90, 0, 0]) cylinder(r = ry, h = 0.01);
18
+            }
19
+        }
20
+        
21
+        if (noback) {
22
+            minkowski() {
23
+                translate([ry, y/2, ry])cube([x-ry*2, y/2, z-ry*2]);
24
+                rotate ([90, 0, 0]) cylinder(r = ry, h = 0.01);
25
+            }
26
+        }
27
+        
28
+        if (nobottom) {
29
+            minkowski() {
30
+                translate([rz, rz, 0])cube([x-rz*2, y-rz*2, z/2]);
31
+                rotate ([0, 0, 0]) cylinder(r = rz, h = 0.01);
32
+            }
33
+        }
34
+        
35
+        if (notop) {
36
+            minkowski() {
37
+                translate([rz, rz, z/2])cube([x-rz*2, y-rz*2, z/2]);
38
+                rotate ([0, 0, 0]) cylinder(r = rz, h = 0.01);
39
+            }
40
+        }
41
+    }
42
+    
43
+}
44
+
45
+module rounded_cylinder(r, h, rrnd = fillet, rtop = true, rbottom = false, center=false) {
46
+    $fs = 0.15;    
47
+    
48
+    htr = center ? -h/2 : 0;
49
+    translate([0, 0, htr]) union() {        
50
+        minkowski() {
51
+            translate([0,0,rrnd]) cylinder(r=r-rrnd, h=h-rrnd*2);
52
+            sphere(rrnd);
53
+        }
54
+        
55
+        if (!rbottom) 
56
+                translate([0,0,h/2]) cylinder(r=r, h=h/2);
57
+        if (!rtop) 
58
+                translate([0,0,0]) cylinder(r=r, h=h/2);        
59
+    }   
60
+}

+ 18
- 1
xyRepRap.scad View File

@@ -48,6 +48,7 @@ include <lib/Pulley_T-MXL-XL-HTD-GT2_N-tooth.scad>
48 48
 include <lib/bearing_idler.scad>
49 49
 include <lib/rail_mount.scad>
50 50
 include <lib/linear_bearing.scad>
51
+include <lib/extruder.scad>
51 52
 
52 53
 module gt2_belt(length) {
53 54
     difference() {
@@ -452,11 +453,27 @@ module heatbed() {
452 453
     }
453 454
 }
454 455
 
456
+// #######################################################
457
+// ###################### Extruders ######################
458
+// #######################################################
459
+
460
+module extruders() {
461
+    translate([0, -bracket_height, outer_height - slot])
462
+    rotate([0, 0, 90]) {
463
+        translate([0, -(outer_width + (nema17_size + 10)) / 4, 0])
464
+            extruder(slot);
465
+        translate([0, -(outer_width + (nema17_size + 10)) / 2, 0])
466
+            extruder(slot);
467
+        translate([0, -(outer_width + (nema17_size + 10)) * 3 / 4, 0])
468
+            extruder(slot);
469
+    }
470
+}
471
+
455 472
 // ########################################################
456 473
 // ####################### Assembly #######################
457 474
 // ########################################################
458 475
 
459 476
 frame();
460 477
 motion_xy();
478
+extruders();
461 479
 heatbed();
462
-

Loading…
Cancel
Save