@@ -0,0 +1,179 @@ | |||||
rod_diameter = 8; | |||||
rod_separation = 70; // center to center | |||||
rod_length = 400; | |||||
bushing_diameter = 15.4; | |||||
bushing_length = 16.8; | |||||
bushing_separation = 24; // edge to edge; original carriage: 8 | |||||
belt_width = 6 ; // a little more, maybe 6.2 | |||||
belt_thickness = 1.5; | |||||
belt_separation = 10; // edge to edge | |||||
belt_length = rod_length; | |||||
belt_rod_separation = 20; // center to center | |||||
belt_y_offset = rod_separation / 2 - belt_rod_separation; | |||||
bed_x = 320; | |||||
bed_y = 155; | |||||
bed_thickness = 5; | |||||
bed_z_home = -16; // distance between center of rods and top of heat bed when Z axis is homed | |||||
wall_thickness = 3; | |||||
carriage_length = bushing_separation + bushing_length * 2 + wall_thickness * 2; | |||||
motor_length = 30; | |||||
motor_y_offset = 6; | |||||
motor_z_offset = 30; | |||||
module printer() { | |||||
// rods | |||||
translate([0, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=rod_diameter, h=rod_length, $fn=64); | |||||
translate([0, -rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=rod_diameter, h=rod_length, $fn=64); | |||||
// print bed | |||||
translate([rod_length/2 - bed_x/2, -bed_y/2, bed_z_home - bed_thickness]) cube([bed_x, bed_y, bed_thickness]); | |||||
// belts | |||||
color([0,0,0,0.3]) translate([0, belt_y_offset - belt_width/2, belt_separation/2]) cube([belt_length, belt_width, belt_thickness]); | |||||
color([0,0,0,0.3]) translate([0, belt_y_offset - belt_width/2, -belt_separation/2 - belt_thickness]) cube([belt_length, belt_width, belt_thickness]); | |||||
// endstop switch | |||||
translate([rod_length - 10, 2, 30]) color([0, 0, 0, 0.5]) cube([10, 15, 5]); | |||||
} | |||||
module extruder() { | |||||
translate([-wall_thickness, 0, 0]) { | |||||
// motor body | |||||
color([0.5, 0.5, 0.5]) translate([-15, 0, 0]) cube([motor_length, 42, 42], center=true); | |||||
color([0.5, 0.5, 0.5]) rotate([0, 90, 0]) cylinder(d=22, h=2, $fn=64); | |||||
// motor shaft | |||||
color([0.8, 0.8, 0.8]) rotate([0, 90, 0]) cylinder(d=5, h=20, $fn=64); | |||||
} | |||||
// extruder body | |||||
color([0, 0, 0, 0.5]) translate([0, -21, -21]) cube([26, 46, 44]); | |||||
// heat sink + fan | |||||
color([1,1,1,0.5]) translate([32, 2, 3]) rotate([45, 0, 0]) cube([21, 40, 40], center=true); | |||||
// large gear | |||||
translate([7.5, 15.5, 15.5]) color([0,0,0,0.5]) rotate([0, 90, 0]) cylinder(d=34, h=4, center=true); | |||||
// heat break | |||||
color([1, 1, 1, 0.5]) translate([12, 12, -21 -25 ]) cylinder(d=8, h=25); | |||||
translate([3,3,-42]) cube([25,18,12]); | |||||
} | |||||
module carriage_bushings() { | |||||
translate([ bushing_separation/2 + bushing_length/2, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([-bushing_separation/2 - bushing_length/2, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([ bushing_separation/2 + bushing_length/2, -rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([-bushing_separation/2 - bushing_length/2, -rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
} | |||||
module carriage_bushings_cutout() { | |||||
hull() { | |||||
translate([ bushing_separation/2 + bushing_length/2, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([ bushing_separation/2 + bushing_length/2, rod_separation/2, -50]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
} | |||||
hull() { | |||||
translate([-bushing_separation/2 - bushing_length/2, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([-bushing_separation/2 - bushing_length/2, rod_separation/2, -50]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
} | |||||
hull() { | |||||
translate([ bushing_separation/2 + bushing_length/2, -rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([ bushing_separation/2 + bushing_length/2, -rod_separation/2, -50]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
} | |||||
hull() { | |||||
translate([-bushing_separation/2 - bushing_length/2, -rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([-bushing_separation/2 - bushing_length/2, -rod_separation/2, -50]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
} | |||||
} | |||||
module motor_plate() { | |||||
difference() { | |||||
cube([wall_thickness, 42 + wall_thickness * 2 + 2, 44], center=true); | |||||
translate([0, 15.5 , 15.5]) rotate([0, 90, 0]) cylinder(d=3.8, h=wall_thickness, center=true, $fn=64); | |||||
translate([0, 15.5, -15.5]) rotate([0, 90, 0]) cylinder(d=3.8, h=wall_thickness, center=true, $fn=64); | |||||
translate([0, -15.5, 15.5]) rotate([0, 90, 0]) cylinder(d=3.8, h=wall_thickness, center=true, $fn=64); | |||||
translate([0, -15.5, -15.5]) rotate([0, 90, 0]) cylinder(d=3.8, h=wall_thickness, center=true, $fn=64); | |||||
rotate([0, 90, 0]) cylinder(d=22, h=wall_thickness, center=true, $fn=64); | |||||
} | |||||
hull() { | |||||
translate([motor_length/2 + wall_thickness/2, 21 + wall_thickness/2 +1, -21 - 1.5]) cube([motor_length, wall_thickness, 1], center=true); | |||||
translate([0, 21 + wall_thickness/2 + 1, 21.5]) cube([wall_thickness, wall_thickness, 1], center=true); | |||||
} | |||||
hull() { | |||||
translate([motor_length/2 + wall_thickness/2, -21 - wall_thickness/2 -1, -21 - 1.5]) cube([motor_length, wall_thickness, 1], center=true); | |||||
translate([0, -21 - wall_thickness/2 -1, 21.5]) cube([wall_thickness, wall_thickness, 1], center=true); | |||||
} | |||||
} | |||||
module carriage() { | |||||
platform_length = 33; | |||||
platform_thickness = 3; | |||||
platform_top_z = 8.5; | |||||
platform2_length = 10; | |||||
difference() { | |||||
union() { | |||||
// "katamaran" carriages | |||||
translate([0, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter + wall_thickness * 2, h=carriage_length, center=true, $fn=64); | |||||
translate([0,-rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter + wall_thickness * 2, h=carriage_length, center=true, $fn=64); | |||||
translate([0, rod_separation/2, -bushing_diameter/4 - wall_thickness/2]) cube([carriage_length, bushing_diameter + wall_thickness * 2, bushing_diameter/2 + wall_thickness], center=true); | |||||
translate([0, -rod_separation/2, -bushing_diameter/4 - wall_thickness/2]) cube([carriage_length, bushing_diameter + wall_thickness * 2, bushing_diameter/2 + wall_thickness], center=true); | |||||
translate([carriage_length/2 - platform_length/2, rod_separation/2 - bushing_diameter / 4 - wall_thickness / 2, platform_top_z / 2]) cube([platform_length, bushing_diameter/2 + wall_thickness, platform_top_z], center=true); | |||||
translate([carriage_length/2 - platform_length/2,-rod_separation/2 + bushing_diameter / 4 + wall_thickness / 2, platform_top_z / 2]) cube([platform_length, bushing_diameter/2 + wall_thickness, platform_top_z], center=true); | |||||
// platforms | |||||
translate([carriage_length/2 - platform_length/2, 0, platform_top_z - platform_thickness/2]) cube([platform_length, rod_separation, platform_thickness], center=true); | |||||
//translate([-carriage_length/2 + platform2_length/2, 0, platform_top_z - platform_thickness/2]) cube([platform2_length, rod_separation, platform_thickness], center=true); | |||||
// motor plate | |||||
translate([carriage_length/2 - 30 - wall_thickness/2, motor_y_offset, motor_z_offset]) motor_plate(); | |||||
} | |||||
// cutouts for bushings and rod clearance | |||||
carriage_bushings_cutout(); | |||||
hull() { | |||||
translate([0, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=rod_diameter + 3, h=rod_length, center=true, $fn=64); | |||||
translate([0, rod_separation/2, -50]) rotate([0, 90, 0]) cylinder(d=rod_diameter + 3, h=rod_length, center=true, $fn=64); | |||||
} | |||||
hull() { | |||||
translate([0, -rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=rod_diameter + 3, h=rod_length, center=true, $fn=64); | |||||
translate([0, -rod_separation/2, -50]) rotate([0, 90, 0]) cylinder(d=rod_diameter + 3, h=rod_length, center=true, $fn=64); | |||||
} | |||||
//cutouts for belt | |||||
//translate([0, belt_y_offset, belt_separation/2 + belt_thickness/2]) cube([belt_length, belt_width * 1.5, belt_thickness], center=true); | |||||
//translate([0, belt_y_offset - belt_width * 1.5, belt_separation/2 + belt_thickness -platform_thickness/2]) cube([belt_length, belt_width * 1.5, platform_thickness], center=true); | |||||
#translate([5, belt_y_offset + belt_width, platform_top_z - wall_thickness]) cylinder(d=2.5, h=wall_thickness, $fn=64); | |||||
#translate([5, belt_y_offset - belt_width, platform_top_z - wall_thickness]) cylinder(d=2.5, h=wall_thickness, $fn=64); | |||||
} | |||||
} | |||||
%printer(); | |||||
translate([100, 0, 0]) { | |||||
translate([carriage_length/2 - motor_length - wall_thickness, motor_y_offset, motor_z_offset]) rotate([0, 0, -180]) %extruder(); | |||||
carriage(); | |||||
} |
@@ -0,0 +1,179 @@ | |||||
rod_diameter = 8; | |||||
rod_separation = 70; // center to center | |||||
rod_length = 400; | |||||
bushing_diameter = 15.4; | |||||
bushing_length = 16.8; | |||||
bushing_separation = 24; // edge to edge; original carriage: 8 | |||||
belt_width = 6 ; // a little more, maybe 6.2 | |||||
belt_thickness = 1.5; | |||||
belt_separation = 10; // edge to edge | |||||
belt_length = rod_length; | |||||
belt_rod_separation = 20; // center to center | |||||
belt_y_offset = rod_separation / 2 - belt_rod_separation; | |||||
bed_x = 320; | |||||
bed_y = 155; | |||||
bed_thickness = 5; | |||||
bed_z_home = -16; // distance between center of rods and top of heat bed when Z axis is homed | |||||
wall_thickness = 3; | |||||
carriage_length = bushing_separation + bushing_length * 2 + wall_thickness * 2; | |||||
motor_length = 30; | |||||
motor_y_offset = 6; | |||||
motor_z_offset = 30; | |||||
module printer() { | |||||
// rods | |||||
translate([0, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=rod_diameter, h=rod_length, $fn=64); | |||||
translate([0, -rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=rod_diameter, h=rod_length, $fn=64); | |||||
// print bed | |||||
translate([rod_length/2 - bed_x/2, -bed_y/2, bed_z_home - bed_thickness]) cube([bed_x, bed_y, bed_thickness]); | |||||
// belts | |||||
color([0,0,0,0.3]) translate([0, belt_y_offset - belt_width/2, belt_separation/2]) cube([belt_length, belt_width, belt_thickness]); | |||||
color([0,0,0,0.3]) translate([0, belt_y_offset - belt_width/2, -belt_separation/2 - belt_thickness]) cube([belt_length, belt_width, belt_thickness]); | |||||
// endstop switch | |||||
translate([rod_length - 10, 2, 30]) color([0, 0, 0, 0.5]) cube([10, 15, 5]); | |||||
} | |||||
module extruder() { | |||||
translate([-wall_thickness, 0, 0]) { | |||||
// motor body | |||||
color([0.5, 0.5, 0.5]) translate([-15, 0, 0]) cube([motor_length, 42, 42], center=true); | |||||
color([0.5, 0.5, 0.5]) rotate([0, 90, 0]) cylinder(d=22, h=2, $fn=64); | |||||
// motor shaft | |||||
color([0.8, 0.8, 0.8]) rotate([0, 90, 0]) cylinder(d=5, h=20, $fn=64); | |||||
} | |||||
// extruder body | |||||
color([0, 0, 0, 0.5]) translate([0, -21, -21]) cube([26, 46, 44]); | |||||
// heat sink + fan | |||||
color([1,1,1,0.5]) translate([32, 2, 3]) rotate([45, 0, 0]) cube([21, 40, 40], center=true); | |||||
// large gear | |||||
translate([7.5, 15.5, 15.5]) color([0,0,0,0.5]) rotate([0, 90, 0]) cylinder(d=34, h=4, center=true); | |||||
// heat break | |||||
color([1, 1, 1, 0.5]) translate([12, 12, -21 -25 ]) cylinder(d=8, h=25); | |||||
translate([3,3,-42]) cube([25,18,12]); | |||||
} | |||||
module carriage_bushings() { | |||||
translate([ bushing_separation/2 + bushing_length/2, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([-bushing_separation/2 - bushing_length/2, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([ bushing_separation/2 + bushing_length/2, -rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([-bushing_separation/2 - bushing_length/2, -rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
} | |||||
module carriage_bushings_cutout() { | |||||
hull() { | |||||
translate([ bushing_separation/2 + bushing_length/2, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([ bushing_separation/2 + bushing_length/2, rod_separation/2, -50]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
} | |||||
hull() { | |||||
translate([-bushing_separation/2 - bushing_length/2, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([-bushing_separation/2 - bushing_length/2, rod_separation/2, -50]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
} | |||||
hull() { | |||||
translate([ bushing_separation/2 + bushing_length/2, -rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([ bushing_separation/2 + bushing_length/2, -rod_separation/2, -50]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
} | |||||
hull() { | |||||
translate([-bushing_separation/2 - bushing_length/2, -rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
translate([-bushing_separation/2 - bushing_length/2, -rod_separation/2, -50]) rotate([0, 90, 0]) cylinder(d=bushing_diameter, h=bushing_length, $fn=64, center=true); | |||||
} | |||||
} | |||||
module motor_plate() { | |||||
difference() { | |||||
cube([wall_thickness, 42 + wall_thickness * 2 + 2, 44], center=true); | |||||
translate([0, 15.5 , 15.5]) rotate([0, 90, 0]) cylinder(d=3.8, h=wall_thickness, center=true, $fn=64); | |||||
translate([0, 15.5, -15.5]) rotate([0, 90, 0]) cylinder(d=3.8, h=wall_thickness, center=true, $fn=64); | |||||
translate([0, -15.5, 15.5]) rotate([0, 90, 0]) cylinder(d=3.8, h=wall_thickness, center=true, $fn=64); | |||||
translate([0, -15.5, -15.5]) rotate([0, 90, 0]) cylinder(d=3.8, h=wall_thickness, center=true, $fn=64); | |||||
rotate([0, 90, 0]) cylinder(d=22, h=wall_thickness, center=true, $fn=64); | |||||
} | |||||
hull() { | |||||
translate([motor_length/2 + wall_thickness/2, 21 + wall_thickness/2 +1, -21 - 1.5]) cube([motor_length, wall_thickness, 1], center=true); | |||||
translate([0, 21 + wall_thickness/2 + 1, 21.5]) cube([wall_thickness, wall_thickness, 1], center=true); | |||||
} | |||||
hull() { | |||||
translate([motor_length/2 + wall_thickness/2, -21 - wall_thickness/2 -1, -21 - 1.5]) cube([motor_length, wall_thickness, 1], center=true); | |||||
translate([0, -21 - wall_thickness/2 -1, 21.5]) cube([wall_thickness, wall_thickness, 1], center=true); | |||||
} | |||||
} | |||||
module carriage() { | |||||
platform_length = 33; | |||||
platform_thickness = 3; | |||||
platform_top_z = 8.5; | |||||
platform2_length = 10; | |||||
difference() { | |||||
union() { | |||||
// "katamaran" carriages | |||||
translate([0, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter + wall_thickness * 2, h=carriage_length, center=true, $fn=64); | |||||
translate([0,-rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=bushing_diameter + wall_thickness * 2, h=carriage_length, center=true, $fn=64); | |||||
translate([0, rod_separation/2, -bushing_diameter/4 - wall_thickness/2]) cube([carriage_length, bushing_diameter + wall_thickness * 2, bushing_diameter/2 + wall_thickness], center=true); | |||||
translate([0, -rod_separation/2, -bushing_diameter/4 - wall_thickness/2]) cube([carriage_length, bushing_diameter + wall_thickness * 2, bushing_diameter/2 + wall_thickness], center=true); | |||||
translate([carriage_length/2 - platform_length/2, rod_separation/2 - bushing_diameter / 4 - wall_thickness / 2, platform_top_z / 2]) cube([platform_length, bushing_diameter/2 + wall_thickness, platform_top_z], center=true); | |||||
translate([carriage_length/2 - platform_length/2,-rod_separation/2 + bushing_diameter / 4 + wall_thickness / 2, platform_top_z / 2]) cube([platform_length, bushing_diameter/2 + wall_thickness, platform_top_z], center=true); | |||||
// platforms | |||||
translate([carriage_length/2 - platform_length/2, 0, platform_top_z - platform_thickness/2]) cube([platform_length, rod_separation, platform_thickness], center=true); | |||||
//translate([-carriage_length/2 + platform2_length/2, 0, platform_top_z - platform_thickness/2]) cube([platform2_length, rod_separation, platform_thickness], center=true); | |||||
// motor plate | |||||
translate([carriage_length/2 - 30 - wall_thickness/2, motor_y_offset, motor_z_offset]) motor_plate(); | |||||
} | |||||
// cutouts for bushings and rod clearance | |||||
carriage_bushings_cutout(); | |||||
hull() { | |||||
translate([0, rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=rod_diameter + 3, h=rod_length, center=true, $fn=64); | |||||
translate([0, rod_separation/2, -50]) rotate([0, 90, 0]) cylinder(d=rod_diameter + 3, h=rod_length, center=true, $fn=64); | |||||
} | |||||
hull() { | |||||
translate([0, -rod_separation/2, 0]) rotate([0, 90, 0]) cylinder(d=rod_diameter + 3, h=rod_length, center=true, $fn=64); | |||||
translate([0, -rod_separation/2, -50]) rotate([0, 90, 0]) cylinder(d=rod_diameter + 3, h=rod_length, center=true, $fn=64); | |||||
} | |||||
//cutouts for belt | |||||
//translate([0, belt_y_offset, belt_separation/2 + belt_thickness/2]) cube([belt_length, belt_width * 1.5, belt_thickness], center=true); | |||||
//translate([0, belt_y_offset - belt_width * 1.5, belt_separation/2 + belt_thickness -platform_thickness/2]) cube([belt_length, belt_width * 1.5, platform_thickness], center=true); | |||||
#translate([5, belt_y_offset + belt_width, platform_top_z - wall_thickness]) cylinder(d=2.5, h=wall_thickness, $fn=64); | |||||
#translate([5, belt_y_offset - belt_width, platform_top_z - wall_thickness]) cylinder(d=2.5, h=wall_thickness, $fn=64); | |||||
} | |||||
} | |||||
%printer(); | |||||
translate([100, 0, 0]) { | |||||
translate([carriage_length/2 - motor_length - wall_thickness, motor_y_offset, motor_z_offset]) rotate([0, 0, -180]) %extruder(); | |||||
carriage(); | |||||
} |
@@ -0,0 +1,19 @@ | |||||
$fn=64; | |||||
difference() { | |||||
hull() { | |||||
translate([0, 0, 0]) cylinder(r=3, h=5); | |||||
translate([0, 50, 0]) cylinder(r=3, h=5); | |||||
translate([110, 0, 0]) cylinder(r=3, h=5); | |||||
translate([110, 50, 0]) cylinder(r=3, h=5); | |||||
} | |||||
translate([30, 3, 0]) cylinder(d=3.5, h=5); | |||||
translate([90, 3, 0]) cylinder(d=3.5, h=5); | |||||
translate([30, 43, 0]) cylinder(d=3.5, h=5); | |||||
translate([5, 7, 0]) cube([50, 30, 5]); | |||||
translate([-3, -3, 1.5]) cube([120, 10, 2]); | |||||
} | |||||
translate([70, 0, -5]) cube([3, 50, 5]); |