| 1 | // PRUSA iteration3 |
| 2 | // Complete printer visualisation |
| 3 | // GNU GPL v3 |
| 4 | // Greg Frost |
| 5 | // http://www.reprap.org/wiki/Prusa_Mendel |
| 6 | // http://github.com/josefprusa/Prusa3 |
| 7 | |
| 8 | include <../configuration.scad> |
| 9 | use <../y-drivetrain.scad> |
| 10 | use <../y-axis-corner.scad> |
| 11 | use <../z-axis.scad> |
| 12 | use <../x-end.scad> |
| 13 | use <../x-end-motor.scad> |
| 14 | use <../x-end-idler.scad> |
| 15 | //use <../x-end-orig.scad> |
| 16 | use <../x-carriage.scad> |
| 17 | |
| 18 | // quick rendering |
| 19 | $fa = 12; |
| 20 | $fs = 2; |
| 21 | |
| 22 | module nutwasher(){ |
| 23 | color("silver") |
| 24 | difference(){ |
| 25 | union(){ |
| 26 | translate([0,0,2])cylinder(r=15/2,h=7,$fn=6); |
| 27 | translate([0,0,0.5])cylinder(r=8.5,h=1); |
| 28 | } |
| 29 | translate([0,0,-1])cylinder(r=8/2,h=12); |
| 30 | } |
| 31 | } |
| 32 | |
| 33 | // y motor mount |
| 34 | translate([56-yrodseparation/2,-y_smooth_rod_length/2+9,0]) |
| 35 | { |
| 36 | rotate([0,90,0]) rotate([0,0,90]) motorholder(); |
| 37 | translate([10,0,30])rotate([0,90,0])nutwasher(); |
| 38 | translate([0,0,30])rotate([0,90,180])nutwasher(); |
| 39 | translate([10,0,10])rotate([0,90,0])nutwasher(); |
| 40 | translate([0,0,10])rotate([0,90,180])nutwasher(); |
| 41 | } |
| 42 | |
| 43 | // y idler mount |
| 44 | translate([70-yrodseparation/2,y_smooth_rod_length/2-9,30]) |
| 45 | { |
| 46 | translate([0,0-33,-8]) |
| 47 | rotate([0,-90,0]) idlermount(); |
| 48 | translate([0,0,0])rotate([0,90,0])nutwasher(); |
| 49 | translate([-20,0,0])rotate([0,90,180])nutwasher(); |
| 50 | } |
| 51 | |
| 52 | yrodseparation=100; |
| 53 | |
| 54 | module yfront() |
| 55 | { |
| 56 | // corners |
| 57 | leftfront(); |
| 58 | translate([yrodseparation,0,0]) mirror([1,0,0]) leftfront(); |
| 59 | |
| 60 | // front bottom threaded rod |
| 61 | color("Aqua") |
| 62 | translate([-20,9,10]) rotate([0,90,0]) cylinder(h = 140, r=4); |
| 63 | |
| 64 | translate([yrodseparation+11,9,10])rotate([0,90,0])nutwasher(); |
| 65 | translate([yrodseparation-11,9,10])rotate([0,90,180])nutwasher(); |
| 66 | |
| 67 | translate([-11,9,10])rotate([0,90,180])nutwasher(); |
| 68 | translate([11,9,10])rotate([0,90,0])nutwasher(); |
| 69 | |
| 70 | // front top threaded rod |
| 71 | color("Aqua") |
| 72 | translate([-20,9,30]) rotate([0,90,0]) cylinder(h = 140, r=4); |
| 73 | |
| 74 | % translate([-11,9,30])rotate([0,90,180])nutwasher(); |
| 75 | % translate([11,9,30])rotate([0,90,0])nutwasher(); |
| 76 | |
| 77 | % translate([yrodseparation-11,9,30])rotate([0,90,180])nutwasher(); |
| 78 | % translate([yrodseparation+11,9,30])rotate([0,90,0])nutwasher(); |
| 79 | } |
| 80 | |
| 81 | translate([-yrodseparation/2,-y_smooth_rod_length/2]) |
| 82 | { |
| 83 | yfront(); |
| 84 | translate([0,y_smooth_rod_length,0]) |
| 85 | mirror([0,1,0]) |
| 86 | yfront(); |
| 87 | } |
| 88 | |
| 89 | module yside() |
| 90 | { |
| 91 | translate([-yrodseparation/2,0]) |
| 92 | { |
| 93 | // left top rod |
| 94 | color("MediumBlue") |
| 95 | translate([0,0,45]) rotate([0,90,90]) cylinder(h = y_smooth_rod_length, r=bushing_xy[0],center=true); |
| 96 | //left bottom rod |
| 97 | color("Aqua") |
| 98 | translate([0,0,20]) rotate([0,90,90]) cylinder(h = y_smooth_rod_length, r=4,center=true); |
| 99 | // middle nuts |
| 100 | translate([0,0,20])rotate([0,-90,90])nutwasher(); |
| 101 | translate([0,board_thickness,20])rotate([0,90,90])nutwasher(); |
| 102 | |
| 103 | // back nuts |
| 104 | translate([0,y_smooth_rod_length/2+2,20])rotate([0,90,90])nutwasher(); |
| 105 | translate([0,y_smooth_rod_length/2+2-22,20])rotate([0,90,-90])nutwasher(); |
| 106 | // front nuts |
| 107 | translate([0,-y_smooth_rod_length/2-2,20])rotate([0,90,-90])nutwasher(); |
| 108 | translate([0,-y_smooth_rod_length/2-2+22,20])rotate([0,90,90])nutwasher(); |
| 109 | } |
| 110 | } |
| 111 | |
| 112 | yside(); |
| 113 | translate([yrodseparation,0,0])yside(); |
| 114 | |
| 115 | // heat bed |
| 116 | color("Lime",0.25) |
| 117 | translate([0,0,58]) cube([bed_x_size,bed_y_size,6], center=true); |
| 118 | |
| 119 | board_sides=(frame_type == frame_alu) ? board_thickness : 50 ; |
| 120 | // todo: auto set length of smooth rods and board using desired print volume |
| 121 | // fixme: just copied board_w from wilson bom for my specific printer... |
| 122 | board_w=(frame_type == frame_alu) ? 430 + board_thickness * 2 : bed_x_size+10+2*board_sides; |
| 123 | board_h=(frame_type == frame_alu) ? z_smooth_rod_length + 50 : 300; |
| 124 | board_cut_h=(frame_type == frame_alu) ? board_h - board_thickness * 2 : 200; |
| 125 | board_cut_w=(frame_type == frame_alu) ? board_w - board_thickness * 2 : bed_x_size + 10; |
| 126 | |
| 127 | |
| 128 | // XZ board |
| 129 | translate([0,board_thickness/2,board_h/2]) |
| 130 | %difference() |
| 131 | { |
| 132 | cube([board_w,board_thickness,board_h], center=true); |
| 133 | translate([0,0,(frame_type == frame_alu) ? 0 : -15]) |
| 134 | cube([board_cut_w,board_thickness+2,board_cut_h], center=true); |
| 135 | } |
| 136 | |
| 137 | |
| 138 | if (frame_type == frame_alu) { |
| 139 | // Z motor mounts |
| 140 | translate([-board_w/2-5,0,55 - 6]) |
| 141 | rotate(-90) |
| 142 | zmotorholder (thickness=55, bottom_thickness=6); |
| 143 | |
| 144 | translate([board_w/2+5,0,55 - 6]) |
| 145 | rotate(-90) |
| 146 | mirror([0,1,0]) |
| 147 | zmotorholder(thickness=55, bottom_thickness=6); |
| 148 | |
| 149 | // Z rod mounts |
| 150 | // 6 = bottom_thickness |
| 151 | translate([-board_w/2-5,0,board_h - 6/2]) |
| 152 | rotate(-90) |
| 153 | zrodholder(thickness=board_thickness * 2 + 5, ylen = board_thickness * 2 + 10, bottom_x=43 + zaxis_delta_x, bottom_thickness=6); |
| 154 | |
| 155 | translate([board_w/2+5,0,board_h - 6/2]) |
| 156 | rotate(-90) |
| 157 | mirror([0,1,0]) |
| 158 | zrodholder(thickness=board_thickness * 2 + 5, ylen = board_thickness * 2 + 10, bottom_x=43 + zaxis_delta_x, bottom_thickness=6); |
| 159 | } else { |
| 160 | // Z motor mounts |
| 161 | translate([-board_w/2-5,0,42]) |
| 162 | rotate(-90) |
| 163 | zmotorholder () |
| 164 | |
| 165 | translate([board_w/2+5,0,42]) |
| 166 | rotate(-90) |
| 167 | mirror([0,1,0]) |
| 168 | zmotorholder(); |
| 169 | |
| 170 | // Z rod mounts |
| 171 | translate([-board_w/2-5,0,260]) |
| 172 | rotate(-90) |
| 173 | zrodholder(); |
| 174 | |
| 175 | translate([board_w/2+5,0,260]) |
| 176 | rotate(-90) |
| 177 | mirror([0,1,0]) |
| 178 | zrodholder(); |
| 179 | } |
| 180 | |
| 181 | // Z rods |
| 182 | module z_rods() |
| 183 | { |
| 184 | color("MediumBlue") |
| 185 | // fixme: 55 - 6 is mount thickness - bottom_thickness |
| 186 | // fixme: board_w/2-4 ... should 4 be bushing_z[0] instead ? |
| 187 | translate([board_w/2-4-zaxis_delta_y, -(board_to_xz_distance + zaxis_delta_x),55 - 6])cylinder(h=z_smooth_rod_length,r=bushing_z[0]); |
| 188 | } |
| 189 | |
| 190 | z_rods(); |
| 191 | mirror([1,0,0])z_rods(); |
| 192 | |
| 193 | // Z leadscrew |
| 194 | module z_leadscrew() |
| 195 | { |
| 196 | position_y = board_to_xz_distance + zaxis_delta_y + zmotor_delta_y; |
| 197 | position_x = board_to_xz_distance + zaxis_delta_x + zmotor_delta_x; |
| 198 | color("Orange") |
| 199 | // fixme: 55 - 6 is mount thickness - bottom_thickness |
| 200 | // fixme: position_y+5, 5 = side_thickness |
| 201 | // fixme: board_w/2-4 ... should 4 be bushing_z[0] instead ? |
| 202 | translate([board_w/2-position_y+5, -position_x,55 - 6])cylinder(h=z_smooth_rod_length,r=4); |
| 203 | } |
| 204 | |
| 205 | z_leadscrew(); |
| 206 | mirror([1,0,0])z_leadscrew(); |
| 207 | // X ends |
| 208 | translate([-board_w/2+4+zaxis_delta_y,-(board_to_xz_distance+zaxis_delta_x),200]) |
| 209 | rotate([0,0,90]) |
| 210 | rotate([0,180,0]) |
| 211 | x_end_motor(); |
| 212 | |
| 213 | translate([board_w/2-4-zaxis_delta_y,-(board_to_xz_distance+zaxis_delta_x),200]) |
| 214 | rotate(90) |
| 215 | rotate([0,180,0]) |
| 216 | x_end_idler(); |
| 217 | |
| 218 | // X rods |
| 219 | // fixme: looks off a bit, also relies on value of pushfit_d |
| 220 | for(i=[0:1]) |
| 221 | color("MediumBlue") |
| 222 | translate([0,-board_to_xz_distance + 15 - zaxis_delta_x,200 - x_box_height+bushing_xy[0]+i*xaxis_rod_distance+3+1+0.1])rotate([0,90,0])cylinder(h=x_smooth_rod_length,r=bushing_xy[0],center=true); |
| 223 | |
| 224 | |
| 225 | |
| 226 | // X carriage |
| 227 | translate([0,-board_to_xz_distance + 15 - zaxis_delta_x,200 - x_box_height+bushing_xy[0]+3+1+0.1]) |
| 228 | rotate([0,90,0]) |
| 229 | x_carriage(); |