fix: Move idler 1mm down on X, do its printable w. 10mm rods
[clinton/prusa3.git] / box_frame / extras / gregs-wade-v3.scad
CommitLineData
20c21ffb 1// Greg's Wade Extruder. \r
2// It is licensed under the Creative Commons - GNU GPL license. \r
3// 2010 by GregFrost\r
4// Extruder based on prusa git repo.\r
5// http://www.thingiverse.com/thing:6713\r
6// modified for i3 by vlnofka <vlnofka@gmail.com>\r
7\r
8include<../configuration.scad>\r
9include<../inc/functions.scad>\r
10\r
11///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r
12// Define the hotend_mounting style you want by specifying hotend_mount=style1+style2 etc.\r
13//e.g. wade(hotend_mount=groovemount+peek_reprapsource_mount);\r
14malcolm_hotend_mount=1;\r
15groovemount=2;\r
16peek_reprapsource_mount=4;\r
17arcol_mount=8;\r
18mendel_parts_v6_mount=16; \r
19grrf_peek_mount=32;\r
20wildseyed_mount=64;\r
21geared_extruder_nozzle=128; // http://reprap.org/wiki/Geared_extruder_nozzle\r
22jhead_mount=256;\r
23geeksbase_mount=512;\r
24malcolm_extrusion_mount=1024; //broken\r
25\r
26//default_extruder_mount=malcolm_extrusion_mount;\r
27default_extruder_mount=groovemount;\r
28\r
29///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r
30\r
31mounting_holes_legacy=1;\r
32mounting_holes_symmetrical=2;\r
33default_mounting_holes=mounting_holes_symmetrical;\r
34\r
35///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r
36\r
37wade(hotend_mount=default_extruder_mount,\r
38 mounting_holes=default_mounting_holes);\r
39\r
40////CarriageVisualisation\r
41translate([-25.5,20,base_extra_depth+wade_block_depth+10]) rotate([-90,180,-90]) %import("../output/x-carriage.stl");\r
42%translate(large_wheel_translation) {\r
43 translate([0,0,-5])import("../output/wade-big-h.stl");\r
44 rotate([0,0,25]) translate([gear_separation,0,-1]) {\r
45 rotate([180,0,0]) import("../output/wade-small-h.stl");\r
46 rotate([0,0,-25]) translate([0,0,2]) {//nema17(places=[1,1,1,1], holes=true, shadow=5, $fn=7, h=8);\r
47 }\r
48 }\r
49}\r
50\r
51//translate([-14,39,0])\r
52//bearing_washer();\r
53\r
54//Place for printing\r
55\r
56//translate([50,56,15.25]) // This is the translation for the 3mm version.\r
57////translate([50,56,13.92]) // This is the translation for the 1.75mm version.\r
58//rotate(180)\r
59translate([-20,0,15.25])\r
60rotate([0,-90,0])\r
61//\r
62////Place for assembly.\r
63wadeidler(); \r
64\r
65///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\r
66/**\r
67 * Extruder\r
68 * @name Extruder\r
69 * @assembled\r
70 * @using 1 small-gear\r
71 * @id extruder\r
72 * @using 1 idler\r
73 * @using 1 extruder-body\r
74 * @using 1 m3nut\r
75 * @using 1 m3washer\r
76 * @using 1 m3x25\r
77 * @step Take idler and insert nut into small nut-trap inside the hinge.\r
78 * @step While holding the nut in place, preprare M3x25 bolt with washer and screw it into the hinge just enough to hold the nut.\r
79 * @step Now take the extruder body and idler. Place idler on the hinge counterpart and compleately screw the M3x25 bolt. This will create secured hinge.\r
80 * \r
81 * @using 2 m4nut\r
82 * @step Place M4 nuts into their nut traps, secure them with piece of tape. We need them in place, since later they would be harder to access.\r
83 * \r
84 * @using 3 m3x10\r
85 * @using 3 m3washer\r
86 * @using 1 NEMA17\r
87 * @step Prepare your NEMA17 stepper motor and three M3x10 screws with washers.\r
88 * @step Hold motor on place and lightly tighten the screws. We need to adjust motor position later, no need to tighten it hard.\r
89 * \r
90 * @using 1 large-gear\r
91 * @using 1 m8washer\r
92 * @using 2 m8nut\r
93 * @using 2 bearing-608\r
94 * @step Place two skate bearings on ther position, they should snuggly fit in.\r
95 * @step Insert prepared large gear into the body with mounted bearings.\r
96 * @step Check if the alignment of hobbed part with the filament path. Adjust it accordingly with adding or removing M8 washers.\r
97 * @step After adjusting, we need to fix the bolt in. So we place washer at the end of hobbed bolt and with two M8 nuts we will do locknut by tightening them against each other.\r
98 * @step Check if large gear turns freely.\r
99 * \r
100 * @using 2 m3x40\r
101 * @using 4 m3washer\r
102 * @using 2 extruder-spring\r
103 * @step Prepare two M3x40 screws with sandwitch of washer-spring-washer.\r
104 * @step Insert two M3 nuts into nut traps on top of drive mechanism. [[extruder/top-nut-traps.png]]\r
105 * @step Insert prepared screws into the holes on idler. Close the idler and tighten the screws into the trapped nuts. More you tighten those screws, more pressure will be on fillament.\r
106 * @step Your extruder is done. [[extruder/assembled.jpg]]\r
107 */\r
108\r
109/**\r
110 * Extruder body\r
111 * @name Extruder body\r
112 * @category Printed\r
113 * @id extruder-body\r
114 */\r
115\r
116/**\r
117 * Extruder idler\r
118 * @name Extruder Idler\r
119 * @id idler\r
120 * @category Printed\r
121 * @using 1 bearing-608\r
122 * @using 1 idler-m8-piece\r
123 * @step Insert piece of M8 rod into bearing.\r
124 * @step Insert 608 bearing with rod into printed idler part.\r
125 */\r
126\r
127/**\r
128 * Small M8 rod \r
129 * @name Idler\r
130 * @id idler-m8-piece\r
131 * @category Rods and Bars\r
132 */\r
133\r
134/**\r
135 * Spring used for idler on extruder.\r
136 * @name Extruder spring\r
137 * @id extruder-spring\r
138 */\r
139\r
140//===================================================\r
141// Parameters defining the wade body:\r
142\r
143wade_block_height=55;\r
144wade_block_width=24;\r
145wade_block_depth=28;\r
146\r
147block_bevel_r=6;\r
148\r
149base_thickness=12;\r
150base_length=70+2-6;\r
151base_leadout=25+2+1-6;\r
4bae3523 152base_extra_depth=10;\r
20c21ffb 153\r
154nema17_hole_spacing=31; \r
155nema17_width=1.7*25.4;\r
156nema17_support_d=nema17_width-nema17_hole_spacing;\r
157\r
158screw_head_recess_diameter=7.2;\r
159screw_head_recess_depth=3;\r
160\r
161motor_mount_rotation=0;\r
162//motor_mount_translation=[50.5,34+5,0];\r
163motor_mount_translation=[46.78,50.78,0];\r
164motor_mount_thickness=9;\r
165\r
166large_wheel_translation=[50.5-(7.4444+32.0111+0.25),34,0];\r
167\r
168m8_clearance_hole=8.8;\r
169hole_for_608=22.3;\r
170608_diameter=22;\r
171\r
172block_top_right=[wade_block_width,wade_block_height];\r
173\r
174layer_thickness=0.35;\r
175filament_diameter=3;\r
176filament_feed_hole_d=(filament_diameter*1.1)/cos(180/8);\r
177hobbing_depth=2;\r
178echo ("filament_feed_hole_d", filament_feed_hole_d);\r
179\r
180//This is the distance from the centre of the filament to the centre of the hobbed bolt.\r
181filament_feed_hole_offset=8/2-hobbing_depth+filament_diameter/2;\r
182\r
183echo ("filament_feed_hole_offset", filament_feed_hole_offset);\r
184\r
185idler_nut_trap_depth=7.5;\r
186idler_nut_thickness=4;\r
187\r
188gear_separation=7.4444+32.0111+0.25;\r
189\r
190function motor_hole(hole)=[\r
191 motor_mount_translation[0],\r
192 motor_mount_translation[1]]+\r
193 rotated(45+motor_mount_rotation+hole*90)*nema17_hole_spacing/sqrt(2);\r
194\r
195// Parameters defining the idler.\r
196\r
197filament_pinch=[\r
198 large_wheel_translation[0]-filament_feed_hole_offset-filament_diameter/2,\r
199 large_wheel_translation[1],\r
200 wade_block_depth/2];\r
201idler_axis=filament_pinch-[608_diameter/2,0,0];\r
202idler_fulcrum_offset=608_diameter/2+3.5+m3_diameter/2;\r
203idler_fulcrum=idler_axis-[0,idler_fulcrum_offset,0];\r
204idler_corners_radius=4; \r
205idler_height=12;\r
206idler_608_diameter=608_diameter+2;\r
207idler_608_height=9;\r
208idler_mounting_hole_across=8;\r
209idler_mounting_hole_up=15;\r
210idler_short_side=wade_block_depth-2;\r
211idler_hinge_r=m3_diameter/2+3.5;\r
212idler_hinge_width=6.5;\r
213idler_end_length=(idler_height-2)+5;\r
214idler_mounting_hole_diameter=m4_diameter+0.25;\r
215idler_mounting_hole_elongation=1;\r
216idler_long_top=idler_mounting_hole_up+idler_mounting_hole_diameter/2+idler_mounting_hole_elongation+2.5;\r
217idler_long_bottom=idler_fulcrum_offset;\r
218idler_long_side=idler_long_top+idler_long_bottom;\r
219\r
220module bearing_washer()\r
221{\r
222 difference()\r
223 {\r
224 cylinder(r=hole_for_608/2-0.05,h=1);\r
225 translate([0,0,-1])\r
226 cylinder(r=8,h=3);\r
227 }\r
228}\r
229\r
230module wade(\r
231 hotend_mount=default_extruder_mount,\r
232 mounting_holes=default_mounting_holes)\r
233{\r
234 difference ()\r
235 {\r
236 union()\r
237 {\r
238 // The wade block.\r
239 cube([wade_block_width,wade_block_height,wade_block_depth]);\r
240\r
241 // Filler between wade block and motor mount.\r
242 translate([10-2,0,0])\r
243 cube([wade_block_width,\r
244 wade_block_height,\r
245 motor_mount_thickness]);\r
246\r
247 // Round the ends of the base\r
248 translate([base_length-base_leadout,0,0])\r
249 cylinder(r=base_thickness/2,h=wade_block_depth+base_extra_depth,$fn=20);\r
250\r
251 translate([-base_leadout,0,0])\r
252 cylinder(r=base_thickness/2,h=wade_block_depth+base_extra_depth,$fn=20);\r
253\r
254 //Provide the bevel betweeen the base and the wade block.\r
255 render()\r
256 difference()\r
257 {\r
258 translate([-block_bevel_r,0,0])\r
259 cube([block_bevel_r*2+wade_block_width,\r
260 base_thickness/2+block_bevel_r,wade_block_depth+base_extra_depth]); \r
261 translate([-block_bevel_r,block_bevel_r+base_thickness/2])\r
262 cylinder(r=block_bevel_r,h=wade_block_depth+base_extra_depth,$fn=60);\r
263 translate([wade_block_width+block_bevel_r,\r
264 block_bevel_r+base_thickness/2])\r
265 cylinder(r=block_bevel_r,h=wade_block_depth+base_extra_depth,$fn=60);\r
266 }\r
267\r
268 // The idler hinge.\r
269 translate(idler_fulcrum)\r
270 {\r
271 translate([idler_hinge_r,0,0])\r
272 cube([idler_hinge_r*2,idler_hinge_r*2,idler_short_side-2*idler_hinge_width-0.5],\r
273 center=true);\r
274 rotate(-30)\r
275 {\r
276 cylinder(r=idler_hinge_r,\r
277 h=idler_short_side-2*idler_hinge_width-0.5,\r
278 center=true,$fn=60);\r
279 translate([idler_hinge_r,0,0])\r
280 cube([idler_hinge_r*2,idler_hinge_r*2,\r
281 idler_short_side-2*idler_hinge_width-0.5],\r
282 center=true);\r
283 }\r
284 }\r
285\r
286 // The idler hinge support.\r
287 translate(idler_fulcrum)\r
288 {\r
289 rotate(-15)\r
290 translate([-(idler_hinge_r+3),-idler_hinge_r-2,-wade_block_depth/2])\r
291 difference()\r
292 {\r
293 cube([idler_hinge_r+3,\r
294 idler_hinge_r*2+4,\r
295 wade_block_depth/2-\r
296 idler_short_side/2+\r
297 idler_hinge_width+0.25+\r
298 layer_thickness]);\r
299 translate([idler_hinge_r+2,(idler_hinge_r*2+4)/2,layer_thickness*3])\r
300 cylinder(r=idler_hinge_r+1,h=10,$fn=50);\r
301 }\r
302 rotate(-15)\r
303 translate([-(idler_hinge_r+3),-idler_hinge_r-2,\r
304 -idler_short_side/2+idler_hinge_width+0.25])\r
305 cube([idler_hinge_r+3+15,\r
306 idler_hinge_r*2+4,\r
307 layer_thickness]);\r
308 }\r
309\r
310 //The base.\r
311 translate([-base_leadout,-base_thickness/2,0])\r
312 cube([base_length,base_thickness,wade_block_depth+base_extra_depth]);\r
313 //Base aligement helper\r
314 translate([-base_leadout,-base_thickness/2,wade_block_depth+base_extra_depth])\r
315 cube([base_length,1,layer_thickness]);\r
316 \r
317\r
318 motor_mount ();\r
319 }\r
320\r
321 block_holes(mounting_holes=mounting_holes);\r
322 motor_mount_holes ();\r
323\r
324 translate([large_wheel_translation[0]-filament_feed_hole_offset,\r
325 -base_thickness/2,wade_block_depth/2])\r
326 rotate([-90,0,0])\r
327 {\r
328 if (in_mask (hotend_mount,malcolm_hotend_mount))\r
329 malcolm_hotend_holes ();\r
330 if (in_mask (hotend_mount,groovemount))\r
331 groovemount_holes ();\r
332 if (in_mask (hotend_mount,peek_reprapsource_mount))\r
333 peek_reprapsource_holes ();\r
334 if (in_mask (hotend_mount,arcol_mount))\r
335 arcol_mount_holes ();\r
336 if (in_mask (hotend_mount,mendel_parts_v6_mount)) \r
337 mendel_parts_v6_holes(insulator_d=12.7);\r
338 if (in_mask(hotend_mount,grrf_peek_mount))\r
339 grrf_peek_mount_holes();\r
340 if (in_mask(hotend_mount,wildseyed_mount))\r
341 wildseyed_mount_holes(insulator_d=12.7);\r
342 if (in_mask(hotend_mount,geared_extruder_nozzle))\r
343 mendel_parts_v6_holes(insulator_d=15);\r
344 if (in_mask(hotend_mount,jhead_mount))\r
345 wildseyed_mount_holes(insulator_d=16);\r
346 if (in_mask (hotend_mount,geeksbase_mount))\r
347 geeksbase_holes ();\r
348 if (in_mask (hotend_mount,malcolm_extrusion_mount))\r
349 malcolm_extrusion_holes ();\r
350 }\r
351 }\r
352}\r
353\r
354function in_mask(mask,value)=(mask%(value*2))>(value-1); \r
355\r
356//block_holes();\r
357\r
358module block_holes(mounting_holes=default_mounting_holes)\r
359{\r
360echo("bhmh", mounting_holes)\r
361 //Round off the top of the block. \r
362 translate([0,wade_block_height-block_bevel_r,-1])\r
363 render()\r
364 difference()\r
365 {\r
366 translate([-1,0,0])\r
367 cube([block_bevel_r+1,block_bevel_r+1,wade_block_depth+2]);\r
368 translate([block_bevel_r,0,0])\r
369 cylinder(r=block_bevel_r,h=wade_block_depth+2,$fn=40);\r
370 }\r
371\r
372 //carriage mountig holes\r
373 translate([-24.5+64+4,0,3]) {\r
374 translate([-50,0,0]) {\r
375 translate([0,0,(wade_block_depth+base_extra_depth)/2+4+layer_thickness]) cylinder(r=m4_diameter/2, h=wade_block_depth+base_extra_depth, center=true,$fn=20);\r
376 cylinder(r=m4_nut_diameter/2, h=8, center=true,$fn=20);\r
377 }\r
378 \r
379 translate([0,0,0]) {\r
380 translate([0,0,(wade_block_depth+base_extra_depth)/2+4+layer_thickness]) cylinder(r=m4_diameter/2, h=wade_block_depth+0.2+base_extra_depth, center=true,$fn=20);\r
381 cylinder(r=m4_nut_diameter/2, h=8, center=true,$fn=20);\r
382 }\r
383 }\r
384\r
385 // Idler fulcrum hole.\r
386 translate(idler_fulcrum+[0,0,0.4])\r
387 cylinder(r=m3_diameter/2,h=idler_short_side-2*idler_hinge_width-0.5,center=true,$fn=16);\r
388\r
389 translate(idler_fulcrum+[0,0,idler_short_side/2-idler_hinge_width-1])\r
390 cylinder(r=m3_nut_diameter/2+0.25,h=1,$fn=40);\r
391\r
392 //Rounded cutout for idler hinge.\r
393 render()\r
394 translate(idler_fulcrum)\r
395 difference()\r
396 {\r
397 cylinder(r=idler_hinge_r+0.5,h=idler_short_side+0.5,center=true,$fn=60);\r
398 cylinder(r=idler_hinge_r+1,h=idler_short_side-2*idler_hinge_width-0.5,center=true);\r
399 }\r
400\r
401 //translate(motor_mount_translation)\r
402 translate(large_wheel_translation)\r
403 {\r
404\r
405 // Open the top to remove overhangs and to provide access to the hobbing.\r
406 translate([-wade_block_width+2,0,9.5])\r
407 cube([wade_block_width,\r
408 wade_block_height-large_wheel_translation[1]+1,\r
409 wade_block_depth]);\r
410 \r
411 translate([0,0,-1])\r
412 b608(h=9);\r
413 \r
414 translate([0,0,20])\r
415 b608(h=9);\r
416 \r
417 translate([-13,0,9.5])\r
418 b608(h=wade_block_depth);\r
419 \r
420 translate([0,0,8+layer_thickness])\r
421 cylinder(r=m8_clearance_hole/2,h=wade_block_depth-(8+layer_thickness)+2); \r
422\r
423 translate([0,0,20-2])\r
424 cylinder(r=16/2,h=wade_block_depth-(8+layer_thickness)+2); \r
425\r
426 // Filament feed.\r
427 translate([-filament_feed_hole_offset,0,wade_block_depth/2])\r
428 rotate([90,0,0])\r
429 rotate(360/16)\r
430 cylinder(r=filament_feed_hole_d/2,h=wade_block_depth*3,center=true,$fn=8); \r
431\r
432 //Widened opening for hobbed bolt access.\r
433 translate([2,wade_block_height/2+2,wade_block_depth/2+0.2])\r
434 rotate([90,0,0])\r
435 rotate(-45)\r
436 union()\r
437 {\r
438 cylinder(r=5,h=wade_block_height,center=true,$fn=30); \r
439 translate([-5,0,0])\r
440 cube([10,10,wade_block_height],center=true);\r
441 }\r
442\r
443 // Mounting holes on the base.\r
444 //translate([0,-base_thickness/2,0])\r
445 translate(\r
446 (mounting_holes==mounting_holes_legacy)?[-3.4,0,-1]:[0,0,0])\r
447 for (mount=[0:1])\r
448 {\r
449 translate([-filament_feed_hole_offset+25*((mount<1)?1:-1),\r
450 -large_wheel_translation[1]-1-base_thickness/2,wade_block_depth/2])\r
451 rotate([-90,0,0])\r
452 rotate(360/16)\r
453 cylinder(r=m4_diameter/2,h=base_thickness+2,$fn=8); \r
454 \r
455 translate([-filament_feed_hole_offset+25*((mount<1)?1:-1),\r
456 -large_wheel_translation[1],\r
457 wade_block_depth/2])\r
458 rotate([-90,0,0])\r
459 //fixme: (correct height\r
460 //cylinder(r=m4_nut_diameter/2,h=base_thickness,$fn=6); \r
461 cylinder(r=m4_nut_diameter/2,h=29.3,$fn=6);\r
462 }\r
463\r
464 }\r
465\r
466 // Idler mounting holes and nut traps.\r
467 for (idle=[-1,1])\r
468 {\r
469 translate([0,\r
470 idler_mounting_hole_up+large_wheel_translation[1],\r
471 wade_block_depth/2+idler_mounting_hole_across*idle])\r
472 rotate([0,90,0])\r
473 {\r
474 rotate([0,0,180/8])\r
475 translate([0,0,-1])\r
476 cylinder(r=m4_diameter/2,h=wade_block_depth+6,$fn=8); \r
477 rotate([0,0,180/6])\r
478 translate([0,0,wade_block_width-idler_nut_trap_depth])\r
479 cylinder(r=m4_nut_diameter/2,h=idler_nut_thickness,$fn=6); \r
480\r
481 translate([0,10/2,wade_block_width-idler_nut_trap_depth+idler_nut_thickness/2])\r
482 cube([m4_nut_diameter*cos(30),10,idler_nut_thickness],center=true);\r
483 }\r
484 }\r
485}\r
486\r
487module motor_mount()\r
488{\r
489 linear_extrude(height=motor_mount_thickness)\r
490 {\r
491 barbell (motor_hole(1),motor_hole(2),nema17_support_d/2, nema17_support_d/2,20,160);\r
492 barbell (motor_hole(2),motor_hole(3),nema17_support_d/2, nema17_support_d/2,20,160);\r
493\r
494 // Connect block to top of motor mount.\r
495 barbell(block_top_right-[0,5],motor_hole(1),5,nema17_support_d/2,100,60);\r
496\r
497 //Connect motor mount to base.\r
498 barbell([base_length-base_leadout,\r
499 0],motor_hole(3),base_thickness/2,\r
500 nema17_support_d/2,100,60);\r
501 }\r
502}\r
503\r
504module motor_mount_holes()\r
505{\r
506 radius=4/2;\r
507 slot_left=1;\r
508 slot_right=2;\r
509\r
510 {\r
511 translate([0,0,screw_head_recess_depth+layer_thickness])\r
512 for (hole=[0:3])\r
513 translate([motor_hole(hole)[0],motor_hole(hole)[1],0])\r
514 rotate([0,0,25])\r
515 {\r
516 translate([-slot_left,0,0])\r
517 cylinder(h=motor_mount_thickness-screw_head_recess_depth,r=radius,$fn=16);\r
518 translate([slot_right,0,0])\r
519 cylinder(h=motor_mount_thickness-screw_head_recess_depth,r=radius,$fn=16);\r
520\r
521 translate([-slot_left,-radius,0])\r
522 cube([slot_left+slot_right,radius*2,motor_mount_thickness-screw_head_recess_depth]);\r
523 }\r
524\r
525 translate([0,0,-1])\r
526 for (hole=[0:3])\r
527 translate([motor_hole(hole)[0],motor_hole(hole)[1],0])\r
528 rotate([0,0,25])\r
529 {\r
530 translate([-slot_left,0,0])\r
531 cylinder(h=screw_head_recess_depth+1,\r
532 r=screw_head_recess_diameter/2,$fn=16);\r
533 translate([slot_right,0,0])\r
534 cylinder(h=screw_head_recess_depth+1,\r
535 r=screw_head_recess_diameter/2,$fn=16);\r
536\r
537 translate([-slot_left,-screw_head_recess_diameter/2,0])\r
538 cube([slot_left+slot_right,\r
539 screw_head_recess_diameter,\r
540 screw_head_recess_depth+1]);\r
541 }\r
542 }\r
543}\r
544\r
545module wadeidler() \r
546{\r
547 guide_height=12.3;\r
548 guide_length=10;\r
549\r
550 difference()\r
551 {\r
552 union()\r
553 {\r
554 //The idler block.\r
555 translate(idler_axis+[-idler_height/2+2,+idler_long_side/2-idler_long_bottom,0])\r
556 {\r
557 cube([idler_height,idler_long_side,idler_short_side],center=true);\r
558\r
559 //Filament Guide.\r
560 translate([guide_height/2+idler_height/2-1,idler_long_side/2-guide_length/2,0])\r
561 cube([guide_height+1,guide_length,8],center=true);\r
562 }\r
563\r
564 // The fulcrum Hinge\r
565 translate(idler_fulcrum)\r
566 rotate([0,0,-30])\r
567 {\r
568 cylinder(h=idler_short_side,r=idler_hinge_r,center=true,$fn=60);\r
569 translate([-idler_end_length/2,0,0])\r
570 cube([idler_end_length,idler_hinge_r*2,idler_short_side],center=true);\r
571 }\r
572 }\r
573\r
574 //Filament Path \r
575 translate(idler_axis+[2+guide_height,+idler_long_side-idler_long_bottom-guide_length/2,0])\r
576 {\r
577 cube([7,guide_length+2,filament_diameter+0.5],center=true);\r
578 translate([-7/2,0,0])\r
579 rotate([90,0,0])\r
580 cylinder(h=guide_length+4,r=(filament_diameter+0.5)/2,center=true,$fn=16);\r
581 }\r
582\r
583 //Back of idler.\r
584 translate(idler_axis+[-idler_height/2+2-idler_height,\r
585 idler_long_side/2-idler_long_bottom-10,0])\r
586 cube([idler_height,idler_long_side,idler_short_side+2],center=true);\r
587\r
588 //Slot for idler fulcrum mount.\r
589 translate(idler_fulcrum)\r
590 {\r
591 cylinder(h=idler_short_side-2*idler_hinge_width,\r
592 r=idler_hinge_r+0.5,center=true,$fn=60);\r
593 rotate(-30)\r
594 translate([0,-idler_hinge_r-0.5,0])\r
595 cube([idler_hinge_r*2+1,idler_hinge_r*2+1,\r
596 idler_short_side-2*idler_hinge_width],center=true);\r
597 }\r
598\r
599 //Bearing cutout.\r
600 translate(idler_axis)\r
601 {\r
602 difference()\r
603 {\r
604 cylinder(h=idler_608_height,r=idler_608_diameter/2,\r
605 center=true,$fn=60);\r
606 for (i=[0,1])\r
607 rotate([180*i,0,0])\r
608 translate([0,0,6.9/2])\r
609 cylinder(r1=12/2,r2=16/2,h=2);\r
610 }\r
611 cylinder(h=idler_short_side-6,r=m8_diameter/2-0.25/*Tight*/,\r
612 center=true,$fn=20);\r
613 }\r
614\r
615 //Fulcrum hole.\r
616 translate(idler_fulcrum)\r
617 rotate(180/8)\r
618 cylinder(h=idler_short_side+2,r=m3_diameter/2-0.1,center=true,$fn=8);\r
619\r
620 //Nut trap for fulcrum screw.\r
621 translate(idler_fulcrum+[0,0,idler_short_side/2-idler_hinge_width-1])\r
622 rotate(360/16)\r
623 cylinder(h=3,r=m3_nut_diameter/2,$fn=6);\r
624\r
625 for(idler_screw_hole=[-1,1])\r
626 translate(idler_axis+[2-idler_height,0,0])\r
627 {\r
628 //Screw Holes.\r
629 translate([-1,idler_mounting_hole_up,\r
630 idler_screw_hole*idler_mounting_hole_across])\r
631 rotate([0,90,0])\r
632 {\r
633 cylinder(r=idler_mounting_hole_diameter/2,h=idler_height+2,$fn=16);\r
634 translate([0,idler_mounting_hole_elongation,0])\r
635 cylinder(r=idler_mounting_hole_diameter/2,h=idler_height+2,$fn=16);\r
636 translate([-idler_mounting_hole_diameter/2,0,0])\r
637 cube([idler_mounting_hole_diameter,idler_mounting_hole_elongation,\r
638 idler_height+2]);\r
639 }\r
640\r
641 // Rounded corners.\r
642 render()\r
643 translate([idler_height/2,idler_long_top,\r
644 idler_screw_hole*(idler_short_side/2)])\r
645 difference()\r
646 {\r
647 translate([0,-idler_corners_radius/2+0.5,-idler_screw_hole*(idler_corners_radius/2-0.5)])\r
648 cube([idler_height+2,idler_corners_radius+1,idler_corners_radius+1],\r
649 center=true);\r
650 rotate([0,90,0])\r
651 translate([idler_screw_hole*idler_corners_radius,-idler_corners_radius,0])\r
652 cylinder(h=idler_height+4,r=idler_corners_radius,center=true,$fn=40);\r
653 }\r
654 }\r
655 }\r
656}\r
657\r
658module b608(h=8)\r
659{\r
660 translate([0,0,h/2]) cylinder(r=hole_for_608/2,h=h,center=true,$fn=60);\r
661}\r
662\r
663module barbell (x1,x2,r1,r2,r3,r4) \r
664{\r
665 x3=triangulate (x1,x2,r1+r3,r2+r3);\r
666 x4=triangulate (x2,x1,r2+r4,r1+r4);\r
667 render()\r
668 difference ()\r
669 {\r
670 union()\r
671 {\r
672 translate(x1)\r
673 circle (r=r1);\r
674 translate(x2)\r
675 circle(r=r2);\r
676 polygon (points=[x1,x3,x2,x4]);\r
677 }\r
678 \r
679 translate(x3)\r
680 circle(r=r3,$fa=5);\r
681 translate(x4)\r
682 circle(r=r4,$fa=5);\r
683 }\r
684}\r
685\r
686function triangulate (point1, point2, length1, length2) = \r
687point1 + \r
688length1*rotated(\r
689atan2(point2[1]-point1[1],point2[0]-point1[0])+\r
690angle(distance(point1,point2),length1,length2));\r
691\r
692function distance(point1,point2)=\r
693sqrt((point1[0]-point2[0])*(point1[0]-point2[0])+\r
694(point1[1]-point2[1])*(point1[1]-point2[1]));\r
695\r
696function angle(a,b,c) = acos((a*a+b*b-c*c)/(2*a*b)); \r
697\r
698function rotated(a)=[cos(a),sin(a),0];\r
699\r
700//========================================================\r
701// Modules for defining holes for hotend mounts:\r
702// These assume the extruder is verical with the bottom filament exit hole at [0,0,0].\r
703\r
704//malcolm_hotend_holes ();\r
705module malcolm_hotend_holes ()\r
706{\r
707 extruder_recess_d=16; \r
708 extruder_recess_h=3.5;\r
709\r
710 // Recess in base\r
711 translate([0,0,-1])\r
712 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1); \r
713}\r
714\r
715//groovemount_holes ();\r
716module groovemount_holes ()\r
717{\r
718 extruder_recess_d=16; \r
719 extruder_recess_h=5.5;\r
720\r
721 // Recess in base\r
722 translate([0,0,-1])\r
723 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1); \r
724}\r
725\r
726//peek_reprapsource_holes ();\r
727module peek_reprapsource_holes ()\r
728{\r
729 extruder_recess_d=11;\r
730 extruder_recess_h=19; \r
731\r
732 // Recess in base\r
733 translate([0,0,-1])\r
734 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1); \r
735\r
736 // Mounting holes to affix the extruder into the recess.\r
737 translate([0,0,min(extruder_recess_h/2, base_thickness/2)])\r
738 rotate([-90,0,0])\r
739 cylinder(r=m4_diameter/2-0.5/* tight */,h=wade_block_depth+2,center=true); \r
740}\r
741\r
742//arcol_mount_holes();\r
743module arcol_mount_holes() \r
744{ \r
745 hole_axis_rotation=42.5; \r
746 hole_separation=30;\r
747 hole_slot_height=4;\r
748 for(mount=[-1,1])\r
749 translate([hole_separation/2*mount,-7,0]) \r
750 {\r
751 translate([0,0,-1])\r
752 cylinder(r=m4_diameter/2,h=base_thickness+2,$fn=8);\r
753 \r
754 translate([0,0,base_thickness/2])\r
755 //rotate(hole_axis_rotation)\r
756 {\r
757 cylinder(r=m4_nut_diameter/2,h=base_thickness/2+hole_slot_height,$fn=6);\r
758 translate([0,-m4_nut_diameter,hole_slot_height/2+base_thickness/2]) \r
759 cube([m4_nut_diameter,m4_nut_diameter*2,hole_slot_height],\r
760 center=true);\r
761 }\r
762 }\r
763}\r
764\r
765//mendel_parts_v6_holes ();\r
766module mendel_parts_v6_holes (insulator_d=12.7) \r
767{\r
768 extruder_recess_d=insulator_d+0.7;\r
769 extruder_recess_h=10; \r
770 hole_axis_rotation=42.5; \r
771 hole_separation=30;\r
772 hole_slot_height=5;\r
773 \r
774 // Recess in base\r
775 translate([0,0,-1])\r
776 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1); \r
777 \r
778 for(mount=[-1,1])\r
779 rotate([0,0,hole_axis_rotation+90+90*mount])\r
780 translate([hole_separation/2,0,0])\r
781 {\r
782 translate([0,0,-1])\r
783 cylinder(r=m4_diameter/2,h=base_thickness+2,$fn=8);\r
784\r
785 translate([0,0,base_thickness/2])\r
786 rotate(-hole_axis_rotation+180)\r
787 {\r
788// rotate(30)\r
789 cylinder(r=m4_nut_diameter/2,h=base_thickness/2+hole_slot_height,$fn=6);\r
790 translate([0,-m4_nut_diameter,hole_slot_height/2+base_thickness/2]) \r
791 cube([m4_nut_diameter,m4_nut_diameter*2,hole_slot_height],\r
792 center=true);\r
793 }\r
794 }\r
795}\r
796\r
797//grrf_peek_mount_holes();\r
798module grrf_peek_mount_holes() \r
799{ \r
800 extruder_recess_d=16.5;\r
801 extruder_recess_h=10;\r
802\r
803 // Recess in base\r
804 translate([0,0,-1])\r
805 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1);\r
806 \r
807 for (hole=[-1,1])\r
808 rotate(90,[1,0,0])\r
809 translate([hole*(extruder_recess_d/2-1.5),3+1.5,-wade_block_depth/2-1])\r
810 cylinder(r=1.5,h=wade_block_depth+2,$fn=10);\r
811}\r
812\r
813//wildseyed_mount_holes(insulator_d=16);\r
814module wildseyed_mount_holes(insulator_d=12.7) \r
815{ \r
816 extruder_recess_d=insulator_d+0.7;\r
817 extruder_recess_h=10;\r
818\r
819 // Recess in base\r
820 translate([0,0,-1])\r
821 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1);\r
822 \r
823 for (hole=[-1,1])\r
824 rotate(90,[1,0,0])\r
825 translate([hole*(extruder_recess_d/2-1.5),3+1.5,-wade_block_depth/2-1])\r
826 cylinder(r=1.5,h=wade_block_depth+2,$fn=10);\r
827}\r
828\r
829module geeksbase_holes ()\r
830{\r
831 extruder_recess_d=10.8;\r
832 extruder_recess_h=20; \r
833\r
834 // Recess in base\r
835 translate([0,0,-1])\r
836 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1); \r
837\r
838 // Mounting holes to affix the extruder into the recess.\r
839 translate([5,0,min(extruder_recess_h/2, base_thickness/2-2)])\r
840 rotate([-90,0,0])\r
841 cylinder(r=m3_diameter/2-0.5,/*tight*/,h=wade_block_depth+2,center=true); \r
842 translate([-5,0,min(extruder_recess_h/2, base_thickness/2-2)])\r
843 rotate([-90,0,0])\r
844 cylinder(r=m3_diameter/2-0.5,/*tight*/,h=wade_block_depth+2,center=true); \r
845\r
846 //cylinder(r=m4_diameter/2-0.5/* tight */,h=wade_block_depth+2,center=true); \r
847}\r
848\r
849module malcolm_extrusion_holes () \r
850{\r
851 extruder_recess_d=16;\r
852 extruder_recess_h=4; \r
853 hole_axis_rotation=22; \r
854 hole_separation=33.2;\r
855 hole_slot_height=5;\r
856 \r
857 // Recess in base\r
858 translate([0,0,-1])\r
859 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1); \r
860 \r
861 for(mount=[-1,1])\r
862 rotate([0,0,hole_axis_rotation-90+90*mount])\r
863 translate([hole_separation/2,0,0])\r
864 {\r
865 translate([0,0,-1])\r
866 cylinder(r=m3_diameter/2,h=base_thickness+2,$fn=8);\r
867\r
868 translate([0,0,base_thickness-2])\r
869 rotate(-hole_axis_rotation+180)\r
870 {\r
871 cylinder(r=m3_nut_diameter/2,h=base_thickness/2+hole_slot_height,$fn=6);\r
872 translate([0,-m3_nut_diameter,hole_slot_height/2+base_thickness/2]) \r
873 cube([m3_nut_diameter,m3_nut_diameter*2,hole_slot_height],\r
874 center=true);\r
875 }\r
876 }\r
877}\r