Browse Source

Added E3Dv6 model and triple hotend mount for x-carriage

Thomas Buck 6 years ago
parent
commit
b7c02a512c
4 changed files with 258 additions and 5 deletions
  1. 121
    0
      lib/e3d_v6_all_metall_hotend.scad
  2. 124
    4
      lib/linear_bearing.scad
  3. 12
    0
      lib/tslot_xy.scad
  4. 1
    1
      xyRepRap.scad

+ 121
- 0
lib/e3d_v6_all_metall_hotend.scad View File

1
+/*
2
+Name: E3D-v6 All Metal HotEnd in OpenSCAD
3
+Author: Jons Collasius from Germany/Hamburg
4
+
5
+License: CC BY-NC-SA 4.0
6
+License URL: https://creativecommons.org/licenses/by-nc-sa/4.0/
7
+
8
+Creator of "E3D-v6 All Metal HotEnd": E3D Online - JR 
9
+URL E3D v6: http://wiki.e3d-online.com/wiki/E3D-v6_Documentation
10
+*/
11
+
12
+// retrieved from https://www.thingiverse.com/thing:548237
13
+
14
+// ######################################################################################################################
15
+
16
+/* [Global] */
17
+
18
+// resolution of round object. each line segment is fnr mm long. fnr = 1 crude and good for development (its faster), aim for fnr = 0.4 or smaller for a production render. smaller means more details (and a lot more time to render).
19
+fnresolution = 1.0;
20
+// detail level
21
+detaillevel = 1; // [0:coarse render only outlines,1:fine render with all details]
22
+
23
+// ######################################################################################################################
24
+//e3d_v6();
25
+
26
+// ######################################################################################################################
27
+
28
+e3d_v6_height = 65.6;
29
+e3d_upper_large_dia = 16;
30
+e3d_upper_small_dia = 12;
31
+e3d_upper_small_height = 6;
32
+e3d_max_dia = 22;
33
+
34
+module e3d_v6() {
35
+    translate([0, 0, e3d_v6_height])
36
+        rotate([0, 180, 0])
37
+        e3d();
38
+}
39
+
40
+// ######################################################################################################################
41
+module e3d() {
42
+	difference() {
43
+		union() {
44
+			translate([0,0,0]) fncylinder(r=8,h=7);
45
+			translate([0,0,6]) fncylinder(r=6,h=8);
46
+			translate([0,0,13]) fncylinder(r=8,h=8);
47
+			translate([0,0,20]) fncylinder(r=11.15,h=26);
48
+			translate([0,0,0]) fncylinder(r=8,h=7);
49
+			translate([0,0,45]) fncylinder(r=2,h=4.1);
50
+			translate([-8,-4.5,48.1]) chamfercube([16,20,11.5],side=[0.4,0.4,0.4,0.4],top=[0.4,0.4,0.4,0.4],bottom=[0.4,0.4,0.4,0.4]);
51
+			translate([0,0,58.6]) fncylinder(r=2.5,h=3);
52
+			translate([0,0,60.6]) fncylinder(r=4.03,h=3,fn=6);
53
+			translate([0,0,62.6]) fncylinder(r=3,r2=0.5,h=3);
54
+		}
55
+		if(detaillevel==1) {
56
+			translate([0,0,-1]) fncylinder(r=1.6,h=64.1);
57
+			translate([0,0,62.1]) fncylinder(r=0.25,h=4,fn=10);
58
+			translate([0,0,16]) fnpipe(r=9,r2=4.475,h=1.5); 
59
+			translate([0,0,18.5]) fnpipe(r=9,r2=4.475,h=1.5); 
60
+			for ( i = [0 : 9] ) {
61
+				translate([0,0,21+i*2.5]) fnpipe(r=12.15,r2=4.475+i*0.15,h=1.5); 
62
+			}
63
+			translate([-9,8,55.6]) rotate([0,90,0]) fncylinder(r=3.05, h=18);
64
+			translate([-9,8,54.6]) cube([18,8.5,2]);
65
+			translate([0,13,47.1]) fncylinder(r=1.4, h=13.5);
66
+			translate([4.45,-1,54.8]) rotate([0,90,0]) fncylinder(r=1.4, h=4.45);
67
+			translate([3.45,-2.5,57.6]) rotate([0,90,0]) fncylinder(r=1.15, h=5.45);
68
+		}
69
+	}
70
+}
71
+
72
+// ######################################################################################################################
73
+module chamfercube(xyz=[0,0,0],side=[0,0,0,0],top=[0,0,0,0],bottom=[0,0,0,0],x=false,y=false,z=false) {
74
+	translate([x==true?-xyz[0]/2:0,y==true?-xyz[1]/2:0,z==true?-xyz[2]/2:0]) difference() {
75
+		cube(xyz);
76
+		if(side[0]>=0) translate([0,0,xyz[2]/2]) rotate([0,0,45]) cube([side[0]*2,side[0]*3,xyz[2]+2],center=true);
77
+		if(side[1]>=0) translate([xyz[0],0,xyz[2]/2]) rotate([0,0,-45]) cube([side[1]*2,side[1]*3,xyz[2]+2],center=true);
78
+		if(side[2]>=0) translate([xyz[0],xyz[1],xyz[2]/2]) rotate([0,0,45]) cube([side[2]*2,side[2]*3,xyz[2]+2],center=true);
79
+		if(side[3]>=0) translate([0,xyz[1],xyz[2]/2]) rotate([0,0,-45]) cube([side[3]*2,side[3]*3,xyz[2]+2],center=true);
80
+		if(top[0]>=0) translate([xyz[0]/2,0,xyz[2]]) rotate([-45,0,0]) cube([xyz[0]+2,top[0]*2,top[0]*3,],center=true);
81
+		if(top[2]>=0) translate([xyz[0]/2,xyz[1],xyz[2]]) rotate([45,0,0]) cube([xyz[0]+2,top[2]*2,top[2]*3,],center=true);
82
+		if(top[3]>=0) translate([0,xyz[1]/2,xyz[2]]) rotate([0,45,0]) cube([top[3]*2,xyz[1]+2,top[3]*3,],center=true);
83
+		if(top[1]>=0) translate([xyz[0],xyz[1]/2,xyz[2]]) rotate([0,-45,0]) cube([top[1]*2,xyz[1]+2,top[1]*3,],center=true);
84
+		if(bottom[0]>=0) translate([xyz[0]/2,0,0]) rotate([45,0,0]) cube([xyz[0]+2,bottom[0]*2,bottom[0]*3,],center=true);
85
+		if(bottom[2]>=0) translate([xyz[0]/2,xyz[1],0]) rotate([-45,0,0]) cube([xyz[0]+2,bottom[2]*2,bottom[2]*3,],center=true);
86
+		if(bottom[3]>=0) translate([0,xyz[1]/2,0]) rotate([0,-45,0]) cube([bottom[3]*2,xyz[1]+2,bottom[3]*3,],center=true);
87
+		if(bottom[1]>=0) translate([xyz[0],xyz[1]/2,0]) rotate([0,45,0]) cube([bottom[1]*2,xyz[1]+2,bottom[1]*3,],center=true);
88
+	}	
89
+}
90
+
91
+// ######################################################################################################################
92
+module fnpipe(r,r2,h,fn){
93
+	if (fn==undef) {
94
+		difference() {
95
+			fncylinder(r=r,h=h,$fn=2*r*3.14/fnresolution);
96
+			translate([0,0,-1]) fncylinder(r=r2,h=h+2,$fn=2*r*3.14/fnresolution);
97
+		}
98
+	} else {
99
+		difference() {
100
+			fncylinder(r=r,h=h,fn=fn);
101
+			translate([0,0,-1]) fncylinder(r=r2,h=h+2,fn=fn);
102
+		}
103
+	}
104
+}
105
+
106
+// ######################################################################################################################
107
+module fncylinder(r,r2,h,fn){
108
+	if (fn==undef) {
109
+		if (r2==undef) {
110
+			cylinder(r=r,h=h,$fn=2*r*3.14/fnresolution);
111
+		} else {
112
+			cylinder(r=r,r2=r2,h=h,$fn=2*r*3.14/fnresolution);
113
+		}
114
+	} else {
115
+		if (r2==undef) {
116
+			cylinder(r=r,h=h,$fn=fn);
117
+		} else {
118
+			cylinder(r=r,r2=r2,h=h,$fn=fn);
119
+		}
120
+	}
121
+}

