CEB Press v17.08/SCAD Files/: Difference between revisions
(→Spacer) |
|||
| (55 intermediate revisions by the same user not shown) | |||
| Line 14: | Line 14: | ||
brickW=6; | brickW=6; | ||
brickL=12; | brickL=12; | ||
brickCH=6; | brickCH=6; //Is brick height being shortened by d1z?? | ||
grateX=56; | |||
grateY=23; | |||
grateH=37; //Height mounted above press's frame | |||
grateA=17.5; //angle of grate | |||
//3.625 x 2.25 x 8 | |||
//6 x 12 x 6 | |||
$fn=8; //defines resolution of circles. 8 is okay for review. 100 or greater should be used for for final dxf export. | $fn=8; //defines resolution of circles. 8 is okay for review. 100 or greater should be used for for final dxf export. | ||
| Line 21: | Line 29: | ||
fZstandard=0.5; | fZstandard=0.5; | ||
aZstandard=0.5; //thickness of steel to be cut for arm parts | aZstandard=0.5; //thickness of steel to be cut for arm parts | ||
hZstandard=0.125; | |||
fBOLTHOLEstandardD=1; //standard bolts used on frame | fBOLTHOLEstandardD=1; //standard bolts used on frame | ||
aBOLTHOLEstandardD=1; | |||
sliderodholeOD=1.2; | sliderodholeOD=1.2; | ||
| Line 57: | Line 67: | ||
d11z=dZstandard; | d11z=dZstandard; | ||
d12z=dZstandard; | |||
//frame | //frame | ||
f1y=6; | f1y=6; | ||
f1z= | f1z=fZstandard; | ||
| Line 67: | Line 79: | ||
f2z=fZstandard; | f2z=fZstandard; | ||
f3y=3.5; | f3y=3.5; | ||
f3z=fZstandard; | f3z=fZstandard; | ||
| Line 85: | Line 96: | ||
f9y=4.5; | f9y=4.5; | ||
f9z=fZstandard; | f9z=fZstandard; | ||
f12z=fZstandard; | |||
f11x=1.25; | f11x=1.25; | ||
| Line 101: | Line 115: | ||
a1x=4; | a1x=4; | ||
a1z=aZstandard; | a1z=aZstandard; | ||
a1out=24; //length from frame to A5 edge for bricks to sit on as they exit | |||
a2x=6; | a2x=6; | ||
a2z=aZstandard; | a2z=aZstandard; | ||
a3x=4; | |||
a3y=72; | |||
a3z=aZstandard; | |||
a4x=6; | |||
a4y=72; | |||
a4z=aZstandard; | a4z=aZstandard; | ||
a5x=6; | |||
a5y=72; | |||
a5z=aZstandard; | |||
a6z=aZstandard; | a6z=aZstandard; | ||
//guards | |||
h1x=grateX; | |||
h1y=grateH; //might need to tweak for grate thickness | |||
h1z=hZstandard; | |||
h2z=hZstandard; | |||
h3z=hZstandard; | |||
h4z=hZstandard; | |||
h5z=hZstandard; | |||
h6z=hZstandard; | |||
h7z=hZstandard; | |||
h8z=hZstandard; | |||
// | // | ||
//Input your main cylinder's dimenions here | //Input your main cylinder's dimenions here | ||
// | // | ||
cylMainBore = 5; | |||
cylMainStroke = 16; | |||
cylMainExt = 43; | |||
cylMainRet = 27; | |||
cylMainA = (cylMainRet-cylMainStroke); //center to center minus stroke length | |||
cylMainB = 0.25; // cylinder wall thickness | |||
cylMainD = 2.5; //Rod OD | |||
cylMainE = 5.75; //rear pin holder width | |||
cylMainG = 4; //rod pin holder width | |||
cylMainJ = 3.8; //distance from the end of the cylinder body to rod pin center | |||
cylMainR = 1.52; //pin hole ID | |||
cylMainS = 2.5; //pin holder OD | |||
// | // | ||
//Input your drawer cylinder's dimenions here | //Input your drawer cylinder's dimenions here | ||
// | // | ||
// | |||
cylDrawerBore = 5; | |||
cylDrawerStroke = 16; | |||
cylDrawerExt = 43; | |||
cylDrawerRet = 27; | |||
cylDrawerA = (cylMainRet-cylMainStroke); //center to center minus stroke length | |||
cylDrawerB = 0.25; // cylinder wall thickness | |||
cylDrawerD = 2.5; //Rod OD | |||
cylDrawerE = 5.75; //rear pin holder width | |||
cylDrawerG = 4; //rod pin holder width | |||
cylDrawerJ = 3.8; //distance from the end of the cylinder body to rod pin center | |||
cylDrawerR = 1.52; //pin hole ID | |||
cylDrawerS = 2.5; //pin holder OD | |||
cylinderDRAWERbodyH=3; //measured when in position, largest length from top to bottom of cylinder | cylinderDRAWERbodyH=3; //measured when in position, largest length from top to bottom of cylinder | ||
cylinderDRAWERminC2C=0; //drawer's hydraulic cylinder's distance from the center of one mounting hole to the center of the other when fully compressed. | cylinderDRAWERminC2C=0; //drawer's hydraulic cylinder's distance from the center of one mounting hole to the center of the other when fully compressed. | ||
| Line 132: | Line 194: | ||
//the following variables are calculated in order of dependence on preceding variables | //the following variables are calculated in order of dependence on preceding variables | ||
d3x=brickL+(d2z*2); | d3x=brickL+(d2z*2); | ||
d3y=brickCH-d1z; | d3y=brickCH-d1z; | ||
| Line 149: | Line 212: | ||
d11y=max((0.5+d1bushingL),4); | d11y=max((0.5+d1bushingL),4); | ||
d12x=d8x; | |||
d12y=d11y+1; | |||
f1x=((brickL+(d2z*2)+drawerHgap+(f9y*2))); | |||
f3x=f1x; | |||
d1x=(brickL+d2z+d2z); | |||
//d1x=(((f1x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2))*2; | |||
d1y=((brickW+d3z+d3z)*3)+1; | |||
d2x=d8y+d6z+brickW+d3z+d5y+d3z; | d2x=d8y+d6z+brickW+d3z+d5y+d3z; | ||
d2y=brickCH; | d2y=brickCH; | ||
| Line 159: | Line 229: | ||
f11y=f8y; | f11y=f8y; | ||
f6x=brickL+(d2z*2)+(f9y*2)+drawerHgap; | f6x=brickL+(d2z*2)+(f9y*2)+drawerHgap; | ||
f9x=(f2z+((cylMainS+0.125)/2)+cylMainRet-cylMainJ+1+f4y+drawergap+d2y+f1y); //leaves 1" between top of cylinder and bottom of F4 | |||
f8x=f9x; | |||
| Line 170: | Line 242: | ||
f14x=brickL+(1*2)+(.125*2)+(dGap*2); | f14x=brickL+(1*2)+(.125*2)+(dGap*2); | ||
f12x=f3x; | |||
f12y=(f3y*2)+brickW; | |||
</nowiki> | sliderodoffset=(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)); | ||
distancetof8center=(cylDrawerExt+(a4x/2)+((d9x-d6z)/2)+d6z+(brickW/2)); //F8 center on A1 | |||
a1y=distancetof8center+(brickW/2)+a1out; | |||
a2y=a1y; | |||
h7x=f5x-((a1x/2)*2)+(1.5*2); | |||
h7y=cylDrawerStroke; | |||
h8x=f5x-((a1x/2)*2)+(1.5*2); | |||
h8y=a1out-a5x-f5y; //distance between a5 and f5 | |||
hopperBaseX=brickL; | |||
hopperBaseY=brickW; | |||
h2x=grateX; | |||
h2y=sqrt(((h1y-(sin(grateA)*grateY))*(h1y-(sin(grateA)*grateY)))+(((cos(grateA)*grateY)-hopperBaseY)*((cos(grateA)*grateY)-hopperBaseY))); | |||
//h1y-(sin(grateA)*grateY) | |||
//(cos(grateA)*grateY)-hopperBaseY | |||
echo(h1y-(sin(grateA)*grateY)); | |||
echo((cos(grateA)*grateY)-hopperBaseY); | |||
echo(h2y); | |||
echo(atan((h1y-(sin(grateA)*grateY))/((cos(grateA)*grateY)-hopperBaseY))); | |||
echo((h1y-(sin(grateA)*grateY))/(h1y)); | |||
// ECHO - REQUIRED PARTS BASED ON INPUTS | |||
echo(str("Minimum drawer cylinder stroke length: ",(d3z*2)+d5y+brickW)); | |||
//would be cool to validate and confirm user inputed stroke length. set error=1; if drawer cylinder is not long enough. print an echo warning. | |||
echo(str("Grate hieght above ground level: ",(1))); | |||
</nowiki> | |||
=Common Modules= | =Common Modules= | ||
| Line 354: | Line 464: | ||
use <f8p.scad>; | use <f8p.scad>; | ||
use <f9p.scad>; | use <f9p.scad>; | ||
//use <f10p.scad>; | //use <f10p.scad>; //part retired? | ||
use <f11p.scad>; | use <f11p.scad>; | ||
use <f12p.scad>; | |||
//use <f13p.scad>; | //use <f13p.scad>; | ||
use <f14p.scad>; | use <f14p.scad>; | ||
| Line 387: | Line 497: | ||
rotate([0,180,180]) | rotate([0,180,180]) | ||
f3p(); //connected to F1 | f3p(); //connected to F1 | ||
translate([0,-f12y/2,f9x]) | |||
f12p(); | |||
translate([0,(f8y/2)+f6z,(f9x-f1y-brickCH-drawergap-f4y)]) | translate([0,(f8y/2)+f6z,(f9x-f1y-brickCH-drawergap-f4y)]) | ||
| Line 716: | Line 829: | ||
==F6== | ==F6== | ||
Welds to: F2, F7, DOM Tube | |||
Welds to: F2, F7 | |||
Bolts to: F9 | Bolts to: F9 | ||
| Line 725: | Line 836: | ||
**need to change translate to accomidate for drawerHgap | **need to change translate to accomidate for drawerHgap | ||
*need to use insert module for f2 holes | *need to use insert module for f2 holes | ||
* | *cylinder mounting hole diameter is same as cylinders pin holder + 1/16 | ||
**DOM inserted into hole then welded in place, using cylinder as guide | |||
**DOM tube welds to F6 and F2 | |||
<nowiki> | <nowiki> | ||
| Line 750: | Line 863: | ||
//need to change this section to match MAINcylinder specs | //need to change this section to match MAINcylinder specs | ||
translate([ | translate([f6x/2,f6y-f2z-((cylMainS+0.125)/2),0]) | ||
cylinder(h = f6z, r = (cylMainS+0.125)/2); | |||
cylinder(h = f6z, r = | |||
// bolt holes to f9 | // bolt holes to f9 | ||
| Line 764: | Line 875: | ||
} //end f6p module | } //end f6p module | ||
</nowiki> | </nowiki> | ||
==F7== | |||
==F8== | ==F8== | ||
| Line 897: | Line 1,010: | ||
Welds to: F8? | Welds to: F8? | ||
*is this part being retired? | |||
<nowiki> | <nowiki> | ||
| Line 942: | Line 1,057: | ||
Bolts to Hopper Seat | Bolts to Hopper Seat | ||
<nowiki> | <nowiki> | ||
| Line 951: | Line 1,062: | ||
use <modus.scad>; | use <modus.scad>; | ||
f12p(); | |||
module f12p(){ | |||
module f13p(){ | difference(){ | ||
translate([-(f12x/2),0,0]) | |||
difference(){ | cube([f12x,f12y,f12z]); | ||
cube([f6y,f9y,f13z]); | translate([-(f12x/2),0,0]) | ||
cuts(); | |||
translate([(f12x/2),0,0]) | |||
mirror([1,0,0]) | |||
cuts(); | |||
} //end difference | |||
module cuts(){ | |||
translate([5.375,(f3y/2),0]) //??5.375 should this be something else | |||
cylinder(h = f12z, r = 0.5); | |||
translate([5.375,(f12y/2)+(brickW/2)+(f3y/2),0]) | |||
cylinder(h = f12z, r = 0.5); | |||
translate([f12x/2,f12y/2,f12z/2]) | |||
cube(size=[brickL+(d2z*2)+fZstandard,brickW+fZstandard,f12z], center=true); | |||
} //end cuts module | |||
} //end f12p module | |||
</nowiki> | |||
==F13== | |||
Spacer betwwen F6 and F9 used to accomidate MAINcylinder with larger diameter than brickW | |||
<nowiki> | |||
include <vars.scad>; | |||
use <modus.scad>; | |||
f13p(); | |||
module f13p(){ | |||
difference(){ | |||
cube([f6y,f9y,f13z]); | |||
translate([2,f9y-2.5,0]) //?x interfaces with f6? | translate([2,f9y-2.5,0]) //?x interfaces with f6? | ||
//replacing translate y=1.9 with y=f9y-2.5 | //replacing translate y=1.9 with y=f9y-2.5 | ||
| Line 991: | Line 1,135: | ||
=Arms= | =Arms= | ||
== | ==Arm Assembly== | ||
*need to add inserts for drawer cylinder mount | |||
<nowiki> | |||
include <vars.scad>; | |||
use <modus.scad>; | |||
use<a1p.scad>; | |||
use<a2p.scad>; | |||
use<a3p.scad>; | |||
use<a4p.scad>; | |||
use<a5p.scad>; | |||
use<d7p.scad>; | |||
Ap(); | |||
module Ap(){ | |||
translate([-(f5x/2)+(a1x/2),0,0]){ | |||
translate([(a1x/2)-a1x,0,0]) | |||
a1p(); | |||
translate([2 | |||
translate([(a1x/2)-a2z,0,a2x]) | |||
rotate([0,90,0]) | |||
a2p(); | |||
} //end translate | |||
translate([(f5x/2)-(a1x/2),0,0]){ | |||
mirror([1,0,0]){ | |||
translate([(a1x/2)-a1x,0,0]) | |||
a1p(); | |||
translate([(a1x/2)-a2z,0,a2x]) | |||
rotate([0,90,0]) | |||
a2p(); | |||
} //end | } //end mirror | ||
} //end translate | |||
translate([a3y/2,a3z,-a3x]) | |||
rotate([0,270,90]) | |||
a3p(); | |||
translate([a4y/2,a4x,0]) | |||
rotate([180,0,270]) | |||
a4p(); | |||
translate([cylDrawerE/2,-(d7x/2)+(a4x/2),-a4z]) | |||
rotate([90,0,90]) | |||
d7p(); | |||
mirror([1,0,0]){ | |||
translate([cylDrawerE/2,-(d7x/2)+(a4x/2),-a4z]) | |||
rotate([90,0,90]) | |||
d7p(); | |||
} | |||
translate([a3y/2,a2y,-a3x]) | |||
rotate([0,270,90]) | |||
a3p(); | |||
translate([a5y/2,a2y-a5x,-a5z]) | |||
rotate([0,0,90]) | |||
a5p(); | |||
} | |||
</nowiki> | |||
==A1== | |||
Welds to: A2, A6 | |||
Bolts to: A4, A5, F1, H7, H8 | |||
Abuts: F9 | |||
*need to tweak so that fully extended drawer cylinder places drawer with opening beneath hopper opening | |||
**use cylinder spec of minimum length/maximum length when extended | |||
<nowiki> | <nowiki> | ||
include <vars.scad>; | |||
use <modus.scad>; | |||
a1p(); | |||
module a1p(){ | |||
difference(){ | difference(){ | ||
cube([ | cube([a1x,a1y,a1z]); | ||
translate([ | translate([(0.625/2),1,0]) | ||
tabinsert(0.625,a6z+(dGap*2),a1z,0.0625,0.125,0,0,0.25,0.25,0.25,0.25,0,0,1); | |||
translate([(0.625/2),distancetof8center,0]) // center in middle F8 | |||
translate([ | tabinsert(0.625,a6z+(dGap*2),a1z,0.0625,0.125,0,0,0.25,0.25,0.25,0.25,0,0,1); | ||
translate([(0.625/2),a1y-1,0]) | |||
translate([ | tabinsert(0.625,a6z+(dGap*2),a1z,0.0625,0.125,0,0,0.25,0.25,0.25,0.25,0,0,1); | ||
translate([a1x/2,(a4x/2)-1,0]) | |||
cylinder(h = a1z, r = 0.4); // could create a variable for this bolt size | |||
translate([a1x/2,(a4x/2)+1,0]) | |||
cylinder(h = a1z, r = 0.4); | |||
//H7 | |||
translate([a1x/2,distancetof8center-(brickW/2)-f5y-(1.75),0]) | |||
cylinder(h = a1z, r = 0.4); | |||
//H7 | |||
translate([a1x/2,distancetof8center-(brickW/2)-f5y-(h7y-1.75),0]) | |||
cylinder(h = a1z, r = 0.4); | |||
//F5 | |||
translate([a1x/2,distancetof8center-(brickW/2)-(f5y-1.5),0]) | |||
cylinder(h = a1z, r = 0.4); | |||
== | //F5 | ||
translate([a1x/2,distancetof8center+(brickW/2)+(f5y-1.5),0]) | |||
cylinder(h = a1z, r = 0.4); | |||
//H8 | |||
translate([a1x/2,distancetof8center+(brickW/2)+f5y+(2),0]) | |||
cylinder(h = a1z, r = 0.4); | |||
//H8 | |||
translate([a1x/2,distancetof8center+(brickW/2)+f5y+(5),0]) | |||
cylinder(h = a1z, r = 0.4); | |||
//H8 | |||
translate([a1x/2,distancetof8center+(brickW/2)+f5y+(h8y-2),0]) | |||
cylinder(h = a1z, r = 0.4); | |||
//A5 | |||
translate([a1x/2,a1y-(a5x/2),0]) | |||
cylinder(h = a1z, r = 0.4); | |||
//corner joints | |||
//corner joints | cjtablength=((a1y-(0.125*5.5))/12); | ||
cjinsertlength=cjtablength+0.125; | |||
for(i=[0:5]) | for(i=[0:5]) | ||
translate([0,(i* | translate([a1x+0.00001,(i*(cjtablength+cjinsertlength))+(cjinsertlength/2)-(0.125/2),0]) | ||
rotate([0,0, | rotate([0,0,90]) | ||
cornerjoint( | cornerjoint(a1z,cjinsertlength,a2z,0.125,0.5,0.125,0,1); | ||
Welds to: | } //end difference | ||
} //end a1p module | |||
</nowiki> | |||
==A2== | |||
Welds to: A1, A6 | |||
Bolts to: | Bolts to: Guards, Hopper mounts | ||
Abuts: F1 (?), F9 | |||
<nowiki> | <nowiki> | ||
include <vars.scad>; | |||
use <modus.scad>; | |||
a2p(); | |||
module a2p(){ | |||
difference(){ | difference(){ | ||
cube([ | cube([a2x,a2y,a2z]); | ||
translate([(0.625/2),1,0]) | |||
tabinsert(0.625,a6z+(dGap*2),a2z,0.0625,0.125,0,0,0.25,0.25,0.25,0.25,0,0,1); | |||
translate([(0.625/2),distancetof8center,0]) // center in middle F8 | |||
tabinsert(0.625,a6z+(dGap*2),a2z,0.0625,0.125,0,0,0.25,0.25,0.25,0.25,0,0,1); | |||
translate([(0.625/2),a2y-1,0]) | |||
translate([ | tabinsert(0.625,a6z+(dGap*2),a2z,0.0625,0.125,0,0,0.25,0.25,0.25,0.25,0,0,1); | ||
//corner joints | |||
cjtablength=((a2y-(0.125*5.5))/12); | |||
cjinsertlength=cjtablength+0.125; | |||
for(i=[0:5]) | |||
translate([a2x+0.00001,(i*(cjtablength+cjinsertlength))+(cjinsertlength/2)-(0.125/2)+(cjtablength+(0.125/2)),0]) | |||
rotate([0,0,90]) | |||
cornerjoint(a2z,cjinsertlength,a1z,0.125,0.5,0.125,0,1); | |||
for(i=[0:5]) | |||
translate([0,(i* | |||
rotate([0,0, | |||
cornerjoint( | |||
difference | |||
} //end difference | |||
} //end a2p module | |||
} //end | |||
</nowiki> | </nowiki> | ||
== | ==A3== | ||
Welds to: A4, A5 | |||
<nowiki> | |||
include <vars.scad>; | |||
use <modus.scad>; | |||
a3p(); | |||
module a3p(){ | |||
difference(){ | difference(){ | ||
cube([ | cube([a3x,a3y,a3z]); | ||
//corner joints | //corner joints | ||
cjtablength=((a3y-(0.125*5.5))/12); | |||
cjinsertlength=cjtablength+0.125; | |||
for(i=[0:5]) | for(i=[0:5]) | ||
translate([ | translate([a3x+0.00001,(i*(cjtablength+cjinsertlength))+(cjinsertlength/2)-(0.125/2)+(cjtablength+(0.125/2)),0]) | ||
rotate([0,0,90]) | rotate([0,0,90]) | ||
cornerjoint( | cornerjoint(a3z,cjinsertlength,a4z,0.125,0.5,0.125,0,1); | ||
} //end difference | |||
difference | |||
} //end a3p module | |||
} //end | |||
</nowiki> | </nowiki> | ||
== | ==A4== | ||
Welds to: A3 | |||
Bolts to: A1 | |||
*add insert holes for drawer part D7 | |||
**location will be determined by cylinder specifications. | |||
**length of A1 and holes to attach to A4 will need to be go along with this. | |||
<nowiki> | <nowiki> | ||
| Line 1,281: | Line 1,376: | ||
use <modus.scad>; | use <modus.scad>; | ||
a4p(); | |||
module a4p(){ | |||
difference(){ | |||
cube([a4x,a4y,a4z]); | |||
//corner joints | |||
cjtablength=((a4y-(0.125*5.5))/12); | |||
cjinsertlength=cjtablength+0.125; | |||
for(i=[0:5]) | |||
translate([a4x+0.00001,(i*(cjtablength+cjinsertlength))+(cjinsertlength/2)-(0.125/2),0]) | |||
rotate([0,0,90]) | |||
cornerjoint(a4z,cjinsertlength,a3z,0.125,0.5,0.125,0,1); | |||
} //end difference | |||
} //end a4p module | |||
</nowiki> | |||
} //end | |||
==A5== | |||
Welds to: A3 | |||
Bolts to: A1 | |||
<nowiki> | |||
include <vars.scad>; | |||
use <modus.scad>; | |||
a5p(); | |||
module a5p(){ | |||
difference(){ | |||
cube([a5x,a5y,a5z]); | |||
//corner joints | |||
cjtablength=((a5y-(0.125*5.5))/12); | |||
cjinsertlength=cjtablength+0.125; | |||
for(i=[0:5]) | |||
translate([a5x+0.00001,(i*(cjtablength+cjinsertlength))+(cjinsertlength/2)-(0.125/2),0]) | |||
rotate([0,0,90]) | |||
cornerjoint(a5z,cjinsertlength,a3z,0.125,0.5,0.125,0,1); | |||
} //end difference | |||
} //end a5p module | |||
</nowiki> | |||
==A6== | |||
: | Welds to: A1, A2 | ||
<nowiki> | <nowiki> | ||
| Line 1,349: | Line 1,444: | ||
use <modus.scad>; | use <modus.scad>; | ||
a6p(); | |||
module a6p(){ | |||
X=a2x; | |||
Y=a1x; | |||
Zx=a2z; | |||
Zy=a1z; | |||
W=min(((1)/cos((atan((Y-1)/(X-1))))),((1)/sin((atan((Y-1)/(X-1)))))); | |||
//trying to make some overhang for insert to butt up against. not perfect but working | |||
//trying for 0.5, but not getting there exactly | |||
difference(){ | |||
union(){ | |||
translate([-1/tan(atan((Y-1)/(X-1))),0,0]) | |||
translate([- | rotate([0,0,atan((Y-1)/(X-1))]) | ||
translate([0,-W,0]) | |||
#cube([50,W,a6z]); | |||
translate([0, | cube([0.625,Zx,a6z]); | ||
translate([X-Zy,Y-0.625,0]) | |||
cube([Zy,0.625,a6z]); | |||
} //end union - start difference | |||
translate([0.625,0,0]) | |||
cube([100,Zx,a6z]); | |||
translate([ | translate([-100,-99,0]) | ||
cube([100,100,a6z]); | |||
translate([0, | translate([0,-100,0]) | ||
cube([100,100,a6z]); | |||
translate([ | translate([0,Y,0]) | ||
cube([100,100,a6z]); | |||
translate([ | translate([X,0,0]) | ||
cube([100,100,a6z]); | |||
translate([ | translate([X-Zy,Y-0.625-100,0]) | ||
cube([Zy,100,a6z]); | |||
} //end difference | |||
} //end a6p module | |||
</nowiki> | |||
=Drawer= | |||
==Drawer Assembly== | |||
*origin located at center of bottom of compression chamber | |||
*X-axis oriented along movement of drawer | |||
[[Image:CEB-scad-drawer.png|400px]] | |||
:::Dp.scad | |||
<nowiki> | |||
include <vars.scad>; | |||
use <modus.scad>; | |||
use<d1p.scad>; | |||
use<d2p.scad>; | |||
use<d3p.scad>; | |||
use<d4p.scad>; | |||
use<d5p.scad>; | |||
use<d6p.scad>; | |||
use<d8p.scad>; | |||
use<d9p.scad>; | |||
use<d12p.scad>; | |||
use<dRodBushingHolder2top.scad>; | |||
use<dRodBushingHolder2bottom.scad>; | |||
Dp(); | |||
module Dp(){ | |||
//main translate | |||
translate([-d8y-d6z-(brickW/2),-d2z-(brickL/2),0]){ | |||
translate([0,d2z,0]) | |||
rotate([90,0,0]) | |||
d2p(); | |||
translate([0,d2z+d2z+brickL,0]) | |||
rotate([90,0,0]) | |||
d2p(); | |||
translate([0,d8x/2,0]) | |||
rotate([0,0,270]) | |||
d8p(); | |||
translate([ | |||
translate([d8y-f2y+d6z,d12x/2,d2y-d12z]) | |||
rotate([0,0,90]) | |||
d12p(); | |||
translate([d8y-f2y+d6z-d12y,((d1x/2)+(d11x/2))-((((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2))),d3y+d1z]) | |||
rotate([0,0,270]) | |||
dRodBushingHolderbottom(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD,d1nut2AF,d1nut2H); | |||
translate([d8y-f2y+d6z-d12y+d11y,(d1x/2)-(d11x/2)+((((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2))),d3y+d1z]) | |||
rotate([0,0,90]) | |||
dRodBushingHolderbottom(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD,d1nut2AF,d1nut2H); | |||
translate([d8y+d6z,d6x/2,0]) | |||
rotate([90,0,270]) | |||
d6p(); | |||
translate([d8y+d6z+brickW,d3x/2,d3y]) | |||
rotate([270,0,270]) | |||
d3p(); | |||
translate([d8y+d6z+brickW+d3z,d5x/2,0]) | |||
rotate([0,0,270]) | |||
d5p(); | |||
translate([d8y+d6z+brickW+d3z+(d5y/2),((d5x/2)+(d5z/2))-(brickL/4),0]) | |||
rotate([90,0,0]) | |||
d4p(); | |||
translate([d8y+d6z+brickW+d3z+(d5y/2),(d5x/2)+(d5z/2),0]) | |||
rotate([90,0,0]) | |||
d4p(); | |||
translate([d8y+d6z+brickW+d3z+(d5y/2),((d5x/2)+(d5z/2))+(brickL/4),0]) | |||
rotate([90,0,0]) | |||
d4p(); | |||
translate([d8y+d6z+brickW+d5y+d3z,d3x/2,d3y]) | |||
rotate([270,0,270]) | |||
d3p(); | |||
translate([d8y+d6z,(((d6x-cylinderDRAWERrodclevisW)/2)-(d9z)),0]) | |||
rotate([90,0,180]) | |||
d9p(); | |||
translate([d8y+d6z,(cylinderDRAWERrodclevisW+d9z)+((((d6x-cylinderDRAWERrodclevisW)/2)-(d9z))),0]) | |||
rotate([90,0,180]) | |||
d9p(); | |||
translate([(d8y+d6z+brickW),(brickL/2)+d2z,d3y]) | |||
rotate([0,0,270]) | |||
d1p(); | |||
translate([(d8y+d6z+brickW)+d1y-d11y,((d1x/2)+(d11x/2))-((((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2))),d3y+d1z]) | |||
rotate([0,0,270]) | |||
dRodBushingHolderbottom(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD,d1nut2AF,d1nut2H); | |||
translate([(d8y+d6z+brickW)+d1y,(d1x/2)-(d11x/2)+((((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2))),d3y+d1z]) | |||
rotate([0,0,90]) | |||
dRodBushingHolderbottom(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD,d1nut2AF,d1nut2H); | |||
//translate([0,0,0]) | |||
//dRodBushingHoldertop(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD); | |||
// | |||
//add drawer cylinger rod half and rod clevis | |||
// | |||
} //end | } //end main translate | ||
} //end Dp module | |||
</nowiki> | </nowiki> | ||
== | ==D1== | ||
*need to | *does D1 need to be longer to prevent bushing holder from hitting D3? | ||
*can the holes for the bushing holders be tapped? do they need to have bolts? | |||
**any room below? bricks sliding here. | |||
*can nuts welded above holes? | |||
:::d1p.scad | |||
<nowiki> | <nowiki> | ||
include <vars.scad>; | include <vars.scad>; | ||
use <modus.scad>; | use <modus.scad>; | ||
d1p(); | |||
module d1p(){ | |||
module | |||
difference(){ | difference(){ | ||
translate([-( | translate([-(d1x/2),0,0]) | ||
cube([ | cube([d1x,d1y,d1z]); | ||
translate([-( | translate([-(d1x/2),0,0]) | ||
cuts(); | cuts(); | ||
translate([( | translate([(d1x/2),0,0]) | ||
mirror([1,0,0]) | mirror([1,0,0]) | ||
cuts(); | cuts(); | ||
} //end difference | } //end difference | ||
module cuts(){ | |||
translate([(d1x-brickL-d2z-d2z)/2,1.5,0]) //1.5 could be better defined | |||
translate([ | cube([d2z+dGap,d3z+brickW-1.5,d1z]); //June freecad model has larger cut out | ||
translate([( | //d11 bolt 1a - will these holes need to be tapped? | ||
translate([((d1x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2)-((d1bolt1OD/2)+0.5),d1y-(d1bolt1OD/2)-0.5,0]) | |||
cylinder(h = f1z, r = d1bolt1OD/2); | |||
// | //d11 bolt 1b - will these holes need to be tapped? | ||
translate([((d1x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2)-((d1bolt1OD/2)+0.5),d1y-d11y+((d1bolt1OD/2)+0.5),0]) | |||
translate([ | cylinder(h = f1z, r = d1bolt1OD/2); | ||
} //end | //mid section excess cut | ||
translate([((d1x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2),d1y-brickW,0]) | |||
cube([d1x-((((d1x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2))*2),brickW,d1z]); | |||
} //end module | |||
} //end d1p module | |||
</nowiki> | </nowiki> | ||
== | ==D2== | ||
*need to switch to "tabinsert" module | |||
Welds to: D1, D3 (2), D5, D6, D8 | |||
<nowiki> | <nowiki> | ||
| Line 1,611: | Line 1,676: | ||
use <modus.scad>; | use <modus.scad>; | ||
echo(d8y+d6z+brickW+d3z+d5y+d3z); //total length of part | |||
d2p(); | |||
module d2p(){ | |||
difference(){ | difference(){ | ||
cube([d2x,d2y,d2z]); | |||
cube([ | |||
//cuts numbered clockwise from top left | |||
translate([0, | //1 - D12 | ||
translate([0,d2y-d12z,0]) | |||
translate([-0.125,0,0 | tabinsert(d8y-f2y+d6z,d12z,d2z,dGap,0.125,0,0,0,0,0.25,0.25,0,0,0); | ||
//2 - D6 | |||
translate([d8y,d2y-0.5,0]) | |||
tabinsert(d6z,0.5,d2z,dGap,0.125,0,0,0,0,0.25,0.25,0.25,0.25,0); | |||
//3 - D3, D1 | |||
translate([d8y+d6z+brickW,d2y-d1z-0.75,0]) | |||
tabinsert(d3z,d1z+0.75,d2z,dGap,0.125,0,0,0,0,0.375,0.25,0.25,0.375,0); | |||
translate([d8y+d6z+brickW+d3z,d2y-d1z,0]) | |||
tabinsert(1.5-d3z,d1z,d2z,dGap,0.125,0,0,0,0,0.25,0.625,0,0,0); | |||
//4 - D3, D1 | |||
translate([d2x-d3z,d2y-0.75-d1z,0]) //put in far corner | |||
tabinsert(d3z,d1z+0.75,d2z,dGap,0.125,0,0,0,0,0,0,0.25,0.5,0); | |||
//5 - D3, D5 | |||
translate([d8y+d6z+brickW+d3z+(d5y-0.5),0,0]) | |||
tabinsert(0.5,d5z,d2z,dGap,0.125,0.25,0.25,0,0,0,0,0,0,0); | |||
translate([d8y+d6z+brickW+d3z+d5y,0,0]) | |||
tabinsert(d3z,0.75,d2z,dGap,0.125,0.25,0.25,0,0,0,0,0,0,0); | |||
//6 - D3, D5 | |||
translate([d8y+d6z+brickW,0,0]) | |||
tabinsert(d3z,0.75,d2z,dGap,0.125,0.5,0.25,0.25,0.25,0,0,0,0,0); | |||
translate([d8y+d6z+brickW+d3z,0,0]) | |||
tabinsert(0.5,d5z,d2z,dGap,0.125,0,0,0.25,0.375,0,0,0,0,0); | |||
//7 - D6, D8 | |||
translate([d8y-0.75,0,0]) | |||
tabinsert(0.75,d8z,d2z,dGap,0.125,0.25,0.25,0,0,0,0,0,0,0); | |||
translate([d8y,0,0]) | |||
translate([ | tabinsert(d6z,1,d2z,dGap,0.125,0.25,0.25,0.25,0.625,0,0,0,0,0); | ||
//8 - D8 | |||
translate([( | tabinsert(0.75,d8z,d2z,dGap,0.125,0,0,0.25,0.25,0,0,0,0,0); | ||
//clovis pin access hole | |||
translate([min((d8y-(d2clevispinaccessholeOD/2)),(d8y-((d9x-d6z)/2))),max((d8z+0.25+(d2clevispinaccessholeOD/2)),(((d9y-d8z)/2)+d8z)),0]) | |||
cylinder(h = d2z, r = d2clevispinaccessholeOD/2); | |||
} //end difference | } //end difference | ||
module | } //end d2p module | ||
</nowiki> | |||
==D3== | |||
== | |||
<nowiki> | <nowiki> | ||
| Line 1,687: | Line 1,751: | ||
use <modus.scad>; | use <modus.scad>; | ||
//this part is rendered upside down from placement | |||
d3p(); | |||
module | module d3p(){ | ||
difference(){ | difference(){ | ||
translate([-( | translate([-(d3x/2),0,0]) | ||
cube([ | cube([d3x,d3y,d3z]); | ||
translate([-( | translate([-(d3x/2),0,0]) | ||
cuts(); | cuts(); | ||
translate([( | translate([(d3x/2),0,0]) | ||
mirror([1,0,0]) | mirror([1,0,0]) | ||
cuts(); | cuts(); | ||
| Line 1,702: | Line 1,768: | ||
module cuts(){ | module cuts(){ | ||
translate([0, | translate([0,d3y/2,0]) | ||
cornerjoint( | cornerjoint(d3z,d3y-(0.75*2),d2z,0.125,0.25,0.125,270,1); | ||
//outer columns tab inserts | |||
translate([( | translate([(brickL/4)+d2z,d3y-d5z-(0.75/2),0]) | ||
tabinsert( | tabinsert(d4z,0.75,d3z,dGap,0.09375,0.375,0.25,0.25,0.375,0.375,0.25,0.25,0.375,1); | ||
translate([(brickL/4)+d2z,0,0]) | |||
tabinsert(d4z,(0.75*2),d3z,dGap,0.09375,0.625,0.25,0.25,0.625,0,0,0,0,1); | |||
//center column tab inserts | |||
translate([d3x/2,d3y-d5z-(0.75/2),0]) | |||
tabinsert(d4z,0.75,d3z,dGap,0.09375,0.375,0.25,0.25,0.375,0.375,0.25,0.25,0.375,1); | |||
translate([d3x/2,0,0]) | |||
tabinsert(d4z,(0.75*2),d3z,dGap,0.09375,0.625,0.25,0.25,0.625,0,0,0,0,1); | |||
} //end cuts module | |||
} //end d3p module | |||
</nowiki> | |||
==D4== | |||
<nowiki> | <nowiki> | ||
| Line 1,725: | Line 1,798: | ||
use <modus.scad>; | use <modus.scad>; | ||
d4p(); | |||
module d4p(){ | |||
module | |||
difference(){ | difference(){ | ||
cube([ | translate([-(d4x/2),0,0]) | ||
cube([d4x,d4y,d4z]); | |||
translate([-(d4x/2),0,0]) | |||
cuts(); | |||
translate([(d4x/2),0,0]) | |||
mirror([1,0,0]) | |||
cuts(); | |||
} //end difference | } //end difference | ||
module cuts(){ | |||
translate([0,d5z+0.75,0]) | |||
cornerjoint(d4z,(d4y-(0.75*2)-d5z),d3z,0.125,((d4y-(0.75*2)-d5z))-(0.125*2),0.125,270,0); | |||
translate([-0.125,0,0]) | |||
cornerjoint(d4z,((d4x-0.5)/2)+(0.125),d5z,0.125,((d4x-0.5)/2)-0.125,0.125,0,0); | |||
} //end cut module | |||
} //end | } //end d4p module | ||
</nowiki> | </nowiki> | ||
== | ==D5== | ||
::d5p.scad | |||
<nowiki> | <nowiki> | ||
| Line 1,754: | Line 1,831: | ||
use <modus.scad>; | use <modus.scad>; | ||
d5p(); | |||
module | module d5p(){ | ||
difference(){ | difference(){ | ||
translate([-( | translate([-(d5x/2),0,0]) | ||
cube([ | cube([d5x,d5y,d5z]); | ||
translate([-( | translate([-(d5x/2),0,0]) | ||
cuts(); | cuts(); | ||
translate([( | translate([(d5x/2),0,0]) | ||
mirror([1,0,0]) | mirror([1,0,0]) | ||
cuts(); | cuts(); | ||
} //end difference | } //end difference | ||
module cuts(){ | module cuts(){ | ||
translate([0, | translate([0,d5y/2,0]) | ||
cornerjoint( | cornerjoint(d5z,d5y-(0.5*2),d2z,0.125,0.25,0.125,270,1); | ||
translate([1, | translate([1,0,0]) | ||
cube([(d5x-(1*3))/2,0.125,d5z]); | |||
translate([1,d5y-0.125,0]) | |||
cube([(d5x-(1*3))/2,0.125,d5z]); | |||
translate([( | //outer inserts | ||
tabinsert( | translate([(brickL/4)+d2z,d5y/2,0]) | ||
tabinsert(0.5,0.5,d5z,0.03125,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1); | |||
} //end module | |||
//center insert | |||
translate([d5x/2,d5y/2,0]) | |||
tabinsert(0.5,0.5,d5z,0.03125,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1); | |||
} //end cuts module | |||
} //end | } //end d5p module | ||
</nowiki> | </nowiki> | ||
== | ==D6== | ||
*when brick height is smaller that d9y, could cut out center of D6 to allow for clevis to be lower | |||
<nowiki> | |||
<nowiki> | |||
include <vars.scad>; | include <vars.scad>; | ||
use <modus.scad>; | use <modus.scad>; | ||
d6p(); | |||
module | module d6p(){ | ||
difference(){ | difference(){ | ||
cube([ | translate([-(d6x/2),0,0]) | ||
cube([d6x,d6y,d6z]); | |||
translate([-(d6x/2),0,0]) | |||
cuts(); | |||
translate([(d6x/2),0,0]) | |||
mirror([1,0,0]) | |||
cuts(); | |||
} //end difference | |||
module cuts(){ | |||
translate([0,1,0]) | |||
cornerjoint(d6z,d6y-1-0.5,d2z,0.125,0.25,0.125,270,0); | |||
translate([(((d6x-cylinderDRAWERrodclevisW)/2)-(d9z/2)),((d9y-d8z)/2)+d8z,0]) | |||
translate([ | tabinsert(d9z,0.5,d5z,0.03125,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1); | ||
} //end cuts module | |||
} //end d6p module | |||
</nowiki> | |||
==D7== | |||
*Should this part be re-categorized as an Arm part? | |||
*Welds to A4 | |||
**tweaking to add inserts to aid weld | |||
:::d7p.scad | |||
<nowiki> | <nowiki> | ||
include <vars.scad>; | |||
use <modus.scad>; | |||
//need to add holes to A4 for cornerjoint | |||
d7p(); | |||
module d7p(){ | |||
difference(){ | difference(){ | ||
cube([ | cube([d7x,d7y,d7z]); | ||
translate([ | |||
//joint | |||
translate([d7x/2,0,0]) | |||
cornerjoint(d7z,(d7x-1),a4z,0.125,0.25,0.125,0,1); | |||
//pin hole | |||
translate([d7x/2,a4z+d8z+(cylinderDRAWERbodyH/2),0]) | |||
cylinder(h = d7z,r = (cylinderDRAWERrearclevisID/2)); | |||
} //end difference | } //end difference | ||
} //end d7p module | |||
</nowiki> | </nowiki> | ||
== | ==D8== | ||
*insert holes' position is wrong | |||
<nowiki> | <nowiki> | ||
| Line 1,852: | Line 1,942: | ||
use <modus.scad>; | use <modus.scad>; | ||
d8p(); | |||
module d8p(){ | |||
module | |||
difference(){ | |||
translate([-(d8x/2),0,0]) | |||
cube([d8x,d8y,d8z]); | |||
translate([-(d8x/2),0,0]) | |||
cuts(); | |||
translate([(d8x/2),0,0]) | |||
mirror([1,0,0]) | |||
cuts(); | |||
} //end difference | } //end difference | ||
module cuts(){ | |||
translate([0,d8y/2,0]) | |||
cornerjoint(d8z,d8y-(0.75*2),d2z,0.125,0.25,0.125,270,1); | |||
} //end | translate([1,d8y-0.125,0]) | ||
cube([(d8x-(1*3))/2,0.125,d8z]); | |||
translate([(((d6x-cylinderDRAWERrodclevisW)/2)-(d9z/2)),d8y-((d9x-d6z)/2),0]) | |||
tabinsert(d9z,0.5,d5z,0.03125,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1); | |||
} //end module | |||
} //end d8p module | |||
</nowiki> | </nowiki> | ||
== | ==D9== | ||
Welds to: D6, D8 | |||
*need to make | *when d2y is smaller than d9y, need limit d9y | ||
**in turn, need to make sure pin hole is lower than top edge of D9 | |||
*uses drawer cylinder height to determine clevis pin location | |||
<nowiki> | <nowiki> | ||
| Line 1,891: | Line 1,983: | ||
use <modus.scad>; | use <modus.scad>; | ||
d9p(); | |||
module d9p(){ | |||
module | |||
difference(){ | difference(){ | ||
cube([ | cube([d9x,d9y,d9z]); | ||
// | //x | ||
translate([-0.125,0,0]) | |||
cornerjoint(d9z,0.125+(d6z+((d9x-d6z-0.5)/2)),d8z,0.125,(d6z+((d9x-d6z-0.5)/2))-0.125,0.125,0,0); | |||
translate([0.5+(d6z+((d9x-d6z-0.5)/2)),0,0]) | |||
cornerjoint(d9z,((d9x-d6z-0.5)/2)+0.125,d8z,0.125,((d9x-d6z-0.5)/2)-0.125,0.125,0,0); | |||
// | //y | ||
translate([0,-0.125,0]) | |||
cornerjoint(d9z,0.125+(d8z+((d9y-d8z-0.5)/2)),d6z,0.125,(d8z+((d9y-d8z-0.5)/2))-0.125,0.125,270,0); | |||
translate([0,0.5+(d8z+((d9y-d8z-0.5)/2)),0]) | |||
cornerjoint(d9z,((d9y-d8z-0.5)/2)+0.125,d6z,0.125,((d9y-d8z-0.5)/2)-0.125,0.125,270,0); | |||
//pin hole | |||
translate([(0.5/2)+(d6z+((d9x-d6z-0.5)/2)),(0.5/2)+(d8z+((d9y-d8z-0.5)/2)),0]) | |||
cylinder(h = d9z,r = (cylinderDRAWERrodclevisID/2)); | |||
} | |||
} //end d9p module | |||
</nowiki> | </nowiki> | ||
=== | ==D10== | ||
<nowiki> | <nowiki> | ||
d10x=18; | |||
d10y=3; | |||
d10z=dZstandard; | |||
$fn=20; | |||
// | difference(){ | ||
cube([d10x,d10y,d10z]); | |||
translate([1,d10y/2,0]) | |||
cylinder(h = d10z,r = 0.55); | |||
translate([4,d10y/2,0]) | |||
cylinder(h = d10z,r = 0.55); | |||
translate([9,d10y/2,0]) | |||
cylinder(h = d10z,r = 0.55); | |||
translate([14,d10y/2,0]) | |||
cylinder(h = d10z,r = 0.55); | |||
translate([17,d10y/2,0]) | |||
cylinder(h = d10z,r = 0.55); | |||
} //end difference | |||
</nowiki> | |||
==D11== | |||
Plate to clamp down bushing holder | |||
<nowiki> | |||
include <vars.scad>; | |||
use <modus.scad>; | |||
//to be mounted on top of bushing holder. clamps holder down with screws | |||
d11p(); | |||
module d11p(){ | |||
difference(){ | difference(){ | ||
cube([ | cube([d11x,d11y,d11z]); | ||
//bolt 1a | //bolt 1a | ||
translate([( | translate([(d1bolt1OD/2)+0.5,d11y-(d1bolt1OD/2)-0.5,0]) | ||
cylinder(h= | cylinder(h=d11z, r=d1bolt1OD/2); | ||
//bolt 1b | //bolt 1b | ||
translate([( | translate([(d1bolt1OD/2)+0.5,(d1bolt1OD/2)+0.5,0]) | ||
cylinder(h= | cylinder(h=d11z, r=d1bolt1OD/2); | ||
//bolt 2a | //bolt 2a | ||
translate([ | translate([d11x-((d1bolt1OD/2)+0.5),d11y-(d1bolt1OD/2)-0.5,0]) | ||
cylinder(h=d11z, r=d1bolt2OD/2); | |||
cylinder(h= | |||
//bolt 2b | //bolt 2b | ||
translate([ | translate([d11x-((d1bolt1OD/2)+0.5),(d1bolt1OD/2)+0.5,0]) | ||
cylinder(h=d11z, r=d1bolt2OD/2); | |||
cylinder(h= | |||
} //end difference | } //end difference | ||
} //end module | } //end d11p module | ||
</nowiki> | </nowiki> | ||
= | ==D12== | ||
Welds to D2 | |||
Holds bushing holders | |||
<nowiki> | <nowiki> | ||
include <vars.scad>; | |||
use <modus.scad>; | |||
d12p(); | |||
module d12p(){ | |||
difference(){ | difference(){ | ||
cube([ | translate([-(d12x/2),0,0]) | ||
cube([d12x,d12y,d12z]); | |||
translate([-(d12x/2),0,0]) | |||
cuts(); | |||
translate([(d12x/2),0,0]) | |||
mirror([1,0,0]) | |||
cuts(); | |||
} //end difference | } //end difference | ||
module cuts(){ | |||
//d11 bolt 1a - will these holes need to be tapped? | |||
translate([((d12x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2)-((d1bolt1OD/2)+0.5),d12y-(d1bolt1OD/2)-0.5,0]) | |||
cylinder(h = f1z, r = d1bolt1OD/2); | |||
//d11 bolt 1b - will these holes need to be tapped? | |||
translate([((d12x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2)-((d1bolt1OD/2)+0.5),d12y-d11y+((d1bolt1OD/2)+0.5),0]) | |||
cylinder(h = f1z, r = d1bolt1OD/2); | |||
} //end module | |||
} //end d1p module | |||
</nowiki> | </nowiki> | ||
== | =RodBushingHolder= | ||
*should two bushings be mounted inside each holder like D3D? | |||
===Upper Half=== | |||
[[Image:CebBushingholder.png|400px]] | |||
<nowiki> | <nowiki> | ||
include <vars.scad>; | |||
use <modus.scad>; | |||
//this 3D printed part will be mounted to the drawer and hold a brass bushing | |||
dRodBushingHoldertop(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD); | |||
module dRodBushingHoldertop(bushingOD,bushingL,shaftOD,bolt1OD,bolt2OD){ | |||
$fn=200; | |||
X=1.5+(bolt1OD*2)+bushingOD; | |||
Y=max((0.5+bushingL),4); | |||
Z=0.25+(bushingOD/2); | |||
difference(){ | |||
cube([X,Y,Z]); | |||
//bolt 1a | |||
translate([(bolt1OD/2)+0.5,Y-(bolt1OD/2)-0.5,0]) | |||
cylinder(h=Z, r=bolt1OD/2); | |||
//bolt 1b | |||
translate([(bolt1OD/2)+0.5,(bolt1OD/2)+0.5,0]) | |||
cylinder(h=Z, r=bolt1OD/2); | |||
//bolt 2 | |||
// translate([X-(0.25+bolt1OD/2),Y/2,0]) | |||
// cylinder(h=Z, r=bolt1OD/2); | |||
//bolt 2a | |||
translate([X-((bolt1OD/2)+0.5),Y-(bolt1OD/2)-0.5,0]) | |||
cylinder(h=Z, r=bolt2OD/2); | |||
//bolt 2b | |||
translate([X-((bolt1OD/2)+0.5),(bolt1OD/2)+0.5,0]) | |||
cylinder(h=Z, r=bolt2OD/2); | |||
//bushing | |||
translate([X/2,(Y/2)+(bushingL/2),Z]) | |||
rotate([90,0,0]) | |||
cylinder(h=bushingL, r=bushingOD/2); | |||
//shaft | |||
translate([X/2,Y,Z]) | |||
rotate([90,0,0]) | |||
cylinder(h=Y, r=(shaftOD*1.05)/2); | |||
} //end difference | |||
} //end module | |||
</nowiki> | |||
<nowiki> | |||
===Lower Half=== | |||
[[Image:CebBushingholderbot.png|400px]] | |||
<nowiki> | <nowiki> | ||
include <vars.scad>; | |||
use <modus.scad>; | |||
//this 3D printed part will be mounted to the drawer and hold a brass bushing | |||
dRodBushingHolderbottom(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD,d1nut2AF,d1nut2H); | |||
module dRodBushingHolderbottom(bushingOD,bushingL,shaftOD,bolt1OD,bolt2OD,nutAF,nutH){ | |||
$fn=50; | |||
X=1.5+(bolt1OD*2)+bushingOD; | |||
Y=max((0.5+bushingL),4); | |||
Z=max((0.25+(bushingOD/2)),((d2z+0.5+(sliderodholeOD/2))+drawergap)); | |||
difference(){ | |||
cube([X,Y,Z]); | |||
//bolt 1a | |||
translate([(bolt1OD/2)+0.5,Y-(bolt1OD/2)-0.5,0]) | |||
cylinder(h=Z, r=bolt1OD/2); | |||
//bolt 1b | |||
translate([(bolt1OD/2)+0.5,(bolt1OD/2)+0.5,0]) | |||
cylinder(h=Z, r=bolt1OD/2); | |||
//bolt 2 | |||
// translate([X-(0.25+bolt1OD/2),Y/2,0]) | |||
// cylinder(h=Z, r=bolt1OD/2); | |||
//bolt 2a | |||
translate([X-((bolt1OD/2)+0.5),Y-(bolt1OD/2)-0.5,0]) | |||
{ | |||
cylinder(h=Z, r=bolt2OD/2); | |||
nut(nutAF,nutH); | |||
} | |||
//bolt 2b | |||
translate([X-((bolt1OD/2)+0.5),(bolt1OD/2)+0.5,0]) | |||
{ | |||
cylinder(h=Z, r=bolt2OD/2); | |||
nut(nutAF,nutH); // 3/4" nut size | |||
} | |||
//bushing | |||
translate([X/2,(Y/2)+(bushingL/2),Z]) | |||
rotate([90,0,0]) | |||
cylinder(h=bushingL, r=bushingOD/2); | |||
//shaft | |||
translate([X/2,Y,Z]) | |||
rotate([90,0,0]) | |||
cylinder(h=Y, r=(shaftOD*1.05)/2); //105% of shaft | |||
} //end difference | |||
} //end module | |||
</nowiki> | |||
=Grate= | |||
==G1== | |||
//d1 | <nowiki> | ||
projection(cut = true) //use projection to create 2D DXF files | g1x=23; | ||
translate([d1y,d1x/2,0]) | g1y=2; | ||
rotate([0,0,90]) | g1z=0.5; | ||
$fn=20; | |||
difference(){ | |||
cube([g1x,g1y,g1z]); | |||
translate([7,g1y/2,0]) | |||
cylinder(h = g1z,r = 0.4065); | |||
translate([16,g1y/2,0]) | |||
cylinder(h = g1z,r = 0.4065); | |||
} //end difference | |||
</nowiki> | |||
==G2== | |||
<nowiki> | |||
g2x=56; | |||
g2y=2.3; | |||
g2z=0.5; | |||
$fn=20; | |||
union(){ | |||
difference(){ | |||
cube([g2x,g2y-0.1,g2z]); | |||
translate([4.375,1.6,0]) //goofy distance apart holes | |||
cylinder(h = g2z,r = 0.406); | |||
translate([20.125,1.6,0]) | |||
cylinder(h = g2z,r = 0.406); | |||
translate([35.875,1.6,0]) | |||
cylinder(h = g2z,r = 0.406); | |||
translate([51.625,1.6,0]) | |||
cylinder(h = g2z,r = 0.406); | |||
//first two cuts are goofy distance from begining, so is last one. | |||
for(i=[0:((g2x-3.4)/1.75)]) | |||
translate([(i*1.75)+3.4,0,0]) | |||
cube([0.3,0.5,g2z]); | |||
translate([1.6,0,0]) | |||
cube([0.3,0.5,g2z]); | |||
} //end difference | |||
//goofy distance from end | |||
translate([15.9475,g2y-0.1,0]) | |||
cube([0.3,0.1,g2z]); | |||
translate([g2x-15.9475-0.3,g2y-0.1,0]) | |||
cube([0.3,0.1,g2z]); | |||
} | |||
</nowiki> | |||
==G3== | |||
<nowiki> | |||
g3x=2; | |||
g3y=3; | |||
g3z=0.5; | |||
$fn=20; | |||
difference(){ | |||
cube([g3x,g3y,g3z]); | |||
translate([1,1,0]) | |||
cylinder(h = g3z,r = 0.40625); | |||
} //end difference | |||
</nowiki> | |||
==G4== | |||
<nowiki> | |||
g4x=5; | |||
g4y=2.5; | |||
g4z=0.5; | |||
$fn=20; | |||
difference(){ | |||
cube([g4x,g4y,g4z]); | |||
translate([1,1.25,0]) | |||
cylinder(h = g4z,r = 0.40625); | |||
} //end difference | |||
</nowiki> | |||
=DXF Export Layout= | |||
*looking for workflow to use a [[Nesting Software]] to create cnc cutting layout | |||
*All parts layed out in sequence for review in DXF format | |||
**might find a way to label parts below X axis | |||
==xport-Dp.scad== | |||
<nowiki> | |||
include <vars.scad>; | |||
use <modus.scad>; | |||
//push the F6 key on your key board twice for projection view | |||
use<d1p.scad>; | |||
use<d2p.scad>; | |||
use<d3p.scad>; | |||
use<d4p.scad>; | |||
use<d5p.scad>; | |||
use<d6p.scad>; | |||
use<d7p.scad>; | |||
use<d8p.scad>; | |||
use<d9p.scad>; | |||
use<d10p.scad>; | |||
use<d11p.scad>; | |||
use<d12p.scad>; | |||
partspacing=1; //common distance between parts | |||
ps=partspacing; | |||
//d1 | |||
projection(cut = true) //use projection to create 2D DXF files | |||
translate([d1y,d1x/2,0]) | |||
rotate([0,0,90]) | |||
d1p(); | d1p(); | ||
projection(cut = true) | //d2 (1/2) | ||
translate([d1y+ | projection(cut = true) | ||
rotate([0,0,90]) | translate([d1y+ps+d2y,0,0]) | ||
d2p(); | rotate([0,0,90]) | ||
d2p(); | |||
projection(cut = true) | |||
translate([d1y+ | //d2 (2/2) | ||
rotate([0,0,90]) | projection(cut = true) | ||
translate([d1y+ps+d2y,ps+d2x,0]) | |||
rotate([0,0,90]) | |||
projection(cut = true) | d2p(); | ||
translate([d1y+ | |||
rotate([0,0,90]) | //d3 (1/2) | ||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y,(d3x/2),0]) | |||
projection(cut = true) | rotate([0,0,90]) | ||
translate([d1y+ | d3p(); | ||
rotate([0,0,90]) | |||
//d3 (2/2) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y,(d3x/2)+ps+d3x,0]) | |||
rotate([0,0,90]) | |||
d3p(); | |||
//d4 (1/3) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y,d4x/2,0]) | |||
rotate([0,0,90]) | |||
d4p(); | |||
//d4 (2/3) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y,(d4x/2)+ps+d4x,0]) | |||
rotate([0,0,90]) | |||
d4p(); | |||
//d4 (3/3) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y,(d4x/2)+ps+d4x+ps+d4x,0]) | |||
rotate([0,0,90]) | |||
d4p(); | |||
//d5 (1/1) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y,d5x/2,0]) | |||
rotate([0,0,90]) | |||
d5p(); | |||
//d6 (1/1) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y,d6x/2,0]) | |||
rotate([0,0,90]) | |||
d6p(); | |||
//d7 (1/2) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y,0,0]) | |||
rotate([0,0,90]) | |||
d7p(); | |||
//d7 (2/2) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y,ps+d7x,0]) | |||
rotate([0,0,90]) | |||
d7p(); | |||
//d8 (1/1) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y,d8x/2,0]) | |||
rotate([0,0,90]) | |||
d8p(); | |||
//d9 (1/2) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y,0,0]) | |||
rotate([0,0,90]) | |||
d9p(); | |||
//d9 (2/2) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y,ps+d9x,0]) | |||
rotate([0,0,90]) | |||
d9p(); | |||
//d10 (1/2) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y+ps+d10y,0,0]) | |||
rotate([0,0,90]) | |||
d10p(); | |||
//d10 (2/2) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y+ps+d10y,ps+d10x,0]) | |||
rotate([0,0,90]) | |||
d10p(); | |||
//d11 (1/2) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y+ps+d10y+ps+d11y,0,0]) | |||
rotate([0,0,90]) | |||
d11p(); | |||
//d11 (2/2) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y+ps+d10y+ps+d11y,ps+d11x,0]) | |||
rotate([0,0,90]) | |||
d11p(); | |||
//d12 (1/2) | |||
projection(cut = true) | |||
translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y+ps+d10y+ps+d11y+ps+d12y,d12x/2,0]) | |||
rotate([0,0,90]) | |||
d12p(); | |||
</nowiki> | |||
==xport-Fp.scad== | |||
<nowiki> | |||
include <vars.scad>; | |||
use <modus.scad>; | |||
//push the F6 key on your key board twice for projection view | |||
use <f1p.scad>; | |||
use <f2p.scad>; | |||
use <f3p.scad>; | |||
use <f4p.scad>; | |||
use <f5p.scad>; | |||
use <f6p.scad>; | |||
//use <f7p.scad>; | |||
use <f8p.scad>; | |||
use <f9p.scad>; | |||
//use <f10p.scad>; //part retired? | |||
use <f11p.scad>; | |||
use <f12p.scad>; | |||
//use <f13p.scad>; | |||
use <f14p.scad>; | |||
partspacing=1; //common distance between parts | |||
ps=partspacing; | |||
//f1 (1/2) | |||
projection(cut = true) //use projection to create 2f fXF files | |||
translate([f1y,(f1x/2),0]) | |||
rotate([0,0,90]) | |||
f1p(); | |||
//f1 (2/2) | |||
projection(cut = true) //use projection to create 2f fXF files | |||
translate([f1y,(f1x/2)+ps+f1x,0]) | |||
rotate([0,0,90]) | |||
f1p(); | |||
//f2 (1/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y,0,0]) | |||
rotate([0,0,90]) | |||
f2p(); | |||
//f2 (2/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y,ps+f2x,0]) | |||
rotate([0,0,90]) | |||
f2p(); | |||
//f3 (1/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y,(f3x/2),0]) | |||
rotate([0,0,90]) | |||
f3p(); | |||
//f3 (2/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y,(f3x/2)+ps+f3x,0]) | |||
rotate([0,0,90]) | |||
f3p(); | |||
//f4 (1/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y,f4x/2,0]) | |||
rotate([0,0,90]) | |||
f4p(); | |||
//f4 (2/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y,(f4x/2)+ps+f4x,0]) | |||
rotate([0,0,90]) | |||
f4p(); | |||
//f5 (1/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y,f5x/2,0]) | |||
rotate([0,0,90]) | |||
f5p(); | |||
//f5 (2/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y,(f5x/2)+ps+f5x,0]) | |||
rotate([0,0,90]) | |||
f5p(); | |||
//f6 (1/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y,f6x/2,0]) | |||
rotate([0,0,90]) | |||
f6p(); | |||
//f6 (2/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y,(f6x/2)+ps+f6x,0]) | |||
rotate([0,0,90]) | |||
f6p(); | |||
//f7 | |||
//projection(cut = true) | |||
//translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y,0,0]) | |||
//rotate([0,0,90]) | |||
//f7p(); | |||
//f8 (1/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y,0,0]) | |||
rotate([0,0,90]) | |||
f8p(); | |||
//f8 (2/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y,ps+f8x,0]) | |||
rotate([0,0,90]) | |||
f8p(); | |||
//f9 (1/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y,0,0]) | |||
rotate([0,0,90]) | |||
f9p(); | |||
//f9 (2/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y,ps+f9x,0]) | |||
rotate([0,0,90]) | |||
f9p(); | |||
//f10 | |||
//projection(cut = true) | |||
//translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y+ps+f10y,0,0]) | |||
//rotate([0,0,90]) | |||
//f10p(); | |||
//f11 | |||
for(i=[0:5]) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y+ps+f10y+ps+f11y-(f11y/2),i*(ps+f11x),0]) | |||
rotate([0,0,90]) | |||
f11p(); | |||
//f12 (1/1) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y+ps+f10y+ps+f11y+ps+f12y,f12x/2,0]) | |||
rotate([0,0,90]) | |||
f12p(); | |||
//f13 | |||
//projection(cut = true) | |||
//translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y+ps+f10y+ps+f11y+ps+f12y+ps+f13y,f12x/2,0]) | |||
//rotate([0,0,90]) | |||
//f13p(); | |||
//f14 (1/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y+ps+f10y+ps+f11y+ps+f12y+ps+f13y+ps+f14y,0,0]) | |||
rotate([0,0,90]) | |||
f14p(); | |||
//f14 (2/2) | |||
projection(cut = true) | |||
translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y+ps+f10y+ps+f11y+ps+f12y+ps+f13y+ps+f14y,ps+f14x,0]) | |||
rotate([0,0,90]) | |||
f14p(); | |||
</nowiki> | |||
==xport-Ap.scad== | |||
<nowiki> | |||
include <vars.scad>; | |||
use <modus.scad>; | |||
//push the F6 key on your key board twice for projection view | |||
use<a1p.scad>; | |||
use<a2p.scad>; | |||
use<a3p.scad>; | |||
use<a4p.scad>; | |||
use<a5p.scad>; | |||
use<a6p.scad>; | |||
partspacing=1; //common distance between parts | |||
ps=partspacing; | |||
//a1 (1/2) | |||
projection(cut = true) //use projection to create 2a aXF files | |||
translate([a1y,0,0]) | |||
rotate([0,0,90]) | |||
a1p(); | |||
//a1 (2/2) | |||
projection(cut = true) //use projection to create 2a aXF files | |||
translate([a1y,ps+a1x,0]) | |||
rotate([0,0,90]) | |||
a1p(); | |||
//a2 (1/2) | |||
projection(cut = true) | |||
translate([a1y+ps+a2y,0,0]) | |||
rotate([0,0,90]) | |||
a2p(); | |||
//a2 (2/2) | |||
projection(cut = true) | |||
translate([a1y+ps+a2y,ps+a2x,0]) | |||
rotate([0,0,90]) | |||
a2p(); | |||
//a3 (1/2) | |||
projection(cut = true) | |||
translate([a1y+ps+a2y+ps+a3y,0,0]) | |||
rotate([0,0,90]) | |||
a3p(); | |||
//a3 (2/2) | |||
projection(cut = true) | |||
translate([a1y+ps+a2y+ps+a3y,ps+a3x,0]) | |||
rotate([0,0,90]) | |||
a3p(); | |||
//a4 (1/1) | |||
projection(cut = true) | |||
translate([a1y+ps+a2y+ps+a3y+ps+a4y,0,0]) | |||
rotate([0,0,90]) | |||
a4p(); | |||
//a5 (1/1) | |||
projection(cut = true) | |||
translate([a1y+ps+a2y+ps+a3y+ps+a4y+ps+a5y,0,0]) | |||
rotate([0,0,90]) | |||
a5p(); | |||
for(i=[0:5]) | |||
//a6 (1/1) | |||
projection(cut = true) | |||
translate([a1y+ps+a2y+ps+a3y+ps+a4y+ps+a5y+ps+a6y,i*(ps+a6x),0]) | |||
rotate([0,0,90]) | |||
a6p(); | |||
</nowiki> | |||
=Hydraulic Cylinders= | |||
==Main Cylinder== | |||
[[Image:Hydrauliccylinderdimensions.jpg|400px]] | |||
<nowiki> | |||
$fn=20; | |||
cylMainBore = 5; | |||
cylMainStroke = 16; | |||
cylMainExt = 43; | |||
cylMainRet = 27; | |||
cylMainA = (cylMainRet-cylMainStroke); //center to center minus stroke length | |||
cylMainB = 0.25; // cylinder wall thickness | |||
cylMainD = 2.5; //Rod OD | |||
cylMainE = 5.75; //rear pin holder width | |||
cylMainG = 4; //rod pin holder width | |||
cylMainJ = 3.8; //distance from the end of the cylinder body to rod pin center | |||
cylMainR = 1.52; //pin hole ID | |||
cylMainS = 2.5; //pin holder OD | |||
cylMain(0); //rodend pin holder: 1 = yes, 0 = no | |||
module cylMain(PinYN){ | |||
MAINcylinder(); | |||
translate([0,0,cylMainRet]) //to animate include "+($t*(cylMainStroke))" | |||
MAINcylinderROD(PinYN); //rodend pin holder: 1 = yes, 0 = no | |||
} | |||
module MAINcylinder(){ | |||
difference(){ | |||
translate([-cylMainE/2,0,0]) | |||
rotate([0,90,0]) | |||
cylinder(h = cylMainE, r = cylMainS/2); | |||
translate([-cylMainE/2,0,0]) | |||
rotate([0,90,0]) | |||
cylinder(h = cylMainE, r = cylMainR/2); | |||
} //end difference | |||
translate([0,0,(cylMainS/2)]) | |||
cylinder(h = (cylMainRet-cylMainJ-(cylMainS/2)), r = (cylMainBore/2)+cylMainB); | |||
}// end Main Cylinder module | |||
module MAINcylinderROD(PinYN){ | |||
difference(){ | |||
translate([-cylMainG/2,0,0]) | |||
rotate([0,90,0]) | |||
cylinder(h = PinYN*(cylMainG), r = PinYN*(cylMainS/2)); | |||
translate([-cylMainG/2,0,0]) | |||
rotate([0,90,0]) | |||
cylinder(h = cylMainG, r = cylMainR/2); | |||
} //end difference | |||
translate([0,0,-(cylMainStroke+cylMainJ-(cylMainS/2))-(cylMainS/2)]) | |||
cylinder(h = cylMainStroke+cylMainJ-(cylMainS/2), r = cylMainD/2); | |||
} | |||
</nowiki> | |||
==Drawer Cylinder== | |||
=Full Assembly= | |||
<nowiki> | |||
include <vars.scad>; | |||
use <modus.scad>; | |||
use<Dp.scad>; | |||
use<Fp.scad>; | |||
use<Ap.scad>; | |||
use<cylMain.scad>; | |||
Dp(); | |||
translate([0,0,-((f9x-f1y-brickCH-drawergap-f4y)+f4y)]) | |||
rotate([0,0,90]) | |||
Fp(); | |||
translate([0,0,-((f9x-f1y-brickCH-drawergap-f4y)+f4y)+f2z+((cylMainS+0.125)/2)]) | |||
cylMain(0); | |||
rotate([0,0,270]) | |||
translate([0,-distancetof8center,0]) | |||
Ap(); | |||
</nowiki> | </nowiki> | ||
= | =To Do= | ||
*update with newest changes of the FreeCAD version | |||
*get [[Nesting_Software|SVGnest]] to work for torch table layout | |||
Latest revision as of 20:38, 19 August 2018
work in progress
creating an OpenSCAD replica of v17.08
Latest files on Google Drive for download: link
Default Variables
By making a SCAD file with the variables used throughout the CEB press, we can use the "include" command within each individual part's file to pull in the same dimensions. Read More
- vars.scad
brickW=6;
brickL=12;
brickCH=6; //Is brick height being shortened by d1z??
grateX=56;
grateY=23;
grateH=37; //Height mounted above press's frame
grateA=17.5; //angle of grate
//3.625 x 2.25 x 8
//6 x 12 x 6
$fn=8; //defines resolution of circles. 8 is okay for review. 100 or greater should be used for for final dxf export.
dZstandard=0.5; //thickness of steel to be cut for drawer parts
fZstandard=0.5;
aZstandard=0.5; //thickness of steel to be cut for arm parts
hZstandard=0.125;
fBOLTHOLEstandardD=1; //standard bolts used on frame
aBOLTHOLEstandardD=1;
sliderodholeOD=1.2;
d1bushingOD=1.25;
d1bushingL=1.25;
d1shaftOD=1;
d1bolt1OD=1;
d1bolt2OD=0.75;
d1nut2AF=1.25;
d1nut2H=0.665;
dGap=0.03125; //gap between a hole cut's edge and the part sitting within the hole. //D3 appears to use 0.3125, is this in error?
//all parts set to standard thickness below
//off standard preferences can be defined below
//drawer
drawergap=0.0283; //extra room for drawer to slide in the space between f1 and f4
drawerHgap=0.1884; //total extra space from drawer sides to frame walls. sum of both sides.
d2clevispinaccessholeOD=3;
d1z=dZstandard;
d2z=dZstandard;
d3z=dZstandard;
d4z=dZstandard;
d5z=dZstandard;
d6z=dZstandard;
d5z=dZstandard;
d7z=dZstandard;
d8z=dZstandard;
d9z=dZstandard;
d11z=dZstandard;
d12z=dZstandard;
//frame
f1y=6;
f1z=fZstandard;
f2y=3.5;
f2z=fZstandard;
f3y=3.5;
f3z=fZstandard;
f4y=11;
f4z=fZstandard;
f5y=3.5;
f5z=fZstandard;
f6y=8;
f6z=fZstandard;
f8y=brickW;
f8z=fZstandard;
f8boltD=1;
f9y=4.5;
f9z=fZstandard;
f12z=fZstandard;
f11x=1.25;
f11z=fZstandard;
f13z=fZstandard;
f14y=3.5;
f14z=fZstandard;
//arms
a1x=4;
a1z=aZstandard;
a1out=24; //length from frame to A5 edge for bricks to sit on as they exit
a2x=6;
a2z=aZstandard;
a3x=4;
a3y=72;
a3z=aZstandard;
a4x=6;
a4y=72;
a4z=aZstandard;
a5x=6;
a5y=72;
a5z=aZstandard;
a6z=aZstandard;
//guards
h1x=grateX;
h1y=grateH; //might need to tweak for grate thickness
h1z=hZstandard;
h2z=hZstandard;
h3z=hZstandard;
h4z=hZstandard;
h5z=hZstandard;
h6z=hZstandard;
h7z=hZstandard;
h8z=hZstandard;
//
//Input your main cylinder's dimenions here
//
cylMainBore = 5;
cylMainStroke = 16;
cylMainExt = 43;
cylMainRet = 27;
cylMainA = (cylMainRet-cylMainStroke); //center to center minus stroke length
cylMainB = 0.25; // cylinder wall thickness
cylMainD = 2.5; //Rod OD
cylMainE = 5.75; //rear pin holder width
cylMainG = 4; //rod pin holder width
cylMainJ = 3.8; //distance from the end of the cylinder body to rod pin center
cylMainR = 1.52; //pin hole ID
cylMainS = 2.5; //pin holder OD
//
//Input your drawer cylinder's dimenions here
//
//
cylDrawerBore = 5;
cylDrawerStroke = 16;
cylDrawerExt = 43;
cylDrawerRet = 27;
cylDrawerA = (cylMainRet-cylMainStroke); //center to center minus stroke length
cylDrawerB = 0.25; // cylinder wall thickness
cylDrawerD = 2.5; //Rod OD
cylDrawerE = 5.75; //rear pin holder width
cylDrawerG = 4; //rod pin holder width
cylDrawerJ = 3.8; //distance from the end of the cylinder body to rod pin center
cylDrawerR = 1.52; //pin hole ID
cylDrawerS = 2.5; //pin holder OD
cylinderDRAWERbodyH=3; //measured when in position, largest length from top to bottom of cylinder
cylinderDRAWERminC2C=0; //drawer's hydraulic cylinder's distance from the center of one mounting hole to the center of the other when fully compressed.
cylinderDRAWERmaxC2C=0; ///drawer's hydraulic cylinder's distance from the center of one mounting hole to the center of the other when fully extended.
cylinderDRAWERrodclevisW=2.5; //width of cylinders' clevis on end of rod
cylinderDRAWERrodclevisID=1;
cylinderDRAWERrodclevisOD=2;
cylinderDRAWERrearclevisW=2.5; //width of mounting clevis cylinder body
cylinderDRAWERrearclevisID=1;
cylinderDRAWERrearclevisOD=2;
cylinderDRAWERrearclevisClearance=3; //usable space around rear clevis pin (in diameter). be aware of hyraulic fittings.
//the following variables are calculated in order of dependence on preceding variables
d3x=brickL+(d2z*2);
d3y=brickCH-d1z;
d4x=brickW+d3z+d3z;
d4y=brickCH-d1z;
d5x=brickL+(d2z*2);
d5y=brickW;
d6x=brickL+(d2z*2);
d6y=brickCH;
d7x=cylinderDRAWERrearclevisClearance;
d7y=a4z+d8z+cylinderDRAWERbodyH;
d9x=cylinderDRAWERbodyH+d6z; //should be based on clevis size?
d9y=cylinderDRAWERbodyH+d8z;
d8x=brickL+(d2z*2);
d8y=max(5,(d9x-d6z)); //need to review fundamentals, 5 minimun unless d9 gets larger than d8
d11x=1.5+(d1bolt1OD*2)+d1bushingOD;
d11y=max((0.5+d1bushingL),4);
d12x=d8x;
d12y=d11y+1;
f1x=((brickL+(d2z*2)+drawerHgap+(f9y*2)));
f3x=f1x;
d1x=(brickL+d2z+d2z);
//d1x=(((f1x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2))*2;
d1y=((brickW+d3z+d3z)*3)+1;
d2x=d8y+d6z+brickW+d3z+d5y+d3z;
d2y=brickCH;
f11y=f8y;
f6x=brickL+(d2z*2)+(f9y*2)+drawerHgap;
f9x=(f2z+((cylMainS+0.125)/2)+cylMainRet-cylMainJ+1+f4y+drawergap+d2y+f1y); //leaves 1" between top of cylinder and bottom of F4
f8x=f9x;
f2x=brickL+(d2z*2)+drawerHgap+(f9y*2)-(1.4*2); //distance between large cut outs in f9
f5x=brickL+(d2z*2)+drawerHgap+(f9y*2)+(a1x*2); //distance between outer edges of each A1
f4x=f5x-0.5; //same as f5 but minus 0.25 on each side to give a little overhang
f14x=brickL+(1*2)+(.125*2)+(dGap*2);
f12x=f3x;
f12y=(f3y*2)+brickW;
sliderodoffset=(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2));
distancetof8center=(cylDrawerExt+(a4x/2)+((d9x-d6z)/2)+d6z+(brickW/2)); //F8 center on A1
a1y=distancetof8center+(brickW/2)+a1out;
a2y=a1y;
h7x=f5x-((a1x/2)*2)+(1.5*2);
h7y=cylDrawerStroke;
h8x=f5x-((a1x/2)*2)+(1.5*2);
h8y=a1out-a5x-f5y; //distance between a5 and f5
hopperBaseX=brickL;
hopperBaseY=brickW;
h2x=grateX;
h2y=sqrt(((h1y-(sin(grateA)*grateY))*(h1y-(sin(grateA)*grateY)))+(((cos(grateA)*grateY)-hopperBaseY)*((cos(grateA)*grateY)-hopperBaseY)));
//h1y-(sin(grateA)*grateY)
//(cos(grateA)*grateY)-hopperBaseY
echo(h1y-(sin(grateA)*grateY));
echo((cos(grateA)*grateY)-hopperBaseY);
echo(h2y);
echo(atan((h1y-(sin(grateA)*grateY))/((cos(grateA)*grateY)-hopperBaseY)));
echo((h1y-(sin(grateA)*grateY))/(h1y));
// ECHO - REQUIRED PARTS BASED ON INPUTS
echo(str("Minimum drawer cylinder stroke length: ",(d3z*2)+d5y+brickW));
//would be cool to validate and confirm user inputed stroke length. set error=1; if drawer cylinder is not long enough. print an echo warning.
echo(str("Grate hieght above ground level: ",(1)));
Common Modules
Creating a file of modules will allow for them to be utilized in other files with the "use" command.
modus.scad
//Corner Joint - allows the sides of two parts to create inlayed corner. Aids with welding.
//need to verify module math is the same throughout all parts.
module cornerjoint(Z,L,H,EndGap,PadL,PadH,CJangle,CJcenter){
//change so that H = Z of inlayed part (usually 0.5)
//add center and angle in degrees option, orgin far side of cut out area
if((CJangle==0)&&(CJcenter==0))
{
translate([0,0,0])
rotate([0,0,CJangle])
difference(){
cube([L,H+PadH,Z]);
translate([EndGap,H,0])
cube([PadL,PadH,Z]);
translate([L-EndGap-PadL,H,0])
cube([PadL,PadH,Z]);}
}
else if((CJangle==90)&&(CJcenter==0))
{
translate([H+PadH,0,0])
rotate([0,0,CJangle])
difference(){
cube([L,H+PadH,Z]);
translate([EndGap,H,0])
cube([PadL,PadH,Z]);
translate([L-EndGap-PadL,H,0])
cube([PadL,PadH,Z]);}
}
else if((CJangle==180)&&(CJcenter==0))
{
translate([L,H+PadH,0])
rotate([0,0,CJangle])
difference(){
cube([L,H+PadH,Z]);
translate([EndGap,H,0])
cube([PadL,PadH,Z]);
translate([L-EndGap-PadL,H,0])
cube([PadL,PadH,Z]);}
}
else if((CJangle==270)&&(CJcenter==0))
{
translate([0,L,0])
rotate([0,0,CJangle])
difference(){
cube([L,H+PadH,Z]);
translate([EndGap,H,0])
cube([PadL,PadH,Z]);
translate([L-EndGap-PadL,H,0])
cube([PadL,PadH,Z]);}
}
//centered
else if((CJangle==0)&&(CJcenter==1))
{
translate([-L/2,0,0])
rotate([0,0,CJangle])
difference(){
cube([L,H+PadH,Z]);
translate([EndGap,H,0])
cube([PadL,PadH,Z]);
translate([L-EndGap-PadL,H,0])
cube([PadL,PadH,Z]);}
}
else if((CJangle==90)&&(CJcenter==1))
{
translate([0,-L/2,0])
rotate([0,0,CJangle])
difference(){
cube([L,H+PadH,Z]);
translate([EndGap,H,0])
cube([PadL,PadH,Z]);
translate([L-EndGap-PadL,H,0])
cube([PadL,PadH,Z]);}
}
else if((CJangle==180)&&(CJcenter==1))
{
translate([L/2,0,0])
rotate([0,0,CJangle])
difference(){
cube([L,H+PadH,Z]);
translate([EndGap,H,0])
cube([PadL,PadH,Z]);
translate([L-EndGap-PadL,H,0])
cube([PadL,PadH,Z]);}
}
else if((CJangle==270)&&(CJcenter==1))
{
translate([0,L/2,0])
rotate([0,0,CJangle])
difference(){
cube([L,H+PadH,Z]);
translate([EndGap,H,0])
cube([PadL,PadH,Z]);
translate([L-EndGap-PadL,H,0])
cube([PadL,PadH,Z]);}
}
} //end cornerjoint module
//Tab Insert - used to cut a hole for an abutting part to insert into. Typically aids with welding the two parts.
module tabinsert(X,Y,Z,dGap,cGap,c1,c2,c3,c4,c5,c6,c7,c8,center){
translate([-dGap-(center*(X/2)),-dGap-(center*(Y/2)),0]){
//main cut
cube([X+(dGap*2),Y+(dGap*2),Z]);
//corner c1c2
translate([-cGap,(Y+(dGap*2))-c1+cGap,0])
{
cube([c2,c1,Z]);}
//corner c3c4
translate([(X+(dGap*2))-c3+cGap,(Y+(dGap*2))-c4+cGap,0]){
cube([c3,c4,Z]);
}
//corner c5c6
translate([(X+(dGap*2))-c6+cGap,-cGap,0])
{
cube([c6,c5,Z]);
}
//corner c7c8
translate([-cGap,-cGap,0]){
cube([c7,c8,Z]);
}
} //end center translate
} //end tabinsert module
module nut(flattoflat,nutheight){ //distance from one flat side to the other flat side "A/F"
//typical sizes found here:
//https://en.wikipedia.org/wiki/Nut_(hardware)
difference(){
translate([0,0,nutheight/2])
cube(size = [10,10,nutheight], center = true);
for(i=[1:6]){
rotate([0,0,i*60])
difference(){
translate([-10,0,0])
cube([20,20,nutheight]);
translate([-10,0,0])
cube([20,flattoflat/2,nutheight]);
} //end difference
} //end for
} //end differeence
} //end module
Frame
Frame Assembly
- F4 holes look slightly more narrow than the F9 holes.
- calculate F4 and F5 Z height from the top down. Let f9 length be adjusted by cylinder. try to avoid calculation again.
- Fp.scad
include <vars.scad>;
use <modus.scad>;
use <f1p.scad>;
use <f2p.scad>;
use <f3p.scad>;
use <f4p.scad>;
use <f5p.scad>;
use <f6p.scad>;
//use <f7p.scad>;
use <f8p.scad>;
use <f9p.scad>;
//use <f10p.scad>; //part retired?
use <f11p.scad>;
use <f12p.scad>;
//use <f13p.scad>;
use <f14p.scad>;
Fp();
module Fp(){
translate([0,(f8y/2)+f1z,f9x])
rotate([90,180,0])
f1p();
translate([0,-(f8y/2),f9x])
rotate([90,180,0])
f1p();
translate([-f2x/2,(f8y/2),f9x-f1y])
rotate([0,0,0])
f2p(); //connected to F1
translate([f2x/2,-(f8y/2),f9x-f1y])
rotate([0,0,180])
f2p();
translate([0,(f8y/2),f9x])
rotate([0,180,0])
f3p(); //connected to F1
translate([0,-(f8y/2),f9x])
rotate([0,180,180])
f3p(); //connected to F1
translate([0,-f12y/2,f9x])
f12p();
translate([0,(f8y/2)+f6z,(f9x-f1y-brickCH-drawergap-f4y)])
rotate([90,0,0])
f4p(); //?group with f5?
translate([0,-(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)])
rotate([90,0,0])
f4p();
translate([0,(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)+f4y])
rotate([0,180,0])
f5p(); //connected to F4
translate([0,-(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)+f4y])
rotate([0,180,180])
f5p(); //connected to F4
translate([-f14x/2,(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)+7.5-(f14z/2)])
rotate([0,0,0])
f14p(); //connected to F4
translate([f14x/2,-(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)+7.5-(f14z/2)])
rotate([0,0,180])
f14p(); //connected to F4
translate([0,(f8y/2)+f6z,f6y])
rotate([90,180,0])
f6p();
translate([0,-(f8y/2),f6y])
rotate([90,180,0])
f6p();
translate([-f2x/2,(f8y/2),0])
rotate([0,0,0])
f2p(); //connected to F6
translate([f2x/2,-(f8y/2),0])
rotate([0,0,180])
f2p();
translate([f6x/2,0,0])
rotate([0,0,180])
f11p();
translate([f6x/2,0,f9x-f1y-d2y-f4y-drawergap-0.5])
rotate([0,0,180])
f11p();
translate([f6x/2,0,f9x-0.5])
rotate([0,0,180])
f11p();
translate([-f6x/2,0,0])
rotate([0,0,0])
f11p();
translate([-f6x/2,0,f9x-f1y-d2y-f4y-drawergap-0.5])
rotate([0,0,0])
f11p();
translate([-f6x/2,0,f9x-0.5])
rotate([0,0,0])
f11p();
translate([-((brickL+(d2z*2)+drawerHgap)/2),0,0]){ //???
rotate([0,0,90]){
translate([(f8y/2),f8z,0])
rotate([90,-90,0])
f8p();
translate([(f8y/2)+(f9z/2)-(f8z/2),0,0])
rotate([0,-90,0])
f9p();
translate([-(f8y/2)+(f9z/2)+(f8z/2),0,0])
rotate([0,-90,0])
f9p();
} //end rotate
} //end translate
translate([((brickL+(d2z*2)+drawerHgap)/2),0,0]){
rotate([0,0,-90]){
translate([(f8y/2),f8z,0])
rotate([90,-90,0])
f8p();
translate([(f8y/2)+(f9z/2)-(f8z/2),0,0])
rotate([0,-90,0])
f9p();
translate([-(f8y/2)+(f9z/2)+(f8z/2),0,0])
rotate([0,-90,0])
f9p();
} //end rotate
} //end translate
} //end Fp module
F1
Welds to: F2, F3
Bolts to: F9
Abuts: A2
- need to tweak bolt translates?
- change to use cornerjoint module instead of insert module on outter ends of F3 connections
include <vars.scad>;
use <modus.scad>;
f1p();
module f1p(){
difference(){
translate([-(f1x/2),0,0])
cube([f1x,f1y,f1z]);
translate([-(f1x/2),0,0])
cuts();
translate([(f1x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
tabinsert(1,f3z,f1z,0.0625,0.125,0,0,0.25,0.25,0.0,0,0,0,0);
translate([0,f1y-0.25,0])
cube([0.4,0.25,f1z]); //appears to be intended to interface with A2, but not sure why
translate([(f1x-f2x)/2,f1y-f2z,0])
tabinsert(1,f2z,f1z,0.0625,0.125,0,0,0,0,0.25,0.25,0.25,0.25,0); //f2
translate([(f1x/2)-1,0,0])
tabinsert(1,f3z,f1z,0.0625,0.125,0.25,0.25,0,0,0.0,0,0,0,0);
translate([((f1x-d3x-drawerHgap)/2)-2,1.5,0]) //bolt center to inner edge of f9=2
cylinder(h = f1z, r = 0.375);
translate([((f1x-d3x-drawerHgap)/2)-2,4.5,0])
cylinder(h = f1z, r = 0.375);
translate([(f1x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)),f1y-(d2z+0.5+(sliderodholeOD/2)),0]) //slider rod
cylinder(h = f1z, r = sliderodholeOD/2);
} //end cuts module
} //end f1p module
F2
Welds to: F1, F4, F6
include <vars.scad>;
use <modus.scad>;
f2p();
module f2p(){
difference(){
cube([f2x,f2y,f2z]);
translate([1,0,0])
cornerjoint(f2z,f2x-2,f1z,0.125,f2x-2-0.25,0.125,0,0);
} //end difference
} //end f2p module
F3
Welds to: F1
Bolts to: F12
- F3 and F1 should probably be made the same length.
- going to set f3y=f1y. also some tweaks to insert holes
include <vars.scad>;
use <modus.scad>;
f3p();
module f3p(){
difference(){
translate([-(f3x/2),0,0])
cube([f3x,f3y,f3z]);
translate([-(f3x/2),0,0])
cuts();
translate([(f3x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
translate([1,0,0])
cornerjoint(f3z,(f3x-4)/2,f1z,1,1,0.125,0,0);
translate([5.375,f3y/2,0])
cylinder(h = f3z, r = 0.5);
} //end cuts module
} //end f3p module
F4
Welds to: F14, F5
Bolts to: F9
- bolt holes look like they're maybe slightly miss aligned?
- are they different sized?
include <vars.scad>;
use <modus.scad>;
f4p();
module f4p(){
difference(){
translate([-(((brickL+(d2z*2)+drawerHgap+(f9y*2)))/2),0,0])
union(){
cube([(brickL+(d2z*2)+drawerHgap+(f9y*2)),f4y,f4z]);
translate([-((f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2))))/2,f4y/2,0])
f4triangle();
translate([f4x-((f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2)))/2),f4y/2,0])
mirror([1,0,0])
f4triangle();
}
translate([-(f4x/2),0,0])
cuts();
translate([(f4x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
//f5 outer
translate([(f4x/2)+((f5x/2)-2),f4y,0])
cornerjoint(f4z,4,f5z,0.125,1,0.125,180,1);
//tabinsert(4,f5z*2,f4z,0.0625,0.125,0,0,0,0,0,0,0.25,0.25,1);
//f5 center
translate([(f4x/2),f4y,0])
tabinsert(2,f5z*2,f4z,0.0625,0.125,0,0,0,0,0.0,0,0.25,0.25,1);
//f14 - previoiusly f2
translate([(f4x-f14x+1)/2,7.5,0])
tabinsert(1,f2z,f6z,0.0625,0.125,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1);
//f9 bolts
translate([((f4x-brickL-(d2z*2)-drawerHgap)/2)-2,2,0])
cylinder(h = f4z, r = 0.5025); //diameter 1.0?
translate([((f4x-brickL-(d2z*2)-drawerHgap)/2)-2,6,0])
cylinder(h = f4z, r = 0.5025);
translate([((f4x-brickL-(d2z*2)-drawerHgap)/2)-2,9,0])
cylinder(h = f4z, r = 0.5025);
} //end module
module f4triangle (){
difference(){
cube([(f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2)))/2,f4y/2,f4z]);
difference(){
cube([(f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2)))/2,f4y/2,f4z]);
translate([(f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2)))/2,0,0])
rotate([0,0,atan(((f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2)))/2)/(f4y/2))])
cube([10,10,f4z]);
translate([(f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2)))/2,0,0])
cube([10,10,f4z]);
}
}
} //end f4triangle module
} //end f4p module
F5
Welds to: F4
Bolts to: A1
- f5p.scad
include <vars.scad>;
use <modus.scad>;
f5p();
module f5p(){
difference(){
translate([-(f5x/2),0,0])
cube([f5x,f5y,f5z]);
translate([-(f5x/2),0,0])
cuts();
translate([(f5x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
translate([4,0,0])
cornerjoint(f5z,(f5x-(4*2)-2)/2,f4z,1,1,0.125,0,0);
//arm bolt hole
translate([(a1x/2),f5y-1.5,0]) //aligns with hole in center of a1x
cylinder(h = f5z, r = 0.5);
//might add an insert for an A6 type of support
} //end cuts module
} //end f5p module
F6
Welds to: F2, F7, DOM Tube
Bolts to: F9
- changed bolt hole distance to outer edge, the drawerHgap makes it goofy to have a round number from center.
- need to change translate to accomidate for drawerHgap
- need to use insert module for f2 holes
- cylinder mounting hole diameter is same as cylinders pin holder + 1/16
- DOM inserted into hole then welded in place, using cylinder as guide
- DOM tube welds to F6 and F2
include <vars.scad>;
use <modus.scad>;
f6p();
module f6p(){
difference(){
translate([-(f6x/2),0,0])
cube([f6x,f6y,f6z]);
translate([-(f6x/2),0,0])
cuts();
translate([(f6x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
translate([(f6x-f2x)/2,f6y-f2z,0])
tabinsert(1,f2z,f6z,0.0625,0.125,0,0,0,0,0.25,0.25,0.25,0.25,0); //F2
//need to change this section to match MAINcylinder specs
translate([f6x/2,f6y-f2z-((cylMainS+0.125)/2),0])
cylinder(h = f6z, r = (cylMainS+0.125)/2);
// bolt holes to f9
translate([((f6x-brickL-(d2z*2)-drawerHgap)/2)-2,2,0])
cylinder(h = f6z, r = 0.38); //diameter 0.76?
translate([((f6x-brickL-(d2z*2)-drawerHgap)/2)-2,6,0])
cylinder(h = f6z, r = 0.38);
} //end cuts module
} //end f6p module
F7
F8
Welds to: F9, F10
Bolts to: Rub Plate ?
- need to redo cornerjoint module inputs
- need to set standard bolt size
include <vars.scad>;
use <modus.scad>;
f8p();
module f8p(){
difference(){
cube([f8x,f8y,f8z]);
translate([(1/12)*f8x,0,0])
cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,0,1);
translate([(5/12)*f8x,0,0])
cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,0,1);
translate([(9/12)*f8x,0,0])
cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,0,1);
translate([(1/12)*f8x,f8y,0])
cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,180,1);
translate([(5/12)*f8x,f8y,0])
cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,180,1);
translate([(9/12)*f8x,f8y,0])
cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,180,1);
hull(){
translate([f8x-7-((f1y+d2y+drawergap+1)-(0.26/2)),f8y/2,0]) //?x interfaces with what? need to calculate center of F8
cylinder(h = f8z, r = f8boltD/2);
translate([f8x-7-((f1y+d2y+drawergap+1)+(0.26/2)),f8y/2,0])
cylinder(h = f8z, r = f8boltD/2);
}
hull(){
translate([f8x-((f1y+d2y+drawergap+1)-(0.26/2)),f8y/2,0]) //?x interfaces with what?
cylinder(h = f8z, r = f8boltD/2);
translate([f8x-((f1y+d2y+drawergap+1)+(0.26/2)),f8y/2,0])
cylinder(h = f8z, r = f8boltD/2);
}
}
} //end f8p module
F9
Welds to: F8, F11
Bolts to: F1, F4, F6
Abuts: A1 ?, A2 ?, F12
include <vars.scad>;
use <modus.scad>;
f9p();
module f9p(){
difference(){
cube([f9x,f9y,f9z]);
translate([(3/12)*f9x,0,0])
cornerjoint(f9z,(f8x/6),f8z,0.25,0.5,0.125,0,1);
translate([(7/12)*f9x,0,0])
cornerjoint(f9z,(f8x/6),f8z,0.25,0.5,0.125,0,1);
translate([(11/12)*f9x,0,0])
cornerjoint(f9z,(f8x/6),f8z,0.25,0.5,0.125,0,1);
translate([0,f9y-0.5,0])
tabinsert(0.5,0.5,f9z,0.03125,0.125,0,0,0,0,0.25,0.25,0,0,0);
translate([f9x-f1y-d2y-f4y-drawergap-0.5,f9y-0.5,0])
tabinsert(0.5,0.5,f9z,0.03125,0.125,0,0,0,0,0.25,0.25,0.25,0.25,0);
translate([f9x-0.5,f9y-0.5,0])
tabinsert(0.5,0.5,f9z,0.03125,0.125,0,0,0,0,0,0,0.25,0.25,0);
//big cutout
translate([f9x-(f1y-0.2)-(a2x+0.4),f9y-1.4,0])
cube([a2x+0.4,1.4,f9z]); //?interfaces with a2?
//bolt holes
//f6
translate([2,2,0]) //?x interfaces with f6?
//replacing translate y=1.9 with y=f9y-2.5
cylinder(h = f9z, r = 0.38);
translate([6,2,0]) //?x interfaces with f6?
cylinder(h = f9z, r = 0.38);
//distance from center to edge of part is 1.5
//distance between center to center is 9.5283
//distance from center to edge of part is 2
//gap between parts is 6.0283
//drawer is 6.0 tall
//leaves 0.0283 space
//should this be 0.03125? (1/32)
//should f4 be attached with 4 smaller bolts instead of 3 big ones. would prevent all movement?
//f4
translate([f9x-f1y-d2y-drawergap-2,2,0]) //replacing translate y=1.9 with f9y-2.5
cylinder(h = f9z, r = 0.5025);
translate([f9x-f1y-d2y-drawergap-5,2,0])
cylinder(h = f9z, r = 0.5025);
translate([f9x-f1y-d2y-drawergap-9,2,0])
cylinder(h = f9z, r = 0.5025);
//f1
translate([f9x-4.5,2,0]) //?x interfaces with f1?
cylinder(h = f9z, r = 0.38);
translate([f9x-1.5,2,0]) //?x interfaces with f1?
cylinder(h = f9z, r = 0.38);
}
}
F10
Welds to: F8?
- is this part being retired?
F10x=5.9; F10y=2; F10z=0.5; cube([F10x,F10y,F10y]);
F11
Welds to: F9
include <vars.scad>;
use <modus.scad>;
f11p();
module f11p(){
difference(){
translate([0,-(f11y/2),0])
cube([f11x,f11y,f11z]);
translate([0,-(f11y/2),0])
cuts();
translate([0,(f11y/2),0])
mirror([0,1,0])
cuts();
} //end difference
module cuts(){
translate([0.5,0,0])
cube([0.125,0.125+f9z,f11z]);
translate([0.625,0,0])
cube([f11x-0.5-0.125,f9z,f11z]);
} //end cuts module
} //end f11p module
F12
Bolts to Hopper Seat
include <vars.scad>;
use <modus.scad>;
f12p();
module f12p(){
difference(){
translate([-(f12x/2),0,0])
cube([f12x,f12y,f12z]);
translate([-(f12x/2),0,0])
cuts();
translate([(f12x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
translate([5.375,(f3y/2),0]) //??5.375 should this be something else
cylinder(h = f12z, r = 0.5);
translate([5.375,(f12y/2)+(brickW/2)+(f3y/2),0])
cylinder(h = f12z, r = 0.5);
translate([f12x/2,f12y/2,f12z/2])
cube(size=[brickL+(d2z*2)+fZstandard,brickW+fZstandard,f12z], center=true);
} //end cuts module
} //end f12p module
F13
Spacer betwwen F6 and F9 used to accomidate MAINcylinder with larger diameter than brickW
include <vars.scad>;
use <modus.scad>;
f13p();
module f13p(){
difference(){
cube([f6y,f9y,f13z]);
translate([2,f9y-2.5,0]) //?x interfaces with f6?
//replacing translate y=1.9 with y=f9y-2.5
cylinder(h = f9z, r = 0.38);
translate([6,f9y-2.5,0]) //?x interfaces with f6?
cylinder(h = f9z, r = 0.38);
}
} //end f13p module
F14
Weld to F4
Same as F2 but different length
include <vars.scad>;
use <modus.scad>;
f14p();
module f14p(){
difference(){
cube([f14x,f14y,f14z]);
translate([1,0,0])
cornerjoint(f14z,f14x-2,f4z,0.125,f14x-2-0.25,0.125,0,0);
} //end difference
} //end f14p module
Arms
Arm Assembly
- need to add inserts for drawer cylinder mount
include <vars.scad>;
use <modus.scad>;
use<a1p.scad>;
use<a2p.scad>;
use<a3p.scad>;
use<a4p.scad>;
use<a5p.scad>;
use<d7p.scad>;
Ap();
module Ap(){
translate([-(f5x/2)+(a1x/2),0,0]){
translate([(a1x/2)-a1x,0,0])
a1p();
translate([(a1x/2)-a2z,0,a2x])
rotate([0,90,0])
a2p();
} //end translate
translate([(f5x/2)-(a1x/2),0,0]){
mirror([1,0,0]){
translate([(a1x/2)-a1x,0,0])
a1p();
translate([(a1x/2)-a2z,0,a2x])
rotate([0,90,0])
a2p();
} //end mirror
} //end translate
translate([a3y/2,a3z,-a3x])
rotate([0,270,90])
a3p();
translate([a4y/2,a4x,0])
rotate([180,0,270])
a4p();
translate([cylDrawerE/2,-(d7x/2)+(a4x/2),-a4z])
rotate([90,0,90])
d7p();
mirror([1,0,0]){
translate([cylDrawerE/2,-(d7x/2)+(a4x/2),-a4z])
rotate([90,0,90])
d7p();
}
translate([a3y/2,a2y,-a3x])
rotate([0,270,90])
a3p();
translate([a5y/2,a2y-a5x,-a5z])
rotate([0,0,90])
a5p();
}
A1
Welds to: A2, A6
Bolts to: A4, A5, F1, H7, H8
Abuts: F9
- need to tweak so that fully extended drawer cylinder places drawer with opening beneath hopper opening
- use cylinder spec of minimum length/maximum length when extended
include <vars.scad>;
use <modus.scad>;
a1p();
module a1p(){
difference(){
cube([a1x,a1y,a1z]);
translate([(0.625/2),1,0])
tabinsert(0.625,a6z+(dGap*2),a1z,0.0625,0.125,0,0,0.25,0.25,0.25,0.25,0,0,1);
translate([(0.625/2),distancetof8center,0]) // center in middle F8
tabinsert(0.625,a6z+(dGap*2),a1z,0.0625,0.125,0,0,0.25,0.25,0.25,0.25,0,0,1);
translate([(0.625/2),a1y-1,0])
tabinsert(0.625,a6z+(dGap*2),a1z,0.0625,0.125,0,0,0.25,0.25,0.25,0.25,0,0,1);
translate([a1x/2,(a4x/2)-1,0])
cylinder(h = a1z, r = 0.4); // could create a variable for this bolt size
translate([a1x/2,(a4x/2)+1,0])
cylinder(h = a1z, r = 0.4);
//H7
translate([a1x/2,distancetof8center-(brickW/2)-f5y-(1.75),0])
cylinder(h = a1z, r = 0.4);
//H7
translate([a1x/2,distancetof8center-(brickW/2)-f5y-(h7y-1.75),0])
cylinder(h = a1z, r = 0.4);
//F5
translate([a1x/2,distancetof8center-(brickW/2)-(f5y-1.5),0])
cylinder(h = a1z, r = 0.4);
//F5
translate([a1x/2,distancetof8center+(brickW/2)+(f5y-1.5),0])
cylinder(h = a1z, r = 0.4);
//H8
translate([a1x/2,distancetof8center+(brickW/2)+f5y+(2),0])
cylinder(h = a1z, r = 0.4);
//H8
translate([a1x/2,distancetof8center+(brickW/2)+f5y+(5),0])
cylinder(h = a1z, r = 0.4);
//H8
translate([a1x/2,distancetof8center+(brickW/2)+f5y+(h8y-2),0])
cylinder(h = a1z, r = 0.4);
//A5
translate([a1x/2,a1y-(a5x/2),0])
cylinder(h = a1z, r = 0.4);
//corner joints
cjtablength=((a1y-(0.125*5.5))/12);
cjinsertlength=cjtablength+0.125;
for(i=[0:5])
translate([a1x+0.00001,(i*(cjtablength+cjinsertlength))+(cjinsertlength/2)-(0.125/2),0])
rotate([0,0,90])
cornerjoint(a1z,cjinsertlength,a2z,0.125,0.5,0.125,0,1);
} //end difference
} //end a1p module
A2
Welds to: A1, A6
Bolts to: Guards, Hopper mounts
Abuts: F1 (?), F9
include <vars.scad>;
use <modus.scad>;
a2p();
module a2p(){
difference(){
cube([a2x,a2y,a2z]);
translate([(0.625/2),1,0])
tabinsert(0.625,a6z+(dGap*2),a2z,0.0625,0.125,0,0,0.25,0.25,0.25,0.25,0,0,1);
translate([(0.625/2),distancetof8center,0]) // center in middle F8
tabinsert(0.625,a6z+(dGap*2),a2z,0.0625,0.125,0,0,0.25,0.25,0.25,0.25,0,0,1);
translate([(0.625/2),a2y-1,0])
tabinsert(0.625,a6z+(dGap*2),a2z,0.0625,0.125,0,0,0.25,0.25,0.25,0.25,0,0,1);
//corner joints
cjtablength=((a2y-(0.125*5.5))/12);
cjinsertlength=cjtablength+0.125;
for(i=[0:5])
translate([a2x+0.00001,(i*(cjtablength+cjinsertlength))+(cjinsertlength/2)-(0.125/2)+(cjtablength+(0.125/2)),0])
rotate([0,0,90])
cornerjoint(a2z,cjinsertlength,a1z,0.125,0.5,0.125,0,1);
} //end difference
} //end a2p module
A3
Welds to: A4, A5
include <vars.scad>;
use <modus.scad>;
a3p();
module a3p(){
difference(){
cube([a3x,a3y,a3z]);
//corner joints
cjtablength=((a3y-(0.125*5.5))/12);
cjinsertlength=cjtablength+0.125;
for(i=[0:5])
translate([a3x+0.00001,(i*(cjtablength+cjinsertlength))+(cjinsertlength/2)-(0.125/2)+(cjtablength+(0.125/2)),0])
rotate([0,0,90])
cornerjoint(a3z,cjinsertlength,a4z,0.125,0.5,0.125,0,1);
} //end difference
} //end a3p module
A4
Welds to: A3
Bolts to: A1
- add insert holes for drawer part D7
- location will be determined by cylinder specifications.
- length of A1 and holes to attach to A4 will need to be go along with this.
include <vars.scad>;
use <modus.scad>;
a4p();
module a4p(){
difference(){
cube([a4x,a4y,a4z]);
//corner joints
cjtablength=((a4y-(0.125*5.5))/12);
cjinsertlength=cjtablength+0.125;
for(i=[0:5])
translate([a4x+0.00001,(i*(cjtablength+cjinsertlength))+(cjinsertlength/2)-(0.125/2),0])
rotate([0,0,90])
cornerjoint(a4z,cjinsertlength,a3z,0.125,0.5,0.125,0,1);
} //end difference
} //end a4p module
A5
Welds to: A3
Bolts to: A1
include <vars.scad>;
use <modus.scad>;
a5p();
module a5p(){
difference(){
cube([a5x,a5y,a5z]);
//corner joints
cjtablength=((a5y-(0.125*5.5))/12);
cjinsertlength=cjtablength+0.125;
for(i=[0:5])
translate([a5x+0.00001,(i*(cjtablength+cjinsertlength))+(cjinsertlength/2)-(0.125/2),0])
rotate([0,0,90])
cornerjoint(a5z,cjinsertlength,a3z,0.125,0.5,0.125,0,1);
} //end difference
} //end a5p module
A6
Welds to: A1, A2
include <vars.scad>;
use <modus.scad>;
a6p();
module a6p(){
X=a2x;
Y=a1x;
Zx=a2z;
Zy=a1z;
W=min(((1)/cos((atan((Y-1)/(X-1))))),((1)/sin((atan((Y-1)/(X-1))))));
//trying to make some overhang for insert to butt up against. not perfect but working
//trying for 0.5, but not getting there exactly
difference(){
union(){
translate([-1/tan(atan((Y-1)/(X-1))),0,0])
rotate([0,0,atan((Y-1)/(X-1))])
translate([0,-W,0])
#cube([50,W,a6z]);
cube([0.625,Zx,a6z]);
translate([X-Zy,Y-0.625,0])
cube([Zy,0.625,a6z]);
} //end union - start difference
translate([0.625,0,0])
cube([100,Zx,a6z]);
translate([-100,-99,0])
cube([100,100,a6z]);
translate([0,-100,0])
cube([100,100,a6z]);
translate([0,Y,0])
cube([100,100,a6z]);
translate([X,0,0])
cube([100,100,a6z]);
translate([X-Zy,Y-0.625-100,0])
cube([Zy,100,a6z]);
} //end difference
} //end a6p module
Drawer
Drawer Assembly
- origin located at center of bottom of compression chamber
- X-axis oriented along movement of drawer
- Dp.scad
include <vars.scad>;
use <modus.scad>;
use<d1p.scad>;
use<d2p.scad>;
use<d3p.scad>;
use<d4p.scad>;
use<d5p.scad>;
use<d6p.scad>;
use<d8p.scad>;
use<d9p.scad>;
use<d12p.scad>;
use<dRodBushingHolder2top.scad>;
use<dRodBushingHolder2bottom.scad>;
Dp();
module Dp(){
//main translate
translate([-d8y-d6z-(brickW/2),-d2z-(brickL/2),0]){
translate([0,d2z,0])
rotate([90,0,0])
d2p();
translate([0,d2z+d2z+brickL,0])
rotate([90,0,0])
d2p();
translate([0,d8x/2,0])
rotate([0,0,270])
d8p();
translate([d8y-f2y+d6z,d12x/2,d2y-d12z])
rotate([0,0,90])
d12p();
translate([d8y-f2y+d6z-d12y,((d1x/2)+(d11x/2))-((((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2))),d3y+d1z])
rotate([0,0,270])
dRodBushingHolderbottom(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD,d1nut2AF,d1nut2H);
translate([d8y-f2y+d6z-d12y+d11y,(d1x/2)-(d11x/2)+((((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2))),d3y+d1z])
rotate([0,0,90])
dRodBushingHolderbottom(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD,d1nut2AF,d1nut2H);
translate([d8y+d6z,d6x/2,0])
rotate([90,0,270])
d6p();
translate([d8y+d6z+brickW,d3x/2,d3y])
rotate([270,0,270])
d3p();
translate([d8y+d6z+brickW+d3z,d5x/2,0])
rotate([0,0,270])
d5p();
translate([d8y+d6z+brickW+d3z+(d5y/2),((d5x/2)+(d5z/2))-(brickL/4),0])
rotate([90,0,0])
d4p();
translate([d8y+d6z+brickW+d3z+(d5y/2),(d5x/2)+(d5z/2),0])
rotate([90,0,0])
d4p();
translate([d8y+d6z+brickW+d3z+(d5y/2),((d5x/2)+(d5z/2))+(brickL/4),0])
rotate([90,0,0])
d4p();
translate([d8y+d6z+brickW+d5y+d3z,d3x/2,d3y])
rotate([270,0,270])
d3p();
translate([d8y+d6z,(((d6x-cylinderDRAWERrodclevisW)/2)-(d9z)),0])
rotate([90,0,180])
d9p();
translate([d8y+d6z,(cylinderDRAWERrodclevisW+d9z)+((((d6x-cylinderDRAWERrodclevisW)/2)-(d9z))),0])
rotate([90,0,180])
d9p();
translate([(d8y+d6z+brickW),(brickL/2)+d2z,d3y])
rotate([0,0,270])
d1p();
translate([(d8y+d6z+brickW)+d1y-d11y,((d1x/2)+(d11x/2))-((((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2))),d3y+d1z])
rotate([0,0,270])
dRodBushingHolderbottom(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD,d1nut2AF,d1nut2H);
translate([(d8y+d6z+brickW)+d1y,(d1x/2)-(d11x/2)+((((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2))),d3y+d1z])
rotate([0,0,90])
dRodBushingHolderbottom(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD,d1nut2AF,d1nut2H);
//translate([0,0,0])
//dRodBushingHoldertop(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD);
//
//add drawer cylinger rod half and rod clevis
//
} //end main translate
} //end Dp module
D1
- does D1 need to be longer to prevent bushing holder from hitting D3?
- can the holes for the bushing holders be tapped? do they need to have bolts?
- any room below? bricks sliding here.
- can nuts welded above holes?
- d1p.scad
include <vars.scad>;
use <modus.scad>;
d1p();
module d1p(){
difference(){
translate([-(d1x/2),0,0])
cube([d1x,d1y,d1z]);
translate([-(d1x/2),0,0])
cuts();
translate([(d1x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
translate([(d1x-brickL-d2z-d2z)/2,1.5,0]) //1.5 could be better defined
cube([d2z+dGap,d3z+brickW-1.5,d1z]); //June freecad model has larger cut out
//d11 bolt 1a - will these holes need to be tapped?
translate([((d1x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2)-((d1bolt1OD/2)+0.5),d1y-(d1bolt1OD/2)-0.5,0])
cylinder(h = f1z, r = d1bolt1OD/2);
//d11 bolt 1b - will these holes need to be tapped?
translate([((d1x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2)-((d1bolt1OD/2)+0.5),d1y-d11y+((d1bolt1OD/2)+0.5),0])
cylinder(h = f1z, r = d1bolt1OD/2);
//mid section excess cut
translate([((d1x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2),d1y-brickW,0])
cube([d1x-((((d1x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2))*2),brickW,d1z]);
} //end module
} //end d1p module
D2
- need to switch to "tabinsert" module
Welds to: D1, D3 (2), D5, D6, D8
include <vars.scad>;
use <modus.scad>;
echo(d8y+d6z+brickW+d3z+d5y+d3z); //total length of part
d2p();
module d2p(){
difference(){
cube([d2x,d2y,d2z]);
//cuts numbered clockwise from top left
//1 - D12
translate([0,d2y-d12z,0])
tabinsert(d8y-f2y+d6z,d12z,d2z,dGap,0.125,0,0,0,0,0.25,0.25,0,0,0);
//2 - D6
translate([d8y,d2y-0.5,0])
tabinsert(d6z,0.5,d2z,dGap,0.125,0,0,0,0,0.25,0.25,0.25,0.25,0);
//3 - D3, D1
translate([d8y+d6z+brickW,d2y-d1z-0.75,0])
tabinsert(d3z,d1z+0.75,d2z,dGap,0.125,0,0,0,0,0.375,0.25,0.25,0.375,0);
translate([d8y+d6z+brickW+d3z,d2y-d1z,0])
tabinsert(1.5-d3z,d1z,d2z,dGap,0.125,0,0,0,0,0.25,0.625,0,0,0);
//4 - D3, D1
translate([d2x-d3z,d2y-0.75-d1z,0]) //put in far corner
tabinsert(d3z,d1z+0.75,d2z,dGap,0.125,0,0,0,0,0,0,0.25,0.5,0);
//5 - D3, D5
translate([d8y+d6z+brickW+d3z+(d5y-0.5),0,0])
tabinsert(0.5,d5z,d2z,dGap,0.125,0.25,0.25,0,0,0,0,0,0,0);
translate([d8y+d6z+brickW+d3z+d5y,0,0])
tabinsert(d3z,0.75,d2z,dGap,0.125,0.25,0.25,0,0,0,0,0,0,0);
//6 - D3, D5
translate([d8y+d6z+brickW,0,0])
tabinsert(d3z,0.75,d2z,dGap,0.125,0.5,0.25,0.25,0.25,0,0,0,0,0);
translate([d8y+d6z+brickW+d3z,0,0])
tabinsert(0.5,d5z,d2z,dGap,0.125,0,0,0.25,0.375,0,0,0,0,0);
//7 - D6, D8
translate([d8y-0.75,0,0])
tabinsert(0.75,d8z,d2z,dGap,0.125,0.25,0.25,0,0,0,0,0,0,0);
translate([d8y,0,0])
tabinsert(d6z,1,d2z,dGap,0.125,0.25,0.25,0.25,0.625,0,0,0,0,0);
//8 - D8
tabinsert(0.75,d8z,d2z,dGap,0.125,0,0,0.25,0.25,0,0,0,0,0);
//clovis pin access hole
translate([min((d8y-(d2clevispinaccessholeOD/2)),(d8y-((d9x-d6z)/2))),max((d8z+0.25+(d2clevispinaccessholeOD/2)),(((d9y-d8z)/2)+d8z)),0])
cylinder(h = d2z, r = d2clevispinaccessholeOD/2);
} //end difference
} //end d2p module
D3
include <vars.scad>;
use <modus.scad>;
//this part is rendered upside down from placement
d3p();
module d3p(){
difference(){
translate([-(d3x/2),0,0])
cube([d3x,d3y,d3z]);
translate([-(d3x/2),0,0])
cuts();
translate([(d3x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
translate([0,d3y/2,0])
cornerjoint(d3z,d3y-(0.75*2),d2z,0.125,0.25,0.125,270,1);
//outer columns tab inserts
translate([(brickL/4)+d2z,d3y-d5z-(0.75/2),0])
tabinsert(d4z,0.75,d3z,dGap,0.09375,0.375,0.25,0.25,0.375,0.375,0.25,0.25,0.375,1);
translate([(brickL/4)+d2z,0,0])
tabinsert(d4z,(0.75*2),d3z,dGap,0.09375,0.625,0.25,0.25,0.625,0,0,0,0,1);
//center column tab inserts
translate([d3x/2,d3y-d5z-(0.75/2),0])
tabinsert(d4z,0.75,d3z,dGap,0.09375,0.375,0.25,0.25,0.375,0.375,0.25,0.25,0.375,1);
translate([d3x/2,0,0])
tabinsert(d4z,(0.75*2),d3z,dGap,0.09375,0.625,0.25,0.25,0.625,0,0,0,0,1);
} //end cuts module
} //end d3p module
D4
include <vars.scad>;
use <modus.scad>;
d4p();
module d4p(){
difference(){
translate([-(d4x/2),0,0])
cube([d4x,d4y,d4z]);
translate([-(d4x/2),0,0])
cuts();
translate([(d4x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
translate([0,d5z+0.75,0])
cornerjoint(d4z,(d4y-(0.75*2)-d5z),d3z,0.125,((d4y-(0.75*2)-d5z))-(0.125*2),0.125,270,0);
translate([-0.125,0,0])
cornerjoint(d4z,((d4x-0.5)/2)+(0.125),d5z,0.125,((d4x-0.5)/2)-0.125,0.125,0,0);
} //end cut module
} //end d4p module
D5
- d5p.scad
include <vars.scad>;
use <modus.scad>;
d5p();
module d5p(){
difference(){
translate([-(d5x/2),0,0])
cube([d5x,d5y,d5z]);
translate([-(d5x/2),0,0])
cuts();
translate([(d5x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
translate([0,d5y/2,0])
cornerjoint(d5z,d5y-(0.5*2),d2z,0.125,0.25,0.125,270,1);
translate([1,0,0])
cube([(d5x-(1*3))/2,0.125,d5z]);
translate([1,d5y-0.125,0])
cube([(d5x-(1*3))/2,0.125,d5z]);
//outer inserts
translate([(brickL/4)+d2z,d5y/2,0])
tabinsert(0.5,0.5,d5z,0.03125,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1);
//center insert
translate([d5x/2,d5y/2,0])
tabinsert(0.5,0.5,d5z,0.03125,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1);
} //end cuts module
} //end d5p module
D6
- when brick height is smaller that d9y, could cut out center of D6 to allow for clevis to be lower
include <vars.scad>;
use <modus.scad>;
d6p();
module d6p(){
difference(){
translate([-(d6x/2),0,0])
cube([d6x,d6y,d6z]);
translate([-(d6x/2),0,0])
cuts();
translate([(d6x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
translate([0,1,0])
cornerjoint(d6z,d6y-1-0.5,d2z,0.125,0.25,0.125,270,0);
translate([(((d6x-cylinderDRAWERrodclevisW)/2)-(d9z/2)),((d9y-d8z)/2)+d8z,0])
tabinsert(d9z,0.5,d5z,0.03125,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1);
} //end cuts module
} //end d6p module
D7
- Should this part be re-categorized as an Arm part?
- Welds to A4
- tweaking to add inserts to aid weld
- d7p.scad
include <vars.scad>;
use <modus.scad>;
//need to add holes to A4 for cornerjoint
d7p();
module d7p(){
difference(){
cube([d7x,d7y,d7z]);
//joint
translate([d7x/2,0,0])
cornerjoint(d7z,(d7x-1),a4z,0.125,0.25,0.125,0,1);
//pin hole
translate([d7x/2,a4z+d8z+(cylinderDRAWERbodyH/2),0])
cylinder(h = d7z,r = (cylinderDRAWERrearclevisID/2));
} //end difference
} //end d7p module
D8
- insert holes' position is wrong
include <vars.scad>;
use <modus.scad>;
d8p();
module d8p(){
difference(){
translate([-(d8x/2),0,0])
cube([d8x,d8y,d8z]);
translate([-(d8x/2),0,0])
cuts();
translate([(d8x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
translate([0,d8y/2,0])
cornerjoint(d8z,d8y-(0.75*2),d2z,0.125,0.25,0.125,270,1);
translate([1,d8y-0.125,0])
cube([(d8x-(1*3))/2,0.125,d8z]);
translate([(((d6x-cylinderDRAWERrodclevisW)/2)-(d9z/2)),d8y-((d9x-d6z)/2),0])
tabinsert(d9z,0.5,d5z,0.03125,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1);
} //end module
} //end d8p module
D9
Welds to: D6, D8
- when d2y is smaller than d9y, need limit d9y
- in turn, need to make sure pin hole is lower than top edge of D9
- uses drawer cylinder height to determine clevis pin location
include <vars.scad>;
use <modus.scad>;
d9p();
module d9p(){
difference(){
cube([d9x,d9y,d9z]);
//x
translate([-0.125,0,0])
cornerjoint(d9z,0.125+(d6z+((d9x-d6z-0.5)/2)),d8z,0.125,(d6z+((d9x-d6z-0.5)/2))-0.125,0.125,0,0);
translate([0.5+(d6z+((d9x-d6z-0.5)/2)),0,0])
cornerjoint(d9z,((d9x-d6z-0.5)/2)+0.125,d8z,0.125,((d9x-d6z-0.5)/2)-0.125,0.125,0,0);
//y
translate([0,-0.125,0])
cornerjoint(d9z,0.125+(d8z+((d9y-d8z-0.5)/2)),d6z,0.125,(d8z+((d9y-d8z-0.5)/2))-0.125,0.125,270,0);
translate([0,0.5+(d8z+((d9y-d8z-0.5)/2)),0])
cornerjoint(d9z,((d9y-d8z-0.5)/2)+0.125,d6z,0.125,((d9y-d8z-0.5)/2)-0.125,0.125,270,0);
//pin hole
translate([(0.5/2)+(d6z+((d9x-d6z-0.5)/2)),(0.5/2)+(d8z+((d9y-d8z-0.5)/2)),0])
cylinder(h = d9z,r = (cylinderDRAWERrodclevisID/2));
}
} //end d9p module
D10
d10x=18;
d10y=3;
d10z=dZstandard;
$fn=20;
difference(){
cube([d10x,d10y,d10z]);
translate([1,d10y/2,0])
cylinder(h = d10z,r = 0.55);
translate([4,d10y/2,0])
cylinder(h = d10z,r = 0.55);
translate([9,d10y/2,0])
cylinder(h = d10z,r = 0.55);
translate([14,d10y/2,0])
cylinder(h = d10z,r = 0.55);
translate([17,d10y/2,0])
cylinder(h = d10z,r = 0.55);
} //end difference
D11
Plate to clamp down bushing holder
include <vars.scad>;
use <modus.scad>;
//to be mounted on top of bushing holder. clamps holder down with screws
d11p();
module d11p(){
difference(){
cube([d11x,d11y,d11z]);
//bolt 1a
translate([(d1bolt1OD/2)+0.5,d11y-(d1bolt1OD/2)-0.5,0])
cylinder(h=d11z, r=d1bolt1OD/2);
//bolt 1b
translate([(d1bolt1OD/2)+0.5,(d1bolt1OD/2)+0.5,0])
cylinder(h=d11z, r=d1bolt1OD/2);
//bolt 2a
translate([d11x-((d1bolt1OD/2)+0.5),d11y-(d1bolt1OD/2)-0.5,0])
cylinder(h=d11z, r=d1bolt2OD/2);
//bolt 2b
translate([d11x-((d1bolt1OD/2)+0.5),(d1bolt1OD/2)+0.5,0])
cylinder(h=d11z, r=d1bolt2OD/2);
} //end difference
} //end d11p module
D12
Welds to D2
Holds bushing holders
include <vars.scad>;
use <modus.scad>;
d12p();
module d12p(){
difference(){
translate([-(d12x/2),0,0])
cube([d12x,d12y,d12z]);
translate([-(d12x/2),0,0])
cuts();
translate([(d12x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
//d11 bolt 1a - will these holes need to be tapped?
translate([((d12x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2)-((d1bolt1OD/2)+0.5),d12y-(d1bolt1OD/2)-0.5,0])
cylinder(h = f1z, r = d1bolt1OD/2);
//d11 bolt 1b - will these holes need to be tapped?
translate([((d12x/2)-(((brickL+(d2z*2)+drawerHgap)/2)-fZstandard-(sliderodholeOD/2)))+(d11x/2)-((d1bolt1OD/2)+0.5),d12y-d11y+((d1bolt1OD/2)+0.5),0])
cylinder(h = f1z, r = d1bolt1OD/2);
} //end module
} //end d1p module
RodBushingHolder
- should two bushings be mounted inside each holder like D3D?
Upper Half
include <vars.scad>;
use <modus.scad>;
//this 3D printed part will be mounted to the drawer and hold a brass bushing
dRodBushingHoldertop(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD);
module dRodBushingHoldertop(bushingOD,bushingL,shaftOD,bolt1OD,bolt2OD){
$fn=200;
X=1.5+(bolt1OD*2)+bushingOD;
Y=max((0.5+bushingL),4);
Z=0.25+(bushingOD/2);
difference(){
cube([X,Y,Z]);
//bolt 1a
translate([(bolt1OD/2)+0.5,Y-(bolt1OD/2)-0.5,0])
cylinder(h=Z, r=bolt1OD/2);
//bolt 1b
translate([(bolt1OD/2)+0.5,(bolt1OD/2)+0.5,0])
cylinder(h=Z, r=bolt1OD/2);
//bolt 2
// translate([X-(0.25+bolt1OD/2),Y/2,0])
// cylinder(h=Z, r=bolt1OD/2);
//bolt 2a
translate([X-((bolt1OD/2)+0.5),Y-(bolt1OD/2)-0.5,0])
cylinder(h=Z, r=bolt2OD/2);
//bolt 2b
translate([X-((bolt1OD/2)+0.5),(bolt1OD/2)+0.5,0])
cylinder(h=Z, r=bolt2OD/2);
//bushing
translate([X/2,(Y/2)+(bushingL/2),Z])
rotate([90,0,0])
cylinder(h=bushingL, r=bushingOD/2);
//shaft
translate([X/2,Y,Z])
rotate([90,0,0])
cylinder(h=Y, r=(shaftOD*1.05)/2);
} //end difference
} //end module
Lower Half
include <vars.scad>;
use <modus.scad>;
//this 3D printed part will be mounted to the drawer and hold a brass bushing
dRodBushingHolderbottom(d1bushingOD,d1bushingOD,d1shaftOD,d1bolt1OD,d1bolt2OD,d1nut2AF,d1nut2H);
module dRodBushingHolderbottom(bushingOD,bushingL,shaftOD,bolt1OD,bolt2OD,nutAF,nutH){
$fn=50;
X=1.5+(bolt1OD*2)+bushingOD;
Y=max((0.5+bushingL),4);
Z=max((0.25+(bushingOD/2)),((d2z+0.5+(sliderodholeOD/2))+drawergap));
difference(){
cube([X,Y,Z]);
//bolt 1a
translate([(bolt1OD/2)+0.5,Y-(bolt1OD/2)-0.5,0])
cylinder(h=Z, r=bolt1OD/2);
//bolt 1b
translate([(bolt1OD/2)+0.5,(bolt1OD/2)+0.5,0])
cylinder(h=Z, r=bolt1OD/2);
//bolt 2
// translate([X-(0.25+bolt1OD/2),Y/2,0])
// cylinder(h=Z, r=bolt1OD/2);
//bolt 2a
translate([X-((bolt1OD/2)+0.5),Y-(bolt1OD/2)-0.5,0])
{
cylinder(h=Z, r=bolt2OD/2);
nut(nutAF,nutH);
}
//bolt 2b
translate([X-((bolt1OD/2)+0.5),(bolt1OD/2)+0.5,0])
{
cylinder(h=Z, r=bolt2OD/2);
nut(nutAF,nutH); // 3/4" nut size
}
//bushing
translate([X/2,(Y/2)+(bushingL/2),Z])
rotate([90,0,0])
cylinder(h=bushingL, r=bushingOD/2);
//shaft
translate([X/2,Y,Z])
rotate([90,0,0])
cylinder(h=Y, r=(shaftOD*1.05)/2); //105% of shaft
} //end difference
} //end module
Grate
G1
g1x=23;
g1y=2;
g1z=0.5;
$fn=20;
difference(){
cube([g1x,g1y,g1z]);
translate([7,g1y/2,0])
cylinder(h = g1z,r = 0.4065);
translate([16,g1y/2,0])
cylinder(h = g1z,r = 0.4065);
} //end difference
G2
g2x=56;
g2y=2.3;
g2z=0.5;
$fn=20;
union(){
difference(){
cube([g2x,g2y-0.1,g2z]);
translate([4.375,1.6,0]) //goofy distance apart holes
cylinder(h = g2z,r = 0.406);
translate([20.125,1.6,0])
cylinder(h = g2z,r = 0.406);
translate([35.875,1.6,0])
cylinder(h = g2z,r = 0.406);
translate([51.625,1.6,0])
cylinder(h = g2z,r = 0.406);
//first two cuts are goofy distance from begining, so is last one.
for(i=[0:((g2x-3.4)/1.75)])
translate([(i*1.75)+3.4,0,0])
cube([0.3,0.5,g2z]);
translate([1.6,0,0])
cube([0.3,0.5,g2z]);
} //end difference
//goofy distance from end
translate([15.9475,g2y-0.1,0])
cube([0.3,0.1,g2z]);
translate([g2x-15.9475-0.3,g2y-0.1,0])
cube([0.3,0.1,g2z]);
}
G3
g3x=2;
g3y=3;
g3z=0.5;
$fn=20;
difference(){
cube([g3x,g3y,g3z]);
translate([1,1,0])
cylinder(h = g3z,r = 0.40625);
} //end difference
G4
g4x=5;
g4y=2.5;
g4z=0.5;
$fn=20;
difference(){
cube([g4x,g4y,g4z]);
translate([1,1.25,0])
cylinder(h = g4z,r = 0.40625);
} //end difference
DXF Export Layout
- looking for workflow to use a Nesting Software to create cnc cutting layout
- All parts layed out in sequence for review in DXF format
- might find a way to label parts below X axis
xport-Dp.scad
include <vars.scad>; use <modus.scad>; //push the F6 key on your key board twice for projection view use<d1p.scad>; use<d2p.scad>; use<d3p.scad>; use<d4p.scad>; use<d5p.scad>; use<d6p.scad>; use<d7p.scad>; use<d8p.scad>; use<d9p.scad>; use<d10p.scad>; use<d11p.scad>; use<d12p.scad>; partspacing=1; //common distance between parts ps=partspacing; //d1 projection(cut = true) //use projection to create 2D DXF files translate([d1y,d1x/2,0]) rotate([0,0,90]) d1p(); //d2 (1/2) projection(cut = true) translate([d1y+ps+d2y,0,0]) rotate([0,0,90]) d2p(); //d2 (2/2) projection(cut = true) translate([d1y+ps+d2y,ps+d2x,0]) rotate([0,0,90]) d2p(); //d3 (1/2) projection(cut = true) translate([d1y+ps+d2y+ps+d3y,(d3x/2),0]) rotate([0,0,90]) d3p(); //d3 (2/2) projection(cut = true) translate([d1y+ps+d2y+ps+d3y,(d3x/2)+ps+d3x,0]) rotate([0,0,90]) d3p(); //d4 (1/3) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y,d4x/2,0]) rotate([0,0,90]) d4p(); //d4 (2/3) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y,(d4x/2)+ps+d4x,0]) rotate([0,0,90]) d4p(); //d4 (3/3) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y,(d4x/2)+ps+d4x+ps+d4x,0]) rotate([0,0,90]) d4p(); //d5 (1/1) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y,d5x/2,0]) rotate([0,0,90]) d5p(); //d6 (1/1) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y,d6x/2,0]) rotate([0,0,90]) d6p(); //d7 (1/2) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y,0,0]) rotate([0,0,90]) d7p(); //d7 (2/2) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y,ps+d7x,0]) rotate([0,0,90]) d7p(); //d8 (1/1) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y,d8x/2,0]) rotate([0,0,90]) d8p(); //d9 (1/2) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y,0,0]) rotate([0,0,90]) d9p(); //d9 (2/2) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y,ps+d9x,0]) rotate([0,0,90]) d9p(); //d10 (1/2) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y+ps+d10y,0,0]) rotate([0,0,90]) d10p(); //d10 (2/2) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y+ps+d10y,ps+d10x,0]) rotate([0,0,90]) d10p(); //d11 (1/2) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y+ps+d10y+ps+d11y,0,0]) rotate([0,0,90]) d11p(); //d11 (2/2) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y+ps+d10y+ps+d11y,ps+d11x,0]) rotate([0,0,90]) d11p(); //d12 (1/2) projection(cut = true) translate([d1y+ps+d2y+ps+d3y+ps+d4y+ps+d5y+ps+d6y+ps+d7y+ps+d8y+ps+d9y+ps+d10y+ps+d11y+ps+d12y,d12x/2,0]) rotate([0,0,90]) d12p();
xport-Fp.scad
include <vars.scad>; use <modus.scad>; //push the F6 key on your key board twice for projection view use <f1p.scad>; use <f2p.scad>; use <f3p.scad>; use <f4p.scad>; use <f5p.scad>; use <f6p.scad>; //use <f7p.scad>; use <f8p.scad>; use <f9p.scad>; //use <f10p.scad>; //part retired? use <f11p.scad>; use <f12p.scad>; //use <f13p.scad>; use <f14p.scad>; partspacing=1; //common distance between parts ps=partspacing; //f1 (1/2) projection(cut = true) //use projection to create 2f fXF files translate([f1y,(f1x/2),0]) rotate([0,0,90]) f1p(); //f1 (2/2) projection(cut = true) //use projection to create 2f fXF files translate([f1y,(f1x/2)+ps+f1x,0]) rotate([0,0,90]) f1p(); //f2 (1/2) projection(cut = true) translate([f1y+ps+f2y,0,0]) rotate([0,0,90]) f2p(); //f2 (2/2) projection(cut = true) translate([f1y+ps+f2y,ps+f2x,0]) rotate([0,0,90]) f2p(); //f3 (1/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y,(f3x/2),0]) rotate([0,0,90]) f3p(); //f3 (2/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y,(f3x/2)+ps+f3x,0]) rotate([0,0,90]) f3p(); //f4 (1/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y,f4x/2,0]) rotate([0,0,90]) f4p(); //f4 (2/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y,(f4x/2)+ps+f4x,0]) rotate([0,0,90]) f4p(); //f5 (1/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y,f5x/2,0]) rotate([0,0,90]) f5p(); //f5 (2/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y,(f5x/2)+ps+f5x,0]) rotate([0,0,90]) f5p(); //f6 (1/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y,f6x/2,0]) rotate([0,0,90]) f6p(); //f6 (2/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y,(f6x/2)+ps+f6x,0]) rotate([0,0,90]) f6p(); //f7 //projection(cut = true) //translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y,0,0]) //rotate([0,0,90]) //f7p(); //f8 (1/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y,0,0]) rotate([0,0,90]) f8p(); //f8 (2/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y,ps+f8x,0]) rotate([0,0,90]) f8p(); //f9 (1/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y,0,0]) rotate([0,0,90]) f9p(); //f9 (2/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y,ps+f9x,0]) rotate([0,0,90]) f9p(); //f10 //projection(cut = true) //translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y+ps+f10y,0,0]) //rotate([0,0,90]) //f10p(); //f11 for(i=[0:5]) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y+ps+f10y+ps+f11y-(f11y/2),i*(ps+f11x),0]) rotate([0,0,90]) f11p(); //f12 (1/1) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y+ps+f10y+ps+f11y+ps+f12y,f12x/2,0]) rotate([0,0,90]) f12p(); //f13 //projection(cut = true) //translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y+ps+f10y+ps+f11y+ps+f12y+ps+f13y,f12x/2,0]) //rotate([0,0,90]) //f13p(); //f14 (1/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y+ps+f10y+ps+f11y+ps+f12y+ps+f13y+ps+f14y,0,0]) rotate([0,0,90]) f14p(); //f14 (2/2) projection(cut = true) translate([f1y+ps+f2y+ps+f3y+ps+f4y+ps+f5y+ps+f6y+ps+f7y+ps+f8y+ps+f9y+ps+f10y+ps+f11y+ps+f12y+ps+f13y+ps+f14y,ps+f14x,0]) rotate([0,0,90]) f14p();
xport-Ap.scad
include <vars.scad>; use <modus.scad>; //push the F6 key on your key board twice for projection view use<a1p.scad>; use<a2p.scad>; use<a3p.scad>; use<a4p.scad>; use<a5p.scad>; use<a6p.scad>; partspacing=1; //common distance between parts ps=partspacing; //a1 (1/2) projection(cut = true) //use projection to create 2a aXF files translate([a1y,0,0]) rotate([0,0,90]) a1p(); //a1 (2/2) projection(cut = true) //use projection to create 2a aXF files translate([a1y,ps+a1x,0]) rotate([0,0,90]) a1p(); //a2 (1/2) projection(cut = true) translate([a1y+ps+a2y,0,0]) rotate([0,0,90]) a2p(); //a2 (2/2) projection(cut = true) translate([a1y+ps+a2y,ps+a2x,0]) rotate([0,0,90]) a2p(); //a3 (1/2) projection(cut = true) translate([a1y+ps+a2y+ps+a3y,0,0]) rotate([0,0,90]) a3p(); //a3 (2/2) projection(cut = true) translate([a1y+ps+a2y+ps+a3y,ps+a3x,0]) rotate([0,0,90]) a3p(); //a4 (1/1) projection(cut = true) translate([a1y+ps+a2y+ps+a3y+ps+a4y,0,0]) rotate([0,0,90]) a4p(); //a5 (1/1) projection(cut = true) translate([a1y+ps+a2y+ps+a3y+ps+a4y+ps+a5y,0,0]) rotate([0,0,90]) a5p(); for(i=[0:5]) //a6 (1/1) projection(cut = true) translate([a1y+ps+a2y+ps+a3y+ps+a4y+ps+a5y+ps+a6y,i*(ps+a6x),0]) rotate([0,0,90]) a6p();
Hydraulic Cylinders
Main Cylinder
$fn=20;
cylMainBore = 5;
cylMainStroke = 16;
cylMainExt = 43;
cylMainRet = 27;
cylMainA = (cylMainRet-cylMainStroke); //center to center minus stroke length
cylMainB = 0.25; // cylinder wall thickness
cylMainD = 2.5; //Rod OD
cylMainE = 5.75; //rear pin holder width
cylMainG = 4; //rod pin holder width
cylMainJ = 3.8; //distance from the end of the cylinder body to rod pin center
cylMainR = 1.52; //pin hole ID
cylMainS = 2.5; //pin holder OD
cylMain(0); //rodend pin holder: 1 = yes, 0 = no
module cylMain(PinYN){
MAINcylinder();
translate([0,0,cylMainRet]) //to animate include "+($t*(cylMainStroke))"
MAINcylinderROD(PinYN); //rodend pin holder: 1 = yes, 0 = no
}
module MAINcylinder(){
difference(){
translate([-cylMainE/2,0,0])
rotate([0,90,0])
cylinder(h = cylMainE, r = cylMainS/2);
translate([-cylMainE/2,0,0])
rotate([0,90,0])
cylinder(h = cylMainE, r = cylMainR/2);
} //end difference
translate([0,0,(cylMainS/2)])
cylinder(h = (cylMainRet-cylMainJ-(cylMainS/2)), r = (cylMainBore/2)+cylMainB);
}// end Main Cylinder module
module MAINcylinderROD(PinYN){
difference(){
translate([-cylMainG/2,0,0])
rotate([0,90,0])
cylinder(h = PinYN*(cylMainG), r = PinYN*(cylMainS/2));
translate([-cylMainG/2,0,0])
rotate([0,90,0])
cylinder(h = cylMainG, r = cylMainR/2);
} //end difference
translate([0,0,-(cylMainStroke+cylMainJ-(cylMainS/2))-(cylMainS/2)])
cylinder(h = cylMainStroke+cylMainJ-(cylMainS/2), r = cylMainD/2);
}
Drawer Cylinder
Full Assembly
include <vars.scad>; use <modus.scad>; use<Dp.scad>; use<Fp.scad>; use<Ap.scad>; use<cylMain.scad>; Dp(); translate([0,0,-((f9x-f1y-brickCH-drawergap-f4y)+f4y)]) rotate([0,0,90]) Fp(); translate([0,0,-((f9x-f1y-brickCH-drawergap-f4y)+f4y)+f2z+((cylMainS+0.125)/2)]) cylMain(0); rotate([0,0,270]) translate([0,-distancetof8center,0]) Ap();
To Do
- update with newest changes of the FreeCAD version
- get SVGnest to work for torch table layout
