mirror of
https://github.com/nophead/Mendel90.git
synced 2025-08-31 00:39:55 +02:00
Pulleys and belts now T2.5 on kit version.
JHead now attached by three screws and washers. New extruder breakout PCB. Lots of instruction manual improvements from user feedback.
This commit is contained in:
@@ -48,12 +48,12 @@ top_limit_switch = true;
|
||||
single_piece_frame = true;
|
||||
stays_from_window = false;
|
||||
cnc_sheets = true; // If sheets are cut by CNC we can use slots, etc instead of just round holes
|
||||
pulley_type = T5x10_metal_pulley;
|
||||
pulley_type = T2p5x16_metal_pulley;
|
||||
|
||||
Y_carriage = DiBond;
|
||||
|
||||
X_belt = T5x6;
|
||||
Y_belt = T5x6;
|
||||
X_belt = T2p5x6;
|
||||
Y_belt = T2p5x6;
|
||||
|
||||
motor_shaft = 5;
|
||||
Z_screw_dia = 6; // Studding for Z axis
|
||||
|
@@ -117,10 +117,11 @@ module sector(r, a, h, , center = true) {
|
||||
}
|
||||
|
||||
module tube(or, ir, h, center = true) {
|
||||
difference() {
|
||||
cylinder(r = or, h = h, center = center);
|
||||
cylinder(r = ir, h = h + 1, center = center);
|
||||
}
|
||||
linear_extrude(height = h, center = center, convexity = 5)
|
||||
difference() {
|
||||
circle(or);
|
||||
circle(ir);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
@@ -50,7 +50,7 @@ shell_length = shell_front + 12 + ribbon_clamp_width(cable_screw);
|
||||
shell_screw_x = shell_length - wall - No2_pilot_radius;
|
||||
|
||||
pcb_width = 24.13;
|
||||
pcb_length = 27.94; // + 2.54;
|
||||
pcb_length = 33.02;
|
||||
pcb_offset = 3 * 1.27;
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ module d_motor_bracket_lid_stl(motor = NEMA17, nuts = true) {
|
||||
rotate([0, 0, -side * 360 / 20])
|
||||
poly_cylinder(r = No2_clearance_radius, h = 100, center = true);
|
||||
|
||||
if(pcb && nuts && pcb_length == 27.94)
|
||||
if(pcb && nuts)
|
||||
cube([100, slot_width, 100], center = true);
|
||||
}
|
||||
}
|
||||
@@ -306,27 +306,28 @@ module d_motor_bracket_assembly(motor) {
|
||||
translate([0, 0, -length])
|
||||
rotate([180, 0, -90])
|
||||
explode([0, -15, 0]) group() {
|
||||
if(pcb)
|
||||
assembly("extruder_connection_pcb_assembly");
|
||||
d_plug(connector, pcb = pcb);
|
||||
if(pcb) {
|
||||
assembly("extruder_connection_pcb_assembly");
|
||||
translate([0, -pcb_length / 2 + pcb_offset, -d_pcb_offset(connector) - pcb_thickness / 2]) {
|
||||
vitamin("PCB0000: Extruder connection PCB");
|
||||
color("green") cube([pcb_width, pcb_length, pcb_thickness], center = true);
|
||||
|
||||
translate([2.5 * 1.27, -pcb_length / 2 + 8.89 - 1.5 * 2.54, pcb_thickness / 2])
|
||||
terminal_254(3);
|
||||
translate([2.5 * 1.27, -pcb_length / 2 + 8.89 - 2.54, pcb_thickness / 2])
|
||||
terminal_254(4);
|
||||
|
||||
translate([2.5 * 1.27, -pcb_length / 2 + 8.89 + 1.5 * 2.54, pcb_thickness / 2])
|
||||
terminal_254(3);
|
||||
translate([2.5 * 1.27, -pcb_length / 2 + 8.89 + 2.75 * 2.54, pcb_thickness / 2])
|
||||
molex_254(3);
|
||||
|
||||
translate([-3.5 * 1.27, -pcb_length / 2 + 8.89 - 1.5 * 2.54, pcb_thickness / 2])
|
||||
rotate([0, 0, 180])
|
||||
terminal_254(3);
|
||||
molex_254(2);
|
||||
|
||||
translate([-3.5 * 1.27, -pcb_length / 2 + 8.89 + 1.5 * 2.54, pcb_thickness / 2])
|
||||
translate([-3.5 * 1.27, -pcb_length / 2 + 8.89 + 2 * 2.54, pcb_thickness / 2])
|
||||
rotate([0, 0, 180])
|
||||
terminal_254(3);
|
||||
}
|
||||
terminal_254(4);
|
||||
}
|
||||
end("extruder_connection_pcb_assembly");
|
||||
}
|
||||
}
|
||||
|
@@ -23,12 +23,12 @@ module pulley_assembly() {
|
||||
|
||||
translate([0, pulley_bore(type) / 2 + pulley_screw_length(type), pulley_screw_z(type) + pulley_offset(type)[2]])
|
||||
rotate([-90, 0, 0])
|
||||
screw(M3_grub_screw, pulley_screw_length(type));
|
||||
screw(pulley_screw(type), pulley_screw_length(type));
|
||||
|
||||
if(pulley_nut_y(type))
|
||||
translate([0, pulley_nut_y(type), pulley_screw_z(type) + pulley_offset(type)[2]])
|
||||
rotate([90, 0, 0])
|
||||
nut(M3_nut);
|
||||
nut(screw_nut(pulley_screw(type)));
|
||||
|
||||
}
|
||||
|
||||
|
@@ -25,7 +25,7 @@ module belt(type, x1, y1, r1, x2, y2, r2, gap = 0) {
|
||||
dy = y2 - y1;
|
||||
|
||||
length = round((pi * (r1 + r2 + thickness) + 2 * sqrt(dx * dx + dy * dy) - gap) / pitch) * pitch;
|
||||
vitamin(str("BT", belt_pitch(type) * 10,width, round(length), ": Belt T", belt_pitch(type)," x ", width, "mm x ", round(length), "mm (PU & Kevlar)"));
|
||||
vitamin(str("BT", belt_pitch(type) * 10,width, round(length), ": Belt T", belt_pitch(type)," x ", width, "mm x ", round(length), "mm"));
|
||||
|
||||
color(belt_color)
|
||||
linear_extrude(height = width, center = true, convexity = 6) {
|
||||
|
@@ -76,10 +76,7 @@ module sleeved_resistor(type, sleeving, bare = 5, on_bom = true, heatshrink = fa
|
||||
|
||||
if(heatshrink)
|
||||
translate([0, 0, sleeving_length + resistor_length(type) / 2 + bare / 2 + 30 * exploded])
|
||||
if(exploded)
|
||||
tubing(heatshrink);
|
||||
else
|
||||
%tubing(heatshrink);
|
||||
tubing(heatshrink);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -88,11 +85,7 @@ module sleeved_resistor(type, sleeving, bare = 5, on_bom = true, heatshrink = fa
|
||||
|
||||
if(heatshrink)
|
||||
translate([0, 0, side * (resistor_length(type) /2 + sleeving_length + 30 * exploded)])
|
||||
if(exploded)
|
||||
tubing(heatshrink);
|
||||
else
|
||||
%tubing(heatshrink);
|
||||
|
||||
tubing(heatshrink);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -13,6 +13,7 @@ DCONN15 = [39.14, [26.25, 25.25], 33.32, [9.26, 8.38], 12.55, 10.72, 6.693, 1.12
|
||||
DCONN25 = [53.04, [40, 38.96], 47.04, [9.26, 8.38], 12.55, 10.72, 6.693, 1.12, 25];
|
||||
|
||||
function d_flange_length(type) = type[0];
|
||||
function d_hole_pitch(type) = type[2];
|
||||
function d_flange_width(type) = type[4];
|
||||
function d_flange_thickness(type) = type[7];
|
||||
function d_mate_distance(type) = 8.5;
|
||||
@@ -45,7 +46,7 @@ module d_plug(type, socket = false, pcb = false, idc = false) {
|
||||
|
||||
flange_length = d_flange_length(type);
|
||||
d_length = socket ? type[1][1] : type[1][0];
|
||||
hole_pitch = type[2];
|
||||
hole_pitch = d_hole_pitch(type);
|
||||
d_width = socket ? type[3][1] : type[3][0];
|
||||
flange_width = d_flange_width(type);
|
||||
d_height = type[6];
|
||||
|
@@ -13,8 +13,8 @@ module sanguinololu() {
|
||||
import("../imported_stls/sanguinololu.stl");
|
||||
}
|
||||
|
||||
Sanguinololu = ["SANGUINOL: Electronics e.g. Sanguinolou", 4 * 25.4, 2 * 25.4, 1.5 * 2.54, []];
|
||||
Melzi = ["MELZI: Electronics e.g. Melzi", 8.2 * 25.4, 1.95 * 25.4, 1.5 * 2.54, ["USBLEAD: USB A to Mini B lead",
|
||||
Sanguinololu = ["SANGUINOL: Sanguinolou electronics", 4 * 25.4, 2 * 25.4, 1.5 * 2.54, []];
|
||||
Melzi = ["MELZI: Melzi electronics", 8.2 * 25.4, 1.95 * 25.4, 1.5 * 2.54, ["USBLEAD: USB A to Mini B lead",
|
||||
"SDCARD: Micro SD card",
|
||||
"SDUSB: Micro SD to USB adapter"]];
|
||||
|
||||
|
@@ -13,7 +13,7 @@ jhead = 3;
|
||||
function jhead_groove() = 4.64;
|
||||
function jhead_groove_offset() = 5.1; //4.76;
|
||||
|
||||
jhead_inset = jhead_groove() + jhead_groove_offset();
|
||||
jhead_inset = jhead_groove_offset();
|
||||
|
||||
m90_hot_end_12mm = [m90, "HEM90340: Mendel 90 hot end", 57, 10, 12, 40, "tan", 6 + 3/2 - 1, false];
|
||||
m90_hot_end_12p5mm = [m90, "HEM90340: Mendel 90 hot end", 57, 10, 12.5, 40, "tan", 6.25 + 3/2 - 1, false];
|
||||
|
@@ -25,7 +25,7 @@ insulator_dia = 12;
|
||||
function jhead_groove_dia() = 12;
|
||||
|
||||
module heater_block(type, resistor, thermistor) {
|
||||
color("gold") render() difference() {
|
||||
color("gold") render(convexity = 10) difference() {
|
||||
cube([heater_length(type), heater_width(type), heater_height(type)], center = true);
|
||||
|
||||
translate([-heater_length(type) / 2, thermistor_y(type), 0]) // hole for thermistor
|
||||
@@ -54,11 +54,12 @@ module jhead_hot_end(type, exploded = exploded) {
|
||||
cone_length = 3;
|
||||
cone_end = 1;
|
||||
cone_start = nozzle_cone(heater);
|
||||
bundle = 3.2;
|
||||
|
||||
vitamin(hot_end_part(type));
|
||||
|
||||
translate([0, 0, inset - insulator_length]) {
|
||||
color(hot_end_insulator_colour(type)) render()
|
||||
color(hot_end_insulator_colour(type)) render(convexity = 10)
|
||||
difference() {
|
||||
cylinder(r = hot_end_insulator_diameter(type) / 2, h = insulator_length);
|
||||
cylinder(r = 3.2 / 2, h = insulator_length * 2 + 1, center = true);
|
||||
@@ -66,7 +67,7 @@ module jhead_hot_end(type, exploded = exploded) {
|
||||
tube(ir = jhead_groove_dia() / 2, or = 17 / 2, h = jhead_groove());
|
||||
}
|
||||
|
||||
color("gold") render() union() {
|
||||
color("gold") render(convexity = 10) union() {
|
||||
translate([0, 0, -barrel_length + cone_length + eta]) {
|
||||
cylinder(r = cone_start / 2, h = barrel_length - cone_length);
|
||||
translate([0, 0, -cone_length + eta])
|
||||
@@ -75,13 +76,17 @@ module jhead_hot_end(type, exploded = exploded) {
|
||||
}
|
||||
}
|
||||
|
||||
translate([0, -2.0, -5])
|
||||
ziptie(small_ziptie, hot_end_insulator_diameter(type) / 2 + 2.0);
|
||||
rotate([0, 0, 10]) {
|
||||
scale([1, (bundle + hot_end_insulator_diameter(type)) / hot_end_insulator_diameter(type)])
|
||||
translate([0, -bundle / 2, -7])
|
||||
rotate([0, 0, -110])
|
||||
ziptie(small_ziptie, hot_end_insulator_diameter(type) / 2);
|
||||
|
||||
translate([0, -10, 20])
|
||||
scale([1.5, 0.5])
|
||||
tubing(HSHRNK64, 60);
|
||||
translate([0, -hot_end_insulator_diameter(type) / 2 - bundle / 2, 20])
|
||||
scale([0.7, bundle / 6.4])
|
||||
tubing(HSHRNK64, 60);
|
||||
|
||||
}
|
||||
wire("Red", 16, 170);
|
||||
wire("Red", 16, 170);
|
||||
|
||||
@@ -91,7 +96,7 @@ module jhead_hot_end(type, exploded = exploded) {
|
||||
|
||||
translate([resistor_x(heater), -exploded * 15, 0])
|
||||
rotate([90, 0, 0])
|
||||
sleeved_resistor(resistor, PTFE20, bare = - 10, on_bom = false, heatshrink = HSHRNK24, exploded = exploded);
|
||||
sleeved_resistor(resistor, PTFE20, bare = - 10, on_bom = false, exploded = exploded);
|
||||
|
||||
translate([-heater_length(heater) / 2 + resistor_length(thermistor) / 2 - exploded * 10, thermistor_y(heater), 0])
|
||||
rotate([90, 0, -90])
|
||||
|
@@ -12,10 +12,12 @@ LM8UU = [24, 15, 8];
|
||||
LM6UU = [19, 12, 6];
|
||||
LM4UU = [12, 8, 4];
|
||||
|
||||
function bearing_radius(type) = type[1] / 2;
|
||||
|
||||
module linear_bearing(type) {
|
||||
vitamin(str("LM",type[2],"UU: ","LM",type[2],"UU linear bearing"));
|
||||
color(bearing_color) render() rotate([0,90,0]) difference() {
|
||||
cylinder(r = type[1] / 2, h = type[0], center = true);
|
||||
cylinder(r = bearing_radius(type), h = type[0], center = true);
|
||||
cylinder(r = type[2] / 2, h = type[0] + 1, center = true);
|
||||
}
|
||||
}
|
||||
|
@@ -7,12 +7,13 @@
|
||||
//
|
||||
// Washers
|
||||
//
|
||||
M2p5_nut = [2.5, 5.8, 2.2, 3.8, M2p5_washer, M2p5_nut_trap_depth];
|
||||
M3_nut = [3, 6.4, 2.4, 4, M3_washer, M3_nut_trap_depth];
|
||||
M4_nut = [4, 8.1, 3.2, 5, M4_washer, M4_nut_trap_depth];
|
||||
M6_nut = [6, 11.5, 5, 8, M6_washer, M6_nut_depth];
|
||||
M6_half_nut = [6, 11.5, 3, 8, M6_washer, 3];
|
||||
M8_nut = [8, 15, 6.5, 8, M8_washer, M8_nut_depth];
|
||||
M2p5_nut = [2.5, 5.8, 2.2, 3.8, M2p5_washer, M2p5_nut_trap_depth];
|
||||
M3_nut = [3, 6.4, 2.4, 4, M3_washer, M3_nut_trap_depth];
|
||||
M4_nut = [4, 8.1, 3.2, 5, M4_washer, M4_nut_trap_depth];
|
||||
M5_nut = [5, 9.2, 4, 6.25, M5_washer, M5_nut_depth];
|
||||
M6_nut = [6, 11.5, 5, 8, M6_washer, M6_nut_depth];
|
||||
M6_half_nut = [6, 11.5, 3, 8, M6_washer, 3];
|
||||
M8_nut = [8, 15, 6.5, 8, M8_washer, M8_nut_depth];
|
||||
|
||||
function nut_radius(type) = type[1] / 2;
|
||||
function nut_flat_radius(type) = nut_radius(type) * cos(30);
|
||||
|
@@ -7,8 +7,9 @@
|
||||
//
|
||||
pulley_inner_radius = (14.4 / 2) - belt_thickness(T5x6); // measured from outer diameter
|
||||
|
||||
T5x10_metal_pulley = ["T5", 10, 15, 12.85 / 2, 11.6, 7.9, 7, 5, 19.3, 1.7, 3, 10.7, [0, 0, -2], 0];
|
||||
T5x8_plastic_pulley = ["../imported_stls/pulley.stl", 8, 0, pulley_inner_radius, 0, 0, 0, 5, 0, 0, 6, 4, [-10, -10, 0], 6];
|
||||
T5x10_metal_pulley = ["T5", 10, 15, 12.85 / 2, 11.6, 7.9, 7, 5, 19.3, 1.7, 3, 10.7, [0, 0, -2], 0, M3_grub_screw];
|
||||
T2p5x16_metal_pulley= ["T2.5", 16, 12.16, 12.16 / 2 - 0.8, 8, 16, 5.7, 5, 16.0, 1.0, 6, 3.75, [0, 0,1.3], 0, M4_grub_screw];
|
||||
T5x8_plastic_pulley = ["../imported_stls/pulley.stl", 8, 0, pulley_inner_radius, 0, 0, 0, 5, 0, 0, 6, 4, [-10, -10, 0], 6, M3_grub_screw];
|
||||
|
||||
function pulley_type(type) = type[0];
|
||||
function pulley_teeth(type) = type[1];
|
||||
@@ -24,6 +25,7 @@ function pulley_screw_length(type) = type[10];
|
||||
function pulley_screw_z(type) = type[11];
|
||||
function pulley_offset(type) = type[12];
|
||||
function pulley_nut_y(type) = type[13];
|
||||
function pulley_screw(type) = type[14];
|
||||
|
||||
module metal_pulley(type) {
|
||||
teeth = pulley_teeth(type);
|
||||
@@ -51,7 +53,7 @@ module metal_pulley(type) {
|
||||
|
||||
translate([0, 0, pulley_screw_z(type)])
|
||||
rotate([-90, 0, 0])
|
||||
cylinder(r = 3/2, h = 100);
|
||||
cylinder(r = screw_radius(pulley_screw(type)), h = 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -22,10 +22,12 @@ M3_pan_screw = ["PS030", "M3 pan screw", hs_pan, 3, 5.4, 2.0, M3_was
|
||||
M3_hex_screw = ["HX030", "M3 hex screw", hs_hex, 3, 6.4, 2.125, M3_washer, M3_nut, M3_tap_radius, M3_clearance_radius];
|
||||
M3_grub_screw = ["GB030", "M3 grub screw", hs_grub, 3, 1.6, 2.5, M3_washer, M3_nut, M3_tap_radius, M3_clearance_radius];
|
||||
|
||||
M4_grub_screw = ["GB040", "M4 grub screw", hs_grub, 4, 2.4, 2.5, M4_washer, M4_nut, M4_tap_radius, M4_clearance_radius];
|
||||
M4_cap_screw = ["CS040", "M4 cap screw", hs_cap, 4, 7.0, 3.0, M4_washer, M4_nut, M4_tap_radius, M4_clearance_radius];
|
||||
M4_hex_screw = ["HX040", "M4 hex screw", hs_hex, 4, 8.1, 2.925, M4_washer, M4_nut, M4_tap_radius, M4_clearance_radius];
|
||||
M4_pan_screw = ["PS040", "M4 pan screw", hs_pan, 4, 7.8, 3.3, M4_washer, M4_nut, M4_tap_radius, M4_clearance_radius];
|
||||
M8_cap_screw = ["CS080", "M8 cap screw", hs_cap, 8, 13, 7.78, M8_washer, M8_nut, M8_tap_radius, M8_clearance_radius];
|
||||
M5_cap_screw = ["CS050", "M5 cap screw", hs_cap, 5, 8.5, 4, M5_washer, M5_nut, M5_tap_radius, M5_clearance_radius];
|
||||
M8_cap_screw = ["CS080", "M8 cap screw", hs_cap, 8, 13, 6.0, M8_washer, M8_nut, M8_tap_radius, M8_clearance_radius];
|
||||
M8_hex_screw = ["HX080", "M8 hex screw", hs_hex, 8, 15, 5.65, M8_washer, M8_nut, M8_tap_radius, M8_clearance_radius];
|
||||
|
||||
No2_screw = ["PSW02", "No2 pan wood screw", hs_pan, 2.2, 4.2, 1.7, M2p5_washer, false, No2_pilot_radius, No2_clearance_radius];
|
||||
|
@@ -56,5 +56,34 @@ module terminal_254(ways) {
|
||||
}
|
||||
}
|
||||
|
||||
module molex_254(ways) {
|
||||
vitamin(str("MLXHDR", ways, ": ", ways, " way Molex KK header"));
|
||||
pitch = 2.54;
|
||||
width = ways * pitch;
|
||||
depth = 6.35;
|
||||
height = 8.15;
|
||||
base = 3.18;
|
||||
back = 1;
|
||||
below = 2.3;
|
||||
above = 9;
|
||||
color("white") render()
|
||||
difference() {
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(height = width, center = true, convexity = 5)
|
||||
union() {
|
||||
translate([-depth / 2, 0])
|
||||
square([depth, base]);
|
||||
|
||||
translate([- depth / 2, 0])
|
||||
square([back, height]);
|
||||
}
|
||||
}
|
||||
|
||||
color("silver") render()
|
||||
for(i = [0: ways -1])
|
||||
translate([0, i * pitch - width / 2 + pitch / 2, (above + below) / 2 - below]) {
|
||||
cube([0.44, 0.75, above + below], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
//terminal_254(6);
|
||||
|
@@ -9,8 +9,10 @@
|
||||
//
|
||||
M2p5_washer= [2.5, 5.9, 0.5, false, 5.4];
|
||||
M3_washer = [3, 7, 0.5, false, 5.8];
|
||||
M3_penny_washer =[3, 12, 0.8, false, 5.8];
|
||||
M3p5_washer = [3.5, 8, 0.5, false, 6.9];
|
||||
M4_washer = [4, 9, 0.8, false, 7.9];
|
||||
M5_washer = [5, 10, 1.0, false, 9];
|
||||
M5_penny_washer = [5, 20, 1.4, false, 8.8];
|
||||
M6_washer = [6, 12, 1.5, false, 10.6];
|
||||
M8_washer = [8, 17, 1.6, false, 13.8];
|
||||
|
@@ -22,7 +22,7 @@ module ziptie(type, r)
|
||||
vitamin(str("ZT00", len, ": Ziptie ", len, "mm min length"));
|
||||
|
||||
angle = (r > latch[0] / 2) ? asin((latch[0] / 2) / r) - asin(ziptie_thickness(type) / latch[0]) : 0;
|
||||
color(type[3]) render() union() {
|
||||
color(type[3]) render(convexity = 5) union() {
|
||||
tube(ir = r, or = r + ziptie_thickness(type), h = ziptie_width(type));
|
||||
translate([0, -r, - latch[1] / 2])
|
||||
rotate([90, 0, angle]) {
|
||||
|
231
scad/wade.scad
231
scad/wade.scad
@@ -39,8 +39,16 @@ filament_x = 75;
|
||||
filament_z = 13;
|
||||
|
||||
extension = max(0, nozzle_length - hot_end_length(hot_end));
|
||||
extension_width = 32;
|
||||
extension_width = 30;
|
||||
|
||||
jhead_screw = M3_cap_screw;
|
||||
jhead_screw_length = 16;
|
||||
jhead_washer = M4_washer;
|
||||
jhead_screw_pitch = max(hot_end_insulator_diameter(hot_end) / 2 + screw_head_radius(jhead_screw),
|
||||
jhead_groove_dia() / 2 + washer_diameter(jhead_washer) / 2);
|
||||
|
||||
extension_rad = jhead_screw_pitch + 5;
|
||||
extension_clearance = 1;
|
||||
|
||||
pscrew_y = [17.5, 45.5];
|
||||
pscrew_z = [filament_z - 6.5, filament_z + 6.5];
|
||||
@@ -65,7 +73,7 @@ module keyhole(r, h, l) {
|
||||
entrance = 2 * R + 0.5;
|
||||
y = sqrt(R * R - waist * waist / 4);
|
||||
teardrop(h = h, r = R, center = true);
|
||||
hull() {
|
||||
*hull() {
|
||||
translate([0, l, 0])
|
||||
cube([entrance, 2 * eta, h ], center = true);
|
||||
translate([0, y, 0])
|
||||
@@ -75,6 +83,9 @@ module keyhole(r, h, l) {
|
||||
|
||||
nut_inset = min_wall;
|
||||
|
||||
jhead_screw_angle = 5;
|
||||
jhead_nut_slot = nut_thickness(screw_nut(jhead_screw)) + 0.3;
|
||||
|
||||
module wades_block_stl() {
|
||||
stl("wades_block");
|
||||
|
||||
@@ -85,6 +96,7 @@ module wades_block_stl() {
|
||||
|
||||
nut_slot = nut_thickness(M4_nut) + 0.3;
|
||||
|
||||
|
||||
difference(){
|
||||
union(){
|
||||
cube([81, height, thickness]); // motor plate
|
||||
@@ -105,10 +117,15 @@ module wades_block_stl() {
|
||||
cube([11,11, width]);
|
||||
|
||||
if(extension)
|
||||
translate([filament_x - extension_width / 2, -extension + eta, 0])
|
||||
cube([extension_width, extension, width]);
|
||||
translate([filament_x - extension_width / 2, -extension + extension_clearance + eta, 0])
|
||||
intersection() {
|
||||
cube([extension_width, extension - extension_clearance, width]);
|
||||
translate([extension_width / 2, extension / 2, filament_z])
|
||||
rotate([-90, 0, 0])
|
||||
teardrop(r = extension_rad, h = extension + 1, center = true);
|
||||
}
|
||||
}
|
||||
translate([92,base_thickness + 1,-1])
|
||||
*translate([92,base_thickness + 1,-1])
|
||||
rotate([0,0,45])
|
||||
cube([10,9,30]); // chamfer on fillet
|
||||
|
||||
@@ -168,7 +185,7 @@ module wades_block_stl() {
|
||||
// hole for hobbed bolt
|
||||
//
|
||||
difference() {
|
||||
translate([driven_x, driven_y, 7 + layer_height - eta])
|
||||
translate([driven_x, driven_y, 7 + layer_height + eta])
|
||||
poly_cylinder(r = M8_clearance_radius + 0.25, h = 30);
|
||||
|
||||
translate([driven_x + 2, driven_y - 5, filament_z + 4 - eta])
|
||||
@@ -188,16 +205,31 @@ module wades_block_stl() {
|
||||
rotate([90,0,0]) {
|
||||
if(hot_end_groove_mount(hot_end)) assign(relief = 0.5) {
|
||||
|
||||
translate([0, 0, -insulator_depth + jhead_groove_offset() / 2]) // slot for the flange
|
||||
translate([0, 0, -insulator_depth + jhead_groove_offset() / 2 + eta]) // slot for the flange
|
||||
keyhole(insulator / 2, jhead_groove_offset(), width - filament_z);
|
||||
|
||||
keyhole(12 / 2, insulator_depth * 2 - 1, width - filament_z); // slot fot the groove
|
||||
|
||||
translate([0, 0, -insulator_depth + jhead_groove_offset() - relief / 2])
|
||||
keyhole(insulator / 2 + 0.5, relief, width - filament_z); // relief to avoid corner radius
|
||||
|
||||
translate([0, 0, -insulator_depth + relief / 2])
|
||||
keyhole(insulator / 2 + 0.5, relief, width - filament_z); // relief to avoid corner radius
|
||||
//
|
||||
// Screw holes and nut traps
|
||||
//
|
||||
for(i = [0:2])
|
||||
rotate([0, 0, i * 120 + jhead_screw_angle])
|
||||
translate([jhead_screw_pitch, 0, 0])
|
||||
rotate([0, 0, -i * 120 - jhead_screw_angle]) {
|
||||
teardrop_plus(r = screw_clearance_radius(jhead_screw), h = jhead_screw_length * 2, center = true);
|
||||
translate([0, 0, -base_thickness - extension - jhead_nut_slot / 2]) {
|
||||
rotate([0, 0, [0, 30, 30][i]])
|
||||
nut_trap(0, nut_radius(screw_nut(jhead_screw)), jhead_nut_slot / 2, horizontal = true);
|
||||
|
||||
assign(w = nut_flat_radius(screw_nut(jhead_screw)))
|
||||
rotate([0, 0, [-90 ,0, 180][i]])
|
||||
translate([-w, 0, -jhead_nut_slot / 2])
|
||||
cube([w * 2, 100, jhead_nut_slot], center = false);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
teardrop_plus(h = insulator_depth * 2, r = insulator / 2, center = true); // insulator socket
|
||||
@@ -215,29 +247,6 @@ module wades_block_stl() {
|
||||
}
|
||||
|
||||
|
||||
module jhead_insertion_jig_stl() {
|
||||
stl("jhead_insertion_jig");
|
||||
h1 = jhead_groove() - 1;
|
||||
h2 = jhead_groove_offset() - 1;
|
||||
l = width + 2 - filament_z;
|
||||
w1 = hot_end_insulator_diameter(hot_end) - 2;
|
||||
w2 = jhead_groove_dia() - 2;
|
||||
|
||||
color("blue")
|
||||
union() {
|
||||
difference() {
|
||||
translate([-w1 / 2, 0, 0])
|
||||
cube([w1, l, h1]);
|
||||
poly_cylinder(r = hot_end_insulator_diameter(hot_end) / 2, h = 100, center = true);
|
||||
}
|
||||
difference() {
|
||||
translate([- w2 / 2, 0, h1 - eta])
|
||||
cube([w2, l, h2]);
|
||||
poly_cylinder(r = jhead_groove_dia() / 2, h = 100, center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
spacer_length = 4 * 1.5;
|
||||
gear_thickness = 6;
|
||||
|
||||
@@ -346,89 +355,96 @@ module extruder_motor_assembly(show_connector = true, exploded = exploded) {
|
||||
end("extruder_motor_assembly");
|
||||
}
|
||||
|
||||
module wades_assembly(show_connector = true) {
|
||||
module wades_assembly(show_connector = true, show_drive = true) {
|
||||
assembly("extruder_assembly");
|
||||
|
||||
color(wades_block_color) render()
|
||||
difference() {
|
||||
wades_block_stl();
|
||||
*translate([-1,-1, filament_z]) // cross section
|
||||
*translate([-1,-10, filament_z]) // cross section
|
||||
cube([200,100,100]);
|
||||
}
|
||||
|
||||
if(show_drive) {
|
||||
// idler screws, washers and springs
|
||||
for(i = [0,1])
|
||||
translate([pscrew_x, pscrew_y[i], pscrew_z[i]])
|
||||
rotate([90, 90, 90]) {
|
||||
screw(M4_hex_screw, pscrew_length);
|
||||
translate([0,0, -pscrew_length + nut_inset])
|
||||
explode([12 - 24 * i, 0, 0])
|
||||
nut(M4_nut);
|
||||
translate([0,0, 0]) {
|
||||
translate([0,0, -10 + 50 * exploded]) {
|
||||
comp_spring(extruder_spring, 10);
|
||||
for(i = [0,1])
|
||||
translate([pscrew_x, pscrew_y[i], pscrew_z[i]])
|
||||
rotate([90, 90, 90]) {
|
||||
screw(M4_hex_screw, pscrew_length);
|
||||
|
||||
translate([0,0, -pscrew_length + nut_inset])
|
||||
explode([12 - 24 * i, 0, 0])
|
||||
nut(M4_nut);
|
||||
|
||||
translate([0,0, 0]) {
|
||||
translate([0,0, -10 + 50 * exploded]) {
|
||||
comp_spring(extruder_spring, 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// mounting screws
|
||||
for(side = [-1, 1])
|
||||
translate([filament_x + mount_pitch * side, base_thickness - 3, filament_z])
|
||||
rotate([-90,0,0])
|
||||
screw(M4_hex_screw, 20);
|
||||
// mounting screws
|
||||
for(side = [-1, 1])
|
||||
translate([filament_x + mount_pitch * side, base_thickness - 3, filament_z])
|
||||
rotate([-90,0,0])
|
||||
screw(M4_hex_screw, 20);
|
||||
|
||||
//idler
|
||||
translate([filament_x + 22 + 40 * exploded, driven_y, filament_z])
|
||||
rotate([90, 0, -90])
|
||||
wade_idler_assembly();
|
||||
//idler
|
||||
translate([filament_x + 22 + 40 * exploded, driven_y, filament_z])
|
||||
rotate([90, 0, -90])
|
||||
wade_idler_assembly();
|
||||
|
||||
// motor
|
||||
translate([0, 0, 50 * exploded])
|
||||
extruder_motor_assembly(show_connector, 0);
|
||||
// motor
|
||||
translate([0, 0, 50 * exploded])
|
||||
extruder_motor_assembly(show_connector, 0);
|
||||
|
||||
translate([motor_x, motor_y, 0])
|
||||
rotate([0, 180, -90])
|
||||
NEMA_screws(NEMA17, 3, 10, M3_hex_screw);
|
||||
translate([motor_x, motor_y, 0])
|
||||
rotate([0, 180, -90])
|
||||
NEMA_screws(NEMA17, 3, 10, M3_hex_screw);
|
||||
}
|
||||
|
||||
// hobbed bolt and gear
|
||||
translate([driven_x, driven_y, 0]) {
|
||||
translate([0, 0, width - BB608[2] / 2])
|
||||
translate([0, 0, width - BB608[2] / 2 + (!show_drive ? exploded * 20 : 0)])
|
||||
ball_bearing(BB608);
|
||||
|
||||
translate([0, 0, BB608[2] / 2])
|
||||
translate([0, 0, BB608[2] / 2 - (!show_drive ? exploded * 20 : 0)])
|
||||
ball_bearing(BB608);
|
||||
|
||||
translate([0, 0, - 30 * exploded])
|
||||
rotate([180, 0, 0])
|
||||
color(wades_gear_spacer_color) render() wades_gear_spacer_stl();
|
||||
|
||||
translate([0, 0, -spacer_length - 50 * exploded])
|
||||
rotate([180, 0, 0])
|
||||
wades_big_gear_stl();
|
||||
if(show_drive) {
|
||||
|
||||
translate([0,0, -spacer_length - gear_thickness])
|
||||
rotate([180, 0, 0])
|
||||
screw(M8_hex_screw, 60, spacer_length + gear_thickness + filament_z);
|
||||
translate([0, 0, - 30 * exploded])
|
||||
rotate([180, 0, 0])
|
||||
color(wades_gear_spacer_color) render() wades_gear_spacer_stl();
|
||||
|
||||
translate([0,0, width]) {
|
||||
if(spring) {
|
||||
comp_spring(hob_spring, 8);
|
||||
translate([0, 0, 8])
|
||||
nut(M8_nut);
|
||||
}
|
||||
else explode([0, 0, 25]) group() {
|
||||
translate([0, 0, -15 * exploded])
|
||||
nut(M8_nut);
|
||||
translate([0, 0, -spacer_length - 50 * exploded])
|
||||
rotate([180, 0, 0])
|
||||
wades_big_gear_stl();
|
||||
|
||||
translate([0, 0, nut_thickness(M8_nut) - 10 * exploded]) {
|
||||
star_washer(M8_washer);
|
||||
translate([0,0, -spacer_length - gear_thickness])
|
||||
rotate([180, 0, 0])
|
||||
screw(M8_hex_screw, 60, spacer_length + gear_thickness + filament_z);
|
||||
|
||||
translate([0, 0, washer_thickness(M8_washer) + 5 * exploded])
|
||||
translate([0,0, width]) {
|
||||
if(spring) {
|
||||
comp_spring(hob_spring, 8);
|
||||
translate([0, 0, 8])
|
||||
nut(M8_nut);
|
||||
}
|
||||
else explode([0, 0, 25]) group() {
|
||||
translate([0, 0, -15 * exploded])
|
||||
nut(M8_nut);
|
||||
|
||||
translate([0, 0, nut_thickness(M8_nut) - 10 * exploded]) {
|
||||
star_washer(M8_washer);
|
||||
|
||||
translate([0, 0, washer_thickness(M8_washer) + 5 * exploded])
|
||||
nut(M8_nut);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
@@ -436,13 +452,21 @@ module wades_assembly(show_connector = true) {
|
||||
//
|
||||
assembly("hot_end_assembly");
|
||||
translate([filament_x, -extension, filament_z])
|
||||
rotate([-90, 0, 0]) {
|
||||
if(hot_end_style(hot_end) == m90)
|
||||
m90_hot_end(hot_end);
|
||||
if(hot_end_style(hot_end) == Stoffel)
|
||||
stoffel_hot_end(hot_end);
|
||||
if(hot_end_style(hot_end) == jhead)
|
||||
jhead_hot_end(hot_end, exploded = 0);
|
||||
rotate([-90, 0, 0]) difference() {
|
||||
union() {
|
||||
if(hot_end_style(hot_end) == m90)
|
||||
m90_hot_end(hot_end);
|
||||
if(hot_end_style(hot_end) == Stoffel)
|
||||
stoffel_hot_end(hot_end);
|
||||
if(hot_end_style(hot_end) == jhead)
|
||||
jhead_hot_end(hot_end, exploded = 0, show_wires = false);
|
||||
}
|
||||
rotate([180, 0, 180])
|
||||
translate([0, 0, hot_end_length(hot_end)] + hot_end_duct_offset(hot_end)) // trim the wires
|
||||
tube(or = 100, ir = hot_end_duct_radius(hot_end) - 1, h = 30, center = true);
|
||||
|
||||
translate([0, 0, 60])
|
||||
cube(100, center = true);
|
||||
}
|
||||
end("hot_end_assembly");
|
||||
|
||||
@@ -450,11 +474,22 @@ module wades_assembly(show_connector = true) {
|
||||
for(side = [-1, 1])
|
||||
translate([filament_x + hot_end_screw_pitch(hot_end) * side, screw_depth - extension, width])
|
||||
screw(M3_cap_screw, 30);
|
||||
else
|
||||
translate([filament_x, -extension, filament_z])
|
||||
for(i = [0:2]) assign(a = i * 120 - jhead_screw_angle)
|
||||
rotate([90, a, 0]) {
|
||||
translate([jhead_screw_pitch, 0, 0])
|
||||
washer(jhead_washer)
|
||||
star_washer(screw_washer(jhead_screw))
|
||||
screw(jhead_screw, jhead_screw_length);
|
||||
|
||||
if(show_jigs)
|
||||
translate([filament_x, hot_end_inset(hot_end) - 1 - extension, filament_z])
|
||||
rotate([90, 0, 0])
|
||||
jhead_insertion_jig_stl();
|
||||
translate([jhead_screw_pitch, 0, -extension - base_thickness - jhead_nut_slot / 2 - nut_thickness(screw_nut(jhead_screw)) / 2])
|
||||
explode([ [ 10 * cos(a), 10 * sin(a), 0],
|
||||
[ 10 * sin(a), -10 * cos(a), 0],
|
||||
[-10 * sin(a), 10 * cos(a), 0] ][i])
|
||||
rotate([0, 0, [0, 30, 30][i]])
|
||||
nut(screw_nut(jhead_screw));
|
||||
}
|
||||
|
||||
end("extruder_assembly");
|
||||
}
|
||||
|
@@ -634,13 +634,15 @@ module x_carriage_assembly(show_extruder = true, show_fan = true) {
|
||||
translate([base_offset, bar_y, bar_offset]) {
|
||||
linear_bearing(X_bearings);
|
||||
rotate([0,-90,0])
|
||||
ziptie(small_ziptie, bearing_ziptie_radius(X_bearings));
|
||||
scale([bearing_radius(X_bearings) / bearing_ziptie_radius(X_bearings), 1])
|
||||
ziptie(small_ziptie, bearing_ziptie_radius(X_bearings));
|
||||
}
|
||||
for(end = [-1,1])
|
||||
translate([base_offset + bar_x * end, -bar_y, bar_offset]) {
|
||||
linear_bearing(X_bearings);
|
||||
rotate([90,-90,90])
|
||||
ziptie(small_ziptie, bearing_ziptie_radius(X_bearings));
|
||||
scale([bearing_radius(X_bearings) / bearing_ziptie_radius(X_bearings), 1])
|
||||
ziptie(small_ziptie, bearing_ziptie_radius(X_bearings));
|
||||
}
|
||||
//
|
||||
// Idler end belt clamp
|
||||
|
@@ -87,7 +87,8 @@ module y_bearing_assembly(height)
|
||||
rotate([0,0,90]) {
|
||||
linear_bearing(Y_bearings);
|
||||
rotate([0,90,0])
|
||||
ziptie(small_ziptie, bearing_ziptie_radius(Y_bearings));
|
||||
scale([bearing_radius(X_bearings) / bearing_ziptie_radius(X_bearings), 1])
|
||||
ziptie(small_ziptie, bearing_ziptie_radius(Y_bearings));
|
||||
}
|
||||
|
||||
//
|
||||
|
@@ -16,7 +16,7 @@ clearance = 2;
|
||||
thickness = M3_nut_trap_depth + bearing_clamp_tab_height;
|
||||
rad = 3;
|
||||
|
||||
clamp_thickness = 3;
|
||||
clamp_thickness = 2.8;
|
||||
|
||||
width = belt_width(Y_belt) + 3 + washer_diameter(M3_washer) + clearance;
|
||||
inner_width = (M3_nut_radius + wall) * 2;
|
||||
@@ -24,7 +24,8 @@ depth = washer_diameter(M3_washer) + clearance;
|
||||
length = depth + 2 * (2 * M3_nut_radius * cos(30) + wall);
|
||||
|
||||
tooth_height = belt_thickness(Y_belt) / 2;
|
||||
tooth_width = belt_pitch(Y_belt) / 2;
|
||||
tooth_pitch = belt_pitch(Y_belt);
|
||||
tooth_width = tooth_pitch / 2;
|
||||
|
||||
function y_belt_anchor_width() = width;
|
||||
function y_belt_anchor_depth() = depth;
|
||||
@@ -79,8 +80,10 @@ module y_belt_anchor(height, toothed) {
|
||||
cylinder(r = M3_clearance_radius + 0.5, h = layer_height + eta);
|
||||
|
||||
if(toothed)
|
||||
translate([0,depth / 2, height - eta + tooth_height / 2])
|
||||
cube([belt_width(Y_belt), tooth_width, tooth_height], center = true);
|
||||
for(i = [-1:1])
|
||||
if(abs(i) * tooth_pitch + tooth_width / 2 < depth / 2)
|
||||
translate([0, depth / 2 + i * tooth_pitch, height - eta + tooth_height / 2])
|
||||
cube([belt_width(Y_belt), tooth_width, tooth_height], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,8 +99,10 @@ module y_belt_clip(toothed) {
|
||||
poly_cylinder(r = M3_clearance_radius, h = clamp_thickness + 1, center = true);
|
||||
}
|
||||
if(toothed)
|
||||
translate([0,0, clamp_thickness - eta + tooth_height / 2])
|
||||
cube([belt_width(Y_belt), tooth_width, tooth_height], center = true);
|
||||
for(i = [-1:1])
|
||||
if(abs(i) * tooth_pitch + tooth_width / 2 < depth / 2)
|
||||
translate([0, i * tooth_pitch, clamp_thickness - eta + tooth_height / 2])
|
||||
cube([belt_width(Y_belt), tooth_width, tooth_height], center = true);
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user