+ 124
- 4
lib/linear_bearing.scad View File

1
 
1
 
2
 include <bearing_idler.scad>
2
 include <bearing_idler.scad>
3
+include <e3d_v6_all_metall_hotend.scad>
3
 
4
 
4
 // #######################################################
5
 // #######################################################
5
 // ################### Linear Bearings ###################
6
 // ################### Linear Bearings ###################
9
 lm8uu_inner = 8;
10
 lm8uu_inner = 8;
10
 lm8uu_height = 24;
11
 lm8uu_height = 24;
11
 
12
 
12
-x_rail_dist = 60;
13
+x_rail_dist = 70;
13
 
14
 
14
 lm8uu_dia_add = 0.5;
15
 lm8uu_dia_add = 0.5;
15
 lm8uu_len_add = 1.0;
16
 lm8uu_len_add = 1.0;
41
 x_carriage_belt_block_length = 8;
42
 x_carriage_belt_block_length = 8;
42
 x_carriage_belt_block_height = 25;
43
 x_carriage_belt_block_height = 25;
43
 x_carriage_belt_block_height_b = x_carriage_belt_block_height - 7;
44
 x_carriage_belt_block_height_b = x_carriage_belt_block_height - 7;
44
-x_carriage_block_hole_off = 4.5;
45
+x_carriage_block_hole_off = 6.0;
45
 x_carriage_block_length = 4;
