Most of the frame up to the Y sleds is done
This commit is contained in:
82
assembly.scad
Normal file
82
assembly.scad
Normal file
@@ -0,0 +1,82 @@
|
||||
use_colors = true;
|
||||
|
||||
xsize = 500;
|
||||
ysize = 400;
|
||||
sled_size = 6 * 25.4;
|
||||
|
||||
cur_xpos = 100;
|
||||
cur_ypos = 200;
|
||||
|
||||
include <parts.scad>;
|
||||
|
||||
|
||||
csize = 15;
|
||||
|
||||
module frame() {
|
||||
translate([corner_offset, 0, 0])
|
||||
rotate([0, 90, 0])
|
||||
tslot(xsize - 2 * corner_offset);
|
||||
|
||||
translate([0, corner_offset, 0])
|
||||
rotate([-90, 0, 0])
|
||||
tslot(ysize - 2*corner_offset);
|
||||
|
||||
translate([corner_offset, ysize, 0])
|
||||
rotate([0, 90, 0])
|
||||
tslot(xsize - 2*corner_offset);
|
||||
|
||||
translate([xsize, corner_offset, 0])
|
||||
rotate([-90, 0, 0])
|
||||
tslot(ysize - 2*corner_offset);
|
||||
}
|
||||
module corners() {
|
||||
render() {
|
||||
translate([0,0]) flcorner();
|
||||
translate([xsize, 0, 0]) frcorner();
|
||||
translate([xsize, ysize, 0]) brcorner();
|
||||
translate([0, ysize, 0]) blcorner();
|
||||
}
|
||||
}
|
||||
|
||||
module rails() {
|
||||
frame_offset = frame_size / 2 + corner_size / 2;
|
||||
colorize(stock_color)
|
||||
{
|
||||
for (xpos = [frame_offset, xsize - frame_offset]) {
|
||||
translate([xpos,
|
||||
frame_size / 2 + wall_thickness])
|
||||
rotate([-90, 0, 0])
|
||||
cylinder(d = rail_diam, h = ysize - corner_offset * 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module ysled_rails() {
|
||||
frame_offset = frame_size + corner_size / 2;
|
||||
yoff = (sled_size + ysled_extralen * 2 - frame_size) / 2;
|
||||
colorize(stock_color)
|
||||
for (ypos = [-yoff, yoff])
|
||||
translate([frame_size / 2, ypos, 0])
|
||||
rotate([0, 90, 0])
|
||||
cylinder(d = rail_diam, h = xsize - frame_size * 2 - corner_size);
|
||||
}
|
||||
|
||||
|
||||
|
||||
union() {
|
||||
frame();
|
||||
rails();
|
||||
corners();
|
||||
}
|
||||
|
||||
translate([frame_size / 2 + corner_size / 2, cur_ypos, 0]) {
|
||||
ysled(associated_parts = true);
|
||||
translate([xsize - frame_size - corner_size, 0, 0])
|
||||
rotate([0, 180, 0])
|
||||
ysled(associated_parts = true);
|
||||
ysled_rails();
|
||||
}
|
||||
|
||||
//translate([0, 0, -1000]) cube(2000, center=true);
|
||||
|
||||
|
||||
139
parts.scad
Normal file
139
parts.scad
Normal file
@@ -0,0 +1,139 @@
|
||||
include <units.inc>;
|
||||
include <stock_parts.scad>;
|
||||
|
||||
frame_size = 20;
|
||||
wall_thickness = 2;
|
||||
corner_size=30;
|
||||
// The length along each edge that the corner bracket takes. I.e., if
|
||||
// you construct a frame of four corner brackets and 4 tubes of length
|
||||
// $L-$corner_size, the distance between opposite tubes' centerlines
|
||||
// will be $L.
|
||||
corner_offset = frame_size / 2 + wall_thickness;
|
||||
rail_diam = 8;
|
||||
|
||||
ysled_extralen = frame_size; // on each end
|
||||
|
||||
|
||||
|
||||
// Generates bar of length $l, centered on origin extending in +Z
|
||||
module tslot(l) {
|
||||
colorize(stock_color) {
|
||||
translate([-frame_size/2, -frame_size/2, 0])
|
||||
cube([frame_size, frame_size, l]);
|
||||
}
|
||||
}
|
||||
|
||||
// A corner, with tubes extending in +x and +y.
|
||||
module corner_base() {
|
||||
odim = frame_size/2 + wall_thickness;
|
||||
ldim = frame_size/2 + corner_size;
|
||||
cap_points = [[-odim, -odim],
|
||||
[-odim, ldim],
|
||||
[ odim, ldim],
|
||||
[ ldim, odim],
|
||||
[ ldim, -odim]];
|
||||
difference() {
|
||||
translate([0, 0, -odim])
|
||||
linear_extrude(odim * 2)
|
||||
polygon(points = cap_points);
|
||||
|
||||
// two bars...
|
||||
translate([-frame_size/2, corner_offset, -frame_size/2])
|
||||
cube([frame_size, ldim, frame_size]);
|
||||
translate([corner_offset, -frame_size/2, -frame_size/2])
|
||||
cube([ldim, frame_size, frame_size]);
|
||||
translate([corner_offset, corner_offset, -frame_size/2])
|
||||
cube([ldim, ldim, frame_size]);
|
||||
//translate([-odim - 1, -odim - 1, 0])
|
||||
//cube(ldim*2);
|
||||
}
|
||||
}
|
||||
|
||||
module rail_holder(in_x) {
|
||||
odim = frame_size/2 + wall_thickness;
|
||||
ldim = frame_size/2 + corner_size;
|
||||
tube_offset = (corner_size) / 2 + wall_thickness;
|
||||
tube_rotation = in_x ? 90 : 0;
|
||||
translate([frame_size/2, frame_size/2, -frame_size/2]) {
|
||||
difference() {
|
||||
linear_extrude(frame_size)
|
||||
polygon(points = [[wall_thickness, wall_thickness],
|
||||
[wall_thickness, corner_size],
|
||||
[corner_size, wall_thickness]]);
|
||||
translate([corner_size / 2, corner_size/2, frame_size/2])
|
||||
rotate([tube_rotation -90, tube_rotation, 0])
|
||||
translate([0, 0, -corner_size])
|
||||
cylinder(d = rail_diam, corner_size * 2);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// centered on
|
||||
module ysled(spread = 6*inch, associated_parts = false) {
|
||||
sled_len = spread + ysled_extralen * 2;
|
||||
sled_height = frame_size;
|
||||
|
||||
colorize("green")
|
||||
render()
|
||||
translate([0, -sled_len/2, 0])
|
||||
rotate([-90, 0, 0]) {
|
||||
difference() {
|
||||
union() {
|
||||
translate([-frame_size/2, -frame_size/2, 0])
|
||||
cube([frame_size + 5, frame_size, sled_len]);
|
||||
}
|
||||
|
||||
cylinder(d = bushing_id * 1.1, h = sled_len);
|
||||
|
||||
translate([0,0,-1])
|
||||
cylinder(d = bushing_od, h = bushing_len+1);
|
||||
translate([0,0,sled_len - bushing_len])
|
||||
cylinder(d = bushing_od, h = bushing_len+1);
|
||||
|
||||
for (zpos = [frame_size / 2, sled_len - frame_size / 2]) {
|
||||
translate([sled_height/2, 0, zpos])
|
||||
rotate([0,90,0]) {
|
||||
cylinder(h = sled_height + 1, d = rail_diam);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: add posts for the idlers
|
||||
|
||||
translate([0, -sled_len/2, 0])
|
||||
rotate([-90, 0, 0])
|
||||
if (associated_parts) {
|
||||
bushing();
|
||||
translate([0,0,sled_len - bushing_len]) bushing();
|
||||
}
|
||||
}
|
||||
|
||||
module flcorner() {
|
||||
translate([0, 0, 0])
|
||||
rotate([0, 0, 0]) {
|
||||
corner_base();
|
||||
rail_holder(false);
|
||||
}
|
||||
}
|
||||
|
||||
module frcorner() {
|
||||
rotate([0, 0, 90]) {
|
||||
corner_base();
|
||||
rail_holder(true);
|
||||
}
|
||||
}
|
||||
|
||||
module blcorner() {
|
||||
rotate([0, 0, 270]) {
|
||||
corner_base();
|
||||
rail_holder(true);
|
||||
}
|
||||
}
|
||||
|
||||
module brcorner() {
|
||||
rotate([0, 0, 180]) {
|
||||
corner_base();
|
||||
rail_holder(false);
|
||||
}
|
||||
}
|
||||
23
stock_parts.scad
Normal file
23
stock_parts.scad
Normal file
@@ -0,0 +1,23 @@
|
||||
stock_color = "lightgray";
|
||||
|
||||
bushing_od = 12;
|
||||
bushing_id = 8;
|
||||
bushing_len = 8;
|
||||
|
||||
module bushing() {
|
||||
colorize(stock_color) {
|
||||
difference() {
|
||||
cylinder(d = bushing_od, h = bushing_len);
|
||||
translate([0,0,-1])
|
||||
cylinder(d = bushing_id, h = bushing_len + 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module colorize(colorname) {
|
||||
if (use_colors) {
|
||||
color(colorname) union() { children(); }
|
||||
} else {
|
||||
children();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user