// adapted from https://www.thingiverse.com/thing:1383913 // ####################################################### // ###################### Extruders ###################### // ####################################################### include include include draw_extruder = false; extruder_width = nema17_size; extruder_depth = 15; extruder_height_m = 15; // material below motor extruder_cover_d = 12; extruder_filament_d = 1.75; extruder_gear_od = 12; // outer diameter: mk8 = 9, mk7 = 12 extruder_gear_ed = 10.25; // effective diameter: mk8 = 6.75, mk7 = 10.25 extruder_gear_groove_width = 3.5; fillet = 1.5; extruder_supports = true; extruder_brass_tube = false; extruder_lever_with_switch = true; // bearing 624 extruder_bearing_od = 13; extruder_bearing_id = 4; extruder_bearing_h = 5; extruder_filament_offset = (extruder_gear_ed + extruder_filament_d) / 2; echo(extruder_filament_offset=extruder_filament_offset); bracket_height = 8; bracket_width = extruder_height_m; bracket_width_add = 10; bracket_dist_add = 1; extruder_bearing_x = extruder_filament_offset + (extruder_filament_d / 2) + (extruder_bearing_od / 2); lever_h = 12; // ####################################################### if (draw_extruder) extruder(30, "1", true); module extruder(slot, id = "", draw_slot = false) { translate([-nema17_size / 2 - bracket_dist_add, 0, slot + bracket_height + 10]) rotate([-90, 0, 0]) extruder_assembly(id); color("green") extruder_bracket(slot); if (draw_slot) %translate([bracket_height, -100, 0]) tslot_y(slot, 300); } module extruder_bracket(slot) { difference() { union() { translate([bracket_height, 0, slot]) cube([slot, bracket_width + bracket_width_add, bracket_height]); cube([bracket_height, bracket_width + bracket_width_add, slot + bracket_height]); translate([-nema17_size - bracket_dist_add, 0, slot]) cube([nema17_size + bracket_dist_add, bracket_width, bracket_height]); } translate([bracket_height + slot / 2, (bracket_width + bracket_width_add) / 2, slot - 1]) cylinder(d = 4.4, h = bracket_height + 2); translate([-1, (bracket_width + bracket_width_add) / 2, slot / 2]) rotate([0, 90, 0]) cylinder(d = 4.4, h = bracket_height + 2); translate([-bracket_height - 14, 0, slot + bracket_height + 6]) rotate([-90, 0, 0]) extruder_screw_holes_main(); } } module extruder_assembly(id = "") { color("cyan") extruder_holder(); color("yellow") extruder_top_plate(); color("orange") extruder_cover(id); if (!extruder_lever_with_switch) { color("red") extruder_lever(); } else { color("red") translate([6, 0, 62.4 - 4.9]) extruder_lever_switch(); } color("silver", 0.5) %extruder_bearing(); // Filament mockup color("blue", 0.25) %translate([extruder_filament_offset, 0, -15]) cylinder(d=extruder_filament_d, h=100, $fn=64); // NEMA17 mockup color("gray") %translate([-nema17_size / 2, 40 + 10, extruder_height_m]) rotate([90, 0, 0]) nema17(40); } module extruder_holder() { difference() { union() { translate([-extruder_width/2, 0, 0]) rounded_cube(extruder_width, 10, extruder_height_m, 0, fillet, 0); translate([-extruder_width/2, -6, extruder_height_m]) rounded_cube(extruder_width, 16, 11, fillet,fillet,fillet); translate([-extruder_width/2, -6, extruder_height_m-5]) rounded_cube(extruder_width, 16, 10, 0,0,fillet); translate([extruder_filament_offset-5,0, extruder_height_m+10]) cube([10, 7.5, 9]); // tip for flex filament translate([-12,0, extruder_height_m+10.9]) cylinder(d2 = 5, d1=8, h=2.1, $fn=64); // spring } translate([-extruder_width/2-0.15, -15, 0.1]) rounded_cube(extruder_width+0.3, 15, extruder_height_m, fillet,fillet,fillet); translate([0,10.1,extruder_height_m+21.5]) rotate([90,0,0]) cylinder(d=23, h=2.6, $fn=64); translate([-12,0, extruder_height_m+11]) cylinder(r = 1.5, h=20, $fn=64, center=true); //spring //hotend mount translate([extruder_filament_offset,0, 0]) { extruder_hotend_mount(); translate([-5.1,-10,20]) cube([10.2, 10, 20]); } //motor screws translate([-31/2, -6, extruder_height_m+6]) rotate([-90, 0, 0]) { cylinder(r = 1.6, h = 25, $fn=32); cylinder(r = 3.1, h = 6, $fn=32, center=true); } translate([ 31/2, -6, extruder_height_m+6]) rotate([-90, 0, 0]) { cylinder(r = 1.6, h = 25, $fn=32); cylinder(r = 3.1, h = 6, $fn=32, center=true); } extruder_screw_holes_main(); extruder_flex_guide(); } // tip extruder_supports if (extruder_supports) for (xx =[-5.2, -2.5, 0, 2.5, 4.7]) translate([extruder_filament_offset+xx, 7.6, extruder_height_m+11.4]) cube ([0.55, 2.4, 8]); } module extruder_top_plate() { difference() { hull() { translate([-14.5, 6, extruder_height_m+39.5]) rotate([-90, 0, 0]) cylinder(r=3, h=4, $fn=32); translate([-18, 6, extruder_height_m+36]) rotate([-90, 0, 0]) cylinder(r=3, h=4, $fn=32); translate([-18, 6, extruder_height_m+29]) rotate([-90, 0, 0]) cylinder(r=3, h=4, $fn=32); translate([ 31/2, 6, extruder_height_m+37]) rotate([-90, 0, 0]) cylinder(r = 5.5, h=4, $fn=32); translate([18, 6, extruder_height_m+29]) rotate([-90, 0, 0]) cylinder(r=3, h=4, $fn=32); } translate([0,10.1,extruder_height_m+21.5]) rotate([90,0,0]) cylinder(d=24, h=5, $fn=64); //mount holes translate([-31/2, 5.9, extruder_height_m+37]) rotate([-90, 0, 0]) { cylinder(r = 1.6, h = 5, $fn=32); cylinder(r = 3.5, h = 2, $fn=32); } translate([ 31/2, 5.9, extruder_height_m+37]) rotate([-90, 0, 0]) { hd = extruder_brass_tube ? 4.2 : 3; cylinder(d = hd, h = 5, $fn=32); } } } module extruder_lever() { translate([0, 0, extruder_height_m]) difference() { union() { hull() { translate([-8, -(lever_h/2), 32.5]) rounded_cube(38-14+fillet, lever_h, 10, noback = true); translate([-13, -(lever_h/2), 39.5]) rotate([-90, 0, 0]) rounded_cylinder(3, lever_h-1, fillet, true, true); translate([-13, -(lever_h/2), 35.5]) rotate([-90, 0, 0]) rounded_cylinder(3, lever_h-1, fillet, true, true); } // lever tip hull() { translate([-13, -(lever_h/2), 39.5]) rotate([-90, 0, 0]) rounded_cylinder(3, lever_h-1, fillet, true, true); translate([-13, -(lever_h/2), 35.5]) rotate([-90, 0, 0]) rounded_cylinder(3, lever_h-1, fillet, true, true); translate([-18.5, -(lever_h/2), 35.5]) rotate([-90, 0, 0]) rounded_cylinder(3, lever_h-1, fillet, true, true); translate([-25, -(lever_h/2), 39.5]) rotate([-90, 0, 0]) rounded_cylinder(3, lever_h-1, fillet, true, true); } // bearing holder arm hull() { translate([extruder_bearing_x-extruder_bearing_od/2+1, -(lever_h/2), 21.5]) rounded_cube(extruder_bearing_od/2, lever_h, 15); translate([ 31/2, -(lever_h/2), 37]) rotate([-90, 0, 0]) rounded_cylinder(r = 5.5, h = lever_h, rrnd=fillet, $fn=64); translate([extruder_bearing_x, 0, 21.5]) rotate([-90, 0, 0]) rounded_cylinder((extruder_bearing_od-2)/2, lever_h, center=true); if (extruder_bearing_od <= 16) translate([min((extruder_bearing_x+2),20-(extruder_bearing_od-2)/2), 0, 21.5]) rotate([-90, 0, 0]) rounded_cylinder((extruder_bearing_od-2)/2, lever_h, center=true); } //spring tip translate([-12,0, 30.5]) cylinder(d1 = 5, d2=8, h=2.1, $fn=64); //filament tip translate([extruder_filament_offset,0, 30]) cylinder(d1 = 6, d2=10, h=3, $fn=64); } translate([extruder_filament_offset, 0, 42.5-3]) cylinder(d1 = 4, d2=5, h=3, $fn=64); //mounting hole translate([ 31/2, -(lever_h/2), 37]) rotate([-90, 0, 0]) { hd = extruder_brass_tube ? 4.2 : 3; cylinder(d=hd, h = 20, $fn=32); cylinder(d=8, h = 7, $fn=32, center=true); } translate([extruder_bearing_x, 0, 21.5]) rotate([-90, 0, 0]) { difference() { cylinder(d=extruder_bearing_od+2, h=extruder_bearing_h+0.5, $fn=64, center=true); difference() { cylinder(d=extruder_bearing_id+(extruder_bearing_od-extruder_bearing_id)/3, h=extruder_bearing_h+0.5, $fn=64, center=true); cylinder(d=extruder_bearing_od, h=extruder_bearing_h+0.1, $fn=64, center=true); } } cylinder(d=extruder_bearing_id*0.95, h=20, $fn=64, center=true); } //translate([extruder_filament_offset, -(extruder_bearing_h)/2, 0]) cube([20, extruder_bearing_h+0.1, 21.5]); // filament hole translate([extruder_filament_offset,0, 25]) cylinder(d=4.2, h=20, $fn=64); // spring screw translate([-12,0, 32.5]) { cylinder(r = 1.6, h=30, $fn=64, center=true); translate([-3, -3.3, 3]) cube([6, 10, 3.0]); } } } module extruder_switch_model() { $fn = 15; difference() { union() { cube([12.8, 5.8, 6.2]); translate([-0.5, (5.8 - 4) / 2, 6.2 + 2.5]) rotate([0, 11, 0]) cube([13.5, 4.0, 0.3]); translate([0.9, 5.8 / 2, -4.0]) cylinder(d = 0.8, h = 4.0); translate([12.8 - 0.9, 5.8 / 2, -4.0]) cylinder(d = 0.8, h = 4.0); translate([12.8 / 2, 5.8 / 2, -4.0]) cylinder(d = 0.8, h = 4.0); } translate([3.1, 5.9, 1.0]) rotate([90, 0, 0]) cylinder(d = 2.0, 6.0); translate([3.1 + 6.5, 5.9, 1.0]) rotate([90, 0, 0]) cylinder(d = 2.0, 6.0); } } module extruder_lever_switch() { $fn = 20; translate([-6, 0, extruder_height_m - 77.4 + 4.9]) extruder_lever(); %translate([-9 + 0.5, 3, 0]) rotate([180, -90, 0]) extruder_switch_model(); difference() { cylinder(d = 9.0, h = 13.0); translate([0, 0, -0.1]) cylinder(d1 = 5.1, d2 = 2.5, h = 13.2); translate([-5.5, -15, 0]) cube([5, 30, 13.1]); translate([-9 + 0.5, 3, 0]) rotate([180, -90, 0]) extruder_switch_model(); } difference() { union() { translate([-11, 3.0, 0]) cube([11, 1.5 + 1.5, 13]); translate([-11, -6.0, -3]) cube([11, 1.5 + 1.5, 13 + 3]); } for (off = [-1 : 0.1 : 1]) { translate([-7.5 + off, 10, 3.1]) rotate([90, 0, 0]) cylinder(d = 2.5, 20.0); translate([-7.5 + off, 10, 9.6]) rotate([90, 0, 0]) cylinder(d = 2.5, 20.0); } } } module extruder_cover(id = "") { difference() { union() { translate([-extruder_width/2, -extruder_cover_d, 0]) rounded_cube(extruder_width, extruder_cover_d, extruder_height_m, fillet,fillet,fillet); translate([extruder_filament_offset-5,-6, extruder_height_m-1]) cube ([10, 6, 20]); // add id number translate([-6, -extruder_cover_d + 1, 12]) rotate([90, 90, 0]) linear_extrude(height = 3) text(id, 12, font = "Liberation Sans:style=Bold"); } translate([extruder_filament_offset,0,0]) extruder_hotend_mount(); extruder_screw_holes_main(); extruder_flex_guide(); } } module extruder_hotend_mount() { cylinder(d=4.2, h=46, $fn=64); cylinder(d=5.8, h=8, $fn=64); } module extruder_screw_holes_main() { translate([extruder_width/2-5.5, -extruder_cover_d, extruder_height_m/2]) rotate([-90, 0, 0]) { cylinder(r = 1.6, h = 50, $fn=32); cylinder(r = 3.2, h = 11, $fn=32, center=true); } translate([-extruder_width/2+5.5, -extruder_cover_d, extruder_height_m/2]) rotate([-90, 0, 0]) { cylinder(r = 1.6, h = 50, $fn=32); cylinder(r = 3.2, h = 11, $fn=32, center=true); } translate([extruder_width/2-5.5, extruder_depth-4, extruder_height_m/2]) rotate([-90, 0, 0]) cylinder( d = 6.6, h = 4.1, $fn=6); translate([-extruder_width/2+5.5, extruder_depth-4, extruder_height_m/2]) rotate([-90, 0, 0]) cylinder( d = 6.6, h = 4.1, $fn=6); } module extruder_flex_guide() { difference() { translate([0, -10, extruder_height_m+6+31/2]) rotate([-90, 0, 0]) cylinder(d=extruder_gear_od+1, h=20, $fn=64); intersection() { translate([0, -10, extruder_height_m+6+31/2]) rotate([-90, 0, 0]) cylinder(d=extruder_gear_od+1, h=20, $fn=64); translate([0, 0, extruder_height_m+6+31/2]) rotate([90, 0, 0]) rotate_extrude($fn=64) { translate([extruder_gear_ed/2 + (extruder_gear_od - extruder_gear_ed)/2 +0.5, 0, 0]) resize([(extruder_gear_od-extruder_gear_ed), extruder_gear_groove_width]) circle(d = extruder_gear_od-extruder_gear_ed, $fn=64); } } } translate([0, 3.5, extruder_height_m+6+31/2]) rotate([-90, 0, 0]) cylinder(d1=extruder_gear_od+1, d2 = extruder_gear_od+2, h=0.55, $fn=64); translate([0, 4, extruder_height_m+6+31/2]) rotate([-90, 0, 0]) cylinder(d=extruder_gear_od+2, h=20, $fn=64); translate([0, -3.5, extruder_height_m+6+31/2]) mirror([0,1,0]) rotate([-90, 0, 0]) cylinder(d1=extruder_gear_od+1, d2 = extruder_gear_od+2, h=0.55, $fn=64); translate([0, -4, extruder_height_m+6+31/2]) mirror([0,1,0]) rotate([-90, 0, 0]) cylinder(d=extruder_gear_od+2, h=20, $fn=64); translate([extruder_bearing_od/2 + extruder_gear_ed/2 + extruder_filament_d,-10, extruder_height_m+6+31/2]) { rotate([-90, 0, 0]) cylinder(d=extruder_bearing_od+1, h=20, $fn=64); translate([0,0,-(extruder_bearing_od+1)/2]) cube([(extruder_bearing_od+1)/2, 20, (extruder_bearing_od+1)/2]); } } module extruder_bearing() { translate([extruder_bearing_od/2 + extruder_gear_ed/2+extruder_filament_d, 0, extruder_height_m+6+31/2]) { difference() { rotate([-90, 0, 0]) cylinder(d=extruder_bearing_od, h=extruder_bearing_h, $fn=64, center=true); rotate([-90, 0, 0]) cylinder(d=extruder_bearing_id, h=extruder_bearing_h+0.1, $fn=64, center=true); } } }