46
 x_carriage_block_length = 4;
46
 x_carriage_block_off = 2.5;
47
 x_carriage_block_off = 2.5;
47
 x_carriage_block_add = 4.4;
48
 x_carriage_block_add = 4.4;
50
 
51
 
51
 x_carriage_block_height = 2 * (x_carriage_block_hole_off + x_carriage_block_add);
52
 x_carriage_block_height = 2 * (x_carriage_block_hole_off + x_carriage_block_add);
52
 
53
 
54
+x_cutout_width = x_carriage_width - (2 * x_carriage_belt_block_width) - 5;
55
+x_cutout_length = x_rail_dist - 25;
56
+
53
 draw_x_carriage = false;
57
 draw_x_carriage = false;
54
 draw_y_carriage = false;
58
 draw_y_carriage = false;
55
 draw_y_carriage_idlers = true;
59
 draw_y_carriage_idlers = true;
72
 
76
 
73
 // TODO add cable tie canal for lm8uu mounting
77
 // TODO add cable tie canal for lm8uu mounting
74
 
78
 
79
+// TODO get ready to actually print these
80
+
75
 module generate_spacer(pos) {
81
 module generate_spacer(pos) {
76
     color("green")
82
     color("green")
77
     translate([pos[0], pos[1], -0.5])
83
     translate([pos[0], pos[1], -0.5])
178
             cylinder(d = 6.1, h = 3.8, $fn = 6);
184
             cylinder(d = 6.1, h = 3.8, $fn = 6);
179
         }
185
         }
180
             
186
             
181
-        translate([x_carriage_belt_block_width / 2, -1, x_carriage_block_hole_off + 8.8])
187
+        translate([x_carriage_belt_block_width / 2, -1, x_carriage_block_height - -x_carriage_block_hole_off - 9])
182
         rotate([-90, 0, 0]) {
188
         rotate([-90, 0, 0]) {
183
             cylinder(d = 3.2, h = x_carriage_belt_block_length + 2);
189
             cylinder(d = 3.2, h = x_carriage_belt_block_length + 2);
184
             cylinder(d = 6.1, h = 3.8, $fn = 6);
190
             cylinder(d = 6.1, h = 3.8, $fn = 6);
255
 }
261
 }
256
 
262
 
