| 1 | // PRUSA iteration3 |
| 2 | // X carriage |
| 3 | // GNU GPL v3 |
| 4 | // Josef Průša <josefprusa@me.com> |
| 5 | // Václav 'ax' Hůla <axtheb@gmail.com> |
| 6 | // http://www.reprap.org/wiki/Prusa_Mendel |
| 7 | // http://github.com/prusajr/PrusaMendel |
| 8 | |
| 9 | include <configuration.scad> |
| 10 | use <bushing.scad> |
| 11 | // mounting plate |
| 12 | use <extras/groovemount.scad> |
| 13 | |
| 14 | |
| 15 | //Use 30 for single extruder, 50 for wades, 80 for dual extruders (moved to config file) |
| 16 | //carriage_l_base = 80; |
| 17 | //check if we need to extend carriage to fit bearings |
| 18 | carriage_l_adjusted = max(adjust_bushing_len(bushing_xy, carriage_l_base, layer_height * 9), adjust_bushing_len(bushing_carriage, carriage_l_base, layer_height * 9)); |
| 19 | //For bearings 30mm long or shorter enforce double len |
| 20 | carriage_l_real = max((bushing_xy[2] > 30 ? carriage_l_adjusted : (2 * bushing_xy[2] + 6)), carriage_l_adjusted); |
| 21 | // if the carriage was extended, we want to increase carriage_hole_to_side |
| 22 | carriage_hole_to_side = max(3, ((carriage_l_real - carriage_l_base) / 2)); |
| 23 | echo(carriage_hole_to_side); |
| 24 | carriage_l = carriage_l_base + 2 * carriage_hole_to_side; |
| 25 | |
| 26 | |
| 27 | bushing_carriage_len = adjust_bushing_len(bushing_carriage, 21, layer_height * 9); |
| 28 | |
| 29 | module x_carriage(){ |
| 30 | mirror([1,0,0]) { |
| 31 | difference() { |
| 32 | union() { |
| 33 | //upper bearing |
| 34 | rotate([0, 0, 90]) linear(bushing_carriage); |
| 35 | //lower bearing |
| 36 | translate([xaxis_rod_distance,0,0]) rotate([0, 0, 90]) linear(bushing_xy, carriage_l); |
| 37 | |
| 38 | //This block moves with varying bearing thickness to ensure the front side is flat |
| 39 | translate([0, -bushing_foot_len(bushing_xy), 0]) { |
| 40 | // main plate |
| 41 | translate([4, -1, 0]) cube_fillet([xaxis_rod_distance + 4, 6, carriage_l], radius=2); |
| 42 | translate([-8, -1, 0]) cube_fillet([xaxis_rod_distance + 16, 6, bushing_carriage_len + 3], radius=2); |
| 43 | } |
| 44 | |
| 45 | translate([45/2,0,0]){ |
| 46 | |
| 47 | //fill the space where the belt is, as it will be substracted at later point and we want it stiff here. |
| 48 | //belt smooth side |
| 49 | translate([-13.5 - belt_thickness, -8.5, 0]) cube_fillet([5, 15, carriage_l], vertical = [2, 2, 0, 0]); |
| 50 | //belt teethed side, with cutouts for belt ends. |
| 51 | difference(){ |
| 52 | union() { |
| 53 | translate([-3, -1, carriage_l/2]) cube_fillet([11, 16, carriage_l], vertical = [2, 2, 0, 0], center = true); |
| 54 | translate([-13, -10, 0]) cube([8, 10, carriage_l]); |
| 55 | } |
| 56 | translate([-3.5, 0, 67 + carriage_hole_to_side]) cube([13, 10, 8], center = true); |
| 57 | translate([-3.5, 0, 40 + carriage_hole_to_side]) cube([13, 10, 8], center = true); |
| 58 | translate([-3.5, 0, 15 + carriage_hole_to_side]) cube([13, 10, 8], center = true); |
| 59 | if (carriage_l_base == 30) { |
| 60 | //more space for belt ends, as there is only one cutout |
| 61 | #translate([-3.5, 0, 15 + carriage_hole_to_side]) cube([13, 10, 14], center = true); |
| 62 | } |
| 63 | } |
| 64 | |
| 65 | } |
| 66 | } |
| 67 | //Ensure upper bearing can be inserted cleanly |
| 68 | rotate([0, 0, 90]) { |
| 69 | linear_negative(bushing_carriage, carriage_l); |
| 70 | } |
| 71 | //Same for lower bearing |
| 72 | translate([xaxis_rod_distance, 0, 0]) rotate([0, 0, 90]) { |
| 73 | linear_negative(bushing_xy, carriage_l); |
| 74 | } |
| 75 | // extruder mounts |
| 76 | translate([20, -2, carriage_hole_to_side]) { |
| 77 | rotate([90, 0, 0]) cylinder(r=1.8, h=32, center=true); |
| 78 | translate([0, 7, 0]) rotate([90, 60, 0]) cylinder(r=3.4, h=5, $fn=6, center=true); |
| 79 | } |
| 80 | translate([20, -2, carriage_hole_to_side + 30]) { |
| 81 | rotate([90, 0, 0]) cylinder(r=1.8, h=32, center=true); |
| 82 | translate([0, 7, 0]) rotate([90, 60, 0]) cylinder(r=3.4, h=5, $fn=6, center=true); |
| 83 | } |
| 84 | if (carriage_l >= 50 + 2 * carriage_hole_to_side) { |
| 85 | translate([20, -2, carriage_hole_to_side + 30 + 20]) { |
| 86 | rotate([90, 0, 0]) cylinder(r=1.8, h=32, center=true); |
| 87 | translate([0, 7, 0]) rotate([90, 60, 0]) cylinder(r=3.4, h=5, $fn=6, center=true); |
| 88 | } |
| 89 | } |
| 90 | if (carriage_l >= 80 + 2 * carriage_hole_to_side) { |
| 91 | translate([20, -2, carriage_hole_to_side + 30 + 20 + 30]) { |
| 92 | rotate([90, 0, 0]) cylinder(r=1.8, h=32, center=true); |
| 93 | translate([0, 7, 0]) rotate([90, 60, 0]) cylinder(r=3.4, h=5, $fn=6, center=true); |
| 94 | } |
| 95 | } |
| 96 | //belt insert |
| 97 | translate([-8.5 + 45 / 2, 0, 0]) mirror([1, 0, 0]) { |
| 98 | belt(carriage_l, 5); |
| 99 | %belt(carriage_l); |
| 100 | } |
| 101 | } |
| 102 | } |
| 103 | } |
| 104 | |
| 105 | x_carriage(); |