|
@@ -75,16 +75,49 @@ e3d_clamp_hole_off = 4;
|
75
|
75
|
e3d_hole_dia = 3.2;
|
76
|
76
|
|
77
|
77
|
fan_mount_wall = 5;
|
78
|
|
-fan_mount_inset = 5;
|
|
78
|
+fan_mount_inset = 6;
|
|
79
|
+fan_mount_hole_inset = 8;
|
79
|
80
|
fan_width = 40;
|
80
|
81
|
fan_height = 20;
|
81
|
|
-fan_hole_off = 3; // TODO measure!
|
|
82
|
+fan_hole_off = 3.9;
|
|
83
|
+
|
|
84
|
+universal_mount_hole_off = 6;
|
|
85
|
+
|
|
86
|
+nut_cut_width = 5.7;
|
|
87
|
+nut_cut_depth = 2.6;
|
|
88
|
+nut_cut_off = 3.2;
|
|
89
|
+nut_cut_height = 20;
|
|
90
|
+
|
|
91
|
+sensor_mount_width_add = 8;
|
|
92
|
+sensor_mount_wall = 4;
|
|
93
|
+sensor_mount_y_offset = -1;
|
|
94
|
+sensor_mount_height = 8;
|
|
95
|
+sensor_dia = 19;
|
|
96
|
+sensor_dia_add = 6;
|
|
97
|
+
|
|
98
|
+sensor_mount_width = (2 * universal_mount_hole_off) + sensor_mount_width_add;
|
82
|
99
|
|
83
|
100
|
draw_x_carriage = false;
|
|
101
|
+draw_e3d_fan_duct = true;
|
|
102
|
+
|
84
|
103
|
draw_y_carriage = false;
|
85
|
104
|
draw_y_carriage_idlers = true;
|
86
|
105
|
draw_rail_len = 200;
|
87
|
106
|
|
|
107
|
+
|
|
108
|
+// TODO add cable tie canal for lm8uu mounting
|
|
109
|
+// TODO get ready to actually print these
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+module nut_cut() {
|
|
113
|
+ translate([-nut_cut_width / 2, 1, nut_cut_off - nut_cut_height]) {
|
|
114
|
+ cube([nut_cut_width, nut_cut_depth, nut_cut_height]);
|
|
115
|
+ translate([nut_cut_width / 2, -5, nut_cut_height - nut_cut_off])
|
|
116
|
+ rotate([-90, 0, 0])
|
|
117
|
+ cylinder(d = 3.2, h = nut_cut_depth + 5);
|
|
118
|
+ }
|
|
119
|
+}
|
|
120
|
+
|
88
|
121
|
module lm8uu() {
|
89
|
122
|
$fn = 15;
|
90
|
123
|
difference() {
|
|
@@ -94,17 +127,6 @@ module lm8uu() {
|
94
|
127
|
}
|
95
|
128
|
}
|
96
|
129
|
|
97
|
|
-// TODO add cable tie canal for lm8uu mounting
|
98
|
|
-
|
99
|
|
-// TODO mounting holes on actual carriage
|
100
|
|
-
|
101
|
|
-// TODO also universal mounting holes
|
102
|
|
-// at front and back of carriage.
|
103
|
|
-// front: auto level sensor
|
104
|
|
-// back: filament fan
|
105
|
|
-
|
106
|
|
-// TODO get ready to actually print these
|
107
|
|
-
|
108
|
130
|
module generate_spacer(pos) {
|
109
|
131
|
color("green")
|
110
|
132
|
translate([pos[0], pos[1], -0.5])
|
|
@@ -349,11 +371,160 @@ module x_carriage() {
|
349
|
371
|
// top mounting screw
|
350
|
372
|
translate([x_carriage_width / 2, x_carriage_length - 19, -1])
|
351
|
373
|
cylinder(d = e3d_hole_dia, h = x_carriage_wall + 12);
|
|
374
|
+
|
|
375
|
+ // fan mount attachment holes on left side
|
|
376
|
+ translate([-fan_mount_wall - 1, ((x_carriage_length - fan_width) / 2) + fan_mount_hole_inset, x_carriage_wall / 2])
|
|
377
|
+ rotate([0, 90, 0])
|
|
378
|
+ cylinder(d = 3.2, h = ((x_carriage_width - x_cutout_width) / 2) + fan_mount_wall + 2);
|
|
379
|
+ translate([-fan_mount_wall - 1, ((x_carriage_length + fan_width) / 2) - fan_mount_hole_inset, x_carriage_wall / 2])
|
|
380
|
+ rotate([0, 90, 0])
|
|
381
|
+ cylinder(d = 3.2, h = ((x_carriage_width - x_cutout_width) / 2) + fan_mount_wall + 2);
|
|
382
|
+
|
|
383
|
+ // fan mount attachment holes on right side
|
|
384
|
+ translate([((x_carriage_width + x_cutout_width) / 2) - 1, ((x_carriage_length - fan_width) / 2) + fan_mount_hole_inset, x_carriage_wall / 2])
|
|
385
|
+ rotate([0, 90, 0])
|
|
386
|
+ cylinder(d = 3.2, h = ((x_carriage_width - x_cutout_width) / 2) + fan_mount_wall + 2);
|
|
387
|
+ translate([((x_carriage_width + x_cutout_width) / 2) - 1, ((x_carriage_length + fan_width) / 2) - fan_mount_hole_inset, x_carriage_wall / 2])
|
|
388
|
+ rotate([0, 90, 0])
|
|
389
|
+ cylinder(d = 3.2, h = ((x_carriage_width - x_cutout_width) / 2) + fan_mount_wall + 2);
|
|
390
|
+
|
|
391
|
+ // universal add-on mounting on front
|
|
392
|
+ translate([(x_carriage_width / 2) + universal_mount_hole_off, 0, x_carriage_wall / 2])
|
|
393
|
+ rotate([0, 180, 0])
|
|
394
|
+ nut_cut();
|
|
395
|
+ translate([(x_carriage_width / 2) - universal_mount_hole_off, 0, x_carriage_wall / 2])
|
|
396
|
+ rotate([0, 180, 0])
|
|
397
|
+ nut_cut();
|
|
398
|
+
|
|
399
|
+ // universal add-on mounting on back
|
|
400
|
+ translate([(x_carriage_width / 2) + universal_mount_hole_off, x_carriage_length, x_carriage_wall / 2])
|
|
401
|
+ rotate([0, 180, 180])
|
|
402
|
+ nut_cut();
|
|
403
|
+ translate([(x_carriage_width / 2) - universal_mount_hole_off, x_carriage_length, x_carriage_wall / 2])
|
|
404
|
+ rotate([0, 180, 180])
|
|
405
|
+ nut_cut();
|
352
|
406
|
}
|
353
|
407
|
|
|
408
|
+ translate([(x_carriage_width - sensor_mount_width) / 2, -sensor_mount_wall, 0])
|
|
409
|
+ sensor_mount();
|
|
410
|
+
|
|
411
|
+ translate([(x_carriage_width - sensor_mount_width) / 2, x_carriage_length, 0])
|
|
412
|
+ radial_fan_mount();
|
|
413
|
+
|
354
|
414
|
e3d_v6_triple_mount();
|
355
|
415
|
}
|
356
|
416
|
|
|
417
|
+module radial_fan_mount() {
|
|
418
|
+ color("yellow")
|
|
419
|
+ universal_mount_plate();
|
|
420
|
+
|
|
421
|
+ color("yellow")
|
|
422
|
+ translate([-52, 0, 0])
|
|
423
|
+ cube([52, sensor_mount_wall, x_carriage_wall]);
|
|
424
|
+
|
|
425
|
+ color("yellow")
|
|
426
|
+ translate([-9, 0, x_carriage_wall])
|
|
427
|
+
|
|
428
|
+ difference() {
|
|
429
|
+ cube([9, sensor_mount_wall, 13]);
|
|
430
|
+ translate([4.5, -1, 9])
|
|
431
|
+ rotate([-90, 0, 0])
|
|
432
|
+ cylinder(d = 4.2, h = sensor_mount_wall + 2);
|
|
433
|
+ }
|
|
434
|
+
|
|
435
|
+ color("yellow")
|
|
436
|
+ translate([-52, 0, -23])
|
|
437
|
+ difference() {
|
|
438
|
+ cube([9, sensor_mount_wall, 23]);
|
|
439
|
+ translate([4.5, -1, 4])
|
|
440
|
+ rotate([-90, 0, 0])
|
|
441
|
+ cylinder(d = 4.2, h = sensor_mount_wall + 2);
|
|
442
|
+ }
|
|
443
|
+
|
|
444
|
+ // 5015 fan mockup
|
|
445
|
+ %color("gray")
|
|
446
|
+ translate([-(x_carriage_width - sensor_mount_width) / 2 + 4, sensor_mount_wall, 0])
|
|
447
|
+ rotate([90, 0, 180])
|
|
448
|
+ fan_5015();
|
|
449
|
+}
|
|
450
|
+
|
|
451
|
+module fan_5015() {
|
|
452
|
+ // adapted from https://www.thingiverse.com/thing:1383913
|
|
453
|
+ $fn=30;
|
|
454
|
+ difference() {
|
|
455
|
+ union() {
|
|
456
|
+ hull() {
|
|
457
|
+ translate([0.5, 0, 0]) cylinder(d=50, h=15);
|
|
458
|
+ translate([-1, 0, 0]) cylinder(d=50, h=15);
|
|
459
|
+ }
|
|
460
|
+ hull() {
|
|
461
|
+ translate([-43/2, 38/2, 0]) cylinder(d=7, h=15);
|
|
462
|
+ translate([43/2, -38/2, 0]) cylinder(d=7, h=15);
|
|
463
|
+ }
|
|
464
|
+ translate([-26, -26, 0]) cube([20,26,15]);
|
|
465
|
+ }
|
|
466
|
+ difference() {
|
|
467
|
+ union() {
|
|
468
|
+ translate([-26+16+11,-2,1]) cylinder(d=32, h=15);
|
|
469
|
+ translate([0,0,1]) hull(){
|
|
470
|
+ translate([0.5, 0]) cylinder(d=48, h=13);
|
|
471
|
+ translate([-1, 0]) cylinder(d=48, h=13);
|
|
472
|
+ }
|
|
473
|
+ translate([-25,-27,1]) cube([18,25,13]);
|
|
474
|
+ }
|
|
475
|
+ translate([-26+16+11,-2,1]) cylinder(d=24, h=15);
|
|
476
|
+ }
|
|
477
|
+ translate([-43/2, 38/2, -1]) cylinder(d=4.4, h=17);
|
|
478
|
+ translate([43/2, -38/2, -1]) cylinder(d=4.4, h=17);
|
|
479
|
+ }
|
|
480
|
+}
|
|
481
|
+
|
|
482
|
+module universal_mount_plate() {
|
|
483
|
+ difference() {
|
|
484
|
+ cube([sensor_mount_width, sensor_mount_wall, x_carriage_wall]);
|
|
485
|
+
|
|
486
|
+ translate([sensor_mount_width_add / 2, -1, x_carriage_wall / 2])
|
|
487
|
+ rotate([-90, 0, 0])
|
|
488
|
+ cylinder(d = 3.2, h = sensor_mount_wall + 2);
|
|
489
|
+
|
|
490
|
+ translate([(universal_mount_hole_off * 2) + (sensor_mount_width_add / 2), -1, x_carriage_wall / 2])
|
|
491
|
+ rotate([-90, 0, 0])
|
|
492
|
+ cylinder(d = 3.2, h = sensor_mount_wall + 2);
|
|
493
|
+ }
|
|
494
|
+}
|
|
495
|
+
|
|
496
|
+module sensor_mount() {
|
|
497
|
+ $fn = 30;
|
|
498
|
+
|
|
499
|
+ color("yellow")
|
|
500
|
+ universal_mount_plate();
|
|
501
|
+
|
|
502
|
+ color("yellow")
|
|
503
|
+ translate([sensor_mount_width / 2, -(sensor_dia + sensor_dia_add) / 2, -sensor_mount_height])
|
|
504
|
+ difference() {
|
|
505
|
+ hull() {
|
|
506
|
+ translate([-sensor_mount_width / 2, (sensor_dia + sensor_dia_add) / 2, 0])
|
|
507
|
+ cube([sensor_mount_width, sensor_mount_wall, sensor_mount_height]);
|
|
508
|
+
|
|
509
|
+ translate([0, sensor_mount_y_offset, 0])
|
|
510
|
+ cylinder(d = sensor_dia + sensor_dia_add, h = sensor_mount_height);
|
|
511
|
+ }
|
|
512
|
+
|
|
513
|
+ translate([0, sensor_mount_y_offset, -1])
|
|
514
|
+ cylinder(d = sensor_dia, h = sensor_mount_height + 2);
|
|
515
|
+ }
|
|
516
|
+
|
|
517
|
+ // sensor mockup
|
|
518
|
+ %translate([sensor_mount_width / 2, -(sensor_dia + sensor_dia_add) / 2 + sensor_mount_y_offset, -22]) {
|
|
519
|
+ color("gray")
|
|
520
|
+ cylinder(d = 18.2, h = 55);
|
|
521
|
+
|
|
522
|
+ color("orange")
|
|
523
|
+ translate([0, 0, -10])
|
|
524
|
+ cylinder(d = 18.2, h = 10);
|
|
525
|
+ }
|
|
526
|
+}
|
|
527
|
+
|
357
|
528
|
module e3d_v6_triple_mount() {
|
358
|
529
|
translate([x_carriage_width / 2, x_carriage_length / 2, -e3d_v6_height + x_carriage_wall + e3d_v6_z_off]) {
|
359
|
530
|
|
|
@@ -479,18 +650,20 @@ module e3d_v6_triple_fan() {
|
479
|
650
|
}
|
480
|
651
|
|
481
|
652
|
// fan duct
|
482
|
|
- color("orange")
|
483
|
|
- translate([x_carriage_width, (x_carriage_length - fan_width) / 2, 0])
|
484
|
|
- difference() {
|
485
|
|
- fan_duct(fan_width, 0);
|
486
|
|
- fan_duct(fan_width, 3);
|
|
653
|
+ if (draw_e3d_fan_duct) {
|
|
654
|
+ color("orange")
|
|
655
|
+ translate([x_carriage_width, (x_carriage_length - fan_width) / 2, 0])
|
|
656
|
+ difference() {
|
|
657
|
+ fan_duct(fan_width, 0);
|
|
658
|
+ fan_duct(fan_width, 3);
|
|
659
|
+ }
|
487
|
660
|
}
|
488
|
661
|
}
|
489
|
662
|
|
490
|
663
|
// mounting holes on carriage
|
491
|
664
|
translate([-fan_mount_wall - fan_height - 1, x_carriage_length / 2, x_carriage_wall / 2])
|
492
|
665
|
for (i = [-1 : 2 : 1]) {
|
493
|
|
- translate([0, i * ((fan_width / 2) - 8), 0])
|
|
666
|
+ translate([0, i * ((fan_width / 2) - fan_mount_hole_inset), 0])
|
494
|
667
|
rotate([0, 90, 0])
|
495
|
668
|
cylinder(d = 3.2, h = x_carriage_width + (2 * (fan_height + fan_mount_wall + 1)));
|
496
|
669
|
}
|