257
 module x_carriage() {
263
 module x_carriage() {
264
+    $fn = 20;
265
+    
258
     //color("green")
266
     //color("green")
259
     difference() {
267
     difference() {
260
         union() {
268
         union() {
267
         
275
         
268
         // big center cutout
276
         // big center cutout
269
         translate([x_carriage_width / 2, x_carriage_length / 2, x_carriage_wall / 2])
277
         translate([x_carriage_width / 2, x_carriage_length / 2, x_carriage_wall / 2])
270
-            cube([x_carriage_width - (2 * x_carriage_belt_block_width) - 5, x_rail_dist - 25, x_carriage_wall + 2], center=true);
278
+            cube([x_cutout_width, x_cutout_length, x_carriage_wall + 2], center=true);
271
         
279
         
272
         for (i = [0 : 1 : 1]) {
280
         for (i = [0 : 1 : 1]) {
273
             translate([lm8uu_height + x_carriage_bearing_off + (i * (x_carriage_width - (2 * x_carriage_bearing_off) - lm8uu_height)), 0, ])
281
             translate([lm8uu_height + x_carriage_bearing_off + (i * (x_carriage_width - (2 * x_carriage_bearing_off) - lm8uu_height)), 0, ])
298
                     cylinder(d = lm8uu_inner + rail_dia_add, h = x_carriage_width * 2);
306
                     cylinder(d = lm8uu_inner + rail_dia_add, h = x_carriage_width * 2);
299
             }
307
             }
300
         }
308
         }
309
+        
310
+        // left mounting screw
311
+        translate([5.5, x_carriage_length / 2, -1])
312
+            cylinder(d = e3d_hole_dia, h = x_carriage_wall + 12);
313
+        // right mounting screw
314
+        translate([x_carriage_width - 5.5, x_carriage_length / 2, -1])
315
+            cylinder(d = e3d_hole_dia, h = x_carriage_wall + 12);
316
+        
317
+        // bottom mounting screw
318
+        translate([x_carriage_width / 2, 19, -1])
319
+            cylinder(d = e3d_hole_dia, h = x_carriage_wall + 12);
320
+        // top mounting screw
321
+        translate([x_carriage_width / 2, x_carriage_length - 19, -1])
322
+            cylinder(d = e3d_hole_dia, h = x_carriage_wall + 12);
323
+    }
324
+        
325
+    e3d_v6_dist_x = 23 + 5;
326
+    e3d_v6_dist_y = 18 + 1;
327
+    e3d_v6_z_off = 13;
328
+    
329
+    translate([x_carriage_width / 2, x_carriage_length / 2, -e3d_v6_height + x_carriage_wall + e3d_v6_z_off]) {
330
+        
331
+        color("red")
332
+        %translate([-e3d_v6_dist_x / 2, e3d_v6_dist_y / 2, 0])
333
+            e3d_v6();
334
+        
335
+        color("yellow")
336
+        %translate([e3d_v6_dist_x / 2, e3d_v6_dist_y / 2, 0])
337
+            e3d_v6();
338
+        
339
+        color("blue")
340
+        %translate([0, (e3d_v6_dist_y / 2) - e3d_v6_dist_y, 0])
341
+            rotate([0, 0, 180])
342
+            e3d_v6();
343
+    }
344
+    
345
+    e3d_clamp_width = x_cutout_width;
346
+    e3d_clamp_width_add = 10;
347
+    e3d_clamp_length = e3d_v6_dist_y;
348
+    e3d_clamp_b_length = ((x_cutout_length - e3d_clamp_length) / 2) + 7;
349
+    e3d_clamp_height = e3d_upper_small_height;
350
+    e3d_clamp_dia_add = 0.2;
351
+    e3d_clamp_cut = 0.2; // x2
352
+    e3d_clamp_hole_off = 4;
353
+    e3d_hole_dia = 3.2;
354
+    
355
+    echo(m3_screw_len=e3d_clamp_length + (2 * e3d_clamp_b_length));
356
+    
357
+    // hotend clamp center piece
358
+    translate([(x_carriage_width - e3d_clamp_width) / 2, (x_carriage_length - e3d_clamp_length) / 2, x_carriage_wall])
359
+    difference() {
360
+        union() {
361
+            // center clamp part
362
+            color("magenta")
363
+            translate([-e3d_clamp_width_add, e3d_clamp_cut, 0])
364
+                cube([e3d_clamp_width + (2 * e3d_clamp_width_add), e3d_clamp_length - (2 * e3d_clamp_cut), e3d_clamp_height]);
365
+            
366
+            // blue clamp
367
+            color("cyan")
368
+            translate([0, -e3d_clamp_b_length, 0])
369
+                cube([e3d_clamp_width, e3d_clamp_b_length - e3d_clamp_cut, e3d_clamp_height]);
370
+            
371
+            // red & yellow clamp
372
+            color("cyan")
373
+            translate([0, e3d_clamp_length + e3d_clamp_cut, 0])
374
+                cube([e3d_clamp_width, e3d_clamp_b_length - e3d_clamp_cut, e3d_clamp_height]);
375
+        }
376
+        
377
+        // left clamping screw
378
+        translate([e3d_clamp_hole_off, -e3d_clamp_b_length - 1, e3d_clamp_height / 2])
379
+            rotate([-90, 0, 0])
380
+            cylinder(d = e3d_hole_dia, h = x_cutout_width + 2);
381
+        // right clamping screw
382
+        translate([x_cutout_width - e3d_clamp_hole_off, -e3d_clamp_b_length - 1, e3d_clamp_height / 2])
383
+            rotate([-90, 0, 0])
384
+            cylinder(d = e3d_hole_dia, h = x_cutout_width + 2);
385
+        
386
+        // left mounting screw
387
+        translate([-5, e3d_clamp_length / 2, -1])
388
+            cylinder(d = e3d_hole_dia, h = e3d_clamp_height + 2);
389
+        // right mounting screw
390
+        translate([e3d_clamp_width + e3d_clamp_width_add - 5, e3d_clamp_length / 2, -1])
391
+            cylinder(d = e3d_hole_dia, h = e3d_clamp_height + 2);
392
+        
393
+        // bottom mounting screw
394
+        translate([e3d_clamp_width / 2, -e3d_clamp_b_length + 3.5, -1])
395
+            cylinder(d = e3d_hole_dia, h = e3d_clamp_height + 2);
396
+        // top mounting screw
397
+        translate([e3d_clamp_width / 2, e3d_clamp_length + e3d_clamp_b_length - 3.5, -1])
398
+            cylinder(d = e3d_hole_dia, h = e3d_clamp_height + 2);
399
+        
400
+        // red e3d clamp cutout
401
+        translate([(e3d_clamp_width - e3d_v6_dist_x) / 2, e3d_clamp_length, -1])
402
+            cylinder(d = e3d_upper_small_dia + e3d_clamp_dia_add, h = e3d_clamp_height + 2);
403
+        
404
+        // yellow e3d clamp cutout
405
+        translate([(e3d_clamp_width + e3d_v6_dist_x) / 2, e3d_clamp_length, -1])
406
+            cylinder(d = e3d_upper_small_dia + e3d_clamp_dia_add, h = e3d_clamp_height + 2);
407
+        
408
+        // blue e3d clamp cutout
409
+        translate([e3d_clamp_width / 2, 0, -1])
410
+            cylinder(d = e3d_upper_small_dia + e3d_clamp_dia_add, h = e3d_clamp_height + 2);
411
+    }
412
+    
413
+    // hotend cooling fan
414
+    color("grey")
415
+    %translate([x_carriage_width + 5, (x_carriage_length - 40) / 2, -40])
416
+    difference() {
417
+        cube([20, 40, 40]);
418
+        translate([-1, 20, 20])
419
+            rotate([0, 90, 0])
420
+            cylinder(d = 35, h = 22);
301
     }
421
     }
302
 }
422
 }
