Browse Source

Added sensor and fan to x-carriage, started with heatbed.

Thomas Buck 6 years ago
parent
commit
7f2dd1cd64
2 changed files with 253 additions and 33 deletions
  1. 192
    19
      lib/linear_bearing.scad
  2. 61
    14
      xyRepRap.scad

+ 192
- 19
lib/linear_bearing.scad View File

@@ -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
         }

+ 61
- 14
xyRepRap.scad View File

@@ -22,6 +22,15 @@ outer_length = heatbed_length + (2 * (slot + frame_off_y));
22 22
 // TODO depend on print area height
23 23
 outer_height = 500;
24 24
 
25
+rail_mount_dist = 12;
26
+y_carriage_pos = 175;
27
+x_carriage_pos = 180;
28
+
29
+// distance between heatbed and z-carriage frame
30
+bed_x_off = 20;
31
+bed_y_off = 20;
32
+bed_z_dist = 30;
33
+
25 34
 // display heatbed centered in print volume
26 35
 bed_draw_height = (outer_height - heatbed_height) / 2;
27 36
 
@@ -88,17 +97,17 @@ module lower_frame(double) {
88 97
             tslot_2_x(slot, outer_width - (2 * (slot + slot_off)));
89 98
         
90 99
         translate([0, slot + slot_off, 0])
91
-            tslot_2_y(slot, outer_width - (2 * (slot + slot_off)));
100
+            tslot_2_y(slot, outer_length - (2 * (slot + slot_off)));
92 101
         translate([outer_width - slot, slot + slot_off, 0])
93
-            tslot_2_y(slot, outer_width - (2 * (slot + slot_off)));
102
+            tslot_2_y(slot, outer_length - (2 * (slot + slot_off)));
94 103
     } else {
95 104
         translate([slot + slot_off, outer_length - slot, 0])
96 105
             tslot_x(slot, outer_width - (2 * (slot + slot_off)));
97 106
         
98 107
         translate([0, slot + slot_off, 0])
99
-            tslot_y(slot, outer_width - (2 * (slot + slot_off)));
108
+            tslot_y(slot, outer_length - (2 * (slot + slot_off)));
100 109
         translate([outer_width - slot, slot + slot_off, 0])
101
-            tslot_y(slot, outer_width - (2 * (slot + slot_off)));
110
+            tslot_y(slot, outer_length - (2 * (slot + slot_off)));
102 111
     }
103 112
 }
104 113
 
@@ -219,10 +228,6 @@ module frame() {
219 228
 // ###################### Mechanics ######################
220 229
 // #######################################################
221 230
 
222
-rail_mount_dist = 12;
223
-y_carriage_pos = 175;
224
-x_carriage_pos = 180;
225
-
226 231
 module rail(length) {
227 232
     cylinder(d = rail_dia, h = length);
228 233
     echo(rail_dia=rail_dia, rail_len=length);
@@ -275,12 +280,12 @@ module x_rails() {
275 280
     color("cyan")
276 281
     translate([30, y_carriage_pos, 15])
277 282
         rotate([0, 90, 0])
278
-        rail(outer_length - (4 * slot));
283
+        rail(outer_width - (4 * slot));
279 284
     
280 285
     color("cyan")
281 286
     translate([30, y_carriage_pos + x_rail_dist, 15])
282 287
         rotate([0, 90, 0])
283
-        rail(outer_length - (4 * slot));
288
+        rail(outer_width - (4 * slot));
284 289
     
285 290
     translate([x_carriage_pos, y_carriage_pos - x_carriage_len_add, slot / 2])
286 291
         x_carriage();
@@ -399,10 +404,52 @@ module motion_xy() {
399 404
 // ####################### Heatbed #######################
400 405
 // #######################################################
401 406
 
402
-module heatbed() {
403
-    color("yellow")
404
-    translate([slot + frame_off_x, slot + frame_off_y, bed_draw_height])
407
+module heatbed_plate() {
408
+    difference() {
409
+        color("yellow")
405 410
         cube([heatbed_width, heatbed_length, heatbed_height]);
411
+
412
+        #translate([bed_x_off + (slot / 2), bed_y_off + (slot / 2), -bed_z_dist - slot - 1])
413
+            cylinder(d = 4.2, h = bed_z_dist + slot + heatbed_height + 2);
414
+        #translate([heatbed_width - bed_x_off - (slot / 2), bed_y_off + (slot / 2), -bed_z_dist - slot - 1])
415
+            cylinder(d = 4.2, h = bed_z_dist + slot + heatbed_height + 2);
416
+        #translate([bed_x_off + (slot / 2), heatbed_length - bed_y_off - (slot / 2), -bed_z_dist - slot - 1])
417
+            cylinder(d = 4.2, h = bed_z_dist + slot + heatbed_height + 2);
418
+        #translate([heatbed_width - bed_x_off - (slot / 2), heatbed_length - bed_y_off - (slot / 2), -bed_z_dist - slot - 1])
419
+            cylinder(d = 4.2, h = bed_z_dist + slot + heatbed_height + 2);
420
+    }
421
+    
422
+    echo(max_bed_heater_width=heatbed_width - (2 * bed_x_off) - slot - 5);
423
+    echo(max_bed_heater_length=heatbed_length - (2 * bed_y_off) - slot - 5);
424
+}
425
+
426
+module heatbed() {
427
+    translate([slot + frame_off_x, slot + frame_off_y, bed_draw_height]) {
428
+        heatbed_plate();
429
+        
430
+        // t-slots as heatbed frame
431
+        translate([bed_x_off, bed_y_off, -slot - bed_z_dist])
432
+            tslot_y(slot, heatbed_length - (2 * bed_y_off));
433
+        translate([heatbed_width - slot - bed_x_off, bed_y_off, -slot - bed_z_dist])
434
+            tslot_y(slot, heatbed_length - (2 * bed_y_off));
435
+        translate([slot + bed_x_off + slot_off, bed_y_off, -slot - bed_z_dist])
436
+            tslot_x(slot, heatbed_width - 2 * (bed_x_off + slot + slot_off));
437
+        translate([slot + bed_x_off + slot_off, heatbed_length - slot - bed_y_off, -slot - bed_z_dist])
438
+            tslot_x(slot, heatbed_width - 2 * (bed_x_off + slot + slot_off));
439
+        
440
+        translate([bed_x_off + slot, bed_y_off + slot, -slot - bed_z_dist])
441
+            rotate([90, 0, 90])
442
+            slot_angle_connector();
443
+        translate([bed_x_off + slot, heatbed_length - slot - bed_y_off, -slot - bed_z_dist])
444
+            rotate([90, 0, 0])
445
+            slot_angle_connector();
446
+        translate([heatbed_width - slot - bed_x_off, heatbed_length - slot - bed_y_off, -slot - bed_z_dist])
447
+            rotate([90, 0, -90])
448
+            slot_angle_connector();
449
+        translate([heatbed_width - slot - bed_x_off, bed_y_off + slot, -slot - bed_z_dist])
450
+            rotate([90, 0, 180])
451
+            slot_angle_connector();
452
+    }
406 453
 }
407 454
 
408 455
 // ########################################################
@@ -411,5 +458,5 @@ module heatbed() {
411 458
 
412 459
 frame();
413 460
 motion_xy();
414
-//heatbed();
461
+heatbed();
415 462
 

Loading…
Cancel
Save