sixteenmillimeter-tools/models/film_drying_rack/film_drying_rack.scad

145 lines
4.7 KiB
OpenSCAD
Raw Normal View History

time = 0;
IN = 25.4;
DOWEL_D = IN * (5 / 16); //IN / 4;
echo("DOWEL_D");
echo(DOWEL_D); //5/16" = 7.9375, real = 7.6 - 8.09
//1/4" = 6.35, real = 3.2 - 3.44
THREADED_D = 12.17;//IN / 2; //1/2" = 12.7, real = 12.17
echo("THREADED_D");
echo(THREADED_D);
SPOKES = 6;
ANGLE = 360 / SPOKES;
MAX_Y = 12 * IN;
LEN = 231 + 85;
OFFSET = 10;
WIDTH = 30;
DISTANCE = (LEN / 2) - OFFSET;
DOWEL_OFFSET = (LEN / 2) - OFFSET + (IN / 8);
DOWEL_DISTANCE = (DOWEL_OFFSET * sin(ANGLE / 2)) * 2;
FEET = 34 * 1000;
RACK_D = SPOKES * DOWEL_DISTANCE;
echo("DIAMETER");
echo(RACK_D);
RACK_LEN = (FEET / RACK_D) * 16;
echo(RACK_LEN);
echo(RACK_LEN / IN);
ROTATE = time / 2;
module rounded_cube (cube_arr = [1, 1, 1], d = 0, center = false) {
off_x = 0;
off_y = 0;
r = d/2;
union () {
cube([cube_arr[0] - d, cube_arr[1], cube_arr[2]], center = center);
cube([cube_arr[0], cube_arr[1] - d, cube_arr[2]], center = center);
translate ([1 * (cube_arr[0] / 2) - r , 1 * (cube_arr[1] / 2)- r, 0]) cylinder(r = r, h = cube_arr[2], center = center);
translate ([-1 * (cube_arr[0] / 2) + r, -1 * (cube_arr[1] / 2) + r, 0]) cylinder(r = r, h = cube_arr[2], center = center);
translate ([1 * (cube_arr[0] / 2) - r, -1 * (cube_arr[1] / 2) + r, 0]) cylinder(r = r, h = cube_arr[2], center = center);
translate ([-1 * (cube_arr[0] / 2) + r, 1 * (cube_arr[1] / 2)- r, 0]) cylinder(r = r, h = cube_arr[2], center = center);
}
}
module laser_bed () {
translate([0, 0, -.5]) cube([300, 500, 1], center = true);
}
module rack_side () {
for (i = [0 : SPOKES / 2]) {
rotate([0, 0, i * ANGLE]) {
difference () {
rounded_cube([LEN, WIDTH, IN / 4], d = IN / 4, center = true);
//center
cylinder(r = THREADED_D / 2, h = 10, center = true);
//ends
translate ([DISTANCE, 0, 0]) {
cylinder(r = DOWEL_D / 2, h = 10, center = true);
}
translate ([-DISTANCE, 0, 0]) {
cylinder(r = DOWEL_D / 2, h = 10, center = true);
}
}
}
}
}
module stand () {
difference () {
rounded_cube([(LEN / 2) + 40, 40, IN / 4], d = DOWEL_D, center = true);
translate ([-(LEN / 4), 0, 0]) cylinder(r = (THREADED_D + 4) / 2, h = 275, center = true);
}
difference () {
translate ([(LEN / 2) - 50, 0, 0]) rounded_cube([40, 150, IN / 4], d = DOWEL_D, center = true);
translate ([(LEN / 2) -50 + 10, 0, 0]) cube([20, IN / 4, 20], center = true);
}
}
module stand_base() {
difference () {
rounded_cube([40, 100, IN / 4], d = DOWEL_D, center = true);
translate ([-10, 0, 0]) cube([20, IN / 4, 20], center = true);
}
}
module stand_printed_bearing () {
$fn = 100;
difference () {
union () {
cylinder(r = (THREADED_D + 4) / 2, h = IN / 4, center = true);
translate([0, 0, -(IN / 8) - (3 / 2)]) cylinder(r = (THREADED_D + 12) / 2, h = 3, center = true);
}
cylinder(r = (THREADED_D + .5) / 2, h = 50, center = true);
}
}
module drying_rack () {
//threaded rod
translate([0, 4 * IN, 0]) rotate([90, 0, 0]) cylinder(r = THREADED_D / 2, h = 36 * IN, center = true);
//dowels]
rotate ([90, ROTATE, 0]) {
for (i = [0 : SPOKES / 2]) {
rotate([0, 0, i * ANGLE]) {
translate ([DISTANCE, 0, 0]) {
cylinder(r = DOWEL_D / 2, h = 24 * IN, center = true);
}
translate ([-DISTANCE, 0, 0]) {
cylinder(r = DOWEL_D / 2, h = 24 * IN, center = true);
}
}
}
}
translate([0, RACK_LEN / 2, 0]) rotate([90, ROTATE, 0]) rack_side();
translate([0, -RACK_LEN / 2, 0]) rotate([90, ROTATE, 0]) rack_side();
translate([0, (RACK_LEN / 2) + 20, 0]) rotate([90, 0, 0]) stand_printed_bearing();
translate([0,- (RACK_LEN / 2) - 20, 0]) rotate([90, 0, 180]) stand_printed_bearing();
translate([0, (RACK_LEN / 2) + 20, -(LEN / 4)]) rotate([90, 90, 0]) stand();
translate([0, (RACK_LEN / 2) + 20, -(LEN / 2) - 25]) rotate([90, 90, 90]) stand_base();
translate([0, -(RACK_LEN / 2) - 20, -(LEN / 4)]) rotate([90, 90, 0]) stand();
translate([0, -(RACK_LEN / 2) - 20, -(LEN / 2) - 25]) rotate([90, 90, 90]) stand_base();
}
module laser_plate () {
translate([0, -90, 0]) projection() rotate([0, 0, ANGLE / 2]) rack_side();
translate([15, 94, 0]) projection() rotate([0, 0, 0]) stand();
translate([-110, 94, 0]) projection() rotate([0, 0, 0]) stand_base();
//color("blue") laser_bed();
}
module printer_plate () {
stand_printed_bearing();
translate([30, 0, 0]) stand_printed_bearing();
}
//printer_plate();
//laser_plate();
rotate([0, 0, time]) drying_rack();