303
 
423
 

+ 12
- 0
lib/tslot_xy.scad View File

5
 
5
 
6
 include <tslot.scad>
6
 include <tslot.scad>
7
 module tslot_x(slot, length) {
7
 module tslot_x(slot, length) {
8
+    echo(t_slot_x=slot, t_slot_y=slot, length=length);
9
+    
8
     color("white")
10
     color("white")
9
     if (slot == 30) {
11
     if (slot == 30) {
10
         translate([0, 0, slot])
12
         translate([0, 0, slot])
17
     }
19
     }
18
 }
20
 }
19
 module tslot_y(slot, length) {
21
 module tslot_y(slot, length) {
22
+    echo(t_slot_x=slot, t_slot_y=slot, length=length);
23
+    
20
     color("white")
24
     color("white")
21
     if (slot == 30) {
25
     if (slot == 30) {
22
         translate([0, 0, slot])
26
         translate([0, 0, slot])
29
     }
33
     }
30
 }
34
 }
31
 module tslot_z(slot, length) {
35
 module tslot_z(slot, length) {
36
+    echo(t_slot_x=slot, t_slot_y=slot, length=length);
37
+    
32
     color("white")
38
     color("white")
33
     if (slot == 30) {
39
     if (slot == 30) {
34
         translate([0, 0, 0])
40
         translate([0, 0, 0])
40
 }
46
 }
41
 
47
 
42
 module tslot_2_x(slot, length) {
48
 module tslot_2_x(slot, length) {
49
+    echo(t_slot_x=slot, t_slot_y=slot * 2, length=length);
50
+    
43
     color("white")
51
     color("white")
44
     if (slot == 30) {
52
     if (slot == 30) {
45
         translate([0, 0, slot])
53
         translate([0, 0, slot])
52
     }
60
     }
53
 }
61
 }
54
 module tslot_2_y(slot, length) {
62
 module tslot_2_y(slot, length) {
63
+    echo(t_slot_x=slot, t_slot_y=slot * 2, length=length);
64
+    
55
     color("white")
65
     color("white")
56
     if (slot == 30) {
66
     if (slot == 30) {
57
         translate([0, 0, slot])
67
         translate([0, 0, slot])
64
     }
74
     }
65
 }
75
 }
66
 module tslot_2_z(slot, length) {
76
 module tslot_2_z(slot, length) {
77
+    echo(t_slot_x=slot, t_slot_y=slot * 2, length=length);
78
+    
67
     color("white")
79
     color("white")
68
     if (slot == 30) {
80
     if (slot == 30) {
69
         translate([0, 0, 0])
81
         translate([0, 0, 0])

+ 1
- 1
xyRepRap.scad View File

411
 
411
 
412
 frame();
412
 frame();
413
 motion_xy();
413
 motion_xy();
414
-heatbed();
414
+//heatbed();
415
 
415
 

Loading…
Cancel
Save