summaryrefslogtreecommitdiff
path: root/x-carriage.scad
Side-by-side diff
Diffstat (limited to 'x-carriage.scad') (more/less context) (show whitespace changes)
-rw-r--r--x-carriage.scad1
1 files changed, 1 insertions, 0 deletions
diff --git a/x-carriage.scad b/x-carriage.scad
index ac963d5..cffdd1e 100644
--- a/x-carriage.scad
+++ b/x-carriage.scad
@@ -1,107 +1,108 @@
slide_tolerance = .3;
play_tolerance=.4;
fit_tolerance = .2;
bearings_l = 25; // 15;
bearings_d = 15; // 12;
bearings_m = 2.5; // thickness of the bearing end holder
bearings_s = 4.5; // the minimum shell between bearings and carriage front
rods_apart = 45;
rod_d = 8;
mounting_holes_from_top = [ // the offsets of mounting holes on the back
[0, 20], [-4.5,10], [4.5,10]
];
mounting_holes_apart = mounting_holes_from_top[2][0]-mounting_holes_from_top[1][0];
belt_tooth=0.70;
belt_thickness=0.75;
belts_thickness = belt_thickness*2+belt_tooth+0.5;
belt_width = 6;
belts_apart = 12;
belt_pitch = 2;
tiehole_id = bearings_d+3;
tiehole_od = bearings_d+10;
tiehole_w = 4;
screw_d = 3;
screwhead_d = 5.5;
screwhead_h = 3;
module belt(pitch=belt_pitch,width=belt_width,thickness=belt_thickness,tooth=belt_tooth,l=100,tolerance=0) {
translate([-l/2,-width/2,-thickness])
intersection() {
union() {
cube(size=[l,width,thickness+tolerance]);
for(x=[0:pitch:l/2]) for(s=[-1,1])
translate([l/2+s*x,0,thickness])
rotate([-90,0,0])
cylinder(r=tooth+tolerance,h=width,$fn=6);
}
translate([0,-1,0])
cube(size=[l,width+2,thickness+tooth+1]);
}
}
module xcarriage() {
cw = bearings_l+2*bearings_m; // carriage width
% for(mz=[0,1]) mirror([0,0,mz]) translate([0,0,-belts_apart/2]) belt();
difference() {
translate([-cw/2,-belt_width/2,-rods_apart/2-bearings_d/2])
cube(size=[cw,bearings_d/2+bearings_s+belt_width/2,rods_apart+bearings_d]);
for(sz=[-1,1]) translate([0,0,sz*rods_apart/2]) {
rotate([0,90,0])
cylinder(d=bearings_d,bearings_l,center=true,$fn=60);
for(sx=[-1,1]) translate([sx*bearings_l/4,0,0])
rotate([0,90,0]) difference() {
cylinder(d=tiehole_od,h=tiehole_w,center=true,$fn=60);
cylinder(d=tiehole_id,h=tiehole_w+2,center=true,$fn=60);
}
rotate([0,90,0]) cylinder(d=bearings_d-bearings_m,h=cw+2,center=true,$fn=60);
+ translate([-cw/2-1,-belt_width,-(bearings_d-bearings_m)/2]) cube(size=[cw+2,belt_width,bearings_d-bearings_m]);
}
difference() {
gap=belts_apart/6;
translate([0,-.5,-gap/2])
cube(size=[cw+2,belt_width+2,belts_apart+2*belt_thickness+gap],center=true);
for(mx=[0,1]) mirror([mx,0,0]) {
ofc = mounting_holes_apart/2+screwhead_d/2+belt_thickness+belt_tooth+play_tolerance; // offset from center
r=1;
x0 = ofc+r; x1=cw/2-r;
z0 = r; z1 = belts_apart/2-belt_thickness;
difference() {
hull() for(x=[x0,x1]) for(z=[z0,z1])
translate([x,0,z])
rotate([90,0,0]) cylinder(r=r,h=belt_width+2,center=true,$fn=30);
translate([cw/2,0,belts_apart/2]) mirror([0,0,1]) belt(width=belt_width+2,l=cw/2+2,tolerance=fit_tolerance);
}
bgap = belt_thickness+belt_tooth+fit_tolerance;
r1 = (belts_apart/3-bgap)/2;
hull() for(x=[mounting_holes_apart/2,x1])
translate([x,0,-r1-bgap])
rotate([90,0,0]) cylinder(r=r1,h=belt_width+2,center=true,$fn=30);
/*
pd = 4.5; // post diameter
bhd = 5; // belt holder diameter
translate([cw/2-pd/2,0,belts_apart/2-belts_thickness-bhd/2]) cube(size=[pd,belt_width,bhd],center=true);
translate([(cw-pd)/2,0,0]) // TODO: z
rotate([-90,0,0]) translate([0,0,-1]) cylinder(d=pd,h=belt_width+2,center=true,$fn=30); */
}
} // difference
translate([0,0,30/*heatsink height*//2])
for(mhft = mounting_holes_from_top) translate([mhft[0],0,-mhft[1]]) {
rotate([90,0,0]) cylinder(d=screw_d+2*play_tolerance,h=bearings_d+2*bearings_s+2,center=true,$fn=30);
translate([0,belt_width/2+screwhead_h+play_tolerance,0])
rotate([90,0,0]) cylinder(d=screwhead_d+2*play_tolerance,h=screwhead_h+play_tolerance+1,$fn=30);
}
} // difference
}
print=false;
if(print) rotate([-90,0,0]) xcarriage();
else xcarriage();