summaryrefslogtreecommitdiff
path: root/xy_table.scad
blob: 1bb5a5cd65e2099d89589d351f5a999a1be45cb9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
use <rail.scad>;
use <truck.scad>;
use <support_block.scad>;

include <MCAD/materials.scad>

inch = 25.4;

plate_width=200;
plate_length=300;
plate_thickness=1/4*inch;
rail_width=34; //get this from rail.scad ... sigh.
rail_center_height=20.46; //this too
truck_length=36;  //sigh. is introspection too much to ask?
block_thickness=16; //got this value from support_block.scad
bearing_thickness=10; //made up
nut_thickness=5; //made up

//trucks can overlap with small inter-rail distance; 
//truck minimum spacing should allow third truck between 
y_carriage_width = max(plate_length/2, truck_length*3+2);
x_carriage_width = max(plate_width/2, truck_length*3+2);

module slide(length, carriage_length, trucks=2){union(){
    rail(length);
    if (trucks == 2) { union(){
        translate([0, rail_center_height, truck_length/2]) truck();
        translate([0, rail_center_height, carriage_length-truck_length/2]) truck();}}
    else if (trucks ==1) { translate([0, rail_center_height, carriage_length/2]) truck();}
}
}

module leadscrew_assembly(){
    %color(Aluminum) support_block();
    x=56.4; //cube size, not accurate
    shaft_length=25;
    coupler_length=15;
    threaded_length = plate_width - shaft_length - x - block_thickness - bearing_thickness - 10;
    translate([x/2,0,plate_width]) rotate([0,180,0]) union(){
        color(Stainless) cube(x,x,x);//stepper motor
        translate([x/2, x/2, x]) union(){
            color(Steel) cylinder(r=2.5, h=shaft_length); //stepper shaft
            translate([0,0,shaft_length-coupler_length/2]) color(Aluminum) cylinder(r=12/2, h=coupler_length); //helical coupler, fake numbers
            translate([0,0,shaft_length]) union(){//leadscrew
                translate([0,0,10]) color(Stainless) cylinder(r=(3/8)*inch/2, h=threaded_length);//threaded portion
                color(Steel) cylinder(r=5/2, h=10); //machined leadscrew end (stepper end)
                translate([0,0,threaded_length+10]) color(Steel) cylinder(r=5/2, h=2*bearing_thickness+block_thickness+nut_thickness); //machined leadscrew end (bearing end)
                translate([0,0,threaded_length+10]) cylinder(r=10,h=bearing_thickness);//thrust bearing
                %translate([0,0,threaded_length+10+block_thickness+bearing_thickness]) cylinder(r=10,h=bearing_thickness);//thrust bearing

            }

        }

    
    }
    translate([-x/2,0,plate_width-x]) rotate(a=[0,90,0]) 
        color(Aluminum) render() difference(){
            linear_extrude(height=x){ //motor bracket
                union(){
                    square([10,x]);
                    square([x,10]);    
                }
            }
            rotate(a=[0,90,0]) translate([-x/2, x/2, -5]) cylinder(r=10, h=20); //hole in bracket for motor shaft
    }

}

module xy_table() union(){
    cube([plate_width, plate_length, plate_thickness]);   
    union(){//x axis
        translate([0,plate_length/2,0]) rotate(a=[90,180,90]) leadscrew_assembly();
        translate([0, rail_width/2, 0]) rotate(a=[90,180,90]) slide(plate_width, x_carriage_width, trucks=1);
        translate([0, plate_length-rail_width/2, 0]) rotate(a=[90,180,90]) slide(plate_width, x_carriage_width);
    }
    union(){//y axis
        translate([rail_width/2, plate_length, plate_thickness]) rotate(a=[90,0,0]) slide(plate_length, y_carriage_width, trucks=1);
        translate([plate_width-rail_width/2, plate_length, plate_thickness]) rotate(a=[90,0,0]) slide(plate_length, y_carriage_width);
    }


translate([0,0,0]) for (i = [0:1]){
}


}xy_table();