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
 e3d_hole_dia = 3.2;
75
 e3d_hole_dia = 3.2;
76
 
76
 
77
 fan_mount_wall = 5;
77
 fan_mount_wall = 5;
78
-fan_mount_inset = 5;
78
+fan_mount_inset = 6;
79
+fan_mount_hole_inset = 8;
79
 fan_width = 40;
80
 fan_width = 40;
80
 fan_height = 20;
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
 draw_x_carriage = false;
100
 draw_x_carriage = false;
101
+draw_e3d_fan_duct = true;
102
+
84
 draw_y_carriage = false;
103
 draw_y_carriage = false;
85
 draw_y_carriage_idlers = true;
104
 draw_y_carriage_idlers = true;
86
 draw_rail_len = 200;
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
 module lm8uu() {
121
 module lm8uu() {
89
     $fn = 15;
122
     $fn = 15;
90
     difference() {
123
     difference() {
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
 module generate_spacer(pos) {
130
 module generate_spacer(pos) {
109
     color("green")
131
     color("green")
110
     translate([pos[0], pos[1], -0.5])
132
     translate([pos[0], pos[1], -0.5])
349
         // top mounting screw
371
         // top mounting screw
350
         translate([x_carriage_width / 2, x_carriage_length - 19, -1])
372
         translate([x_carriage_width / 2, x_carriage_length - 19, -1])
351
             cylinder(d = e3d_hole_dia, h = x_carriage_wall + 12);
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
     e3d_v6_triple_mount();
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
 module e3d_v6_triple_mount() {
528
 module e3d_v6_triple_mount() {
358
     translate([x_carriage_width / 2, x_carriage_length / 2, -e3d_v6_height + x_carriage_wall + e3d_v6_z_off]) {
529
     translate([x_carriage_width / 2, x_carriage_length / 2, -e3d_v6_height + x_carriage_wall + e3d_v6_z_off]) {
359
         
530
         
479
             }
650
             }
480
             
651
             
481
             // fan duct
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
         // mounting holes on carriage
663
         // mounting holes on carriage
491
         translate([-fan_mount_wall - fan_height - 1, x_carriage_length / 2, x_carriage_wall / 2])
664
         translate([-fan_mount_wall - fan_height - 1, x_carriage_length / 2, x_carriage_wall / 2])
492
         for (i = [-1 : 2 : 1]) {
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
                 rotate([0, 90, 0])
667
                 rotate([0, 90, 0])
495
                 cylinder(d = 3.2, h = x_carriage_width + (2 * (fan_height + fan_mount_wall + 1)));
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
 // TODO depend on print area height
22
 // TODO depend on print area height
23
 outer_height = 500;
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
 // display heatbed centered in print volume
34
 // display heatbed centered in print volume
26
 bed_draw_height = (outer_height - heatbed_height) / 2;
35
 bed_draw_height = (outer_height - heatbed_height) / 2;
27
 
36
 
88
             tslot_2_x(slot, outer_width - (2 * (slot + slot_off)));
97
             tslot_2_x(slot, outer_width - (2 * (slot + slot_off)));
89
         
98
         
90
         translate([0, slot + slot_off, 0])
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
         translate([outer_width - slot, slot + slot_off, 0])
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
     } else {
103
     } else {
95
         translate([slot + slot_off, outer_length - slot, 0])
104
         translate([slot + slot_off, outer_length - slot, 0])
96
             tslot_x(slot, outer_width - (2 * (slot + slot_off)));
105
             tslot_x(slot, outer_width - (2 * (slot + slot_off)));
97
         
106
         
98
         translate([0, slot + slot_off, 0])
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
         translate([outer_width - slot, slot + slot_off, 0])
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
 // ###################### Mechanics ######################
228
 // ###################### Mechanics ######################
220
 // #######################################################
229
 // #######################################################
221
 
230
 
222
-rail_mount_dist = 12;
223
-y_carriage_pos = 175;
224
-x_carriage_pos = 180;
225
-
226
 module rail(length) {
231
 module rail(length) {
227
     cylinder(d = rail_dia, h = length);
232
     cylinder(d = rail_dia, h = length);
228
     echo(rail_dia=rail_dia, rail_len=length);
233
     echo(rail_dia=rail_dia, rail_len=length);
275
     color("cyan")
280
     color("cyan")
276
     translate([30, y_carriage_pos, 15])
281
     translate([30, y_carriage_pos, 15])
277
         rotate([0, 90, 0])
282
         rotate([0, 90, 0])
278
-        rail(outer_length - (4 * slot));
283
+        rail(outer_width - (4 * slot));
279
     
284
     
280
     color("cyan")
285
     color("cyan")
281
     translate([30, y_carriage_pos + x_rail_dist, 15])
286
     translate([30, y_carriage_pos + x_rail_dist, 15])
282
         rotate([0, 90, 0])
287
         rotate([0, 90, 0])
283
-        rail(outer_length - (4 * slot));
288
+        rail(outer_width - (4 * slot));
284
     
289
     
285
     translate([x_carriage_pos, y_carriage_pos - x_carriage_len_add, slot / 2])
290
     translate([x_carriage_pos, y_carriage_pos - x_carriage_len_add, slot / 2])
286
         x_carriage();
291
         x_carriage();
399
 // ####################### Heatbed #######################
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
         cube([heatbed_width, heatbed_length, heatbed_height]);
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
 
458
 
412
 frame();
459
 frame();
413
 motion_xy();
460
 motion_xy();
414
-//heatbed();
461
+heatbed();
415
 
462
 

Loading…
Cancel
Save