Fiddled with wade a bit to fix #66
[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
596933b3 41//translate([-8.5,20,base_extra_depth+wade_block_depth+10]) rotate([-90,180,-90]) %import("../output/x-carriage.stl");\r
20c21ffb 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
596933b3 147block_bevel_r=7;\r
20c21ffb 148\r
596933b3
VAH
149base_thickness=13;\r
150base_length=66;\r
151base_leadout=22;\r
4ba92394 152base_extra_depth=11;\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
596933b3 174layer_thickness=layer_height;\r
20c21ffb 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
596933b3 373 #translate([-24.5+64+4,-0.5,3]) {\r
20c21ffb 374 translate([-50,0,0]) {\r
99691128
VAH
375 translate([0,0,(wade_block_depth+base_extra_depth)/2+4+layer_thickness]) cylinder(r=m3_diameter/2, h=wade_block_depth+base_extra_depth, center=true);\r
376 translate([0, 0, 1]) cylinder(r=m3_washer_diameter/2, h=10.1, center=true);\r
20c21ffb 377 }\r
378 \r
379 translate([0,0,0]) {\r
99691128
VAH
380 translate([0,0,(wade_block_depth+base_extra_depth)/2+4+layer_thickness]) cylinder(r=m3_diameter/2, h=wade_block_depth+0.2+base_extra_depth, center=true);\r
381 translate([0, 0, 2]) cylinder(r=m3_washer_diameter/2, h=10.1, center=true);\r
20c21ffb 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
ed382c37 557 cube_fillet([idler_height,idler_long_side,idler_short_side], center=true, vertical = [0, 0, 0, 0], top = [3, 0, 0, 0], bottom = [3, 0, 0, 0]);\r
20c21ffb 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
550b6837 623 cylinder(h=3,r=m3_nut_diameter_horizontal/2,$fn=6);\r
20c21ffb 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
ed382c37
VAH
641 // Rounded corners. \r
642 /*\r
20c21ffb 643 render()\r
644 translate([idler_height/2,idler_long_top,\r
645 idler_screw_hole*(idler_short_side/2)])\r
646 difference()\r
647 {\r
648 translate([0,-idler_corners_radius/2+0.5,-idler_screw_hole*(idler_corners_radius/2-0.5)])\r
649 cube([idler_height+2,idler_corners_radius+1,idler_corners_radius+1],\r
650 center=true);\r
651 rotate([0,90,0])\r
652 translate([idler_screw_hole*idler_corners_radius,-idler_corners_radius,0])\r
653 cylinder(h=idler_height+4,r=idler_corners_radius,center=true,$fn=40);\r
ed382c37 654 } */\r
20c21ffb 655 }\r
656 }\r
657}\r
658\r
659module b608(h=8)\r
660{\r
661 translate([0,0,h/2]) cylinder(r=hole_for_608/2,h=h,center=true,$fn=60);\r
662}\r
663\r
664module barbell (x1,x2,r1,r2,r3,r4) \r
665{\r
666 x3=triangulate (x1,x2,r1+r3,r2+r3);\r
667 x4=triangulate (x2,x1,r2+r4,r1+r4);\r
668 render()\r
669 difference ()\r
670 {\r
671 union()\r
672 {\r
673 translate(x1)\r
674 circle (r=r1);\r
675 translate(x2)\r
676 circle(r=r2);\r
677 polygon (points=[x1,x3,x2,x4]);\r
678 }\r
679 \r
680 translate(x3)\r
681 circle(r=r3,$fa=5);\r
682 translate(x4)\r
683 circle(r=r4,$fa=5);\r
684 }\r
685}\r
686\r
687function triangulate (point1, point2, length1, length2) = \r
688point1 + \r
689length1*rotated(\r
690atan2(point2[1]-point1[1],point2[0]-point1[0])+\r
691angle(distance(point1,point2),length1,length2));\r
692\r
693function distance(point1,point2)=\r
694sqrt((point1[0]-point2[0])*(point1[0]-point2[0])+\r
695(point1[1]-point2[1])*(point1[1]-point2[1]));\r
696\r
697function angle(a,b,c) = acos((a*a+b*b-c*c)/(2*a*b)); \r
698\r
699function rotated(a)=[cos(a),sin(a),0];\r
700\r
701//========================================================\r
702// Modules for defining holes for hotend mounts:\r
703// These assume the extruder is verical with the bottom filament exit hole at [0,0,0].\r
704\r
705//malcolm_hotend_holes ();\r
706module malcolm_hotend_holes ()\r
707{\r
708 extruder_recess_d=16; \r
709 extruder_recess_h=3.5;\r
710\r
711 // Recess in base\r
712 translate([0,0,-1])\r
713 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1); \r
714}\r
715\r
716//groovemount_holes ();\r
717module groovemount_holes ()\r
718{\r
719 extruder_recess_d=16; \r
720 extruder_recess_h=5.5;\r
721\r
722 // Recess in base\r
723 translate([0,0,-1])\r
724 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1); \r
725}\r
726\r
727//peek_reprapsource_holes ();\r
728module peek_reprapsource_holes ()\r
729{\r
730 extruder_recess_d=11;\r
731 extruder_recess_h=19; \r
732\r
733 // Recess in base\r
734 translate([0,0,-1])\r
735 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1); \r
736\r
737 // Mounting holes to affix the extruder into the recess.\r
738 translate([0,0,min(extruder_recess_h/2, base_thickness/2)])\r
739 rotate([-90,0,0])\r
740 cylinder(r=m4_diameter/2-0.5/* tight */,h=wade_block_depth+2,center=true); \r
741}\r
742\r
743//arcol_mount_holes();\r
744module arcol_mount_holes() \r
745{ \r
746 hole_axis_rotation=42.5; \r
747 hole_separation=30;\r
748 hole_slot_height=4;\r
749 for(mount=[-1,1])\r
750 translate([hole_separation/2*mount,-7,0]) \r
751 {\r
752 translate([0,0,-1])\r
753 cylinder(r=m4_diameter/2,h=base_thickness+2,$fn=8);\r
754 \r
755 translate([0,0,base_thickness/2])\r
756 //rotate(hole_axis_rotation)\r
757 {\r
758 cylinder(r=m4_nut_diameter/2,h=base_thickness/2+hole_slot_height,$fn=6);\r
759 translate([0,-m4_nut_diameter,hole_slot_height/2+base_thickness/2]) \r
760 cube([m4_nut_diameter,m4_nut_diameter*2,hole_slot_height],\r
761 center=true);\r
762 }\r
763 }\r
764}\r
765\r
766//mendel_parts_v6_holes ();\r
767module mendel_parts_v6_holes (insulator_d=12.7) \r
768{\r
769 extruder_recess_d=insulator_d+0.7;\r
770 extruder_recess_h=10; \r
771 hole_axis_rotation=42.5; \r
772 hole_separation=30;\r
773 hole_slot_height=5;\r
774 \r
775 // Recess in base\r
776 translate([0,0,-1])\r
777 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1); \r
778 \r
779 for(mount=[-1,1])\r
780 rotate([0,0,hole_axis_rotation+90+90*mount])\r
781 translate([hole_separation/2,0,0])\r
782 {\r
783 translate([0,0,-1])\r
784 cylinder(r=m4_diameter/2,h=base_thickness+2,$fn=8);\r
785\r
786 translate([0,0,base_thickness/2])\r
787 rotate(-hole_axis_rotation+180)\r
788 {\r
789// rotate(30)\r
790 cylinder(r=m4_nut_diameter/2,h=base_thickness/2+hole_slot_height,$fn=6);\r
791 translate([0,-m4_nut_diameter,hole_slot_height/2+base_thickness/2]) \r
792 cube([m4_nut_diameter,m4_nut_diameter*2,hole_slot_height],\r
793 center=true);\r
794 }\r
795 }\r
796}\r
797\r
798//grrf_peek_mount_holes();\r
799module grrf_peek_mount_holes() \r
800{ \r
801 extruder_recess_d=16.5;\r
802 extruder_recess_h=10;\r
803\r
804 // Recess in base\r
805 translate([0,0,-1])\r
806 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1);\r
807 \r
808 for (hole=[-1,1])\r
809 rotate(90,[1,0,0])\r
810 translate([hole*(extruder_recess_d/2-1.5),3+1.5,-wade_block_depth/2-1])\r
811 cylinder(r=1.5,h=wade_block_depth+2,$fn=10);\r
812}\r
813\r
814//wildseyed_mount_holes(insulator_d=16);\r
815module wildseyed_mount_holes(insulator_d=12.7) \r
816{ \r
817 extruder_recess_d=insulator_d+0.7;\r
818 extruder_recess_h=10;\r
819\r
820 // Recess in base\r
821 translate([0,0,-1])\r
822 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1);\r
823 \r
824 for (hole=[-1,1])\r
825 rotate(90,[1,0,0])\r
826 translate([hole*(extruder_recess_d/2-1.5),3+1.5,-wade_block_depth/2-1])\r
827 cylinder(r=1.5,h=wade_block_depth+2,$fn=10);\r
828}\r
829\r
830module geeksbase_holes ()\r
831{\r
832 extruder_recess_d=10.8;\r
833 extruder_recess_h=20; \r
834\r
835 // Recess in base\r
836 translate([0,0,-1])\r
837 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1); \r
838\r
839 // Mounting holes to affix the extruder into the recess.\r
840 translate([5,0,min(extruder_recess_h/2, base_thickness/2-2)])\r
841 rotate([-90,0,0])\r
842 cylinder(r=m3_diameter/2-0.5,/*tight*/,h=wade_block_depth+2,center=true); \r
843 translate([-5,0,min(extruder_recess_h/2, base_thickness/2-2)])\r
844 rotate([-90,0,0])\r
845 cylinder(r=m3_diameter/2-0.5,/*tight*/,h=wade_block_depth+2,center=true); \r
846\r
847 //cylinder(r=m4_diameter/2-0.5/* tight */,h=wade_block_depth+2,center=true); \r
848}\r
849\r
850module malcolm_extrusion_holes () \r
851{\r
852 extruder_recess_d=16;\r
853 extruder_recess_h=4; \r
854 hole_axis_rotation=22; \r
855 hole_separation=33.2;\r
856 hole_slot_height=5;\r
857 \r
858 // Recess in base\r
859 translate([0,0,-1])\r
860 cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1); \r
861 \r
862 for(mount=[-1,1])\r
863 rotate([0,0,hole_axis_rotation-90+90*mount])\r
864 translate([hole_separation/2,0,0])\r
865 {\r
866 translate([0,0,-1])\r
867 cylinder(r=m3_diameter/2,h=base_thickness+2,$fn=8);\r
868\r
869 translate([0,0,base_thickness-2])\r
870 rotate(-hole_axis_rotation+180)\r
871 {\r
872 cylinder(r=m3_nut_diameter/2,h=base_thickness/2+hole_slot_height,$fn=6);\r
873 translate([0,-m3_nut_diameter,hole_slot_height/2+base_thickness/2]) \r
874 cube([m3_nut_diameter,m3_nut_diameter*2,hole_slot_height],\r
875 center=true);\r
876 }\r
877 }\r
878}\r