Most of the frame up to the Y sleds is done

This commit is contained in:
2022-02-22 22:08:01 +01:00
commit 860d81bf85
4 changed files with 246 additions and 0 deletions

139
parts.scad Normal file
View 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);
}
}