rodD=8; toRod=rodD/2+18.8; //wood to rod center err=0.2; boltD=5.9+err; capD=11.3+err; capT=4.3+0.21; nutT=4.15; washerT=0.9; boltWall=4; bearingID=6; bearingOD=17; bearingW=6; bearingOffset=rodD/2-bearingW/2+0.8; x=boltD+2*boltWall; y=boltD+2*boltWall+rodD+bearingOD; z=toRod-rodD/2-bearingOffset-nutT-0.9; woodZ=24; //height of wood crossmember tabT=5; idler(); //hemisphere(); module idler(){ difference(){ union(){ translate([0,boltWall+boltD/2,0]) cube([x, y-2*boltWall-boltD, z]); translate([x/2, boltWall+boltD/2, 0 ]) cylinder(r=boltD/2+boltWall, h=z+bearingOffset); translate([x/2, y-boltWall-boltD/2, 0 ]) cylinder(r=boltD/2+boltWall, h=z+bearingOffset); translate([0,y/2,0]) hemisphere(); rotate(180,[0,0,1])translate([-x, -y/2, 0]) hemisphere(); } translate([x/2, boltWall+bearingID/2, capT+0.4 ]) cylinder(r=boltD/2, h=z+bearingOffset+0.1); translate([x/2, y-boltWall-bearingID/2, capT+0.4 ]) cylinder(r=boltD/2, h=z+bearingOffset+0.1); translate([x/2, boltWall+bearingID/2, -0.05 ]) cylinder(r=capD/2, h=capT, $fn=6); translate([x/2, y-boltWall-bearingID/2, -0.05 ]) cylinder(r=capD/2, h=capT, $fn=6); //translate([0, y/2, -0.1]) hemiCircle(); //rotate(180,[0,0,1])translate([-x, -y/2, -0.1]) hemiCircle(); } %translate([0,y/2,toRod]) rotate(90,[0,1,0]) cylinder(r=rodD/2, h=x, $fn=35); %translate([x/2, boltWall+bearingID/2, z+bearingOffset+washerT+nutT ]) cylinder(r=bearingOD/2, h=bearingW, $fn=35); %translate([x/2, boltWall+bearingID/2, z+bearingOffset ]) cylinder(r=bearingOD/4, h=2*washerT+nutT, $fn=35); %translate([x/2, y-boltWall-bearingID/2, z+bearingOffset+washerT ]) cylinder(r=bearingOD/2, h=bearingW, $fn=35); } module hemisphere(){ or=woodZ/2; bolt2D=5.2; cap2D=10.4; difference(){ sphere(r=or); translate([0.1, -or, -or]) cube([or*2, 2*or, or*2]); translate([-or, -or, -or]) cube([or*2, 2*or, or]); translate([0, 0, -0.1]) rotate(5, [0,0,1]) hemiCircle(bolt2D); translate([-(cap2D-bolt2D)/2, 0, 5]) rotate(5, [0,0,1]) hemiCircle(cap2D); } } module hemiCircle(w){ or=woodZ/2-3; ir=or-w; t=15; angle=10; difference(){ cylinder(r=or, h=tabT+0.2, $fn=30); cylinder(r=ir, h=tabT+0.2, $fn=30); translate([-or, -or, -0.1]) cube([or*2, or, t]); translate([0, 0, -0.1]) cube([or*2, 2*or, t]); translate([0, 0, -0.1]) rotate(90-angle, [0,0,1])cube([or*2, 2*or, t]); } translate([-or+w/2,0,0])cylinder(r=w/2, h=t, $fn=20); rotate(90-angle, [0,0,1])translate([0,or-w/2,0]) cylinder(r=w/2, h=t, $fn=20); }