mirror of
https://github.com/revarbat/snappy-reprap.git
synced 2025-10-29 22:59:31 -07:00
Improved Z axis with much less wobble.
This commit is contained in:
1831
GDMUtils.scad
1831
GDMUtils.scad
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
28912
STLs/rail_y_motor_segment_parts.stl
Normal file
28912
STLs/rail_y_motor_segment_parts.stl
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
28366
STLs/xy_joiner_parts.stl
28366
STLs/xy_joiner_parts.stl
File diff suppressed because it is too large
Load Diff
67848
STLs/xy_sled_parts.stl
67848
STLs/xy_sled_parts.stl
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
24922
STLs/yz_top_joiner_parts.stl
Normal file
24922
STLs/yz_top_joiner_parts.stl
Normal file
File diff suppressed because it is too large
Load Diff
419324
STLs/z_sled_parts.stl
419324
STLs/z_sled_parts.stl
File diff suppressed because it is too large
Load Diff
@@ -1,149 +0,0 @@
|
||||
include <config.scad>
|
||||
use <GDMUtils.scad>
|
||||
use <joiners.scad>
|
||||
|
||||
|
||||
module cantilever_arm()
|
||||
{
|
||||
l = cantilever_length;
|
||||
w = platform_width;
|
||||
h = rail_height;
|
||||
|
||||
color([0.9, 0.7, 1.0])
|
||||
prerender(convexity=20)
|
||||
difference() {
|
||||
union() {
|
||||
difference() {
|
||||
union() {
|
||||
// Bottom.
|
||||
translate([0,0,rail_thick/2]) yrot(90)
|
||||
sparse_strut(h=w, l=l, thick=rail_thick, maxang=45, strut=10, max_bridge=500);
|
||||
|
||||
mirror_copy([1, 0, 0]) {
|
||||
// Walls.
|
||||
translate([(w-joiner_width)/2, 0, h/2]) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=h, l=l-10, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=h, l=l-10, thick=joiner_width, strut=rail_thick, bracing=false);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=h, l=l-10, thick=joiner_width, strut=rail_thick);
|
||||
}
|
||||
|
||||
//Back ends
|
||||
translate([(w-joiner_width)/2, l/2-2.5, h/2]) {
|
||||
cube(size=[joiner_width, 5, h], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
zrot_copies([0, 180]) {
|
||||
translate([0, l/2-20, h/4]) {
|
||||
difference() {
|
||||
// Side supports.
|
||||
cube(size=[w, 5, h/2], center=true);
|
||||
|
||||
// Wiring access holes.
|
||||
grid_of(count=3, spacing=w/3) {
|
||||
cube(size=[25,11,8], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Endstop standoff backing
|
||||
translate([0, l/2-10, rail_thick/2]) {
|
||||
cube(size=[endstop_hole_spacing + endstop_screw_size*2 + 6, 20, rail_thick], center=true);
|
||||
}
|
||||
|
||||
// Endstop standoffs
|
||||
translate([0, l/2-endstop_hole_inset, (rail_thick+endstop_standoff)/2]) {
|
||||
grid_of(count=2, spacing=endstop_hole_spacing) {
|
||||
cylinder(h=rail_thick+endstop_standoff, r=2+endstop_screw_size*1.2/2, center=true, $fn=16);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear space for joiners.
|
||||
translate([0, -l/2, h/2]) {
|
||||
zrot(180) joiner_pair_clear(spacing=w-joiner_width, h=h+0.001, w=joiner_width, a=joiner_angle, clearance=5);
|
||||
}
|
||||
|
||||
// Endstop screw holes.
|
||||
translate([0, l/2-endstop_hole_inset, (rail_thick+endstop_standoff)/2]) {
|
||||
grid_of(count=2, spacing=endstop_hole_spacing) {
|
||||
cylinder(h=rail_thick+endstop_standoff+1, r=endstop_screw_size*1.2/2, center=true, $fn=8);
|
||||
}
|
||||
}
|
||||
|
||||
// Trim corners behind pivot.
|
||||
translate([0, l/2, h]) {
|
||||
grid_of(count=2, spacing=w-joiner_width) {
|
||||
xrot(45) cube(size=[joiner_width+1, 6*sqrt(2), 6*sqrt(2)], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Shrinkage stress relief
|
||||
translate([0, 0, rail_thick/2]) {
|
||||
grid_of(count=[1, 9], spacing=[0, 12]) {
|
||||
cube(size=[w+1, 1, rail_thick-2], center=true);
|
||||
}
|
||||
grid_of(count=[11, 2], spacing=[12.7, l-10]) {
|
||||
cube(size=[1, 36, rail_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Snap-tab joiners.
|
||||
translate([0, -l/2, h]) {
|
||||
grid_of(count=[1,1,2], spacing=h) {
|
||||
zrot(180) joiner_pair(spacing=w-joiner_width, h=h, w=joiner_width, l=10, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
translate([0, -l/2+10+h/2, h*3/2]) {
|
||||
grid_of(count=2, spacing=w-joiner_width) {
|
||||
thinning_triangle(h=h, l=h, thick=joiner_width, diagonly=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Pivot backing
|
||||
mirror_copy([1, 0, 0]) {
|
||||
translate([(w-joiner_width)/2, l/2-6, h-6]) {
|
||||
yrot(90) cylinder(h=joiner_width, r=7.5, center=true, $fn=32);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Pivot
|
||||
mirror_copy([1, 0, 0]) {
|
||||
translate([w/2-joiner_width, l/2-6, h-6]) {
|
||||
translate([2/2-0.05, 0, 0]) {
|
||||
yrot(90) {
|
||||
cylinder(h=2, r1=6, r2=4, center=true, $fn=32);
|
||||
cylinder(h=20, r=set_screw_size*1.1/2, center=true, $fn=12);
|
||||
translate([0,0,0.75]) {
|
||||
zrot(90) scale([1.1, 1.1, 1.2]) {
|
||||
metric_nut(size=set_screw_size, hole=false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//!cantilever_arm();
|
||||
|
||||
|
||||
|
||||
module cantilever_arm_parts() { // make me
|
||||
zrot(90) cantilever_arm();
|
||||
}
|
||||
|
||||
|
||||
|
||||
cantilever_arm_parts();
|
||||
|
||||
|
||||
|
||||
// vim: noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
include <config.scad>
|
||||
use <GDMUtils.scad>
|
||||
use <joiners.scad>
|
||||
|
||||
|
||||
module cantilever_joint()
|
||||
{
|
||||
joiner_length = 20;
|
||||
hanger_strut = rail_height*2;
|
||||
|
||||
color("Chocolate")
|
||||
prerender(convexity=10)
|
||||
union() {
|
||||
difference() {
|
||||
union() {
|
||||
// Top hanger joiners.
|
||||
translate([0, -platform_height/2+0.001, 0]) {
|
||||
xrot(-90) joiner_pair(spacing=platform_width-joiner_width, h=platform_height, w=joiner_width, l=joiner_length, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Bottom strut
|
||||
translate([0, joiner_length/2, joiner_length/2])
|
||||
cube(size=[platform_width, joiner_length, joiner_length], center=true);
|
||||
|
||||
// Front struts
|
||||
grid_of(
|
||||
xa=[-(platform_width-joiner_width)/2, (platform_width-joiner_width)/2],
|
||||
ya=[joiner_length/2],
|
||||
za=[-(hanger_strut-2*rail_height)/2]
|
||||
) {
|
||||
cube(size=[joiner_width, joiner_length, (hanger_strut-2*rail_height)], center=true);
|
||||
}
|
||||
|
||||
// Front joiners.
|
||||
translate([0, joiner_length, -(hanger_strut-rail_height)]) {
|
||||
grid_of(count=[1,1,2], spacing=[1,1,rail_height]) {
|
||||
joiner_pair(spacing=platform_width-joiner_width, h=rail_height, w=joiner_width, l=joiner_length, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear for side joiners
|
||||
translate([0, joiner_width/2, joiner_length-rail_height/4-rail_height]) {
|
||||
circle_of(n=2, r=platform_width/2, rot=true) {
|
||||
zrot(-90) {
|
||||
half_joiner_clear(h=rail_height/2, w=joiner_width, l=10, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Side joiners
|
||||
translate([0, joiner_width/2, joiner_length-rail_height/4-rail_height]) {
|
||||
circle_of(n=2, r=platform_width/2, rot=true) {
|
||||
zrot(-90) {
|
||||
half_joiner2(h=rail_height/2, w=joiner_width, l=10, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//!cantilever_joint();
|
||||
|
||||
|
||||
|
||||
module cantilever_joint_parts() { // make me
|
||||
translate([0, 0, 15]) zrot(90) xrot(180) {
|
||||
cantilever_joint();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
cantilever_joint_parts();
|
||||
|
||||
|
||||
|
||||
// vim: noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap
|
||||
|
||||
@@ -4,7 +4,7 @@ snappy_version = 0.91;
|
||||
// 0 = Thinning Walls (Thin in the middle, thick at edges. Prettier smooth walls.)
|
||||
// 1 = Corrugated walls. (Zig-zagged walls. Less shrinkage stress. Closed walls.)
|
||||
// 2 = Crossbeam walls. (Open sparse struts. Far less shrinkage stress. Recommended.)
|
||||
wall_styling = 2;
|
||||
wall_styling = 0;
|
||||
|
||||
|
||||
platform_length = 100; // mm. Must be a multiple of rack_tooth_size.
|
||||
@@ -18,7 +18,7 @@ rail_thick = 7; // mm
|
||||
rail_offset = 12; // mm
|
||||
|
||||
motor_rail_length = 100; // mm
|
||||
cantilever_length = 125; // mm
|
||||
cantilever_length = 180; // mm
|
||||
|
||||
groove_angle = 30; // degrees
|
||||
groove_height = 12; // mm
|
||||
@@ -94,6 +94,7 @@ rail_spacing = platform_width - joiner_width*4 - 10;
|
||||
rail_width = rail_spacing + joiner_width*2;
|
||||
motor_mount_spacing=43+joiner_width+10;
|
||||
side_mount_spacing = platform_length-25;
|
||||
extruder_length = motor_rail_length+2*platform_length-2*rail_height+2*rail_length-2*cantilever_length;
|
||||
|
||||
wall_styles = ["thinwall", "corrugated", "crossbeams"];
|
||||
wall_style = wall_styles[wall_styling];
|
||||
|
||||
@@ -71,10 +71,7 @@ module drive_gear() {
|
||||
|
||||
|
||||
module drive_gear_parts() { // make me
|
||||
zrot(30)
|
||||
translate([0, 0, 5+7])
|
||||
circle_of(r=25, n=3)
|
||||
drive_gear();
|
||||
drive_gear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -6,79 +6,26 @@ use <joiners.scad>
|
||||
module extruder_platform()
|
||||
{
|
||||
platform_vert_off = rail_height+groove_height+rail_offset;
|
||||
l = motor_rail_length*0.5+cantilever_length-platform_vert_off-20;
|
||||
w = platform_width;
|
||||
l = extruder_length;
|
||||
w = rail_width;
|
||||
h = rail_height;
|
||||
|
||||
color("LightSteelBlue")
|
||||
prerender(convexity=10)
|
||||
translate([0, l, 0])
|
||||
union() {
|
||||
difference() {
|
||||
union() {
|
||||
// Bottom.
|
||||
translate([0, -(0.4*l), rail_thick/2])
|
||||
rrect(r=joiner_width, size=[w, 1.2*l, rail_thick], center=true);
|
||||
up(rail_thick/2)
|
||||
cube(size=[w, l, rail_thick], center=true);
|
||||
|
||||
// Walls.
|
||||
grid_of(
|
||||
xa=[-(w-joiner_width)/2, (w-joiner_width)/2],
|
||||
ya=[-(l-l*0.75/2-9)],
|
||||
za=[(h-12)/2]
|
||||
) {
|
||||
thinning_triangle(h=h-12, l=l*0.75, thick=joiner_width, strut=rail_thick, diagonly=true);
|
||||
}
|
||||
|
||||
// Triangle Backing
|
||||
mirror_copy([1,0,0]) {
|
||||
translate([(w-joiner_width-10)/2, -l+10/2, (h-12)/2]) {
|
||||
cube(size=[joiner_width+10, 10, h-12], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Pivot backings
|
||||
mirror_copy([1,0,0]) {
|
||||
translate([(w-joiner_width-9.5)/2-5.5, -l-6, h-6]) {
|
||||
difference() {
|
||||
xrot(joiner_angle) {
|
||||
translate([0, 0, -12/sin(joiner_angle)/2]) {
|
||||
cube(size=[9.5, 12, 12/sin(joiner_angle)], center=true);
|
||||
}
|
||||
}
|
||||
translate([0, 12+10, -12*2*sin(joiner_angle)])
|
||||
cube(size=[10, 12, 12/sin(joiner_angle)], center=true);
|
||||
}
|
||||
}
|
||||
translate([(w-joiner_width-9.5)/2-5.5, -l-6, h-6]) {
|
||||
yrot(90) cylinder(h=9.5, r=6, center=true, $fn=32);
|
||||
}
|
||||
}
|
||||
|
||||
// Pivot
|
||||
mirror_copy([1,0,0]) {
|
||||
translate([w/2-joiner_width, -l-6, h-6]) {
|
||||
translate([2/2-0.5, 0, 0]) {
|
||||
yrot(90) intersection() {
|
||||
cylinder(h=2, r1=6, r2=4, center=true, $fn=32);
|
||||
cylinder(h=30, r=6, center=true, $fn=32);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
translate([0, -l+10/2+2, (rail_thick+endstop_click_voff+set_screw_size+endstop_standoff)/2]) {
|
||||
difference() {
|
||||
// Z endstop block.
|
||||
cube(size=[w-joiner_width, 10, (rail_thick+endstop_click_voff+set_screw_size+endstop_standoff)], center=true);
|
||||
|
||||
// Z endstop adjustment screw nut slot.
|
||||
translate([0, 0, (rail_thick+endstop_click_voff-set_screw_size+endstop_standoff)/2]) {
|
||||
xrot(90) {
|
||||
cylinder(h=11, r=set_screw_size*1.1/2, center=true, $fn=12);
|
||||
hull() {
|
||||
grid_of(ya=[0, 5]) {
|
||||
zrot(90) metric_nut(size=set_screw_size, hole=false, center=true);
|
||||
}
|
||||
zring(n=2) {
|
||||
xflip_copy() {
|
||||
up(h/2) {
|
||||
fwd(l/2-l/6-5) {
|
||||
right((rail_spacing+joiner_width)/2) {
|
||||
thinning_triangle(h=h, l=l/3, thick=joiner_width, strut=5, bracing=false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -86,10 +33,6 @@ module extruder_platform()
|
||||
}
|
||||
}
|
||||
|
||||
// Blunt off end of platform.
|
||||
translate([0, l+rail_thick*2, 0])
|
||||
cube(size=[w+1, l, h*3], center=true);
|
||||
|
||||
// Extruder mount holes.
|
||||
circle_of(r=25, n=2) {
|
||||
cylinder(r=4.5/2, h=20, center=true);
|
||||
@@ -98,46 +41,30 @@ module extruder_platform()
|
||||
// Extruder hole.
|
||||
rrect(r=10, size=[40, 60, 20], center=true);
|
||||
|
||||
// Chamfer extruder hole corners.
|
||||
translate([0, l*0.2, h/2]) {
|
||||
grid_of(xa=[-40/2, 40/2]) {
|
||||
zrot(45) cube(size=[10/sqrt(2), 10/sqrt(2), h+1], center=true);
|
||||
// Clear space for joiners.
|
||||
up(rail_height/2) {
|
||||
joiner_quad_clear(xspacing=rail_spacing+joiner_width, yspacing=l+0.05, h=h+0.001, w=joiner_width, clearance=5, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Shrinkage stress relief
|
||||
up(rail_thick/2) {
|
||||
yspread(13, n=12) {
|
||||
cube(size=[w+1, 1, rail_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Chamfer back corners.
|
||||
translate([0, -l, h/2]) {
|
||||
grid_of(xa=[-w/2, w/2]) {
|
||||
zrot(45) cube(size=[10/sqrt(2), 10/sqrt(2), h+1], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Wiring acess holes.
|
||||
grid_of(
|
||||
xa=[-w/4, w/4],
|
||||
ya=[-l*0.6]
|
||||
) {
|
||||
cylinder(h=20, r=w/8, center=true);
|
||||
}
|
||||
|
||||
// Pivot screw hole.
|
||||
mirror_copy([1,0,0]) {
|
||||
translate([w/2-joiner_width, -l-6, h-6]) {
|
||||
yrot(90) {
|
||||
cylinder(h=30, r=set_screw_size*1.1/2, center=true, $fn=12);
|
||||
xspread(13, n=8) {
|
||||
yspread(l-10) {
|
||||
cube(size=[1, 60, rail_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Shrinkage stress relief
|
||||
translate([0, -l/2+12, rail_thick/2]) {
|
||||
grid_of(count=9, spacing=15) {
|
||||
cube(size=[1, l+41, rail_thick-2], center=true);
|
||||
}
|
||||
grid_of(count=[1,6], spacing=15) {
|
||||
cube(size=[w+1, 1, rail_thick-2], center=true);
|
||||
// Wiring acess holes.
|
||||
xspread(w-35-joiner_width*2) {
|
||||
yspread(80) {
|
||||
cylinder(h=20, r=w/8, center=true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Fan shroud mounts
|
||||
@@ -161,9 +88,12 @@ module extruder_platform()
|
||||
}
|
||||
}
|
||||
}
|
||||
// Snap-tab joiners.
|
||||
up(rail_height/2) {
|
||||
joiner_quad(xspacing=rail_spacing+joiner_width, yspacing=l, h=h, w=joiner_width, l=5, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
//!extruder_platform();
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -7,54 +7,45 @@ use <NEMA.scad>
|
||||
use <platform_support_parts.scad>
|
||||
use <cable_chain_link_parts.scad>
|
||||
use <cable_chain_mount_parts.scad>
|
||||
use <cantilever_joint_parts.scad>
|
||||
use <cantilever_arm_parts.scad>
|
||||
use <drive_gear_parts.scad>
|
||||
use <fan_shroud_parts.scad>
|
||||
use <extruder_platform_parts.scad>
|
||||
use <lifter_rod_coupler_parts.scad>
|
||||
use <motor_mount_plate_parts.scad>
|
||||
use <rail_endcap_parts.scad>
|
||||
use <rail_motor_segment_parts.scad>
|
||||
use <rail_lifter_segment_parts.scad>
|
||||
use <rail_segment_parts.scad>
|
||||
use <rail_x_motor_segment_parts.scad>
|
||||
use <rail_y_motor_segment_parts.scad>
|
||||
use <sled_endcap_parts.scad>
|
||||
use <xy_sled_parts.scad>
|
||||
use <support_leg_parts.scad>
|
||||
use <xy_joiner_parts.scad>
|
||||
use <yz_joiner_parts.scad>
|
||||
use <yz_bottom_joiner_parts.scad>
|
||||
use <yz_top_joiner_parts.scad>
|
||||
use <z_sled_parts.scad>
|
||||
|
||||
|
||||
// Set default camera position.
|
||||
$vpd = 700;
|
||||
$vpt = [0, 0, 255];
|
||||
$vpr = [65, 0, 120];
|
||||
|
||||
|
||||
|
||||
module axis_slider_assembly(slidepos=0)
|
||||
module x_axis_slider_assembly(slidepos=0)
|
||||
{
|
||||
platform_vert_off = rail_height+groove_height+rail_offset;
|
||||
|
||||
translate([0, -motor_rail_length/2, 0]) {
|
||||
translate([0, -rail_length/2, 0]) {
|
||||
rail_segment();
|
||||
}
|
||||
}
|
||||
rail_motor_segment();
|
||||
translate([0, motor_rail_length/2, 0]) {
|
||||
translate([0, rail_length/2, 0]) {
|
||||
rail_segment();
|
||||
zring(n=2) {
|
||||
fwd(motor_rail_length/2) {
|
||||
translate([0, -rail_length/2, 0]) {
|
||||
rail_segment();
|
||||
}
|
||||
}
|
||||
}
|
||||
rail_x_motor_segment();
|
||||
|
||||
// Stepper Motor
|
||||
translate([0, 0, rail_height-5-20]) {
|
||||
up(rail_height-5-20) {
|
||||
motor_mount_plate();
|
||||
translate([0, 0, 20-4-0.2]) {
|
||||
up(20-4-0.2) {
|
||||
nema17_stepper(h=34, shaft_len=20.05);
|
||||
translate([0, 0, 19]) {
|
||||
up(19) {
|
||||
drive_gear();
|
||||
}
|
||||
}
|
||||
@@ -62,7 +53,56 @@ module axis_slider_assembly(slidepos=0)
|
||||
|
||||
// Sleds
|
||||
translate([0, slidepos, platform_vert_off]) {
|
||||
grid_of(count=[1,2], spacing=platform_length) {
|
||||
yspread(platform_length) {
|
||||
yrot(180) {
|
||||
xy_sled();
|
||||
}
|
||||
}
|
||||
children();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module y_axis_slider_assembly(slidepos=0)
|
||||
{
|
||||
platform_vert_off = rail_height+groove_height+rail_offset;
|
||||
|
||||
zring(n=2) {
|
||||
fwd(motor_rail_length/2) {
|
||||
fwd(rail_length/2) {
|
||||
rail_segment();
|
||||
fwd(rail_length/2+platform_length) {
|
||||
// Bottom Y-axis to Z-axis corner joiner.
|
||||
yz_bottom_joiner();
|
||||
|
||||
// Support legs.
|
||||
back(platform_length/2) {
|
||||
zring(n=2) {
|
||||
right(rail_width/2+2*7) {
|
||||
zrot(-90) support_leg();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
rail_y_motor_segment();
|
||||
|
||||
// Stepper Motor
|
||||
up(rail_height-5-20) {
|
||||
motor_mount_plate();
|
||||
up(20-4-0.2) {
|
||||
nema17_stepper(h=34, shaft_len=20.05);
|
||||
up(19) {
|
||||
drive_gear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sleds
|
||||
translate([0, slidepos, platform_vert_off]) {
|
||||
yspread(platform_length) {
|
||||
yrot(180) {
|
||||
xy_sled();
|
||||
}
|
||||
@@ -76,41 +116,71 @@ module z_axis_slider_assembly(slidepos=0)
|
||||
{
|
||||
platform_vert_off = rail_height+groove_height+rail_offset;
|
||||
|
||||
translate([0, -motor_rail_length, 0]) {
|
||||
grid_of(count=[1,2], spacing=rail_length) {
|
||||
fwd(motor_rail_length) {
|
||||
yspread(rail_length) {
|
||||
rail_segment();
|
||||
}
|
||||
}
|
||||
translate([0, motor_rail_length, 0]) {
|
||||
back(motor_rail_length) {
|
||||
zrot(180) rail_lifter_segment();
|
||||
}
|
||||
|
||||
translate([0, rail_length-motor_rail_length/2, rail_height+groove_height/2]) {
|
||||
// Stepper Motor
|
||||
xrot(90) {
|
||||
motor_mount_plate();
|
||||
translate([0, 0, 20-4-0.2]) {
|
||||
nema17_stepper(h=34, shaft_len=20.05);
|
||||
translate([0, 0, 5]) {
|
||||
color("darkgrey") {
|
||||
zrot(slidepos/lifter_thread_size*360.0) {
|
||||
lifter_rod_coupler();
|
||||
up(rail_height+groove_height/2) {
|
||||
back(rail_length-motor_rail_length/2) {
|
||||
// Stepper Motor
|
||||
xrot(90) {
|
||||
motor_mount_plate();
|
||||
up(20-4-0.2) {
|
||||
nema17_stepper(h=34, shaft_len=20.05);
|
||||
up(5) {
|
||||
color("darkgrey") {
|
||||
zrot(slidepos/lifter_thread_size*360.0) {
|
||||
lifter_rod_coupler();
|
||||
}
|
||||
}
|
||||
up(lifter_rod_length/2+16) {
|
||||
color("silver") cylinder(d=lifter_rod_diam, h=lifter_rod_length, center=true);
|
||||
}
|
||||
}
|
||||
translate([0, 0, lifter_rod_length/2+16]) {
|
||||
color("silver") cylinder(d=lifter_rod_diam, h=lifter_rod_length, center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sleds
|
||||
translate([0, slidepos-motor_rail_length, platform_vert_off]) {
|
||||
yrot(180) {
|
||||
z_sled();
|
||||
|
||||
module bridge_assembly()
|
||||
{
|
||||
zring(n=2) {
|
||||
fwd(motor_rail_length/2) {
|
||||
fwd(rail_length/2) {
|
||||
rail_segment();
|
||||
fwd(rail_length/2+platform_length) {
|
||||
yz_top_joiner();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
rail_y_motor_segment();
|
||||
}
|
||||
|
||||
|
||||
module extruder_assembly(slidepos=0)
|
||||
{
|
||||
platform_vert_off = groove_height+rail_offset;
|
||||
|
||||
down(platform_length/2-slidepos) {
|
||||
zring(n=2) {
|
||||
fwd(extruder_length/2) {
|
||||
fwd(cantilever_length) {
|
||||
zrot(90) z_sled();
|
||||
}
|
||||
}
|
||||
}
|
||||
extruder_platform();
|
||||
translate([rail_width/2+5, 0, 5]) {
|
||||
yrot(30) fan_shroud();
|
||||
}
|
||||
children();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,112 +190,78 @@ module full_assembly(hide_endcaps=false)
|
||||
joiner_length=20;
|
||||
xpos = 100*cos(360*$t);
|
||||
ypos = 100*sin(360*$t);
|
||||
zpos = 100*cos(240+360*$t);
|
||||
zpos = 80*cos(240+360*$t)+10;
|
||||
|
||||
// Y-axis to Z-axis corner joiner.
|
||||
yz_joiner();
|
||||
|
||||
// Support legs.
|
||||
translate([0, platform_length/2, 0]) {
|
||||
zrot_copies([0,180]) {
|
||||
translate([rail_width/2+2*7, 0, 0]) {
|
||||
zrot(-90) support_leg();
|
||||
}
|
||||
}
|
||||
// Top bridge
|
||||
up(2*rail_height+motor_rail_length+2*rail_length+2*groove_height) {
|
||||
xrot(180) bridge_assembly();
|
||||
}
|
||||
|
||||
translate([0, platform_length + rail_length + motor_rail_length/2, 0]) {
|
||||
// Y-axis rail endcaps.
|
||||
if (hide_endcaps == false) {
|
||||
translate([0, motor_rail_length/2 + rail_length, 0]) {
|
||||
zrot(180) rail_endcap();
|
||||
}
|
||||
}
|
||||
// Extruder bridge
|
||||
up(rail_height+motor_rail_length+rail_length+groove_height) {
|
||||
extruder_assembly(zpos);
|
||||
}
|
||||
|
||||
// Y-axis rails.
|
||||
axis_slider_assembly(ypos) {
|
||||
// X-axis to Y-axis joiners.
|
||||
zrot_copies([0, 180]) {
|
||||
translate([0, -platform_length, 0]) {
|
||||
xy_joiner();
|
||||
}
|
||||
}
|
||||
translate([(platform_width-joiner_width)/2, -platform_length, 0]) {
|
||||
zrot(180) cable_chain_xy_mount();
|
||||
}
|
||||
zrot(90) {
|
||||
// X-axis rail endcaps.
|
||||
if (hide_endcaps == false) {
|
||||
zrot_copies([0, 180]) {
|
||||
translate([0, -(rail_length + motor_rail_length/2), 0]) {
|
||||
rail_endcap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// X-axis rails.
|
||||
axis_slider_assembly(xpos) {
|
||||
zrot_copies([0, 180]) {
|
||||
translate([0, -platform_length, 0]) {
|
||||
sled_endcap();
|
||||
translate([0, -(20-joiner_width/2), 0]) {
|
||||
translate([platform_width/2, 0, 0]) {
|
||||
zrot(90) platform_support2();
|
||||
}
|
||||
translate([-platform_width/2, 0, 0]) {
|
||||
zrot(270) platform_support1();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
translate([0, 0, 3+glass_thick/2]) {
|
||||
// Borosilicate Glass
|
||||
color([0.75, 1.0, 1.0, 0.5]) {
|
||||
cube(size=[glass_length, glass_width, glass_thick], center=true);
|
||||
}
|
||||
}
|
||||
zring(n=2) {
|
||||
fwd(platform_length + rail_length + motor_rail_length/2) {
|
||||
up(rail_height + groove_height + rail_length) {
|
||||
xrot(-90) {
|
||||
// Z-axis rails.
|
||||
z_axis_slider_assembly(zpos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
translate([0, 0, platform_length + rail_length]) {
|
||||
xrot(-90) {
|
||||
// Z-axis rail endcaps.
|
||||
// Y-axis rails.
|
||||
y_axis_slider_assembly(ypos) {
|
||||
// X-axis to Y-axis joiners.
|
||||
zrot_copies([0, 180]) {
|
||||
fwd(platform_length) {
|
||||
xy_joiner();
|
||||
}
|
||||
}
|
||||
translate([(platform_width-joiner_width)/2, -platform_length, 0]) {
|
||||
zrot(180) cable_chain_xy_mount();
|
||||
}
|
||||
zrot(90) {
|
||||
// X-axis rail endcaps.
|
||||
if (hide_endcaps == false) {
|
||||
translate([0, -(motor_rail_length+rail_length+0.1), 0]) {
|
||||
rail_endcap();
|
||||
zrot_copies([0, 180]) {
|
||||
fwd(rail_length + motor_rail_length/2) {
|
||||
rail_endcap();
|
||||
}
|
||||
}
|
||||
}
|
||||
// Z-axis rails.
|
||||
z_axis_slider_assembly(zpos) {
|
||||
translate([0, -platform_length/2, 0]) {
|
||||
xrot(90) {
|
||||
// Z-axis platform to extruder cantilever joint.
|
||||
cantilever_joint();
|
||||
|
||||
// Extruder cantilever.
|
||||
translate([0, joiner_length, -platform_length]) {
|
||||
translate([0, cantilever_length/2, 0]) {
|
||||
cantilever_arm();
|
||||
translate([0, cantilever_length/2, 0]) {
|
||||
extruder_platform();
|
||||
translate([platform_width/2+5, 81, 5]) {
|
||||
yrot(30) fan_shroud();
|
||||
}
|
||||
}
|
||||
// X-axis rails.
|
||||
x_axis_slider_assembly(xpos) {
|
||||
zrot_copies([0, 180]) {
|
||||
fwd(platform_length) {
|
||||
sled_endcap();
|
||||
fwd(20-joiner_width/2) {
|
||||
right(platform_width/2) {
|
||||
zrot(90) platform_support2();
|
||||
}
|
||||
left(platform_width/2) {
|
||||
zrot(270) platform_support1();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
up(3+glass_thick/2) {
|
||||
// Borosilicate Glass. Render last to allow transparency to work.
|
||||
color([0.75, 1.0, 1.0, 0.5]) {
|
||||
cube(size=[glass_length, glass_width, glass_thick], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
translate([0,-1.5*rail_length,0])
|
||||
full_assembly(hide_endcaps=false);
|
||||
full_assembly(hide_endcaps=false);
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ module motor_mount_plate(thick=4, l=20)
|
||||
|
||||
|
||||
module motor_mount_plate_parts() { // make me
|
||||
grid_of(count=[1,1], spacing=65) {
|
||||
yspread(65, n=1) {
|
||||
yrot(180) motor_mount_plate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,31 +70,30 @@ module gear (
|
||||
clearance = 0.0, //gap between top of a tooth on one gear and bottom of valley on a meshing gear (in millimeters)
|
||||
backlash = 0.0 //gap between two meshing teeth, in the direction along the circumference of the pitch circle
|
||||
) {
|
||||
assign(pi = 3.1415926)
|
||||
assign(p = mm_per_tooth * number_of_teeth / pi / 2) //radius of pitch circle
|
||||
assign(c = p + mm_per_tooth / pi - clearance) //radius of outer circle
|
||||
assign(b = p*cos(pressure_angle)) //radius of base circle
|
||||
assign(r = p-(c-p)-clearance) //radius of root circle
|
||||
assign(t = mm_per_tooth/2-backlash/2) //tooth thickness at pitch circle
|
||||
assign(k = -iang(b, p) - t/2/p/pi*180) { //angle to where involute meets base circle on each side of tooth
|
||||
difference() {
|
||||
for (i = [0:number_of_teeth-teeth_to_hide-1] )
|
||||
rotate([0,0,i*360/number_of_teeth])
|
||||
linear_extrude(height = thickness, center = true, convexity = 10, twist = twist)
|
||||
polygon(
|
||||
points=[
|
||||
[0, -hole_diameter/10],
|
||||
polar(r, -181/number_of_teeth),
|
||||
polar(r, r<b ? k : -180/number_of_teeth),
|
||||
q7(0/5,r,b,c,k, 1),q7(1/5,r,b,c,k, 1),q7(2/5,r,b,c,k, 1),q7(3/5,r,b,c,k, 1),q7(4/5,r,b,c,k, 1),q7(5/5,r,b,c,k, 1),
|
||||
q7(5/5,r,b,c,k,-1),q7(4/5,r,b,c,k,-1),q7(3/5,r,b,c,k,-1),q7(2/5,r,b,c,k,-1),q7(1/5,r,b,c,k,-1),q7(0/5,r,b,c,k,-1),
|
||||
polar(r, r<b ? -k : 180/number_of_teeth),
|
||||
polar(r, 181/number_of_teeth)
|
||||
],
|
||||
paths=[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]]
|
||||
);
|
||||
cylinder(h=2*thickness+1, r=hole_diameter/2, center=true, $fn=20);
|
||||
}
|
||||
pi = 3.1415926;
|
||||
p = mm_per_tooth * number_of_teeth / pi / 2; //radius of pitch circle
|
||||
c = p + mm_per_tooth / pi - clearance; //radius of outer circle
|
||||
b = p*cos(pressure_angle); //radius of base circle
|
||||
r = p-(c-p)-clearance; //radius of root circle
|
||||
t = mm_per_tooth/2-backlash/2; //tooth thickness at pitch circle
|
||||
k = -iang(b, p) - t/2/p/pi*180; //angle to where involute meets base circle on each side of tooth
|
||||
difference() {
|
||||
for (i = [0:number_of_teeth-teeth_to_hide-1] )
|
||||
rotate([0,0,i*360/number_of_teeth])
|
||||
linear_extrude(height = thickness, center = true, convexity = 10, twist = twist)
|
||||
polygon(
|
||||
points=[
|
||||
[0, -hole_diameter/10],
|
||||
polar(r, -181/number_of_teeth),
|
||||
polar(r, r<b ? k : -180/number_of_teeth),
|
||||
q7(0/5,r,b,c,k, 1),q7(1/5,r,b,c,k, 1),q7(2/5,r,b,c,k, 1),q7(3/5,r,b,c,k, 1),q7(4/5,r,b,c,k, 1),q7(5/5,r,b,c,k, 1),
|
||||
q7(5/5,r,b,c,k,-1),q7(4/5,r,b,c,k,-1),q7(3/5,r,b,c,k,-1),q7(2/5,r,b,c,k,-1),q7(1/5,r,b,c,k,-1),q7(0/5,r,b,c,k,-1),
|
||||
polar(r, r<b ? -k : 180/number_of_teeth),
|
||||
polar(r, 181/number_of_teeth)
|
||||
],
|
||||
paths=[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]]
|
||||
);
|
||||
cylinder(h=2*thickness+1, r=hole_diameter/2, center=true, $fn=20);
|
||||
}
|
||||
};
|
||||
//these 4 functions are used by gear
|
||||
@@ -113,25 +112,25 @@ module rack (
|
||||
pressure_angle = 28, //Controls how straight or bulged the tooth sides are. In degrees.
|
||||
backlash = 0.0 //gap between two meshing teeth, in the direction along the circumference of the pitch circle
|
||||
) {
|
||||
assign(pi = 3.1415926)
|
||||
assign(a = mm_per_tooth / pi) //addendum
|
||||
assign(t = a*cos(pressure_angle)-1) //tooth side is tilted so top/bottom corners move this amount
|
||||
for (i = [0:number_of_teeth-1] )
|
||||
translate([i*mm_per_tooth,0,0])
|
||||
linear_extrude(height = thickness, center = true, convexity = 10)
|
||||
polygon(
|
||||
points=[
|
||||
[-mm_per_tooth * 3/4, a-height],
|
||||
[-mm_per_tooth * 3/4 - backlash, -a],
|
||||
[-mm_per_tooth * 1/4 + backlash - t, -a],
|
||||
[-mm_per_tooth * 1/4 + backlash + t, a],
|
||||
[ mm_per_tooth * 1/4 - backlash - t, a],
|
||||
[ mm_per_tooth * 1/4 - backlash + t, -a],
|
||||
[ mm_per_tooth * 3/4 + backlash, -a],
|
||||
[ mm_per_tooth * 3/4, a-height],
|
||||
],
|
||||
paths=[[0,1,2,3,4,5,6,7]]
|
||||
);
|
||||
pi = 3.1415926;
|
||||
a = mm_per_tooth / pi; //addendum
|
||||
t = a*cos(pressure_angle)-1; //tooth side is tilted so top/bottom corners move this amount
|
||||
for (i = [0:number_of_teeth-1] )
|
||||
translate([i*mm_per_tooth,0,0])
|
||||
linear_extrude(height = thickness, center = true, convexity = 10)
|
||||
polygon(
|
||||
points=[
|
||||
[-mm_per_tooth * 3/4, a-height],
|
||||
[-mm_per_tooth * 3/4 - backlash, -a],
|
||||
[-mm_per_tooth * 1/4 + backlash - t, -a],
|
||||
[-mm_per_tooth * 1/4 + backlash + t, a],
|
||||
[ mm_per_tooth * 1/4 - backlash - t, a],
|
||||
[ mm_per_tooth * 1/4 - backlash + t, -a],
|
||||
[ mm_per_tooth * 3/4 + backlash, -a],
|
||||
[ mm_per_tooth * 3/4, a-height],
|
||||
],
|
||||
paths=[[0,1,2,3,4,5,6,7]]
|
||||
);
|
||||
};
|
||||
|
||||
//These 5 functions let the user find the derived dimensions of the gear.
|
||||
|
||||
@@ -19,66 +19,68 @@ module rail_lifter_segment()
|
||||
difference() {
|
||||
union() {
|
||||
// Bottom.
|
||||
translate([0,0,rail_thick/2]) {
|
||||
up(rail_thick/2) {
|
||||
union() {
|
||||
yrot(90) sparse_strut(h=rail_width, l=motor_rail_length, thick=rail_thick, maxang=45, strut=10, max_bridge=500);
|
||||
grid_of(count=2, spacing=motor_mount_spacing) {
|
||||
xspread(motor_mount_spacing) {
|
||||
cube(size=[joiner_width, motor_rail_length, rail_thick], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Walls.
|
||||
zrot_copies([0, 180]) {
|
||||
translate([(rail_spacing/2+joiner_width/2), 0, (rail_height+3)/2]) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5, bracing=false);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5);
|
||||
zring(r=0, n=2) {
|
||||
up((rail_height+3)/2) {
|
||||
right((rail_spacing+joiner_width)/2) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5, bracing=false);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Rail backing.
|
||||
grid_of(count=2, spacing=rail_spacing+joiner_width)
|
||||
translate([0,0,rail_height+groove_height/2])
|
||||
xspread(rail_spacing+joiner_width)
|
||||
up(rail_height+groove_height/2)
|
||||
chamfer(size=[joiner_width, motor_rail_length, groove_height], chamfer=1, edges=[[1,1,0,0], [1,1,0,0], [0,0,0,0]])
|
||||
cube(size=[joiner_width, motor_rail_length, groove_height], center=true);
|
||||
|
||||
// Top side support
|
||||
translate([0, (motor_rail_length-18)/2, (rail_height-15)/2]) {
|
||||
zrot(90) sparse_strut(h=rail_height-15, l=rail_width, thick=5, strut=5);
|
||||
translate([0, 0, -(rail_height-15-rail_thick)/2]) {
|
||||
cube(size=[rail_width, 5, rail_thick], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Bottom side support
|
||||
translate([0, -(motor_rail_length-18)/2, (rail_height+groove_height)/2]) {
|
||||
zrot(90) sparse_strut(h=rail_height+groove_height, l=rail_width-joiner_width, thick=5, strut=6);
|
||||
translate([0, 0, -(rail_height+groove_height-rail_thick)/2]) {
|
||||
cube(size=[rail_width, 5, rail_thick], center=true);
|
||||
up((rail_height-15)/2) {
|
||||
yspread(motor_rail_length-18) {
|
||||
zrot(90) sparse_strut(h=rail_height-15, l=rail_width, thick=5, strut=5);
|
||||
down((rail_height-15-rail_thick)/2) {
|
||||
cube(size=[rail_width, 5, rail_thick], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Motor mount joiners.
|
||||
translate([0, 0, rail_height+groove_height/2]) {
|
||||
up(rail_height+groove_height/2) {
|
||||
joiner_pair(spacing=motor_mount_spacing, h=rail_height, w=joiner_width, l=15, a=joiner_angle);
|
||||
}
|
||||
grid_of(count=2, spacing=motor_mount_spacing) {
|
||||
translate([0, -15/2, rail_height/4+groove_height/4]) {
|
||||
cube(size=[joiner_width, 15, rail_height/2+groove_height/2], center=true);
|
||||
xspread(motor_mount_spacing) {
|
||||
up(rail_height/4+groove_height/4) {
|
||||
fwd(15/2) {
|
||||
cube(size=[joiner_width, 15, rail_height/2+groove_height/2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Motor mount supports.
|
||||
mirror_copy([1, 0, 0]) {
|
||||
translate([(rail_width+motor_mount_spacing)/4-2, -motor_rail_length/4, (rail_height+groove_height)/2]) {
|
||||
zrot(ang) {
|
||||
sparse_strut(h=rail_height+groove_height, l=hlen, thick=7.5, strut=5);
|
||||
translate([0, 0, -(rail_height+groove_height-rail_thick)/2]) {
|
||||
cube(size=[7.5, hlen, rail_thick], center=true);
|
||||
xflip_copy() {
|
||||
up((rail_height+groove_height)/2) {
|
||||
fwd(motor_rail_length/4) {
|
||||
right((rail_width+motor_mount_spacing)/4-2) {
|
||||
zrot(ang) {
|
||||
sparse_strut(h=rail_height+groove_height, l=hlen, thick=7.5, strut=5);
|
||||
down((rail_height+groove_height-rail_thick)/2) {
|
||||
cube(size=[7.5, hlen, rail_thick], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -86,58 +88,39 @@ module rail_lifter_segment()
|
||||
}
|
||||
|
||||
// Clear space for joiners.
|
||||
translate([0,0,rail_height/2]) {
|
||||
up(rail_height/2) {
|
||||
joiner_quad_clear(xspacing=rail_spacing+joiner_width, yspacing=motor_rail_length, h=rail_height, w=joiner_width, clearance=5, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Shrinkage stress relief
|
||||
translate([0, 0, rail_thick/2]) {
|
||||
grid_of(count=[1, 5], spacing=[0, 16]) {
|
||||
up(rail_thick/2) {
|
||||
yspread(16, n=5) {
|
||||
cube(size=[rail_width+1, 1, rail_thick-2], center=true);
|
||||
}
|
||||
grid_of(count=[7, 2], spacing=[15, motor_rail_length-10]) {
|
||||
cube(size=[1, 60, rail_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Clear space for side mount joiners.
|
||||
zrot_copies([0,180]) {
|
||||
translate([rail_width/2-5, 0, 0]) {
|
||||
translate([side_joiner_len+joiner_width/2, 0, rail_height/2/2]) {
|
||||
translate([0, -platform_length/4, 0]) {
|
||||
zrot(-90) half_joiner_clear(h=rail_height/2, w=joiner_width, l=side_joiner_len, a=joiner_angle);
|
||||
}
|
||||
translate([0, platform_length/4, 0]) {
|
||||
zrot(-90) half_joiner_clear(h=rail_height/2, w=joiner_width, l=side_joiner_len, a=joiner_angle, slop=printer_slop);
|
||||
}
|
||||
xspread(15, n=7) {
|
||||
yspread(motor_rail_length-10) {
|
||||
cube(size=[1, 60, rail_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Snap-tab joiners.
|
||||
translate([0,0,rail_height/2]) {
|
||||
up(rail_height/2) {
|
||||
joiner_quad(xspacing=rail_spacing+joiner_width, yspacing=motor_rail_length, h=rail_height, w=joiner_width, l=13, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Side mount joiners.
|
||||
zrot_copies([0,180]) {
|
||||
translate([rail_width/2-5, 0, 0]) {
|
||||
translate([side_joiner_len+joiner_width/2, 0, rail_height/2/2]) {
|
||||
translate([0, -side_mount_spacing/2, 0]) {
|
||||
up(rail_height/2/2) {
|
||||
back(side_mount_spacing/2) {
|
||||
zring(n=2,r=0) {
|
||||
right(side_joiner_len+joiner_width/2+rail_width/2-5) {
|
||||
zrot(-90) {
|
||||
chamfer(chamfer=joiner_width/3, size=[joiner_width, side_joiner_len*2, rail_height/2], edges=[[0,0,0,0], [1,1,0,0], [0,0,0,0]]) {
|
||||
half_joiner(h=rail_height/2, w=joiner_width, l=side_joiner_len, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
translate([0, side_mount_spacing/2, 0]) {
|
||||
zrot(-90) {
|
||||
chamfer(chamfer=joiner_width/3, size=[joiner_width, side_joiner_len*2, rail_height/2], edges=[[0,0,0,0], [1,1,0,0], [0,0,0,0]]) {
|
||||
half_joiner2(h=rail_height/2, w=joiner_width, l=side_joiner_len, a=joiner_angle, slop=printer_slop);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,167 +0,0 @@
|
||||
include <config.scad>
|
||||
use <GDMUtils.scad>
|
||||
use <joiners.scad>
|
||||
|
||||
|
||||
module rail_motor_segment()
|
||||
{
|
||||
joiner_length = 10;
|
||||
side_joiner_len = 10;
|
||||
|
||||
color("SpringGreen")
|
||||
prerender(convexity=20)
|
||||
union() {
|
||||
difference() {
|
||||
union() {
|
||||
// Bottom.
|
||||
translate([0,0,rail_thick/2]) {
|
||||
difference() {
|
||||
union() {
|
||||
yrot(90)
|
||||
sparse_strut(h=rail_width, l=motor_rail_length, thick=rail_thick, maxang=45, strut=10, max_bridge=500);
|
||||
cube(size=[motor_mount_spacing+joiner_width, 45+20, rail_thick], center=true);
|
||||
}
|
||||
cube(size=[motor_mount_spacing-joiner_width, 45, rail_thick+1], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Walls.
|
||||
zrot_copies([0, 180]) {
|
||||
translate([(rail_spacing/2+joiner_width/2), 0, (rail_height+3)/2]) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5, bracing=false);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5);
|
||||
}
|
||||
}
|
||||
|
||||
// Rail backing.
|
||||
grid_of(count=2, spacing=rail_spacing+joiner_width)
|
||||
translate([0,0,rail_height+groove_height/2])
|
||||
chamfer(size=[joiner_width, motor_rail_length, groove_height], chamfer=1, edges=[[1,1,0,0], [1,1,0,0], [0,0,0,0]])
|
||||
cube(size=[joiner_width, motor_rail_length, groove_height], center=true);
|
||||
|
||||
// Side Supports
|
||||
translate([0, 0, rail_height/4]) {
|
||||
grid_of(count=[1,2], spacing=[0, motor_rail_length-20]) {
|
||||
cube(size=[rail_width, 5, rail_height/2], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Motor mount joiners.
|
||||
translate([0, 0, rail_height-5-20]) {
|
||||
xrot(90) joiner_pair(spacing=motor_mount_spacing, h=rail_height, w=joiner_width, l=rail_height-5-20, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
|
||||
// Rail grooves.
|
||||
translate([0,0,rail_height+groove_height/2]) {
|
||||
mirror_copy([1,0,0]) {
|
||||
translate([-(rail_width/2-joiner_width/2), 0, 0]) {
|
||||
mirror_copy([1,0,0]) {
|
||||
translate([(joiner_width/2), 0, 0]) {
|
||||
// main groove
|
||||
scale([tan(groove_angle),1,1]) yrot(45) {
|
||||
cube(size=[groove_height*sqrt(2)/2,motor_rail_length+1,groove_height*sqrt(2)/2], center=true);
|
||||
}
|
||||
|
||||
// chamfers
|
||||
mirror_copy([0,1,0]) {
|
||||
translate([0, motor_rail_length/2, 0]) {
|
||||
hull() {
|
||||
grid_of(count=[1,2], spacing=2) {
|
||||
zrot(45) scale([tan(groove_angle)*sin(45),1,1]) yrot(45) {
|
||||
cube(size=[groove_height*sqrt(2)/2,10,groove_height*sqrt(2)/2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Wiring access holes.
|
||||
translate([0, 0, rail_height/4]) {
|
||||
grid_of(count=[3,2], spacing=[rail_width/3, motor_rail_length-20]) {
|
||||
cube(size=[16, 11, 10], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Clear space for joiners.
|
||||
translate([0,0,rail_height/2]) {
|
||||
joiner_quad_clear(xspacing=rail_spacing+joiner_width, yspacing=motor_rail_length, h=rail_height, w=joiner_width, clearance=5, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Shrinkage stress relief
|
||||
translate([0, 0, rail_thick/2]) {
|
||||
grid_of(count=[1, 5], spacing=[0, 16]) {
|
||||
cube(size=[rail_width+1, 1, rail_thick-2], center=true);
|
||||
}
|
||||
grid_of(count=[7, 2], spacing=[15, motor_rail_length-10]) {
|
||||
cube(size=[1, 60, rail_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Clear space for side mount joiners.
|
||||
zrot_copies([0,180]) {
|
||||
translate([rail_width/2-5, 0, 0]) {
|
||||
translate([side_joiner_len+joiner_width/2, 0, rail_height/2/2]) {
|
||||
translate([0, -platform_length/4, 0]) {
|
||||
zrot(-90) half_joiner_clear(h=rail_height/2, w=joiner_width, l=side_joiner_len, a=joiner_angle);
|
||||
}
|
||||
translate([0, platform_length/4, 0]) {
|
||||
zrot(-90) half_joiner_clear(h=rail_height/2, w=joiner_width, l=side_joiner_len, a=joiner_angle, slop=printer_slop);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Snap-tab joiners.
|
||||
translate([0,0,rail_height/2]) {
|
||||
joiner_quad(xspacing=rail_spacing+joiner_width, yspacing=motor_rail_length, h=rail_height, w=joiner_width, l=13, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Side mount joiners.
|
||||
zrot_copies([0,180]) {
|
||||
translate([rail_width/2-5, 0, 0]) {
|
||||
translate([side_joiner_len+joiner_width/2, 0, rail_height/2/2]) {
|
||||
translate([0, -side_mount_spacing/2, 0]) {
|
||||
zrot(-90) {
|
||||
chamfer(chamfer=joiner_width/3, size=[joiner_width, side_joiner_len*2, rail_height/2], edges=[[0,0,0,0], [1,1,0,0], [0,0,0,0]]) {
|
||||
half_joiner(h=rail_height/2, w=joiner_width, l=side_joiner_len, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
translate([0, side_mount_spacing/2, 0]) {
|
||||
zrot(-90) {
|
||||
chamfer(chamfer=joiner_width/3, size=[joiner_width, side_joiner_len*2, rail_height/2], edges=[[0,0,0,0], [1,1,0,0], [0,0,0,0]]) {
|
||||
half_joiner2(h=rail_height/2, w=joiner_width, l=side_joiner_len, a=joiner_angle, slop=printer_slop);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//!rail_motor_segment();
|
||||
|
||||
|
||||
|
||||
module rail_motor_segment_parts() { // make me
|
||||
zrot(90) rail_motor_segment();
|
||||
}
|
||||
|
||||
|
||||
rail_motor_segment_parts();
|
||||
|
||||
|
||||
|
||||
// vim: noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap
|
||||
|
||||
@@ -11,41 +11,48 @@ module rail_segment()
|
||||
difference() {
|
||||
union() {
|
||||
// Bottom.
|
||||
translate([0,0,rail_thick/2]) yrot(90)
|
||||
up(rail_thick/2) yrot(90)
|
||||
sparse_strut(h=rail_width, l=rail_length, thick=rail_thick, maxang=45, strut=10, max_bridge=500);
|
||||
|
||||
// Walls.
|
||||
zrot_copies([0, 180]) {
|
||||
translate([(rail_spacing+joiner_width)/2, 0, (rail_height+3)/2]) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=rail_height+3, l=rail_length-10, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=rail_height+3, l=rail_length-10, thick=joiner_width, strut=5, bracing=false);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=rail_height+3, l=rail_length-10, thick=joiner_width, strut=5);
|
||||
up((rail_height+3)/2) {
|
||||
right((rail_spacing+joiner_width)/2) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=rail_height+3, l=rail_length-10, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=rail_height+3, l=rail_length-10, thick=joiner_width, strut=5, bracing=false);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=rail_height+3, l=rail_length-10, thick=joiner_width, strut=5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Rail backing.
|
||||
grid_of(count=2, spacing=rail_spacing+joiner_width)
|
||||
translate([0,0,rail_height+groove_height/2])
|
||||
xspread(rail_spacing+joiner_width)
|
||||
up(rail_height+groove_height/2)
|
||||
chamfer(size=[joiner_width, rail_length, groove_height], chamfer=1, edges=[[1,1,0,0], [1,1,0,0], [0,0,0,0]])
|
||||
cube(size=[joiner_width, rail_length, groove_height], center=true);
|
||||
|
||||
// Side Supports
|
||||
translate([0, 0, rail_height/4]) {
|
||||
grid_of(count=[1,2], spacing=[0, rail_length-38]) {
|
||||
cube(size=[rail_width, 5, rail_height/2], center=true);
|
||||
up(rail_height/4) {
|
||||
yspread(rail_length-2*5-5) {
|
||||
difference() {
|
||||
cube(size=[rail_width-joiner_width, 4, rail_height/2], center=true);
|
||||
xspread(rail_width/3, n=3) {
|
||||
cube(size=[16, 11, 12], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Rail grooves.
|
||||
translate([0,0,rail_height+groove_height/2]) {
|
||||
up(rail_height+groove_height/2) {
|
||||
mirror_copy([1,0,0]) {
|
||||
translate([-(rail_width/2-joiner_width/2), 0, 0]) {
|
||||
left((rail_width-joiner_width)/2) {
|
||||
mirror_copy([1,0,0]) {
|
||||
translate([(joiner_width/2), 0, 0]) {
|
||||
right(joiner_width/2) {
|
||||
// main groove
|
||||
scale([tan(groove_angle),1,1]) yrot(45) {
|
||||
cube(size=[groove_height*sqrt(2)/2,rail_length+1,groove_height*sqrt(2)/2], center=true);
|
||||
@@ -53,9 +60,9 @@ module rail_segment()
|
||||
|
||||
// chamfers
|
||||
mirror_copy([0,1,0]) {
|
||||
translate([0, rail_length/2, 0]) {
|
||||
back(rail_length/2) {
|
||||
hull() {
|
||||
grid_of(count=[1,2], spacing=2) {
|
||||
yspread(2) {
|
||||
zrot(45) scale([tan(groove_angle)*sin(45),1.01,1.01]) yrot(45) {
|
||||
cube(size=[groove_height*sqrt(2)/2, 10, groove_height*sqrt(2)/2], center=true);
|
||||
}
|
||||
@@ -69,31 +76,26 @@ module rail_segment()
|
||||
}
|
||||
}
|
||||
|
||||
// Wiring access holes.
|
||||
translate([0, 0, rail_height/4]) {
|
||||
grid_of(count=[3,2], spacing=[rail_width/3, rail_length-38]) {
|
||||
cube(size=[16, 11, 10], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Clear space for joiners.
|
||||
translate([0,0,rail_height/2]) {
|
||||
up(rail_height/2) {
|
||||
joiner_quad_clear(xspacing=rail_spacing+joiner_width, yspacing=rail_length, h=rail_height+0.001, w=joiner_width, clearance=5, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Shrinkage stress relief
|
||||
translate([0, 0, rail_thick/2]) {
|
||||
grid_of(count=[1, 13], spacing=[0, 15]) {
|
||||
up(rail_thick/2) {
|
||||
yspread(13, n=12) {
|
||||
cube(size=[rail_width+1, 1, rail_thick-2], center=true);
|
||||
}
|
||||
grid_of(count=[9, 2], spacing=[12, rail_length-10]) {
|
||||
cube(size=[1, 60, rail_thick-2], center=true);
|
||||
xspread(13, n=8) {
|
||||
yspread(rail_length-10) {
|
||||
cube(size=[1, 60, rail_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Snap-tab joiners.
|
||||
translate([0,0,rail_height/2]) {
|
||||
up(rail_height/2) {
|
||||
joiner_quad(xspacing=rail_spacing+joiner_width, yspacing=rail_length, h=rail_height, w=joiner_width, l=5, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
|
||||
177
rail_x_motor_segment_parts.scad
Normal file
177
rail_x_motor_segment_parts.scad
Normal file
@@ -0,0 +1,177 @@
|
||||
include <config.scad>
|
||||
use <GDMUtils.scad>
|
||||
use <joiners.scad>
|
||||
|
||||
|
||||
module rail_x_motor_segment()
|
||||
{
|
||||
joiner_length = 10;
|
||||
side_joiner_len = 10;
|
||||
|
||||
color("SpringGreen")
|
||||
prerender(convexity=20)
|
||||
union() {
|
||||
difference() {
|
||||
union() {
|
||||
// Bottom.
|
||||
up(rail_thick/2) {
|
||||
difference() {
|
||||
union() {
|
||||
yrot(90)
|
||||
sparse_strut(h=rail_width, l=motor_rail_length, thick=rail_thick, maxang=45, strut=10, max_bridge=500);
|
||||
cube(size=[motor_mount_spacing+joiner_width, 45+20, rail_thick], center=true);
|
||||
}
|
||||
cube(size=[motor_mount_spacing-joiner_width, 45, rail_thick+1], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Walls.
|
||||
zring(r=0,n=2) {
|
||||
up((rail_height+3)/2) {
|
||||
right((rail_spacing+joiner_width)/2) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5, bracing=false);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Rail backing.
|
||||
xspread(rail_spacing+joiner_width)
|
||||
up(rail_height+groove_height/2)
|
||||
chamfer(size=[joiner_width, motor_rail_length, groove_height], chamfer=1, edges=[[1,1,0,0], [1,1,0,0], [0,0,0,0]])
|
||||
cube(size=[joiner_width, motor_rail_length, groove_height], center=true);
|
||||
|
||||
// Side Supports
|
||||
up(rail_height/4) {
|
||||
yspread(motor_rail_length-20) {
|
||||
cube(size=[rail_width, 5, rail_height/2], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Motor mount joiners.
|
||||
up(rail_height-5-20) {
|
||||
xrot(90) joiner_pair(spacing=motor_mount_spacing, h=rail_height, w=joiner_width, l=rail_height-5-20, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
|
||||
// Rail grooves.
|
||||
up(rail_height+groove_height/2) {
|
||||
xflip_copy() {
|
||||
left((rail_width-joiner_width)/2) {
|
||||
xflip_copy() {
|
||||
right(joiner_width/2) {
|
||||
// main groove
|
||||
scale([tan(groove_angle),1,1]) yrot(45) {
|
||||
cube(size=[groove_height*sqrt(2)/2,motor_rail_length+1,groove_height*sqrt(2)/2], center=true);
|
||||
}
|
||||
|
||||
// chamfers
|
||||
mirror_copy([0,1,0]) {
|
||||
back(motor_rail_length/2) {
|
||||
hull() {
|
||||
yspread(2) {
|
||||
zrot(45) scale([tan(groove_angle)*sin(45),1,1]) yrot(45) {
|
||||
cube(size=[groove_height*sqrt(2)/2,10,groove_height*sqrt(2)/2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Wiring access holes.
|
||||
up(rail_height/4) {
|
||||
xspread(rail_width/3, n=3) {
|
||||
yspread(motor_rail_length-20) {
|
||||
cube(size=[16, 11, 10], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear space for joiners.
|
||||
up(rail_height/2) {
|
||||
joiner_quad_clear(xspacing=rail_spacing+joiner_width, yspacing=motor_rail_length, h=rail_height, w=joiner_width, clearance=5, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Shrinkage stress relief
|
||||
up(rail_thick/2) {
|
||||
yspread(16, n=5) {
|
||||
cube(size=[rail_width+1, 1, rail_thick-2], center=true);
|
||||
}
|
||||
xspread(15, n=7) {
|
||||
yspread(motor_rail_length-10) {
|
||||
cube(size=[1, 60, rail_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear space for side mount joiners.
|
||||
zring(r=0,n=2) {
|
||||
right(rail_width/2-5) {
|
||||
up(rail_height/2/2) {
|
||||
right(side_joiner_len+joiner_width/2) {
|
||||
left(platform_length/4) {
|
||||
zrot(-90) half_joiner_clear(h=rail_height/2, w=joiner_width, l=side_joiner_len, a=joiner_angle);
|
||||
}
|
||||
right(platform_length/4) {
|
||||
zrot(-90) half_joiner_clear(h=rail_height/2, w=joiner_width, l=side_joiner_len, a=joiner_angle, slop=printer_slop);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Snap-tab joiners.
|
||||
up(rail_height/2) {
|
||||
joiner_quad(xspacing=rail_spacing+joiner_width, yspacing=motor_rail_length, h=rail_height, w=joiner_width, l=13, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Side mount joiners.
|
||||
zring(r=0,n=2) {
|
||||
right(rail_width/2-5) {
|
||||
up(rail_height/2/2) {
|
||||
right(side_joiner_len+joiner_width/2) {
|
||||
fwd(side_mount_spacing/2) {
|
||||
zrot(-90) {
|
||||
chamfer(chamfer=joiner_width/3, size=[joiner_width, side_joiner_len*2, rail_height/2], edges=[[0,0,0,0], [1,1,0,0], [0,0,0,0]]) {
|
||||
half_joiner(h=rail_height/2, w=joiner_width, l=side_joiner_len, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
back(side_mount_spacing/2) {
|
||||
zrot(-90) {
|
||||
chamfer(chamfer=joiner_width/3, size=[joiner_width, side_joiner_len*2, rail_height/2], edges=[[0,0,0,0], [1,1,0,0], [0,0,0,0]]) {
|
||||
half_joiner2(h=rail_height/2, w=joiner_width, l=side_joiner_len, a=joiner_angle, slop=printer_slop);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//!rail_x_motor_segment();
|
||||
|
||||
|
||||
|
||||
module rail_x_motor_segment_parts() { // make me
|
||||
zrot(90) rail_x_motor_segment();
|
||||
}
|
||||
|
||||
|
||||
rail_x_motor_segment_parts();
|
||||
|
||||
|
||||
|
||||
// vim: noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap
|
||||
|
||||
130
rail_y_motor_segment_parts.scad
Normal file
130
rail_y_motor_segment_parts.scad
Normal file
@@ -0,0 +1,130 @@
|
||||
include <config.scad>
|
||||
use <GDMUtils.scad>
|
||||
use <joiners.scad>
|
||||
|
||||
|
||||
module rail_y_motor_segment()
|
||||
{
|
||||
joiner_length = 10;
|
||||
side_joiner_len = 10;
|
||||
|
||||
color("SpringGreen")
|
||||
prerender(convexity=20)
|
||||
union() {
|
||||
difference() {
|
||||
union() {
|
||||
// Bottom.
|
||||
up(rail_thick/2) {
|
||||
difference() {
|
||||
union() {
|
||||
yrot(90)
|
||||
sparse_strut(h=rail_width, l=motor_rail_length, thick=rail_thick, maxang=45, strut=10, max_bridge=500);
|
||||
cube(size=[motor_mount_spacing+joiner_width, 45+20, rail_thick], center=true);
|
||||
}
|
||||
cube(size=[motor_mount_spacing-joiner_width, 45, rail_thick+1], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Walls.
|
||||
zring(r=0,n=2) {
|
||||
up((rail_height+3)/2) {
|
||||
right((rail_spacing+joiner_width)/2) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5, bracing=false);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=rail_height+3, l=motor_rail_length-2*joiner_length, thick=joiner_width, strut=5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Rail backing.
|
||||
xspread(rail_spacing+joiner_width)
|
||||
up(rail_height+groove_height/2)
|
||||
chamfer(size=[joiner_width, motor_rail_length, groove_height], chamfer=1, edges=[[1,1,0,0], [1,1,0,0], [0,0,0,0]])
|
||||
cube(size=[joiner_width, motor_rail_length, groove_height], center=true);
|
||||
|
||||
// Motor mount joiners.
|
||||
up(rail_height-5-20) {
|
||||
xrot(90) joiner_pair(spacing=motor_mount_spacing, h=rail_height, w=joiner_width, l=rail_height-5-20, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
|
||||
// Rail grooves.
|
||||
up(rail_height+groove_height/2) {
|
||||
xflip_copy() {
|
||||
left((rail_width-joiner_width)/2) {
|
||||
xflip_copy() {
|
||||
right(joiner_width/2) {
|
||||
// main groove
|
||||
scale([tan(groove_angle),1,1]) yrot(45) {
|
||||
cube(size=[groove_height*sqrt(2)/2,motor_rail_length+1,groove_height*sqrt(2)/2], center=true);
|
||||
}
|
||||
|
||||
// chamfers
|
||||
mirror_copy([0,1,0]) {
|
||||
back(motor_rail_length/2) {
|
||||
hull() {
|
||||
yspread(2) {
|
||||
zrot(45) scale([tan(groove_angle)*sin(45),1,1]) yrot(45) {
|
||||
cube(size=[groove_height*sqrt(2)/2,10,groove_height*sqrt(2)/2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Wiring access holes.
|
||||
up(rail_height/4) {
|
||||
xspread(rail_width/3, n=3) {
|
||||
yspread(motor_rail_length-20) {
|
||||
cube(size=[16, 11, 10], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear space for joiners.
|
||||
up(rail_height/2) {
|
||||
joiner_quad_clear(xspacing=rail_spacing+joiner_width, yspacing=motor_rail_length, h=rail_height, w=joiner_width, clearance=5, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Shrinkage stress relief
|
||||
up(rail_thick/2) {
|
||||
yspread(16, n=5) {
|
||||
cube(size=[rail_width+1, 1, rail_thick-2], center=true);
|
||||
}
|
||||
xspread(15, n=7) {
|
||||
yspread(motor_rail_length-10) {
|
||||
cube(size=[1, 60, rail_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Snap-tab joiners.
|
||||
up(rail_height/2) {
|
||||
joiner_quad(xspacing=rail_spacing+joiner_width, yspacing=motor_rail_length, h=rail_height, w=joiner_width, l=13, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
//!rail_y_motor_segment();
|
||||
|
||||
|
||||
|
||||
module rail_y_motor_segment_parts() { // make me
|
||||
zrot(90) rail_y_motor_segment();
|
||||
}
|
||||
|
||||
|
||||
rail_y_motor_segment_parts();
|
||||
|
||||
|
||||
|
||||
// vim: noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap
|
||||
|
||||
@@ -40,13 +40,12 @@ module float_seven_segment(val=0.0, decim=2, size=10, h=1, suppress=false)
|
||||
}
|
||||
for (p = [mag:-1:-decim]) {
|
||||
translate([-0.8*size*(p+0.5), 0, 0]) {
|
||||
assign(d = floor(abs(val)/pow(10, p)+0.000001) % 10) {
|
||||
if (p == -1) {
|
||||
translate([-0.8*size/2, -size/2, 0])
|
||||
cube(size=[size*0.1, size*0.1, h], center=true);
|
||||
}
|
||||
digit_seven_segment(digit=d, size=size, h=h);
|
||||
d = floor(abs(val)/pow(10, p)+0.000001) % 10;
|
||||
if (p == -1) {
|
||||
translate([-0.8*size/2, -size/2, 0])
|
||||
cube(size=[size*0.1, size*0.1, h], center=true);
|
||||
}
|
||||
digit_seven_segment(digit=d, size=size, h=h);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -66,12 +65,11 @@ module slop_calibrator_parts() { // make me
|
||||
difference() {
|
||||
cube(size=[spacing, rows*spacing, h], center=true);
|
||||
for (row = [0:rows-1]) {
|
||||
assign(slop = (step*rows*col)+step*row) {
|
||||
translate([0, spacing*row-(rows-1)*spacing/2, 0]) {
|
||||
cube(size=[(r+slop)*2, (r+slop)*2, h+1], center=true);
|
||||
translate([spacing/2, -7, 0]) {
|
||||
zrot(90) xrot(90) float_seven_segment(val=slop, decim=2, size=8, h=1, suppress=true);
|
||||
}
|
||||
slop = (step*rows*col)+step*row;
|
||||
translate([0, spacing*row-(rows-1)*spacing/2, 0]) {
|
||||
cube(size=[(r+slop)*2, (r+slop)*2, h+1], center=true);
|
||||
translate([spacing/2, -7, 0]) {
|
||||
zrot(90) xrot(90) float_seven_segment(val=slop, decim=2, size=8, h=1, suppress=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
2
wiki
2
wiki
Submodule wiki updated: 3cc416d522...79335096f8
@@ -8,7 +8,7 @@ module herringbone_rack(l=100, h=10, w=10, tooth_size=5, CA=30)
|
||||
{
|
||||
translate([-(rack_tooth_size/2), 0, 0]) {
|
||||
mirror_copy([0,0,1]) {
|
||||
skew_along_z(xang=CA) {
|
||||
skew_xy(xang=CA) {
|
||||
intersection() {
|
||||
translate([-(l/2-rack_tooth_size/2), 0, h/4]) {
|
||||
rack(
|
||||
|
||||
@@ -3,7 +3,7 @@ use <GDMUtils.scad>
|
||||
use <joiners.scad>
|
||||
|
||||
|
||||
module yz_joiner()
|
||||
module yz_bottom_joiner()
|
||||
{
|
||||
joiner_length=10;
|
||||
base_height = rail_height+groove_height;
|
||||
@@ -17,61 +17,48 @@ module yz_joiner()
|
||||
difference() {
|
||||
union() {
|
||||
// Bottom.
|
||||
translate([0, platform_length/2, rail_thick/2]) {
|
||||
yrot(90)
|
||||
sparse_strut(h=rail_width, l=platform_length, thick=rail_thick, maxang=45, strut=10, max_bridge=500);
|
||||
up(rail_thick/2) {
|
||||
back(platform_length/2) {
|
||||
yrot(90) sparse_strut(h=rail_width, l=platform_length, thick=rail_thick, maxang=45, strut=10, max_bridge=500);
|
||||
}
|
||||
}
|
||||
|
||||
// Back.
|
||||
translate([0, rail_thick/2, platform_length/2]) zrot(90) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=platform_length, l=rail_width-joiner_width, thick=rail_thick, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=platform_length, l=rail_width-joiner_width, thick=rail_thick, strut=rail_thick, bracing=true);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=platform_length, l=rail_width-joiner_width, thick=rail_thick, strut=rail_thick, wall=3);
|
||||
up((rail_height+groove_height)/2) {
|
||||
back(rail_thick/2) {
|
||||
zrot(90) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=rail_height+groove_height, l=rail_width-joiner_width, thick=rail_thick, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=rail_height+groove_height, l=rail_width-joiner_width, thick=rail_thick, strut=rail_thick, bracing=true);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=rail_height+groove_height, l=rail_width-joiner_width, thick=rail_thick, strut=rail_thick, wall=3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Side Walls
|
||||
mirror_copy([1, 0, 0]) {
|
||||
translate([(rail_spacing+joiner_width)/2, 0, 0]) {
|
||||
// Upper Wall.
|
||||
grid_of(
|
||||
ya=[(rail_height+5)/2],
|
||||
za=[rail_height+groove_height]
|
||||
) {
|
||||
if (wall_style == "crossbeams")
|
||||
translate([0, 0, (platform_length-rail_height)/2-groove_height])
|
||||
sparse_strut(h=platform_length-rail_height, l=rail_height+5, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
translate([0, 0, (platform_length-rail_height)/2-groove_height])
|
||||
thinning_wall(h=platform_length-rail_height, l=rail_height+5, thick=joiner_width, strut=rail_thick, bracing=false);
|
||||
if (wall_style == "corrugated")
|
||||
translate([0, 0, (platform_length-rail_height)/2-groove_height])
|
||||
corrugated_wall(h=platform_length-rail_height, l=rail_height+5, thick=joiner_width, strut=rail_thick, wall=3);
|
||||
}
|
||||
|
||||
xflip_copy() {
|
||||
right((rail_spacing+joiner_width)/2) {
|
||||
// Lower Wall.
|
||||
grid_of(
|
||||
ya=[(platform_length-joiner_length+1)/2]
|
||||
) {
|
||||
if (wall_style == "crossbeams")
|
||||
translate([0, 0, (rail_height+rail_thick)/2])
|
||||
up((rail_height+rail_thick)/2)
|
||||
sparse_strut(l=platform_length-joiner_length+1, h=rail_height+rail_thick, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
translate([0, 0, (rail_height+rail_thick)/2])
|
||||
up((rail_height+rail_thick)/2)
|
||||
thinning_wall(l=platform_length-joiner_length+1, h=rail_height+rail_thick, thick=joiner_width, strut=rail_thick, bracing=true);
|
||||
if (wall_style == "corrugated")
|
||||
translate([0, 0, (rail_height)/2])
|
||||
up(rail_height/2)
|
||||
corrugated_wall(l=platform_length-joiner_length+1, h=rail_height, thick=joiner_width, strut=rail_thick, wall=3);
|
||||
}
|
||||
|
||||
// Rail tops.
|
||||
translate([0, rail_height, rail_height]) {
|
||||
translate([0, rail_height, rail_height-0.05]) {
|
||||
translate([0, (platform_length-rail_height)/2, groove_height/2])
|
||||
cube(size=[joiner_width, platform_length-rail_height, groove_height], center=true);
|
||||
translate([0, groove_height/2, (platform_length-rail_height)/2])
|
||||
cube(size=[joiner_width, groove_height, platform_length-rail_height], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -79,31 +66,33 @@ module yz_joiner()
|
||||
|
||||
// Shrinkage stress relief
|
||||
translate([0, platform_length/2, rail_thick/2]) {
|
||||
grid_of(count=[1, 7], spacing=[0, 12]) {
|
||||
yspread(12, n=7) {
|
||||
cube(size=[rail_width+1, 1, rail_thick-2], center=true);
|
||||
}
|
||||
grid_of(count=[9, 2], spacing=[12, platform_length-10]) {
|
||||
cube(size=[1, 20, rail_thick-2], center=true);
|
||||
xspread(12, n=9) {
|
||||
yspread(platform_length-10) {
|
||||
cube(size=[1, 20, rail_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear space for front joiners.
|
||||
translate([0, platform_length, rail_height/2]) {
|
||||
translate([0, platform_length+0.05, rail_height/2]) {
|
||||
joiner_pair_clear(spacing=rail_spacing+joiner_width, h=rail_height+0.001, w=joiner_width, clearance=5, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Clear space for back joiners.
|
||||
translate([0, -6, rail_height/2]) {
|
||||
translate([0, -6.05, rail_height/2]) {
|
||||
zrot(180) joiner_pair_clear(spacing=rail_spacing+joiner_width, h=rail_height+0.001, w=joiner_width, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Clear space for side joiners.
|
||||
translate([0, platform_length/2, rail_height/2]) {
|
||||
translate([0, platform_length/2+0.05, rail_height/2]) {
|
||||
zrot(90) joiner_quad_clear(xspacing=platform_length/2, yspacing=rail_width+2*6, h=rail_height+0.001, w=joiner_width, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Clear space for top joiners.
|
||||
translate([0, rail_height/2, platform_length]) {
|
||||
translate([0, rail_height/2, rail_height+groove_height+0.05]) {
|
||||
xrot(90) joiner_pair_clear(spacing=rail_spacing+joiner_width, h=rail_height, w=joiner_width+0.001, clearance=5, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
@@ -124,7 +113,7 @@ module yz_joiner()
|
||||
}
|
||||
|
||||
// Top joiners.
|
||||
translate([0, rail_height/2, platform_length]) {
|
||||
translate([0, rail_height/2, rail_height+groove_height]) {
|
||||
xrot(90) joiner_pair(spacing=rail_spacing+joiner_width, h=rail_height, w=joiner_width, l=joiner_length, a=joiner_angle);
|
||||
}
|
||||
|
||||
@@ -134,7 +123,7 @@ module yz_joiner()
|
||||
cube(size=[rail_width, 5, rail_height/2], center=true);
|
||||
|
||||
// Wiring access holes.
|
||||
grid_of(count=3, spacing=rail_width/3) {
|
||||
xspread(rail_width/3, n=3) {
|
||||
cube(size=[16, 11, 10], center=true);
|
||||
}
|
||||
}
|
||||
@@ -142,17 +131,17 @@ module yz_joiner()
|
||||
}
|
||||
}
|
||||
}
|
||||
//yz_joiner();
|
||||
//yz_bottom_joiner();
|
||||
|
||||
|
||||
|
||||
module yz_joiner_parts() { // make me
|
||||
translate([0, -platform_length/2, 0]) yz_joiner();
|
||||
module yz_bottom_joiner_parts() { // make me
|
||||
fwd(platform_length/2) yz_bottom_joiner();
|
||||
}
|
||||
|
||||
|
||||
|
||||
yz_joiner_parts();
|
||||
yz_bottom_joiner_parts();
|
||||
|
||||
|
||||
|
||||
129
yz_top_joiner_parts.scad
Normal file
129
yz_top_joiner_parts.scad
Normal file
@@ -0,0 +1,129 @@
|
||||
include <config.scad>
|
||||
use <GDMUtils.scad>
|
||||
use <joiners.scad>
|
||||
|
||||
|
||||
module yz_top_joiner()
|
||||
{
|
||||
joiner_length=10;
|
||||
base_height = rail_height+groove_height;
|
||||
endstop_delta = platform_length - base_height;
|
||||
motor_mount_spacing=43+joiner_width+10;
|
||||
|
||||
color("Turquoise")
|
||||
prerender(convexity=10)
|
||||
difference() {
|
||||
union() {
|
||||
difference() {
|
||||
union() {
|
||||
// Bottom.
|
||||
up(rail_thick/2) {
|
||||
back(platform_length/2) {
|
||||
yrot(90) sparse_strut(h=rail_width, l=platform_length, thick=rail_thick, maxang=45, strut=10, max_bridge=500);
|
||||
}
|
||||
}
|
||||
|
||||
// Back.
|
||||
up((rail_height+groove_height)/2) {
|
||||
back(rail_thick/2) {
|
||||
zrot(90) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=rail_height+groove_height, l=rail_width-joiner_width, thick=rail_thick, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=rail_height+groove_height, l=rail_width-joiner_width, thick=rail_thick, strut=rail_thick, bracing=true);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=rail_height+groove_height, l=rail_width-joiner_width, thick=rail_thick, strut=rail_thick, wall=3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Side Walls
|
||||
xflip_copy() {
|
||||
right((rail_spacing+joiner_width)/2) {
|
||||
// Lower Wall.
|
||||
grid_of(
|
||||
ya=[(platform_length-joiner_length+1)/2]
|
||||
) {
|
||||
if (wall_style == "crossbeams")
|
||||
up((rail_height+rail_thick)/2)
|
||||
sparse_strut(l=platform_length-joiner_length+1, h=rail_height+rail_thick, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
up((rail_height+rail_thick)/2)
|
||||
thinning_wall(l=platform_length-joiner_length+1, h=rail_height+rail_thick, thick=joiner_width, strut=rail_thick, bracing=true);
|
||||
if (wall_style == "corrugated")
|
||||
up(rail_height/2)
|
||||
corrugated_wall(l=platform_length-joiner_length+1, h=rail_height, thick=joiner_width, strut=rail_thick, wall=3);
|
||||
}
|
||||
|
||||
// Rail tops.
|
||||
translate([0, rail_height, rail_height-0.05]) {
|
||||
translate([0, (platform_length-rail_height)/2, groove_height/2])
|
||||
cube(size=[joiner_width, platform_length-rail_height, groove_height], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Shrinkage stress relief
|
||||
translate([0, platform_length/2, rail_thick/2]) {
|
||||
yspread(12, n=7) {
|
||||
cube(size=[rail_width+1, 1, rail_thick-2], center=true);
|
||||
}
|
||||
xspread(12, n=9) {
|
||||
yspread(platform_length-10) {
|
||||
cube(size=[1, 20, rail_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear space for front joiners.
|
||||
translate([0, platform_length+0.05, rail_height/2]) {
|
||||
joiner_pair_clear(spacing=rail_spacing+joiner_width, h=rail_height+0.001, w=joiner_width, clearance=5, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Clear space for top joiners.
|
||||
translate([0, rail_height/2, rail_height+groove_height+0.05]) {
|
||||
xrot(90) joiner_pair_clear(spacing=rail_spacing+joiner_width, h=rail_height, w=joiner_width+0.001, clearance=5, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
|
||||
// Front joiners.
|
||||
translate([0, platform_length, rail_height/2]) {
|
||||
joiner_pair(spacing=rail_spacing+joiner_width, h=rail_height, w=joiner_width, l=joiner_length, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Top joiners.
|
||||
translate([0, rail_height/2, rail_height+groove_height]) {
|
||||
xrot(90) joiner_pair(spacing=rail_spacing+joiner_width, h=rail_height, w=joiner_width, l=joiner_length, a=joiner_angle);
|
||||
}
|
||||
|
||||
translate([0, platform_length-joiner_length, rail_height/4]) {
|
||||
difference() {
|
||||
// Side supports.
|
||||
cube(size=[rail_width, 5, rail_height/2], center=true);
|
||||
|
||||
// Wiring access holes.
|
||||
xspread(rail_width/3, n=3) {
|
||||
cube(size=[16, 11, 10], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//yz_top_joiner();
|
||||
|
||||
|
||||
|
||||
module yz_top_joiner_parts() { // make me
|
||||
fwd(platform_length/2) yz_top_joiner();
|
||||
}
|
||||
|
||||
|
||||
|
||||
yz_top_joiner_parts();
|
||||
|
||||
|
||||
|
||||
// vim: noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap
|
||||
|
||||
@@ -4,87 +4,115 @@ use <joiners.scad>
|
||||
use <acme_screw.scad>
|
||||
|
||||
|
||||
$fa = 2;
|
||||
$fs = 2;
|
||||
|
||||
module z_sled()
|
||||
{
|
||||
color("MediumSlateBlue")
|
||||
prerender(convexity=10)
|
||||
zrot(-90)
|
||||
back(rail_offset+groove_height/2)
|
||||
union() {
|
||||
difference() {
|
||||
union() {
|
||||
// Bottom
|
||||
translate([0,0,platform_thick/2])
|
||||
yrot(90) sparse_strut(h=platform_width, l=platform_length, thick=platform_thick, maxang=45, strut=12, max_bridge=999);
|
||||
xrot(90) {
|
||||
back(platform_length/2) {
|
||||
// Bottom
|
||||
up(platform_thick/2)
|
||||
zrot(90) yrot(90)
|
||||
thinning_wall(l=rail_spacing+joiner_width, h=platform_length, thick=platform_thick, strut=8, bracing=true);
|
||||
|
||||
// Walls.
|
||||
zrot_copies([0, 180]) {
|
||||
translate([(platform_width-joiner_width)/2, 0, platform_height/2]) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=platform_height, l=platform_length-10, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=platform_height, l=platform_length-10, thick=joiner_width, strut=platform_thick, wall=3, bracing=false);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=platform_height, l=platform_length-10, thick=joiner_width, strut=platform_thick, wall=3);
|
||||
// Length-wise bracing.
|
||||
translate([0,0,platform_thick/2]) {
|
||||
cube(size=[lifter_rod_diam+2*3, platform_length, platform_thick], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Length-wise bracing.
|
||||
translate([0,0,platform_thick/2]) {
|
||||
cube(size=[lifter_rod_diam+2*3, platform_length, platform_thick], center=true);
|
||||
}
|
||||
back(25/2)
|
||||
yspread(floor((platform_length*7/8-25)/lifter_thread_size)*lifter_thread_size) {
|
||||
difference() {
|
||||
// Lifter block
|
||||
up(platform_thick) {
|
||||
up((lifter_rod_diam+2*4)/2) {
|
||||
cube(size=[lifter_rod_diam+2*3, platform_length/8, lifter_rod_diam+2*4], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Lifter blocks
|
||||
translate([0, 0, platform_thick]) {
|
||||
grid_of(count=[1,2], spacing=floor(platform_length*0.75/lifter_thread_size)*lifter_thread_size) {
|
||||
translate([0, 0, (lifter_rod_diam+2*4)/2]) {
|
||||
cube(size=[lifter_rod_diam+2*3, 15, lifter_rod_diam+2*4], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// sliders
|
||||
mirror_copy([1,0,0]) {
|
||||
translate([-(rail_spacing)/2, 0, 0]) {
|
||||
// bottom strut
|
||||
translate([6/2+printer_slop,0,platform_thick/2]) {
|
||||
cube(size=[6, platform_length, platform_thick], center=true);
|
||||
// Lifter threading
|
||||
up(rail_offset+groove_height/2) {
|
||||
union() {
|
||||
yspread(printer_slop) {
|
||||
xrot(90) zrot(90) {
|
||||
acme_threaded_rod(
|
||||
d=lifter_rod_diam+2*printer_slop,
|
||||
l=platform_length/8+0.5,
|
||||
threading=lifter_thread_size,
|
||||
thread_depth=1.5
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
grid_of(
|
||||
ya=[-platform_length*6/16, 0, platform_length*6/16],
|
||||
za=[rail_offset+groove_height/2]
|
||||
) {
|
||||
translate([-joiner_width/2, 0, 0]) {
|
||||
circle_of(n=2, r=joiner_width/2+printer_slop, rot=true) {
|
||||
// Slider base
|
||||
translate([15/2-9, 0, -groove_height-printer_slop]) {
|
||||
difference() {
|
||||
cube(size=[15, platform_length/8, groove_height-printer_slop*2], center=true);
|
||||
grid_of(
|
||||
ya=[-(platform_length/8/2), (platform_length/8/2)],
|
||||
za=[groove_height/2]
|
||||
) {
|
||||
xrot(45) cube(size=[16, 2*sqrt(2), 2*sqrt(2)], center=true);
|
||||
// lifter block ramp.
|
||||
fwd((lifter_rod_diam+2*4+platform_length/8)/2) {
|
||||
up((lifter_rod_diam+2*4)/2) {
|
||||
difference() {
|
||||
up(platform_thick) {
|
||||
cube(size=[lifter_rod_diam+2*3, lifter_rod_diam+2*4, lifter_rod_diam+2*4], center=true);
|
||||
}
|
||||
back((lifter_rod_diam+2*4)/2) {
|
||||
up(platform_thick+(lifter_rod_diam+2*4)/2) {
|
||||
xrot(45) {
|
||||
up((lifter_rod_diam+2*4)/2) {
|
||||
cube(size=[lifter_rod_diam+2*3+0.05, platform_length, lifter_rod_diam+2*4], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Slider backing
|
||||
translate([6/2, 0, -4/2]) {
|
||||
difference() {
|
||||
cube(size=[6, platform_length/8, groove_height+4], center=true);
|
||||
grid_of(
|
||||
ya=[-(platform_length/8/2), (platform_length/8/2)],
|
||||
za=[(groove_height+4)/2]
|
||||
) {
|
||||
xrot(45) cube(size=[11, 2*sqrt(2), 2*sqrt(2)], center=true);
|
||||
}
|
||||
down((lifter_rod_diam+2*4)/2) {
|
||||
up(rail_offset+groove_height/2) {
|
||||
xrot(90) cylinder(h=platform_length, d=lifter_rod_diam+2*printer_slop, center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Slider ridge
|
||||
scale([tan(groove_angle),1,1]) {
|
||||
yrot(45) {
|
||||
chamfcube(size=[groove_height/sqrt(2), platform_length/8, groove_height/sqrt(2)], chamfer=2, chamfaxes=[1,0,1], center=true);
|
||||
// sliders
|
||||
xflip_copy() {
|
||||
translate([-(rail_spacing)/2, 0, 0]) {
|
||||
// bottom strut
|
||||
translate([6/2+printer_slop,0,platform_thick/2]) {
|
||||
cube(size=[6, platform_length, platform_thick], center=true);
|
||||
}
|
||||
|
||||
up(rail_offset+groove_height/2) {
|
||||
left(joiner_width/2) {
|
||||
circle_of(n=2, r=joiner_width/2+printer_slop, rot=true) {
|
||||
// Slider base
|
||||
translate([15/2-9, 0, -groove_height-printer_slop]) {
|
||||
cube(size=[15, platform_length, groove_height-printer_slop*2], center=true);
|
||||
}
|
||||
|
||||
// Slider backing
|
||||
translate([6/2, 0, -4/2]) {
|
||||
difference() {
|
||||
cube(size=[6, platform_length, groove_height+4], center=true);
|
||||
up((groove_height+4)/2) {
|
||||
yspread(platform_length) {
|
||||
xrot(45) cube(size=[11, 2*sqrt(2), 2*sqrt(2)], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Slider ridge
|
||||
scale([tan(groove_angle),1,1]) {
|
||||
yrot(45) {
|
||||
chamfcube(size=[groove_height/sqrt(2), platform_length, groove_height/sqrt(2)], chamfer=2, chamfaxes=[1,0,1], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -93,57 +121,93 @@ module z_sled()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear space for joiners.
|
||||
translate([0,0,platform_height/2]) {
|
||||
joiner_quad_clear(xspacing=platform_width-joiner_width, yspacing=platform_length, h=platform_height, w=joiner_width, clearance=5, a=joiner_angle);
|
||||
}
|
||||
|
||||
// Shrinkage stress relief
|
||||
translate([0, 0, platform_thick/2]) {
|
||||
grid_of(count=[1, 9], spacing=[0,9]) {
|
||||
cube(size=[platform_width+1, 1, platform_thick-2], center=true);
|
||||
}
|
||||
grid_of(count=[9, 2], spacing=[14, platform_length-10]) {
|
||||
cube(size=[1, 20, platform_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// Lifter threading
|
||||
grid_of(count=[1,2], spacing=floor(platform_length*0.75/lifter_thread_size)*lifter_thread_size) {
|
||||
translate([0, 0, rail_offset+groove_height/2]) {
|
||||
union() {
|
||||
grid_of(ya=[-printer_slop/2,printer_slop/2]) {
|
||||
xrot(90) zrot(90) {
|
||||
acme_threaded_rod(
|
||||
d=lifter_rod_diam+2*printer_slop,
|
||||
l=16,
|
||||
threading=lifter_thread_size,
|
||||
thread_depth=1.5
|
||||
);
|
||||
}
|
||||
}
|
||||
teardrop(r=(lifter_rod_diam+2*printer_slop-3)/2, h=16, ang=30);
|
||||
translate([0, 0, (lifter_rod_diam+3)/2]) {
|
||||
cube(size=[4, 16, lifter_rod_diam], center=true);
|
||||
xflip_copy() {
|
||||
up(rail_height/2/2) {
|
||||
fwd(joiner_width/2) {
|
||||
right((platform_width-5)/2) {
|
||||
#zrot(-90) half_joiner2(h=rail_height/2+0.001, w=joiner_width, clearance=5, a=joiner_angle, slop=printer_slop);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Snap-tab joiners.
|
||||
translate([0,0,platform_height/2]) {
|
||||
joiner_quad(xspacing=platform_width-joiner_width, yspacing=platform_length, h=platform_height, w=joiner_width, l=5, a=joiner_angle);
|
||||
back(cantilever_length/2-(rail_offset+groove_height/2)) {
|
||||
difference() {
|
||||
union() {
|
||||
// Bottom.
|
||||
back(groove_height/2) {
|
||||
up(rail_thick/2) {
|
||||
yrot(90) {
|
||||
sparse_strut(h=rail_width, l=cantilever_length-groove_height, thick=rail_thick, maxang=45, strut=10, max_bridge=500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Walls.
|
||||
back(groove_height/2) {
|
||||
xflip_copy() {
|
||||
up(rail_height/2) {
|
||||
right((rail_spacing+joiner_width)/2) {
|
||||
if (wall_style == "crossbeams")
|
||||
sparse_strut(h=rail_height, l=cantilever_length-10-groove_height/2, thick=joiner_width, strut=5);
|
||||
if (wall_style == "thinwall")
|
||||
thinning_wall(h=rail_height, l=cantilever_length-10-groove_height/2, thick=joiner_width, strut=5, bracing=false);
|
||||
if (wall_style == "corrugated")
|
||||
corrugated_wall(h=rail_height, l=cantilever_length-10-groove_height/2, thick=joiner_width, strut=5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Side Supports
|
||||
up(rail_height/4) {
|
||||
back((cantilever_length-2*5-5)/2) {
|
||||
difference() {
|
||||
cube(size=[rail_width-joiner_width, 4, rail_height/2], center=true);
|
||||
xspread(rail_width/3, n=3) {
|
||||
cube(size=[16, 11, 12], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear space for joiners.
|
||||
up(rail_height/2) {
|
||||
back(cantilever_length/2) {
|
||||
joiner_pair_clear(spacing=rail_spacing+joiner_width, h=rail_height+0.001, w=joiner_width, clearance=5, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
|
||||
// Shrinkage stress relief
|
||||
up(rail_thick/2) {
|
||||
yspread(13, n=12) {
|
||||
cube(size=[rail_width+1, 1, rail_thick-2], center=true);
|
||||
}
|
||||
xspread(13, n=8) {
|
||||
yspread(cantilever_length-10) {
|
||||
cube(size=[1, 60, rail_thick-2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Snap-tab joiners.
|
||||
up(rail_height/2) {
|
||||
back(cantilever_length/2) {
|
||||
joiner_pair(spacing=rail_spacing+joiner_width, h=rail_height, w=joiner_width, l=5, a=joiner_angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//!z_sled();
|
||||
!z_sled();
|
||||
|
||||
|
||||
|
||||
module z_sled_parts() { // make me
|
||||
zrot(90) z_sled();
|
||||
z_sled();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user