doc: make complete-printer mockup work better
[clinton/prusa3.git] / box_frame / doc / complete-printer.scad
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();