// Arcol.hu Hot-End Version 4.1.1 // hot end designed by Laszlo Krekacs // // Home Page: http://wiki.arcol.hu/arcol-hu-hot-end-v4-assembly // Store: http://shop.arco.hu // // I, the author of this document, hereby relinquish to the public domain all // rights to this file to which I may have otherwise been entitled to under // copyright law. I am *not* Laszlo Krekacs and I make no claims regarding any // rights he may have over the use of this design. // Wade-compatible mounting plate. module plate( thickness=5.0, // height of the plate width=30.0, // width of mounting plate length=70.0, // length of mounting plate corner_radius=2.5, // set 0 to render without rounded corners hotend_radius=6.0, // radius of the slot for the hotend screw_radius=2.5, // radius of screw slots slot_length=8, // length of screw slots arcol=0, // 1 - arcol.hu v4.1.1 style // 0 - makergear style $fs=0.2, ) { // Computed values off_center=6.0*(1-arcol)+0.5*arcol; // distance from center of hotend slot to center of mounting plate slot_to_edge=2.0*(1-arcol)+16.5*arcol; // distance from edge of plate to screw slot (makergear), // or distance from hotend slot to screw slot (arcol). difference() { translate( [-width/2+corner_radius,off_center-length/2+corner_radius,0]) minkowski() { cube( [ width-corner_radius*2, length-corner_radius*2, thickness/2 + (corner_radius==0?thickness/2:0) ] ); cylinder( r=corner_radius,h=thickness/2 ); } // near screw slot if( arcol==1 ) { hull() { translate( [0,-hotend_radius-slot_to_edge-screw_radius,0]) cylinder( h=thickness, r=screw_radius ); translate( [width/2,-hotend_radius-slot_to_edge-screw_radius,0]) cylinder( h=thickness, r=screw_radius ); } } else { hull() { translate( [0,off_center-length/2+slot_to_edge+slot_length+screw_radius,0]) cylinder( h=thickness, r=screw_radius ); translate( [0,off_center-length/2+slot_to_edge+screw_radius,0]) cylinder( h=thickness, r=screw_radius ); } } // far screw slot if( arcol==1 ) { hull() { translate( [0,hotend_radius+slot_to_edge+screw_radius,0]) cylinder( h=thickness, r=screw_radius ); translate( [width/2,hotend_radius+slot_to_edge+screw_radius,0]) cylinder( h=thickness, r=screw_radius ); } } else { hull() { translate( [0,off_center+length/2-slot_to_edge-slot_length-screw_radius,0]) cylinder( h=thickness, r=screw_radius ); translate( [0,off_center+length/2-slot_to_edge-screw_radius,0]) cylinder( h=thickness, r=screw_radius ); } } // middle hotend slot cylinder( h=thickness, r=hotend_radius ); translate( [0,-hotend_radius,0] ) cube( [width/2,hotend_radius*2,thickness] ); } } module ptfe_insert( height=10.5, filament_diameter=3, insert_diameter=5, ) { difference() { cylinder(r=insert_diameter/2, h=10.5); cylinder(r=filament_diameter/2, h=10.5); } } // Arcol.hu v4.1.1 heat sink module heatsink( height=22.5, // height of entire heat sink grip_height=3.0, // height of the portion with flats that screws into the stainless steel part over_plate=4.8, // height of the portion that rests above the mounting plate plate_thickness=5.2, // height of the mounting plate slot fin_thickness=1.6, // height of a single fin fin_spacing=1.7, // height of the space between fins fin_radius=12, // radius of a fin plate_diameter=11.93,// diameter of portion that fits in the mounting plate diameter=15.8, // diameter of portion above and below the mounting plate screw_diameter=10, // diameter of large grub screw screw_depth=6, // depth of large grub screw and stainless steel part holes grub_diameter=3, // diameter of small grub screw that goes through the fins insert_diameter=5, // diameter of the PTFE insert $fs=0.2, $fa=7, ) { // Computed values fin_height=height-over_plate-grip_height-plate_thickness; fin_count=floor( (fin_height+fin_spacing)/(fin_thickness+fin_spacing)+0.1 ); under_plate=height-over_plate-plate_thickness-fin_count*(fin_thickness+fin_spacing)+fin_spacing-grip_height; flat_width=round(plate_diameter); difference() { union() { intersection() { cylinder( r=diameter/2, h=grip_height ); translate( [-flat_width/2,-diameter/2,0] ) cube( [flat_width,diameter,3] ); } union() { translate([0,0,grip_height]) cylinder( r=plate_diameter/2,h=fin_height ); // fins for( f=[0:fin_count-1] ) { translate([0,0,grip_height+f*(fin_thickness+fin_spacing)]) cylinder( r=fin_radius, h=fin_thickness ); } } translate( [0,0,grip_height+fin_height-under_plate] ) cylinder( r=diameter/2, h=under_plate ); translate( [0,0,height-over_plate-plate_thickness] ) cylinder( r=plate_diameter/2, h=plate_thickness ); translate( [0,0,height-over_plate] ) cylinder( r=diameter/2, h=over_plate ); } // stainless steal heat barrier hole cylinder (r=screw_diameter/2, h=screw_depth ); // ptfe insert translate([0,0,screw_depth]) cylinder(r=insert_diameter/2, h=height-screw_depth*2); // large grub screw hole translate([0,0,height-screw_depth]) cylinder(r=screw_diameter/2, h=screw_depth ); // small through-fins grub screw holes translate([0,diameter/2+grub_diameter/2,grip_height]) cylinder(r=grub_diameter/2,h=fin_height); } } // Arcol v4.1.1 sspart module sspart() { $fs=0.2; difference() { union() { cylinder(r1=4,r2=5,h=1); translate([0,0,1]) cylinder(r=5,h=5); intersection() { translate( [0,0,6] ) cylinder(r=5,h=2); translate( [-5,-sqrt(3)*5/2,6] ) cube( [10,sqrt(3)*5,2] ); } translate([0,0,8]) cylinder(r=3.5/2,h=10); rotate( [0,0,-60] ) intersection() { translate( [0,0,18] ) cylinder(r=5,h=2); translate( [-5,-sqrt(3)*5/2,18] ) cube( [10,sqrt(3)*5,2] ); } translate([0,0,20]) cylinder(r=5,h=5); translate([0,0,25]) cylinder(r1=5,r2=4,h=1); } cylinder(r=1.5,h=40); } } // Arcol v4.1.1 nozzle module nozzle() { $fs=0.2; difference() { union() { cylinder(r1=0.8,r2=1.6,h=0.5); translate([0,0,0.5]) cylinder(r1=1.6,r2=2.2,h=0.5); translate([0,0,1]) cylinder(r1=5.35/2,r2=5,h=2); translate([0,0,3]) cylinder(r=5,h=8); intersection() { translate([0,0,8+3]) cylinder(r=7,h=8); translate([-7,-6,8+3]) cube([14,12,8]); } } cylinder(r=0.5/2,h=1); translate([0,0,1]) cylinder(r=1.5,h=12); translate([0,0,10+3]) cylinder(r=5,h=6); } } // Arcol v4.1.1 heater block module heater( cr=0.5, // corner radius, set to 0 for sharp corners height=8, // height of entire block fs=1, // $fs as a variable ) { // Computed values $fs=fs; fn=max(2*round(2*cr*3.14/fs),4); h2=height-2; union() { difference() { minkowski() { union() { hull() { translate([-6+cr,3+cr,cr]) cube( [17-2*cr,14-2*cr,height-cr*2] ); translate( [-6+cr,+cr,cr] ) cube( [12-2*cr,3-2*cr,height-cr*2] ); } } rotate([0,180/fn,0]) sphere(r=cr, $fn=fn); } translate([0,0,6]) cylinder( r1=5+cr,r2=6-cr,h=2+cr ); translate([0,0,-cr]) cylinder( r=5+cr,h=6+cr ); translate([-6-1,9,4]) rotate([0,90,0]) cylinder( r=3,h=17+2 ); translate([0,15,5]) cylinder(r1=.25,r2=.75,h=3+cr); } if( cr>0 ) { rotate_extrude() hull() { translate([4+cr,cr,0]) rotate([0,0,-90]) circle(r=cr,$fn=fn); translate([4+cr,h2-cr,0]) rotate([0,0,90]) circle(r=cr,$fn=fn); translate([6-cr,cr,0]) rotate([0,0,-90]) circle(r=cr,$fn=fn); translate([6-cr,height-cr,0]) rotate([0,0,90]) circle(r=cr,$fn=fn); } } else { difference() { cylinder(r=6,h=height); translate([0,0,h2]) cylinder( r1=5,r2=6,h=height-h2 ); translate([0,0,0]) cylinder( r=5,h=h2 ); } } } } translate( [0,0,-30] ) { // Aluminum mounting plate translate( [0,0,45.6] ) plate(arcol=1); // PTFE insert translate( [0,0,39] ) ptfe_insert($fs=0.2); // Aluminum heatsink translate( [0,0,33]) heatsink(); // Stainless steel heat barrier translate ( [0,0,13] ) sspart(); // Aluminum nozzle nozzle(); // Aluminum heater block translate( [0,0,3]) rotate([0,0,90]) heater(); }