move bearing-guide.scad to inc/, add guides to x-end/y-drivetrain
[clinton/prusa3.git] / box_frame / doc / complete-printer-plus.scad
CommitLineData
28159e2f
DR
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/prusajr/PrusaMendel
7
8include <../configuration.scad>
9use <../y-drivetrain.scad>
10use <../y-axis-corner.scad>
11use <../z-axis.scad>
12use <../x-end.scad>
13use <../x-carriage.scad>
14use <../y-axis-bracket.scad>
15use <../bushing.scad>
eff6608e 16use <../inc/bearing-guide.scad>
28159e2f
DR
17module ybeltholder() {
18 include <../y-belt-holder.scad>
19}
20module bearing_guide() {
087f3a14
VAH
21 bearing_guide_inner();
22 translate([0,0,7+0.9*2])rotate([0,180,0])bearing_guide_outer();
28159e2f
DR
23}
24
25
26//--------------------------------------------------------------------------------------------------------------------------------
27// screws, nuts, etc
28//--------------------------------------------------------------------------------------------------------------------------------
29// wood (flat) screw
30module screw(depth=board_thickness*1.5){
31 module arrow(radiusmax=4, thickness=1, initialgap=0.5, radiusmin=0.5, depth=4) {
32 union() {
33 hull() {
34 translate([0,0,initialgap/2-0.25])cube(size=[radiusmax,thickness,initialgap+0.5], center=true);
35 translate([0,0,depth])cube(size=[radiusmin,radiusmin,radiusmin], center=true);
36 }
37 rotate([0,0,90]) hull() {
38 translate([0,0,initialgap/2-0.25])cube(size=[radiusmax,thickness,initialgap+0.5], center=true);
39 translate([0,0,depth])cube(size=[radiusmin,radiusmin,radiusmin], center=true);
40 }
41 }
42 }
43
44 color([1,1,0])
45 difference() {
46 union() {
47 cylinder(r1=4,r2=3.5/2,h=4);
48 cylinder(r1=3.5/2,r2=3.5/2,h=depth-2);
49 translate([0,0,depth-2])cylinder(r1=3.5/2,r2=0,h=2);
50 }
51 arrow();
52 }
53}
54module M3screw(depth=10) {
55 difference() {
56 union() {
57 cylinder(r=1.5, h=2+depth);
58 cylinder(r=2.5, h=2);
59 }
60 cube(size=[6,1,2],center=true);
61 }
62}
63// M3 nut
64module M3nut(){
65 color("silver")
66 difference(){
67 translate([0,0,2])cylinder(r=6/2,h=2.5,$fn=6);
68 translate([0,0,-1])cylinder(r=3/2,h=12,$fn=10);
69 }
70}
71// M8 nut + washer
72module nutwasher(){
73 color("silver")
74 difference(){
75 union(){
76 translate([0,0,2])cylinder(r=15/2,h=7,$fn=6);
77 translate([0,0,0.5])cylinder(r=8.5,h=1);
78 }
79 translate([0,0,-1])cylinder(r=8/2,h=12);
80 }
81}
82//--------------------------------------------------------------------------------------------------------------------------------
83
84
85
86
87
88
89
90
91
92//--------------------------------------------------------------------------------------------------------------------------------
93// Y axis
94//--------------------------------------------------------------------------------------------------------------------------------
95// y motor mount
96translate([56-yrodseparation/2,-y_smooth_rod_length/2+9,board_thickness-12])
97{
98 rotate([0,90,0]) rotate([0,0,90]) motorholder();
99 translate([10,0,30])rotate([0,90,0])nutwasher();
100 translate([0,0,30])rotate([0,90,180])nutwasher();
101 translate([10,0,10])rotate([0,90,0])nutwasher();
102 translate([0,0,10])rotate([0,90,180])nutwasher();
103}
104
105// y idler mount
106translate([70-yrodseparation/2,y_smooth_rod_length/2-9,30 + board_thickness-12])
107{
108 translate([0,0-33,-8])
109 rotate([0,-90,0]) idlermount();
110 translate([0,0,0])rotate([0,90,0])nutwasher();
111 translate([-20,0,0])rotate([0,90,180])nutwasher();
112 // bearing guide
113 translate([-5,-33+8,-8+8])
114 rotate([0,-90,0]) bearing_guide();
115}
116
117yrodseparation=140;
118
119module yfront()
120{
121 // corners
087f3a14
VAH
122 render(convexity=2) leftfront();
123 translate([yrodseparation,0,0]) mirror([1,0,0]) render(convexity=2) leftfront();
28159e2f
DR
124
125 // front bottom threaded rod
126 color("Aqua")
127 translate([-20,9,10]) rotate([0,90,0]) cylinder(h = yrodseparation+40, r=4);
128
129 translate([yrodseparation+11,9,10])rotate([0,90,0])nutwasher();
130 translate([yrodseparation-11,9,10])rotate([0,90,180])nutwasher();
131
132 translate([-11,9,10])rotate([0,90,180])nutwasher();
133 translate([11,9,10])rotate([0,90,0])nutwasher();
134
135 // front top threaded rod
136 color("Aqua")
137 translate([-20,9,30]) rotate([0,90,0]) cylinder(h = yrodseparation+40, r=4);
138
139 translate([-11,9,30])rotate([0,90,180])nutwasher();
140 translate([11,9,30])rotate([0,90,0])nutwasher();
141
142 translate([yrodseparation-11,9,30])rotate([0,90,180])nutwasher();
143 translate([yrodseparation+11,9,30])rotate([0,90,0])nutwasher();
144}
145
146translate([-yrodseparation/2,-y_smooth_rod_length/2,board_thickness-12])
147{
148 yfront();
149 translate([0,y_smooth_rod_length,0])
150 mirror([0,1,0])
151 yfront();
152}
153
154module yside()
155{
156 translate([-yrodseparation/2,0])
157 {
158 // left top rod
159 color("MediumBlue")
fecd3f75 160 translate([0,0,3+board_thickness + 30]) rotate([0,90,90]) cylinder(h = y_smooth_rod_length, r=bushing_xy[0],center=true);
28159e2f
DR
161 //left bottom rod
162 color("Aqua")
fecd3f75 163 translate([0,0,3+board_thickness+4+1]) rotate([0,90,90]) cylinder(h = y_smooth_rod_length+22, r=y_threaded_rod_long_r ,center=true);
28159e2f
DR
164
165
166 // middle nuts
167 // 100=default wood plank width (see pl function below)
e5452246
DR
168 translate([0,board_thickness-4-3,8+board_thickness])rotate([0,-90,90])nutwasher();
169 translate([0,board_thickness+100-4+3,8+board_thickness])rotate([0,90,90])nutwasher();
28159e2f
DR
170
171
172
173 // back nuts
174 translate([0,y_smooth_rod_length/2+2,8+board_thickness])rotate([0,90,90])nutwasher();
175 translate([0,y_smooth_rod_length/2+2-22,8+board_thickness])rotate([0,90,-90])nutwasher();
176 // front nuts
177 translate([0,-y_smooth_rod_length/2-2,8+board_thickness])rotate([0,90,-90])nutwasher();
178 translate([0,-y_smooth_rod_length/2-2+22,8+board_thickness])rotate([0,90,90])nutwasher();
179 }
180}
181
182yside();
183translate([yrodseparation,0,0])yside();
184
185// heat bed
186heatbed_height=board_thickness;
187color("Lime",0.25)
188translate([0,0,58-3+heatbed_height/2+5]) cube([bed_x_size,bed_y_size,heatbed_height], center=true);
189
190
191// Y belt holder
192translate([-yrodseparation/2+60.5 , 0, 58-3+5-2.8]) rotate([0,90,-90]) ybeltholder();
193translate([-yrodseparation/2+60.5+12, -5, 58-3+0-2.8-1]) screw(heatbed_height/2+8);
194translate([-yrodseparation/2+60.5-12, -5, 58-3+0-2.8-1]) screw(heatbed_height/2+8);
195translate([-yrodseparation/2+60.5 ,-5-35, 58-3+0-2.8-1]) screw(heatbed_height/2+8);
196
197
198// bushings
087f3a14 199render(convexity=3) translate([yrodseparation/2 , -bed_y_size/4-10 , 50 -0.5]) rotate([0,90,90]) y_bearing();
28159e2f
DR
200translate([yrodseparation/2+14, -bed_y_size/4-10+10, 50+6.5-0.5-5]) screw(heatbed_height/2+8);
201translate([yrodseparation/2-14, -bed_y_size/4-10+10, 50+6.5-0.5-5]) screw(heatbed_height/2+8);
202
087f3a14 203render(convexity=3) mirror([0,1,0])translate([yrodseparation/2 , -bed_y_size/4-10 , 50 -0.5]) rotate([0,90,90]) y_bearing();
28159e2f
DR
204mirror([0,1,0])translate([yrodseparation/2+14, -bed_y_size/4-10+10, 50+6.5-0.5-5]) screw(heatbed_height/2+8);
205mirror([0,1,0])translate([yrodseparation/2-14, -bed_y_size/4-10+10, 50+6.5-0.5-5]) screw(heatbed_height/2+8);
206
087f3a14 207render(convexity=3) translate([-yrodseparation/2 , -10 , 50 -0.5]) rotate([0,90,90]) y_bearing();
28159e2f
DR
208translate([-yrodseparation/2+14, -10+10, 50+6.5-0.5-5]) screw(heatbed_height/2+8);
209translate([-yrodseparation/2-14, -10+10, 50+6.5-0.5-5]) screw(heatbed_height/2+8);
210
211//--------------------------------------------------------------------------------------------------------------------------------
212
213
214
215
216
217
218
219
220//--------------------------------------------------------------------------------------------------------------------------------
221// Z axis
222//--------------------------------------------------------------------------------------------------------------------------------
223board_sides=120;
224board_w=bed_x_size+10+2*board_sides;
225
226//// aluminum XZ board
227//translate([0,board_thickness/2,150])
228//%difference()
229//{
230// cube([board_w,board_thickness,300],true);
231// translate([0,0,-15])
232// cube([bed_x_size+10,board_thickness+2,200],true);
233//}
234
235
236// Z motor mounts
087f3a14
VAH
237translate([-board_w/2-5+12-board_thickness,12-board_thickness,50])
238rotate(-90) mirror([0, 0, 1])
239render(convexity=3) zmotorholder();
28159e2f 240
087f3a14 241translate([-board_w/2-5+12-board_thickness-1, board_thickness / 2, 39])
28159e2f
DR
242rotate([-90,0,-90])
243screw(25);
087f3a14 244translate([-board_w/2-5+12-board_thickness+30,12-board_thickness-15,41])
28159e2f
DR
245rotate([-90,0,0])
246screw(25);
247translate([-board_w/2-5+12-board_thickness+10.5,12-board_thickness-10.5,42+7])
248rotate([180,0,0])
249M3screw();
250translate([-board_w/2-5+12-board_thickness+41.5,12-board_thickness-10.5,42+7])
251rotate([180,0,0])
252M3screw();
253translate([-board_w/2-5+12-board_thickness+10.5,12-board_thickness-10.5-31,42+7])
254rotate([180,0,0])
255M3screw();
256
257
087f3a14
VAH
258translate([board_w/2+5-12+board_thickness,12-board_thickness,50])
259rotate(-90) mirror([0, 0, 1])
28159e2f 260mirror([0,1,0])
087f3a14 261render(convexity=3) zmotorholder();
28159e2f 262
087f3a14 263translate([board_w/2+5-12+board_thickness+1, board_thickness / 2, 39])
28159e2f
DR
264rotate([90,0,-90])
265screw(25);
087f3a14 266translate([board_w/2+5-12+board_thickness-30,12-board_thickness-15,41])
28159e2f
DR
267rotate([-90,0,0])
268screw(25);
269translate([board_w/2+5-12+board_thickness-10.5,12-board_thickness-10.5,42+7])
270rotate([180,0,0])
271M3screw();
272translate([board_w/2+5-12+board_thickness-41.5,12-board_thickness-10.5,42+7])
273rotate([180,0,0])
274M3screw();
275translate([board_w/2+5-12+board_thickness-10.5,12-board_thickness-10.5-31,42+7])
276rotate([180,0,0])
277M3screw();
278
279
280
281// Z rod mounts
282//translate([-board_w/2-5,0,260])
283translate([-board_w/2-5+12-board_thickness,12-board_thickness,430])
284rotate(-90)
087f3a14 285render(convexity=3) zrodholder();
28159e2f 286
087f3a14 287translate([-board_w/2-5+12-board_thickness-1, board_thickness / 2, 430+7.5])
28159e2f
DR
288rotate([0,90,0])
289screw(25);
290translate([-board_w/2-5+12-board_thickness-1+34,12-board_thickness+8-23,430+6.5])
291rotate([-90,90,0])
292screw(25);
293
294
295//translate([board_w/2+5,0,260])
296translate([board_w/2+5-12+board_thickness,12-board_thickness,430])
297rotate(-90)
298mirror([0,1,0])
087f3a14 299render(convexity=3) zrodholder();
28159e2f 300
087f3a14 301translate([board_w/2+5-12+board_thickness+1, board_thickness / 2, 430+7.5])
28159e2f
DR
302rotate([0,-90,0])
303mirror([0,1,0])
304screw(25);
305translate([board_w/2+5-12+board_thickness+1-34,12-board_thickness+8-23,430+6.5])
306rotate([-90,90,0])
307mirror([0,1,0])
308screw(25);
309
310// Z rods
311module z_rods()
312{
313 color("MediumBlue")
fecd3f75 314 translate([board_w/2-4-12+board_thickness,-26+12-board_thickness,42])cylinder(h=z_smooth_rod_length,r=bushing_z[0]);
087f3a14 315 echo (z_smooth_rod_length);
28159e2f
DR
316 color("Aqua")
317 translate([board_w/2-4-12+board_thickness-17,-26+12-board_thickness,56])cylinder(h = 390, r=2.5);
318}
319
320z_rods();
321mirror([1,0,0])z_rods();
322//--------------------------------------------------------------------------------------------------------------------------------
323
324
325
326
327
328
329
330
331
332
333//--------------------------------------------------------------------------------------------------------------------------------
334// X axis
335//--------------------------------------------------------------------------------------------------------------------------------
336
337// move the x-axis up 20cm (for visualization only)
338x_axis_height=200;
339x_smooth_rod_length=450+board_thickness*2+10;
340
341// X ends
342translate([-board_w/2+4+12-board_thickness,-26+12-board_thickness,140+ x_axis_height])
343rotate([0,0,90])
344//rotate([0,180,0])
087f3a14 345render(convexity=4) x_end_motor();
28159e2f
DR
346
347translate([board_w/2-4-12+board_thickness,-26+12-board_thickness,140 + x_axis_height])
348rotate(90)
349//rotate([0,180,0])
087f3a14 350render(convexity=4) x_end_idler();
28159e2f
DR
351
352// bearing guide
353translate([board_w/2-4-12+board_thickness-27,-26+12-board_thickness-9-(10-(7+0.9*2))/2,140 + x_axis_height+27])
354rotate([90,0,0])
355bearing_guide();
356
357// X rods
358for(i=[0:1])
359color("MediumBlue")
360translate([1.5,-12+12-board_thickness-28,-3+149+i*45 + x_axis_height])rotate([0,90,0])cylinder(h=x_smooth_rod_length,r=4,center=true);
361
362// X carriage
363translate([0,-12+12-board_thickness-28,-3+149 + x_axis_height])
364rotate([0,90,0])
365translate([-45,0,75])
366rotate([0,180,0])
087f3a14 367render(convexity=3) x_carriage();
28159e2f
DR
368
369// small nuts
370translate([0,-12+12-board_thickness-28,-3+149 + x_axis_height])
371rotate([0,90,0])
372translate([-45+20,0+9,75-3])
373rotate([90,0,0])
374M3nut();
375
376translate([0,-12+12-board_thickness-28,-3+149 + x_axis_height])
377rotate([0,90,0])
378translate([-45+20,0+9,75-33])
379rotate([90,0,0])
380M3nut();
381
382translate([0,-12+12-board_thickness-28,-3+149 + x_axis_height])
383rotate([0,90,0])
384translate([-45+20,0+9,75-53])
385rotate([90,0,0])
386M3nut();
387
388translate([0,-12+12-board_thickness-28,-3+149 + x_axis_height])
389rotate([0,90,0])
390translate([-45+20,0+9,75-83])
391rotate([90,0,0])
392M3nut();
393
394// belt clamp
395translate([0-28,-12+12-board_thickness-28-10,-3+149 + x_axis_height-7])
396rotate([0,90,0])
397translate([-45,0,75])
398rotate([0,90,0])
399x_beltclamp();
400
401// belt clamp
402translate([0-28-30,-12+12-board_thickness-28-10,-3+149 + x_axis_height-7])
403rotate([0,90,0])
404translate([-45,0,75])
405rotate([0,90,0])
406x_beltclamp();
407
408//--------------------------------------------------------------------------------------------------------------------------------
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431//--------------------------------------------------------------------------------------------------------------------------------
432// Frame (box style)
433//--------------------------------------------------------------------------------------------------------------------------------
434module pl(x=100,y=100,z=board_thickness){
435 cube([x,y,z]);
436}
437module p3bscorner(){
438 translate([ board_thickness*1.5+3,-0.5-board_thickness,board_thickness/2])rotate([-90,0,0])screw();
439 translate([450-board_thickness*1.5 ,-0.5-board_thickness,board_thickness/2])rotate([-90,0,0])screw();
440 translate([450/2 ,-0.5-board_thickness,board_thickness/2])rotate([-90,0,0])screw();
441 color([0.5,0.5,0.5,0.8])pl(x=450);
442 color([0.5,0.5,0.6,0.8])rotate([90,0,0])pl(x=450);
443}
444module p3bsgantry(){
445 separation=10;
446 translate([450-separation,-100-separation ,board_thickness*2+1])mirror([0,0,1])screw();
447 translate([450-separation, 100+separation+50,board_thickness*2+1])mirror([0,0,1])screw();
448 translate([350+separation,-100-separation ,board_thickness*2+1])mirror([0,0,1])screw();
449 translate([350+separation, 100+separation+50,board_thickness*2+1])mirror([0,0,1])screw();
450
451 translate([350+separation,-200+separation ,board_thickness*2+1])mirror([0,0,1])screw();
452 translate([350+separation, 200-separation+50,board_thickness*2+1])mirror([0,0,1])screw();
453 color([0.5,0.5,0.6,0.9])translate([450,-200,board_thickness])rotate([0,0,90])pl(x=450);
454 translate([0,-200,0])color([0,0,0,0.3])p3bscorner();
455 translate([0, 250,0])color([0,0,0,0.3])mirror([0,1,0])p3bscorner();
456}
457module boxframe(top=false){
458 translate([300-board_thickness ,-200.5-board_thickness,board_thickness/2+3])rotate([-90,0, 0])screw();
459 translate([200+board_thickness+board_thickness/2 ,-200.5-board_thickness,board_thickness/2+3])rotate([-90,0, 0])screw();
460 translate([300-board_thickness , 250.5+board_thickness,board_thickness/2+3])rotate([ 90,0, 0])screw();
461 translate([200+board_thickness+board_thickness/2 , 250.5+board_thickness,board_thickness/2+3])rotate([ 90,0, 0])screw();
462 translate([300.5+board_thickness ,-200+board_thickness ,board_thickness/2+3])rotate([ 90,0,-90])screw();
463 translate([300.5+board_thickness ,-100-board_thickness ,board_thickness/2+3])rotate([ 90,0,-90])screw();
464 translate([300.5+board_thickness , 250-board_thickness ,board_thickness/2+3])rotate([ 90,0,-90])screw();
465 translate([300.5+board_thickness , 150+board_thickness ,board_thickness/2+3])rotate([ 90,0,-90])screw();
466
467 // 3mm separation for the screw heads at the bottom of the structure
468 //translate([300,-180,0])rotate([0,0,90])color([1,0,0,0.35])pl(x=400,z=3);
469 translate([300,-200,3])rotate([0,0,90])color([0,0,1,0.55])pl(x=450);
470
471 translate([300+board_thickness,0])rotate([0,-90,0])color([0,0,0,0.4])p3bsgantry();
472 if(top){
473 translate([200+board_thickness+board_thickness/2,-200-board_thickness/2,450+board_thickness+1])mirror([0,0,1])screw();
474 translate([200+board_thickness+board_thickness/2, 250+board_thickness/2,450+board_thickness+1])mirror([0,0,1])screw();
475 translate([300-board_thickness-board_thickness/2,-200-board_thickness/2,450+board_thickness+1])mirror([0,0,1])screw();
476 translate([300-board_thickness-board_thickness/2, 250+board_thickness/2,450+board_thickness+1])mirror([0,0,1])screw();
477 translate([300+board_thickness/2 ,-150 ,450+board_thickness+1])mirror([0,0,1])screw();
478 translate([300+board_thickness/2 , 200 ,450+board_thickness+1])mirror([0,0,1])screw();
479 translate([300+board_thickness,-200-board_thickness,450])rotate([0,0,90])color([0,0,1,0.55])pl(x=450+board_thickness*2);
480 }
481}
482
483
484translate([-25,312,0])rotate([0,0,-90])color([0,0,0,0.4])
485boxframe(true);
486// floor
487//color([0.8,0.8,0.2,0.35])translate([0,0,-100])cube([800,800,200],true);
488//--------------------------------------------------------------------------------------------------------------------------------
489
490
491
492
493
494
495
496
497//--------------------------------------------------------------------------------------------------------------------------------
498// Parts to fix Y axis to the frame
499//--------------------------------------------------------------------------------------------------------------------------------
500// y brackets, used to fix the threaded rods of the y axis to the wooden XZ frame.
501translate([-bracket_width(12)/2 +yrodseparation/2,-3+12 ,board_thickness+3]) yrodbracket(12, 3, 3);
502translate([-bracket_width(12)/2 -yrodseparation/2,-3+12 ,board_thickness+3]) yrodbracket(12, 3, 3);
503translate([ bracket_width(12)/2 +yrodseparation/2, 3+12+100,board_thickness+3])rotate([0,0,180]) yrodbracket(12, 3, 3);
504translate([ bracket_width(12)/2 -yrodseparation/2, 3+12+100,board_thickness+3])rotate([0,0,180]) yrodbracket(12, 3, 3);
505//--------------------------------------------------------------------------------------------------------------------------------
506translate([-bracket_width(12)/2+6+yrodseparation/2,12+3+3 ,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
507translate([ bracket_width(12)/2-6+yrodseparation/2,12+3+3 ,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
508translate([-bracket_width(12)/2+6+yrodseparation/2,12+3+3+12 ,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
509translate([ bracket_width(12)/2-6+yrodseparation/2,12+3+3+12 ,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
510
511translate([-bracket_width(12)/2+6-yrodseparation/2,12+3+3 ,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
512translate([ bracket_width(12)/2-6-yrodseparation/2,12+3+3 ,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
513translate([-bracket_width(12)/2+6-yrodseparation/2,12+3+3+12 ,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
514translate([ bracket_width(12)/2-6-yrodseparation/2,12+3+3+12 ,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
515
516translate([-bracket_width(12)/2+6+yrodseparation/2,-12+3+3+100,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
517translate([ bracket_width(12)/2-6+yrodseparation/2,-12+3+3+100,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
518translate([-bracket_width(12)/2+6+yrodseparation/2, 3+3+100,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
519translate([ bracket_width(12)/2-6+yrodseparation/2, 3+3+100,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
520
521translate([-bracket_width(12)/2+6-yrodseparation/2,-12+3+3+100,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
522translate([ bracket_width(12)/2-6-yrodseparation/2,-12+3+3+100,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
523translate([-bracket_width(12)/2+6-yrodseparation/2, 3+3+100,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
524translate([ bracket_width(12)/2-6-yrodseparation/2, 3+3+100,board_thickness+bracket_height(3)+0.5])rotate([180,0,0])screw();
e5452246 525
28159e2f 526//--------------------------------------------------------------------------------------------------------------------------------