CEB Press v16.09/SCAD Files/Parametric: Difference between revisions

From Open Source Ecology
Jump to navigation Jump to search
 
(131 intermediate revisions by the same user not shown)
Line 1: Line 1:
'''work in progress'''
'''work in progress''' moved on to [[CEB Press v17.08/SCAD Files/]]


creating an OpenSCAD replica of v16.09
creating an OpenSCAD replica of v16.09
Line 5: Line 5:
[[CEB Press v16.09/SCAD Files/Parametric]]
[[CEB Press v16.09/SCAD Files/Parametric]]


Latest files on Google Drive for download: [https://drive.google.com/open?id=0BwxMMqGvwTM-c2NMZ3dHVlpOQWM link]


=Default Variables=
=Default Variables=
Line 10: Line 11:
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. [https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Include_Statement#Variables Read More]
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. [https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Include_Statement#Variables Read More]


vars.scad
:::vars.scad


  <nowiki>
  <nowiki>
Line 17: Line 18:
brickCH=6;
brickCH=6;


$fn=20; //defines resolution of circles. 20 fine for modeling. 100 for final export.
$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
 
fBOLTHOLEstandardD=1; //standard bolts used on frame
sliderodholeOD=1.2;


dZstandard=0.5; //Z depth of D parts
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?
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?


//d2x calculated
//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.
 
d1z=dZstandard;
d1z=dZstandard;
d2z=dZstandard;
d3z=dZstandard;
d4z=dZstandard;
d5z=dZstandard;
d6z=dZstandard;
d5z=dZstandard;
d7z=dZstandard;
d8z=dZstandard;
d9z=dZstandard;
//frame
f1x=24.2;
f1y=6;
f1z=0.5;


d2y=brickCH;
f2y=3.5;
d2z=dZstandard;
f2z=fZstandard;
 
f3x=f1x;
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;
f9x=43.5;  //set based on MAINcylinder
f9z=fZstandard;
 
f8x=f9x;


d3z=dZstandard;
f11x=1.25;
f11z=fZstandard;


f13z=fZstandard;


d4z=dZstandard;
//arms


d6z=dZstandard;
a1x=4;
a1y=72; //calculate based on drawer cylinder
a1z=aZstandard;


d5x=13;
a2x=6;
d5y=6;
a2y=72; //calculate based on drawer cylinder
d5z=dZstandard;
a2z=aZstandard;


d8x=13;
a4z=aZstandard;
d8y=5;
a6z=aZstandard;
d8z=dZstandard;


//
//Input your main cylinder's dimenions here
//
cylinderMAINminC2E=0; //main hydraulic cylinder's distance from center of mounting hole to the end of the shaft when fully compressed.
cylinderMAINminC2E=0; //main hydraulic cylinder's distance from center of mounting hole to the end of the shaft when fully compressed.
cylinderMAINmaxC2E=0; //main hydraulic cylinder's distance from center of mounting hole to the end of the shaft when fully extended.
cylinderMAINmaxC2E=0; //main hydraulic cylinder's distance from center of mounting hole to the end of the shaft when fully extended.


//
//Input your drawer cylinder's dimenions here
//
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.
cylinderDRAWERmaxC2C=0; ///drawer's hydraulic cylinder's distance from the center of one mounting hole to the center of the other when fully extended.
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.


//variables calculated from other dimenions need to follow after others are defined
//the following variables are calculated in order of dependence on preceding variables
//following variables in order of dependence
 
d2x=d8y+d6z+brickW+d3z+d5y+d3z;
 
d3x=brickL+(d2z*2);
d3x=brickL+(d2z*2);
d3y=brickCH-d1z;
d3y=brickCH-d1z;
d4x=brickW+d3z+d3z;
d4x=brickW+d3z+d3z;
d4y=brickCH-d1z;
d4y=brickCH-d1z;
d5x=brickL+(d2z*2);
d5y=brickW;
d6x=brickL+(d2z*2);
d6y=brickCH;
d7x=cylinderDRAWERrearclevisClearance;
d7y=a4z+d8z+cylinderDRAWERbodyH;
d9x=cylinderDRAWERbodyH+d6z;
d9y=cylinderDRAWERbodyH+d8z;
d8x=brickL+(d2z*2);
d8y=max(5,(d9x-d6z));  //need to review fundamentals, 5 minimun unless d9 gets larger than d8
d1x=18.5;  //need to come up with a formula
d1y=18;    //need to come up with a formula
d2x=d8y+d6z+brickW+d3z+d5y+d3z;
d2y=brickCH;
f11y=f8y;
f6x=brickL+(d2z*2)+(f9y*2)+drawerHgap;
f8x=43.5;  //need to define based on MAINcylinder inputs
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


  </nowiki>
  </nowiki>
Line 71: Line 160:
//Corner Joint - allows the sides of two parts to create inlayed corner. Aids with welding.
//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.
//need to verify module math is the same throughout all parts.
module cornerjoint(Z,L,H,EndGap,PadL,PadH){
 
module cornerjoint(Z,L,H,EndGap,PadL,PadH,CJangle,CJcenter){
     //change so that H = Z of inlayed part (usually 0.5)
     //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
     //add center and angle in degrees option, orgin far side of cut out area
     difference(){
 
    cube([L,H,Z]);
    if((CJangle==0)&&(CJcenter==0))
         translate([EndGap,H-PadH,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]);
         cube([PadL,PadH,Z]);
         translate([L-EndGap-PadL,H-PadH,0])
         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]);
         cube([PadL,PadH,Z]);
    }
        translate([L-EndGap-PadL,H,0])
        cube([PadL,PadH,Z]);}
      }
} //end cornerjoint module
} //end cornerjoint module


Line 109: Line 284:
     } //end center translate
     } //end center translate
} //end tabinsert module
} //end tabinsert module
   
   
  </nowiki>
  </nowiki>
Line 114: Line 290:
=Frame=
=Frame=


==Assembly==
==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.
 
[[Image:CEBscad-frame.png|400px]]
 
:::Fp.scad


  <nowiki>
  <nowiki>
F4x=31; //?why not just 22?
include <vars.scad>;
F4y=11;
use <modus.scad>;
F4z=0.5;
 
F4basex=25;
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>;
use <f11p.scad>;
//use <f12p.scad>;
 
 
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


F6x=22.1875;  //?why not just 22?
translate([f2x/2,-(f8y/2),f9x-f1y])
F6y=8;
rotate([0,0,180])
F6z=0.5;
f2p();
translate([0,(f8y/2),f9x])
rotate([0,180,0])
f3p(); //connected to F1


F8x=43.5;
translate([0,-(f8y/2),f9x])
F8y=6;
rotate([0,180,180])
F8z=0.5;
f3p();  //connected to F1
F9x=43.5;
F9y=4.5;
F9z=0.5;
$fn=20;  //render final model at 100


// ----------------------- //
translate([0,(f8y/2)+f6z,(f9x-f1y-brickCH-drawergap-f4y)])
translate([0,(F8y/2)+F6z,20.472]) //Z from F9// //adjust with cylinder length//
rotate([90,0,0])
rotate([90,0,0])
F4();  //?group with F5?
f4p();  //?group with f5?
translate([0,-(F8y/2),20.472])
 
translate([0,-(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)])
rotate([90,0,0])
rotate([90,0,0])
F4();
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([-f2x/2,(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)+7.5-(f2z/2)])
rotate([0,0,0])
f2p();  //connected to F1
 
translate([f2x/2,-(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)+7.5-(f2z/2)])
rotate([0,0,180])
f2p();


translate([0,(F8y/2)+F6z,0])
translate([0,(f8y/2)+f6z,f6y])
rotate([90,0,0])
rotate([90,180,0])
F6();
f6p();
translate([0,-(F8y/2),0])
rotate([90,0,0])
F6();


translate([1.9-8.5,0,0]){
translate([0,-(f8y/2),f6y])
rotate([0,0,90]){
rotate([90,180,0])
translate([(F8y/2),F8z,0])
f6p();
rotate([90,-90,0])
F8();
translate([(F8y/2)+(F9z/2)-(F8z/2),0,0])
rotate([0,-90,0])
F9();
translate([-(F8y/2)+(F9z/2)+(F8z/2),0,0])
rotate([0,-90,0])
F9();
}
}


translate([-1.9+8.5,0,0]){
translate([-f2x/2,(f8y/2),0])
rotate([0,0,-90]){
rotate([0,0,0])
translate([(F8y/2),F8z,0])
f2p(); //connected to F6
rotate([90,-90,0])
F8();
translate([(F8y/2)+(F9z/2)-(F8z/2),0,0])
rotate([0,-90,0])
F9();
translate([-(F8y/2)+(F9z/2)+(F8z/2),0,0])
rotate([0,-90,0])
F9();
}
}


// ----------------------- //
translate([f2x/2,-(f8y/2),0])
rotate([0,0,180])
f2p(); 


module F4(){
translate([f6x/2,0,0])
    difference(){
rotate([0,0,180])
translate([-(F4x/2),0,0])
f11p();
cube([F4x,F4y,F4z]);
translate([-(F4x/2),0,0])
cuts();
translate([(F4x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
module cuts(){
    translate([0,0,0])  
        cube([3,5.375,F4z]);  


    translate([0,5.375,0])
translate([f6x/2,0,f9x-f1y-d2y-f4y-drawergap-0.5])
    difference(){
rotate([0,0,180])
        cube([3,5.125,F4z]);
f11p();
        translate([3,0,0])
        rotate([0,0,atan(3/5.125)])
        cube([10,10,F4z]);
    }


translate([(F4x/2)-13.6375,F4y-0.5,0])
translate([f6x/2,0,f9x-0.5])
    mirror([1,0,0])
rotate([0,0,180])
cube([(F4x/2)-13.6375,0.5,F4z]);
f11p();
translate([(F4x/2)-13.6375,F4y-0.625,0])
cube([2,0.625,F4z]);


    translate([(F4x/2)-0.8125,F4y-0.5,0])
translate([-f6x/2,0,0])
        cube([0.8125,0.5,F4z]);
rotate([0,0,0])
    translate([(F4x/2)-1.0625,F4y-0.625,0])
f11p();
        cube([0.25,0.625,F4z]);
   
    translate([(F4x/2)-9.8125,7.185,0]) //?part ycentered 7.5?
        cube([1.125,0.625,F4z]); //?interfaces with what? ?part F2?
   
    translate([(F4x/2)-8.5,2,0])
        cylinder(h = F4z, r = 0.5025); //diameter 1.0?
    translate([(F4x/2)-8.5,6,0])
        cylinder(h = F4z, r = 0.5025);
    translate([(F4x/2)-8.5,9,0])
        cylinder(h = F4z, r = 0.5025);
   
} //end module
   
}


module F6(){
translate([-f6x/2,0,f9x-f1y-d2y-f4y-drawergap-0.5])
difference(){
rotate([0,0,0])
translate([-(F6x/2),0,0])
f11p();
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([1.26,F6y-0.5,0]) //?xdistance from center?
        cube([1.125,0.5,F6z]); //?interfaces with what?


    translate([(F6x/2)-1.125,F6y-3.22,0])
translate([-f6x/2,0,f9x-0.5])
        cube([2.25,3.22,F6z]);
rotate([0,0,0])
    translate([F6x/2,F6y-3.22,0])
f11p();
        cylinder(h = F6z, r = 1.125);
   
    translate([(F6x/2)-8.5,2,0])
        cylinder(h = F6z, r = 0.38); //diameter 0.76?
    translate([(F6x/2)-8.5,6,0])
        cylinder(h = F6z, r = 0.38);
   
} //end module
}


module F8(){
translate([1.9-8.5,0,0]){  //???
    difference(){
rotate([0,0,90]){
cube([F8x,F8y,F8z]);
    translate([-0.0625,0,0])
        cornerjoint(7.375,0.625,0.25,0.5,0.125);
    translate([14.5-0.0625,0,0])
        cornerjoint(7.375,0.625,0.25,0.5,0.125);
    translate([14.5+14.5-0.0625,0,0])
        cornerjoint(7.375,0.625,0.25,0.5,0.125);
      
      
    translate([-0.0625,F8y,0])
translate([(f8y/2),f8z,0])
    mirror([0,1,0])
rotate([90,-90,0])
        cornerjoint(7.375,0.625,0.25,0.5,0.125);
f8p();
    translate([14.5-0.0625,F8y,0])
    mirror([0,1,0])
        cornerjoint(7.375,0.625,0.25,0.5,0.125);
    translate([14.5+14.5-0.0625,F8y,0])
    mirror([0,1,0])
        cornerjoint(7.375,0.625,0.25,0.5,0.125);  
      
      
    hull(){
translate([(f8y/2)+(f9z/2)-(f8z/2),0,0])
    translate([23.34,3,0]) //?x interfaces with what?
rotate([0,-90,0])
        cylinder(h = F8z, r = 0.5);
f9p();
    translate([23.6,3,0])
        cylinder(h = F8z, r = 0.5);
    }
      
      
        hull(){
translate([-(f8y/2)+(f9z/2)+(f8z/2),0,0])
    translate([30.34,3,0]) //?x interfaces with what?
rotate([0,-90,0])
        cylinder(h = F8z, r = 0.5);
f9p();
    translate([30.6,3,0])
} //end rotate
        cylinder(h = F8z, r = 0.5);
} //end translate
    }
}
} //end F8 module


module F9(){
translate([-1.9+8.5,0,0]){
difference(){
rotate([0,0,-90]){
cube([F9x,F9y,F9z]);
    translate([7.25,0,0])
        cornerjoint(7.25,0.625,0.25,0.5,0.125);
    translate([14.5+7.25,0,0])
        cornerjoint(7.25,0.625,0.25,0.5,0.125);
    translate([14.5+14.5+7.25,0,0])
        cornerjoint(7.25,0.625,0.25,0.5,0.125);
      
      
    translate([0,F9y-0.5625,0])
translate([(f8y/2),f8z,0])
        cube([0.53125,0.5625,F9z]);
rotate([90,-90,0])
    translate([19.96875,F9y-0.5625,0])
f8p();
        cube([0.5625,0.5625,F9z]);
    translate([31.3,F9y-1.4,0])
        cube([6.4,1.4,F9z]);    //?interfaces with what?
    translate([F9x-0.5,F9y-0.5625,0])
        cube([0.5,0.5625,F9z]);
      
      
    translate([2,1.9,0]) //?x interfaces with what?  ?1.9?
translate([(f8y/2)+(f9z/2)-(f8z/2),0,0])
        cylinder(h = F9z, r = 0.38);
rotate([0,-90,0])
    translate([6,1.9,0]) //?x interfaces with what?
f9p();
        cylinder(h = F9z, r = 0.38); 
       
    translate([22.472,1.9,0]) //??.472?? ?interfaces with what?
        cylinder(h = F9z, r = 0.5025);
    translate([26.472,1.9,0])
        cylinder(h = F9z, r = 0.5025);
    translate([29.472,1.9,0])
        cylinder(h = F9z, r = 0.5025);
      
      
   
translate([-(f8y/2)+(f9z/2)+(f8z/2),0,0])
    translate([39,1.9,0])  //?x interfaces with what?
rotate([0,-90,0])
        cylinder(h = F9z, r = 0.38);
f9p();
    translate([42,1.9,0]) //?x interfaces with what?
} //end rotate
        cylinder(h = F9z, r = 0.38); 
} //end translate
    }
} //end F9 module
 
module cornerjoint(L,H,EndGap,PadL,PadH){
    difference(){
    cube([L,H,F9z]);
        translate([EndGap,H-PadH,0])
        cube([PadL,PadH,F9z]);
        translate([L-EndGap-PadL,H-PadH,0])
        cube([PadL,PadH,F9z]);
    }
} //end cornerjoint module
 


  </nowiki>
  </nowiki>
Line 348: Line 448:


Abuts: A2
Abuts: A2
*need to tweak bolt translates?
*change to use cornerjoint module instead of insert module on outter ends of F3 connections


  <nowiki>
  <nowiki>
F1x=24.2;
include <vars.scad>;
F1y=6;
use <modus.scad>;
F1z=0.5;
 
$fn=20; //render final model at 100
f1p();


projection(cut = true) //use projection to create 2D DXF files
module f1p(){
   
difference(){
difference(){
translate([-(F1x/2),0,0])
translate([-(f1x/2),0,0])
cube([F1x,F1y,F1z]);
cube([f1x,f1y,f1z]);
translate([-(F1x/2),0,0])
translate([-(f1x/2),0,0])
cuts();
cuts();
translate([(F1x/2),0,0])
translate([(f1x/2),0,0])
mirror([1,0,0])
mirror([1,0,0])
cuts();
cuts();
} //end difference
} //end difference
module cuts(){
module cuts(){
        cube([0.5,0.5,F1z]);
    tabinsert(1,f3z,f1z,0.0625,0.125,0,0,0.25,0.25,0.0,0,0,0,0);
    translate([0.5,0,0])
   
        cube([0.7875,0.625,F1z]);
     translate([0,f1y-0.25,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
         cube([0.4,0.25,F1z]);
     translate([(f1x-f2x)/2,f1y-f2z,0])
     translate([2.2875,F1y-0.5,0])
         tabinsert(1,f2z,f1z,0.0625,0.125,0,0,0,0,0.25,0.25,0.25,0.25,0);   //f2
         cube([1.125,0.5,F1z]);
     translate([(f1x/2)-1,0,0])
     translate([11.0375,0,0])
         tabinsert(1,f3z,f1z,0.0625,0.125,0.25,0.25,0,0,0.0,0,0,0,0);  
         cube([0.8125,0.625,F1z]);
     translate([((f1x-d3x-drawerHgap)/2)-2,1.5,0]) //bolt center to inner edge of f9=2
    translate([11.85,0,0])
         cylinder(h = f1z, r = 0.375);   
        cube([0.25,0.5,F1z]);
     translate([((f1x-d3x-drawerHgap)/2)-2,4.5,0])
     translate([3.6,1.5,0])
         cylinder(h = f1z, r = 0.375);
         cylinder(h = F1z, r = 0.375);   
     translate([((f1x-d3x-drawerHgap)/2)+(sliderodholeOD/2)+drawerHgap,2.465,0]) //not sure what this is supposed to align with, drawer?
     translate([3.6,4.5,0])
         cylinder(h = f1z, r = sliderodholeOD/2);     
         cylinder(h = F1z, r = 0.375);
} //end cuts module
     translate([6.1925,2.465,0])
 
         cylinder(h = F1z, r = 0.6);     
} //end f1p module
} //end module
  </nowiki>
  </nowiki>


Line 391: Line 496:


  <nowiki>
  <nowiki>
F2x=19.5;
include <vars.scad>;
F2y=3.5;
use <modus.scad>;
F2z=0.5;
 
$fn=20; //render final model at 100
f2p();


projection(cut = true) //use projection to create 2D DXF files
module f2p(){
   
difference(){
difference(){
translate([-(F2x/2),0,0])
    cube([f2x,f2y,f2z]);
cube([F2x,F2y,F2z]);
    translate([1,0,0])
translate([-(F2x/2),0,0])
        cornerjoint(f2z,f2x-2,f1z,0.125,f2x-2-0.25,0.125,0,0);
cuts();
translate([(F2x/2),0,0])
mirror([1,0,0])
cuts();
} //end difference
} //end difference
module cuts(){
 
    translate([1,F2y-0.625,0])
} //end f2p module
        cube([0.125,0.625,F2z]);
    translate([1.125,F2y-0.5,0])
        cube([8.625,0.5,F2z]); 
} //end module


  </nowiki>
  </nowiki>
Line 420: Line 518:


Bolts to: F12
Bolts to: F12
*F3 and F1 should probably be made the same length.
**going to set f3y=f1y. also some tweaks to insert holes


  <nowiki>
  <nowiki>
F3x=23.75;
include <vars.scad>;
F3y=3.5;
use <modus.scad>;
F3z=0.5;
 
$fn=20;  //render final model at 100
f3p();
 
module f3p(){


projection(cut = true) //use projection to create 2D DXF files
difference(){
difference(){
translate([-(F3x/2),0,0])
translate([-(f3x/2),0,0])
cube([F3x,F3y,F3z]);
cube([f3x,f3y,f3z]);
translate([-(F3x/2),0,0])
translate([-(f3x/2),0,0])
cuts();
cuts();
translate([(F3x/2),0,0])
translate([(f3x/2),0,0])
mirror([1,0,0])
mirror([1,0,0])
cuts();
cuts();
Line 439: Line 541:
module cuts(){
module cuts(){
     translate([1,0,0])
     translate([1,0,0])
         cube([1,0.625,F3z]);
         cornerjoint(f3z,(f3x-4)/2,f1z,1,1,0.125,0,0);
    translate([2,0,0])
     translate([5.375,f3y/2,0])
        cube([1,0.5,F3z]);
         cylinder(h = f3z, r = 0.5);       
    translate([3,0,0])
} //end cuts module
        cube([5.875,0.625,F3z]);
 
    translate([8.875,0,0])
} //end f3p module
        cube([1,0.5,F3z]);
    translate([9.875,0,0])
        cube([1,0.625,F3z]);
     translate([5.375,1.75,0])
         cylinder(h = F3z, r = 0.5);       
} //end module
  </nowiki>
  </nowiki>


Line 458: Line 554:


Bolts to: F9
Bolts to: F9
*use cornerjoint module instead of insert for F5 connection
*bolt holes look like they're maybe slightly miss aligned?
**are they different sized?


  <nowiki>
  <nowiki>
F4x=31;  //?why not just 22?
include <vars.scad>;
F4y=11;
use <modus.scad>;
F4z=0.5;
 
F4basex=25;
f4p();
$fn=20; //render final model at 100


projection(cut = true) //use projection to create 2D DXF files
module f4p(){
   
difference(){
difference(){
translate([-(F4x/2),0,0])
translate([-(((brickL+(d2z*2)+drawerHgap+(f9y*2)))/2),0,0])
cube([F4x,F4y,F4z]);
    union(){
translate([-(F4x/2),0,0])
        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();
cuts();
translate([(F4x/2),0,0])
translate([(f4x/2),0,0])
mirror([1,0,0])
mirror([1,0,0])
cuts();
cuts();
} //end difference
} //end difference
module cuts(){
module cuts(){
    translate([0,0,0])
        cube([3,5.375,F4z]);


     translate([0,5.375,0])
    //f5 outer
    difference(){
     translate([(f4x/2)+((f5x/2)-2),f4y,0])
         cube([3,5.125,F4z]);
         cornerjoint(f4z,4,f5z,0.125,1,0.125,180,1);
         translate([3,0,0])
         //tabinsert(4,f5z*2,f4z,0.0625,0.125,0,0,0,0,0,0,0.25,0.25,1);
        rotate([0,0,atan(3/5.125)])
        cube([10,10,F4z]);
    }


translate([(F4x/2)-13.6375,F4y-0.5,0])
    //f5 center
    mirror([1,0,0])
    translate([(f4x/2),f4y,0])
cube([(F4x/2)-13.6375,0.5,F4z]);
        tabinsert(2,f5z*2,f4z,0.0625,0.125,0,0,0,0,0.0,0,0.25,0.25,1);
translate([(F4x/2)-13.6375,F4y-0.625,0])
   
cube([2,0.625,F4z]);
    //f2
    translate([(f4x-f2x+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);  


     translate([(F4x/2)-0.8125,F4y-0.5,0])
     //f9 bolts
        cube([0.8125,0.5,F4z]);
     translate([((f4x-brickL-(d2z*2)-drawerHgap)/2)-2,2,0])
     translate([(F4x/2)-1.0625,F4y-0.625,0])
         cylinder(h = f4z, r = 0.5025); //diameter 1.0?
        cube([0.25,0.625,F4z]);
     translate([((f4x-brickL-(d2z*2)-drawerHgap)/2)-2,6,0])
   
         cylinder(h = f4z, r = 0.5025);
    translate([(F4x/2)-9.8125,7.185,0]) //?part ycentered 7.5?
     translate([((f4x-brickL-(d2z*2)-drawerHgap)/2)-2,9,0])
        cube([1.125,0.625,F4z]);  //?interfaces with what? ?part F2?
         cylinder(h = f4z, r = 0.5025);
   
    translate([(F4x/2)-8.5,2,0])
         cylinder(h = F4z, r = 0.5025); //diameter 1.0?
     translate([(F4x/2)-8.5,6,0])
         cylinder(h = F4z, r = 0.5025);
     translate([(F4x/2)-8.5,9,0])
         cylinder(h = F4z, r = 0.5025);
      
      
} //end module
} //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
   
   
  </nowiki>
  </nowiki>
Line 519: Line 632:


Bolts to: A1
Bolts to: A1
:::f5p.scad


  <nowiki>
  <nowiki>
F5x=31.4;
include <vars.scad>;
F5y=3.5;
use <modus.scad>;
F5z=0.5;
 
$fn=20; //render final model at 100
f5p();


projection(cut = true) //use projection to create 2D DXF files
module f5p(){
   
difference(){
difference(){
translate([-(F5x/2),0,0])
translate([-(f5x/2),0,0])
cube([F5x,F5y,F5z]);
cube([f5x,f5y,f5z]);
translate([-(F5x/2),0,0])
translate([-(f5x/2),0,0])
cuts();
cuts();
translate([(F5x/2),0,0])
translate([(f5x/2),0,0])
mirror([1,0,0])
mirror([1,0,0])
cuts();
cuts();
} //end difference
} //end difference
module cuts(){
module cuts(){
     translate([4,F5y-0.625,0])
     translate([4,0,0])
        cube([1,0.625,F5z]);
    cornerjoint(f5z,(f5x-(4*2)-2)/2,f4z,1,1,0.125,0,0);   
    translate([5,F5y-0.5,0])
 
        cube([1,0.5,F5z]);
     //arm bolt hole
    translate([6,F5y-0.625,0])
     translate([(a1x/2),f5y-1.5,0]) //aligns with hole in center of a1x
        cube([6.7,0.625,F5z]);
         cylinder(h = f5z, r = 0.5);
    translate([12.7,F5y-0.5,0])
      
        cube([1,0.5,F5z]);
    //might add an insert for an A6 type of support
    translate([13.7,F5y-0.625,0])
      
        cube([1,0.625,F5z]);
} //end cuts module
     hull(){
 
     translate([3.5,1.5,0])
} //end f5p module
         cylinder(h = F5z, r = 0.5);
     translate([4.5,1.5,0])
        cylinder(h = F5z, r = 0.5);
     }
} //end module
  </nowiki>
  </nowiki>


Line 563: Line 675:


Bolts to: F9
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
*need to use MAINcylinder specs to make cylinder pin hole


  <nowiki>
  <nowiki>
F6x=22.1875; //?why not just 22?
include <vars.scad>;
F6y=8;
use <modus.scad>;
F6z=0.5;
 
$fn=20;  //render final model at 100
f6p();
 
module f6p(){


projection(cut = true) //use projection to create 2D DXF files
difference(){
difference(){
translate([-(F6x/2),0,0])
translate([-(f6x/2),0,0])
cube([F6x,F6y,F6z]);
cube([f6x,f6y,f6z]);
translate([-(F6x/2),0,0])
translate([-(f6x/2),0,0])
cuts();
cuts();
translate([(F6x/2),0,0])
translate([(f6x/2),0,0])
mirror([1,0,0])
mirror([1,0,0])
cuts();
cuts();
} //end difference
} //end difference
module cuts(){
module cuts(){
    translate([1.26,F6y-0.5,0]) //?xdistance from center?
        cube([1.125,0.5,F6z]); //?interfaces with what?
    translate([(F6x/2)-1.125,F6y-3.22,0])
        cube([2.25,3.22,F6z]);
    translate([F6x/2,F6y-3.22,0])
        cylinder(h = F6z, r = 1.125);
      
      
     translate([(F6x/2)-8.5,2,0])
     translate([(f6x-f2x)/2,f6y-f2z,0])
         cylinder(h = F6z, r = 0.38); //diameter 0.76?
        tabinsert(1,f2z,f6z,0.0625,0.125,0,0,0,0,0.25,0.25,0.25,0.25,0);    //F2
     translate([(F6x/2)-8.5,6,0])
   
         cylinder(h = F6z, r = 0.38);
//need to change this section to match MAINcylinder specs
    translate([(f6x/2)-1.125,f6y-3.22,0])
        cube([2.25,3.22,f6z])
    translate([f6x/2,f6y-3.22,0])
        cylinder(h = f6z, r = 1.125);
   
    // 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 module
} //end cuts module
} //end f6p module
  </nowiki>
  </nowiki>


Line 602: Line 724:


Bolts to: Rub Plate ?
Bolts to: Rub Plate ?
*need to redo cornerjoint module inputs
*need to set standard bolt size


  <nowiki>
  <nowiki>
F8x=43.5;
include <vars.scad>;
F8y=6;
use <modus.scad>;
F8z=0.5;
$fn=20; //render final model at 100


f8p();
module f8p(){


difference(){
difference(){
cube([F8x,F8y,F8z]);
cube([f8x,f8y,f8z]);
     translate([-0.0625,0,0])
     translate([(1/12)*f8x,0,0])
         cornerjoint(7.375,0.625,0.25,0.5,0.125);
         cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,0,1);
     translate([14.5-0.0625,0,0])
     translate([(5/12)*f8x,0,0])
         cornerjoint(7.375,0.625,0.25,0.5,0.125);
         cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,0,1);
     translate([14.5+14.5-0.0625,0,0])
     translate([(9/12)*f8x,0,0])
         cornerjoint(7.375,0.625,0.25,0.5,0.125);
         cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,0,1);
      
      
     translate([-0.0625,F8y,0])
     translate([(1/12)*f8x,f8y,0])
    mirror([0,1,0])
         cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,180,1);
         cornerjoint(7.375,0.625,0.25,0.5,0.125);
     translate([(5/12)*f8x,f8y,0])
     translate([14.5-0.0625,F8y,0])
         cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,180,1);
    mirror([0,1,0])
     translate([(9/12)*f8x,f8y,0])
         cornerjoint(7.375,0.625,0.25,0.5,0.125);
         cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,180,1);
     translate([14.5+14.5-0.0625,F8y,0])
    mirror([0,1,0])
         cornerjoint(7.375,0.625,0.25,0.5,0.125);  
      
      
     hull(){
     hull(){
     translate([23.34,3,0])  //?x interfaces with what?
     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 = 0.5);
         cylinder(h = f8z, r = f8boltD/2);
     translate([23.6,3,0])
     translate([f8x-7-((f1y+d2y+drawergap+1)+(0.26/2)),f8y/2,0])
         cylinder(h = F8z, r = 0.5);
         cylinder(h = f8z, r = f8boltD/2);
     }
     }
   
 
         hull(){
         hull(){
     translate([30.34,3,0])  //?x interfaces with what?
     translate([f8x-((f1y+d2y+drawergap+1)-(0.26/2)),f8y/2,0])  //?x interfaces with what?
         cylinder(h = F8z, r = 0.5);
         cylinder(h = f8z, r = f8boltD/2);
     translate([30.6,3,0])
     translate([f8x-((f1y+d2y+drawergap+1)+(0.26/2)),f8y/2,0])
         cylinder(h = F8z, r = 0.5);
         cylinder(h = f8z, r = f8boltD/2);
     }
     }
}
}


module cornerjoint(L,H,EndGap,PadL,PadH){
} //end f8p module
    difference(){
    cube([L,H,F8z]);
        translate([EndGap,H-PadH,0])
        cube([PadL,PadH,F8z]);
        translate([L-EndGap-PadL,H-PadH,0])
        cube([PadL,PadH,F8z]);
    }
} //end cornerjoint module
  </nowiki>
  </nowiki>


Line 664: Line 779:


  <nowiki>
  <nowiki>
F9x=43.5;
include <vars.scad>;
F9y=4.5;
use <modus.scad>;
F9z=0.5;
 
$fn=20; //render final model at 100
f9p();


module f9p(){


difference(){
difference(){
cube([F9x,F9y,F9z]);
cube([f9x,f9y,f9z]);
     translate([7.25,0,0])
     translate([(3/12)*f9x,0,0])
         cornerjoint(7.25,0.625,0.25,0.5,0.125);
         cornerjoint(f9z,(f8x/6),f8z,0.25,0.5,0.125,0,1);
     translate([14.5+7.25,0,0])
     translate([(7/12)*f9x,0,0])
         cornerjoint(7.25,0.625,0.25,0.5,0.125);
         cornerjoint(f9z,(f8x/6),f8z,0.25,0.5,0.125,0,1);
     translate([14.5+14.5+7.25,0,0])
    translate([(11/12)*f9x,0,0])
         cornerjoint(7.25,0.625,0.25,0.5,0.125);
        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);
      
      
    translate([0,F9y-0.5625,0])
        cube([0.53125,0.5625,F9z]);
    translate([19.96875,F9y-0.5625,0])
        cube([0.5625,0.5625,F9z]);
    translate([31.3,F9y-1.4,0])
        cube([6.4,1.4,F9z]);    //?interfaces with what?
    translate([F9x-0.5,F9y-0.5625,0])
        cube([0.5,0.5625,F9z]);
      
      
     translate([2,1.9,0])  //?x interfaces with what?1.9?
    //big cutout
         cylinder(h = F9z, r = 0.38);
     translate([f9x-(f1y-0.2)-(a2x+0.4),f9y-1.4,0])
     translate([6,1.9,0])  //?x interfaces with what?
        cube([a2x+0.4,1.4,f9z]);  //?interfaces with a2?
         cylinder(h = F9z, r = 0.38);   
   
   
    //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)
          
          
     translate([22.472,1.9,0]) //??.472?? ?interfaces with what?
        //should f4 be attached with 4 smaller bolts instead of 3 big ones. would prevent all movement?
         cylinder(h = F9z, r = 0.5025);
        //f4
     translate([26.472,1.9,0])
     translate([f9x-f1y-d2y-drawergap-2,2,0]) //replacing translate y=1.9 with f9y-2.5
         cylinder(h = F9z, r = 0.5025);
         cylinder(h = f9z, r = 0.5025);
     translate([29.472,1.9,0])
     translate([f9x-f1y-d2y-drawergap-5,2,0])
         cylinder(h = F9z, r = 0.5025);
         cylinder(h = f9z, r = 0.5025);
     translate([f9x-f1y-d2y-drawergap-9,2,0])
         cylinder(h = f9z, r = 0.5025);
      
      
      
     //f1
     translate([39,1.9,0])  //?x interfaces with what?
     translate([f9x-4.5,2,0])  //?x interfaces with f1?
         cylinder(h = F9z, r = 0.38);
         cylinder(h = f9z, r = 0.38);
     translate([42,1.9,0])  //?x interfaces with what?
     translate([f9x-1.5,2,0])  //?x interfaces with f1?
         cylinder(h = F9z, r = 0.38);   
         cylinder(h = f9z, r = 0.38);   
     }
     }
}




module cornerjoint(L,H,EndGap,PadL,PadH){
    difference(){
    cube([L,H,F9z]);
        translate([EndGap,H-PadH,0])
        cube([PadL,PadH,F9z]);
        translate([L-EndGap-PadL,H-PadH,0])
        cube([PadL,PadH,F9z]);
    }
} //end cornerjoint module
  </nowiki>
  </nowiki>


Line 736: Line 865:


  <nowiki>
  <nowiki>
F11x=1.25;
include <vars.scad>;
F11y=6;
use <modus.scad>;
F11z=0.5;
 
f11p();


projection(cut = true) //use projection to create 2D DXF files
module f11p(){
   
difference(){
difference(){
translate([0,-(F11y/2),0])
translate([0,-(f11y/2),0])
cube([F11x,F11y,F11z]);
cube([f11x,f11y,f11z]);
translate([0,-(F11y/2),0])
translate([0,-(f11y/2),0])
cuts();
cuts();
translate([0,(F11y/2),0])
translate([0,(f11y/2),0])
mirror([0,1,0])
mirror([0,1,0])
cuts();
cuts();
} //end difference
} //end difference
module cuts(){
module cuts(){
     translate([0.5,0,0])
     translate([0.5,0,0])
         cube([0.125,0.625,F11z]);
         cube([0.125,0.125+f9z,f11z]);
     translate([0.625,0,0])
     translate([0.625,0,0])
         cube([0.625,0.5,F11z]);
         cube([f11x-0.5-0.125,f9z,f11z]);
    
    
} //end module
} //end cuts module
 
}  //end f11p module
</nowiki>
 
==F12==
 
Bolts to Hopper Seat
 
==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? 
    //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
  </nowiki>
  </nowiki>


Line 934: Line 1,095:


Bolts to: A1
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,044: Line 1,209:


  <nowiki>
  <nowiki>
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
  </nowiki>
  </nowiki>


=Drawer=
=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>;
//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+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();
//
//add drawer cylinger rod half and rod clevis
//
} //end main translate
</nowiki>


==D1==
==D1==
Line 1,054: Line 1,359:
**need to review
**need to review


:::d1p.scad
  <nowiki>
  <nowiki>
include <vars.scad>;
include <vars.scad>;
use <modus.scad>;
use <modus.scad>;


d1x=18.5;
d1p();
d1y=18;
 
d1z=dZstandard;
module d1p(){
$fn=20;


difference(){
difference(){
Line 1,073: Line 1,380:
} //end difference
} //end difference
module cuts(){
module cuts(){
         cube([2.5,16,d1z]);
         cube([(d1x-brickL-d2z-d2z)/2,16,d1z]);
     translate([2.5,1.5,0])
     translate([(d1x-brickL-d2z-d2z)/2,1.5,0]) //1.5 could be better defined, but needs to match D2's cut out
         cube([0.6,5,d1z]);   
         cube([0.6,5,d1z]);  //June freecad model has larger cut out
} //end module
} //end module


} //end d1p module
  </nowiki>
  </nowiki>


Line 1,092: Line 1,400:
echo(d8y+d6z+brickW+d3z+d5y+d3z); //total length of part
echo(d8y+d6z+brickW+d3z+d5y+d3z); //total length of part


d2p();
module d2p(){
   
difference(){
difference(){
cube([d2x,d2y,d2z]);
cube([d2x,d2y,d2z]);
Line 1,145: Line 1,457:
      
      
} //end difference
} //end difference
} //end d2p module




Line 1,158: Line 1,472:


//this part is rendered upside down from placement
//this part is rendered upside down from placement
d3p();
module d3p(){


difference(){
difference(){
Line 1,170: Line 1,488:


module cuts(){
module cuts(){
     translate([0,4.75,0]) //fix module and reavaluate
     translate([0,d3y/2,0])
    rotate([0,0,270]) //fix module and reavaluate
     cornerjoint(d3z,d3y-(0.75*2),d2z,0.125,0.25,0.125,270,1);     
     cornerjoint(d3z,d3y-(0.75*2),0.5,0.125,0.25,0.125);     
      
      
     //outer columns tab inserts
     //outer columns tab inserts
Line 1,192: Line 1,509:
     tabinsert(d4z,(0.75*2),d3z,dGap,0.09375,0.625,0.25,0.25,0.625,0,0,0,0,1);
     tabinsert(d4z,(0.75*2),d3z,dGap,0.09375,0.625,0.25,0.25,0.625,0,0,0,0,1);
      
      
} //end cuts
} //end cuts module
 
} //end d3p module
  </nowiki>
  </nowiki>


Line 1,198: Line 1,517:


  <nowiki>
  <nowiki>
d4x=7;
include <vars.scad>;
d4y=5.5;
use <modus.scad>;
d4z=dZstandard;
 
$fn=20;
d4p();
 
module d4p(){


difference(){
difference(){
Line 1,213: Line 1,534:
} //end difference
} //end difference
module cuts(){
module cuts(){
     translate([0,d4y-0.75,0])
     translate([0,d5z+0.75,0])
     rotate([0,0,270])
     cornerjoint(d4z,(d4y-(0.75*2)-0.5-d5z)/2,d3z,0.125,((d4y-(0.75*2)-0.5-d5z)/2)-(0.125*2),0.125,270,0);
cornerjoint(1.46875,0.625,0.125,1.21875,0.125);
   
        translate([0,1.46875+1.25,0])
    rotate([0,0,270])
cornerjoint(1.46875,0.625,0.125,1.21875,0.125);
 
translate([-0.125,0,0])
cornerjoint(3.375,0.625,0.125,3.125,0.125);
      
      
    translate([0,d4y-0.75-((d4y-(0.75*2)-0.5-d5z)/2),0])
 
    cornerjoint(d4z,(d4y-(0.75*2)-0.5-d5z)/2,d3z,0.125,((d4y-(0.75*2)-0.5-d5z)/2)-(0.125*2),0.125,270,0);
} //end module


    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


module cornerjoint(L,H,EndGap,PadL,PadH){
} //end d4p module
    difference(){
    cube([L,H,d4z]);
        translate([EndGap,H-PadH,0])
        cube([PadL,PadH,d4z]);
        translate([L-EndGap-PadL,H-PadH,0])
        cube([PadL,PadH,d4z]);
    }
} //end cornerjoint module
  </nowiki>
  </nowiki>


==D5==
==D5==


*need to switch to "tabinsert" module
 
::d5p.scad


  <nowiki>
  <nowiki>
d5x=13;
include <vars.scad>;
d5y=6;
use <modus.scad>;
d5z=dZstandard;
 
$fn=20;
d5p();
 
module d5p(){


difference(){
difference(){
Line 1,259: Line 1,569:
cuts();
cuts();
} //end difference
} //end difference
module cuts(){
module cuts(){
     translate([0,0.5,0])
     translate([0,d5y/2,0])
        cube([0.5,5,d5z]);
    cornerjoint(d5z,d5y-(0.5*2),d2z,0.125,0.25,0.125,270,1);
    translate([0.5,0.5,0])
        cube([0.125,0.125,d5z]); 
        translate([0.5,0.875,0])
        cube([0.125,4.25,d5z]); 
        translate([0.5,5.375,0])
        cube([0.125,0.125,d5z]);


     translate([1,0,0])
     translate([1,0,0])
         cube([5,0.125,d5z]);
         cube([(d5x-(1*3))/2,0.125,d5z]);
         translate([1,d5y-0.125,0])
         translate([1,d5y-0.125,0])
         cube([5,0.125,d5z]);
         cube([(d5x-(1*3))/2,0.125,d5z]);
      
      
     translate([3.5,3,0])
     translate([(brickL/4)+d2z,d5y/2,0])
     insert(0.75,0.75,0.09375,0.25);
     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);
   
   
         translate([d5x/2,3,0])
         translate([d5x/2,3,0])
     insert(0.75,0.75,0.09375,0.25);
     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 module
} //end d5p module
module insert(X,Y,standdepth,standwidth){
    difference(){
        translate([0,0,d5z/2]){
        #cube([X,Y,d5z],true);
        }
        translate([X/2,0,d5z/2]){
        cube([standdepth*2,standwidth,d5z],true);
        }
        translate([-X/2,0,d5z/2]){
        cube([standdepth*2,standwidth,d5z],true);
        }
        translate([0,Y/2,d5z/2]){
        cube([standwidth,standdepth*2,d5z],true);
        }
        translate([0,-Y/2,d5z/2]){
        cube([standwidth,standdepth*2,d5z],true);
        }
    }
} //end insert
  </nowiki>
  </nowiki>


==D6==
==D6==


*need to switch to "tabinsert" module
<nowiki>
include <vars.scad>;
use <modus.scad>;
 
d6p();


<nowiki>
module d6p(){
d6x=13;
d6y=6;
d6z=dZstandard;
$fn=20;


difference(){
difference(){
Line 1,321: Line 1,609:
cuts();
cuts();
} //end difference
} //end difference
module cuts(){
module cuts(){
     translate([0,5.5,0])
     translate([0,1,0])
     rotate([0,0,270])
     cornerjoint(d6z,d6y-1-0.5,d2z,0.125,0.25,0.125,270,0);
cornerjoint(4.5,0.625,0.125,0.25,0.125);
   
    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
</nowiki>


   
==D7==
    translate([5,2,0])
    insert(0.75,0.75,0.09375,0.25); 


} //end module
*Should this part be re-categorized as an Arm part?
module insert(X,Y,standdepth,standwidth){
*Welds to A4
    difference(){
**tweaking to add inserts to aid weld
        translate([0,0,d6z/2]){
        #cube([X,Y,d6z],true);
        }
        translate([X/2,0,d6z/2]){
        cube([standdepth*2,standwidth,d6z],true);
        }
        translate([-X/2,0,d6z/2]){
        cube([standdepth*2,standwidth,d6z],true);
        }
        translate([0,Y/2,d6z/2]){
        cube([standwidth,standdepth*2,d6z],true);
        }
        translate([0,-Y/2,d6z/2]){
        cube([standwidth,standdepth*2,d6z],true);
        }
    }
} //end insert


module cornerjoint(L,H,EndGap,PadL,PadH){
    difference(){
    cube([L,H,a4z]);
        translate([EndGap,H-PadH,0])
        cube([PadL,PadH,a4z]);
        translate([L-EndGap-PadL,H-PadH,0])
        cube([PadL,PadH,a4z]);
    }
} //end cornerjoint module
</nowiki>


==D7==
:::d7p.scad


  <nowiki>
  <nowiki>
d7x=3;
include <vars.scad>;
d7y=3;
use <modus.scad>;
d7z=dZstandard;
 
$fn=20;
//need to add holes to A4 for cornerjoint
 
d7p();
 
module d7p(){


difference(){
difference(){
cube([d7x,d7y,d7z]);
cube([d7x,d7y,d7z]);
     translate([d7x/2,d7y/2,0])
   
    cylinder(h = d7z,r = 0.5);
    //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
  </nowiki>
  </nowiki>


==D8==
==D8==


*insert holes' position is wrong


<nowiki>
include <vars.scad>;
use <modus.scad>;


<nowiki>dZstandard=0.5;
d8p();
include <vars.scad>
use <modus.scad> //cornerjoint


d2z=dZstandard;
module d8p(){
d9z=dZstandard;
dGap=0.03125;
 
cylinderDRAWERendwidth=2.5;
 
d8x=13;
d8y=5;
d8z=dZstandard;
$fn=20;


difference(){
difference(){
Line 1,408: Line 1,677:
} //end difference
} //end difference
module cuts(){
module cuts(){
     translate([0,4.25,0])
     translate([0,d8y/2,0])
     rotate([0,0,270])
     cornerjoint(d8z,d8y-(0.75*2),d2z,0.125,0.25,0.125,270,1);
cornerjoint(3.5,0.625,0.125,0.25,0.125);


        translate([1,d8y-0.125,0])
    translate([1,d8y-0.125,0])
        cube([5.125,0.125,d8z]);
    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);
      
      
    translate([(d8x/2)-(cylinderDRAWERendwidth/2)-(d9z/2),3.5,0])
  tabinsert(0.5,0.5,d8z,dGap,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1);
 
} //end module
} //end module


} //end d8p module
</nowiki>


==D9==


Welds to: D6, D8


*uses drawer cylinder height to determine clevis pin location


<nowiki>
include <vars.scad>;
use <modus.scad>;


d9p();


 
module d9p(){
</nowiki>
 
==D9==
 
<nowiki>
d9x=3.5;
d9y=3.5;
d9z=dZstandard;
$fn=20;


difference(){
difference(){
cube([d9x,d9y,d9z]);
cube([d9x,d9y,d9z]);
    translate([2,0,0])
    singlepeg(0.5,0.5,0.125,0.125,d9x);
        translate([-0.0000001,2,0]) //slight x shift to fix abberation
    rotate([0,0,270])
    singlepeg(0.5,0.5,0.125,0.125,d9x);
      
      
     translate([2,2,0])
     //x
     cylinder(h = d9z,r = 0.5);
translate([-0.125,0,0])
} //end difference
    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));
}


module singlepeg(L,W,divotsDepth,divotsW,sidelength){
} //end d9p module
 
translate([(W/2),0,0]){
union(){
cube([divotsW,L+divotsDepth,d9z]);
  translate([divotsW,0,0]) 
cube([sidelength,L,d9z]);
}
}
translate([-(W/2),0,0]){
mirror([1,0,0]){
    union(){
cube([divotsW,L+divotsDepth,d9z]);
  translate([divotsW,0,0]) 
cube([sidelength,L,d9z]);
}
}
}
}
  </nowiki>
  </nowiki>


Line 1,593: Line 1,849:


  </nowiki>
  </nowiki>
=Part Review Layout=
*All parts layed out in sequence for review in DXF format
**might find a way to label parts below X axis
:::review.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>;
partspacing=1; //common distance between parts
//d1
projection(cut = true) //use projection to create 2D DXF files
translate([d1y,d1x/2,0])
rotate([0,0,90])
d1p();
projection(cut = true)
translate([d1y+partspacing+d2y,0,0])
rotate([0,0,90])
d2p();
projection(cut = true)
translate([d1y+partspacing+d2y+partspacing+d2y,0,0])
rotate([0,0,90])
d2p();
projection(cut = true)
translate([d1y+partspacing+d2y+partspacing+d2y+partspacing+d3y,d3x/2,0])
rotate([0,0,90])
d3p();
projection(cut = true)
translate([d1y+partspacing+d2y+partspacing+d2y+partspacing+d3y+partspacing+d3y,d3x/2,0])
rotate([0,0,90])
d3p();
</nowiki>
=To Do=
*get [[Nesting_Software|SVnest]] to work for torch table layout

Latest revision as of 17:56, 3 June 2018

work in progress moved on to CEB Press v17.08/SCAD Files/

creating an OpenSCAD replica of v16.09

CEB Press v16.09/SCAD Files/Parametric

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;

$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

fBOLTHOLEstandardD=1; //standard bolts used on frame
sliderodholeOD=1.2; 

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.

d1z=dZstandard;
d2z=dZstandard;
d3z=dZstandard;
d4z=dZstandard;
d5z=dZstandard;
d6z=dZstandard;
d5z=dZstandard;
d7z=dZstandard;
d8z=dZstandard;
d9z=dZstandard;

//frame
f1x=24.2;
f1y=6;
f1z=0.5;


f2y=3.5;
f2z=fZstandard;

f3x=f1x;
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;
f9x=43.5;  //set based on MAINcylinder
f9z=fZstandard;

f8x=f9x;

f11x=1.25;
f11z=fZstandard;

f13z=fZstandard;

//arms

a1x=4;
a1y=72; //calculate based on drawer cylinder
a1z=aZstandard;

a2x=6;
a2y=72;  //calculate based on drawer cylinder
a2z=aZstandard;

a4z=aZstandard;
a6z=aZstandard;

//
//Input your main cylinder's dimenions here
//
cylinderMAINminC2E=0; //main hydraulic cylinder's distance from center of mounting hole to the end of the shaft when fully compressed.
cylinderMAINmaxC2E=0; //main hydraulic cylinder's distance from center of mounting hole to the end of the shaft when fully extended.

//
//Input your drawer cylinder's dimenions here
//
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;
d9y=cylinderDRAWERbodyH+d8z;
d8x=brickL+(d2z*2);
d8y=max(5,(d9x-d6z));   //need to review fundamentals, 5 minimun unless d9 gets larger than d8
d1x=18.5;   //need to come up with a formula
d1y=18;     //need to come up with a formula
d2x=d8y+d6z+brickW+d3z+d5y+d3z;
d2y=brickCH;

f11y=f8y;
f6x=brickL+(d2z*2)+(f9y*2)+drawerHgap;
f8x=43.5;  //need to define based on MAINcylinder inputs


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


 

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
 
 
 

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.

CEBscad-frame.png

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>;
use <f11p.scad>;
//use <f12p.scad>;


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,(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([-f2x/2,(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)+7.5-(f2z/2)])
rotate([0,0,0])
f2p();  //connected to F1

translate([f2x/2,-(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)+7.5-(f2z/2)])
rotate([0,0,180])
f2p();

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([1.9-8.5,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([-1.9+8.5,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

 

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-d3x-drawerHgap)/2)+(sliderodholeOD/2)+drawerHgap,2.465,0]) //not sure what this is supposed to align with, drawer?
        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: F2, F5

Bolts to: F9

  • use cornerjoint module instead of insert for F5 connection
  • 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);
    
    //f2
    translate([(f4x-f2x+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

some errors of symmetry in source dxf drawing. made some assumptions. need to check fit with interfacing parts.

Welds to: F2, F7

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
  • need to use MAINcylinder specs to make cylinder pin hole
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)-1.125,f6y-3.22,0])
        cube([2.25,3.22,f6z]);  
    translate([f6x/2,f6y-3.22,0])
        cylinder(h = f6z, r = 1.125);
    
    // 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
 

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?

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

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
 

Arms

A1

Welds to: A2, A6

Bolts to: A4, A5, F1, H7, H8

Abuts: F9

A1x=4;
A1y=72;
A1z=0.5;
$fn=20;

difference(){
    cube([A1x,A1y,A1z]);
    
    translate([0,0.71875,0])
    cube([0.6875,0.5625,A1z]);
    translate([0,44.8501,0]) //?y.8501?
    cube([0.6875,0.5625,A1z]);
    translate([0,70.9688,0])  //y 0.46875 from top
    cube([0.6875,0.5625,A1z]);
    
    translate([2,2,0])
    cylinder(h = A1z, r = 0.4);
    translate([2,4,0])
    cylinder(h = A1z, r = 0.4);   
   
       translate([2,27,0])
    cylinder(h = A1z, r = 0.4); 
    
        translate([2,37,0])
    cylinder(h = A1z, r = 0.4);
    
    hull(){
            translate([2,39.67,0]) //small error on drawing
    cylinder(h = A1z, r = 0.4);
            translate([2,40.25,0]) //small error on drawing
    cylinder(h = A1z, r = 0.4);
    }
    
    hull(){
            translate([2,50.25,0]) //small error
    cylinder(h = A1z, r = 0.4);
            translate([2,50.85,0]) //small error
    cylinder(h = A1z, r = 0.4);
    }
    
        translate([2,53.75,0])
    cylinder(h = A1z, r = 0.4);    translate([2,56.75,0])
    cylinder(h = A1z, r = 0.4);
    
        translate([2,63.75,0])
    cylinder(h = A1z, r = 0.4);
        translate([2,69,0])
    cylinder(h = A1z, r = 0.4);
    
    //corner joints
    for(i=[0:5])
    translate([4,i*11.9375,0])
    rotate([0,0,90])
    cornerjoint(6.0625,0.625,0.125,0.5,0.125);
    
}

module cornerjoint(L,H,EndGap,PadL,PadH){
    difference(){
     cube([L,H,A1z]);
        translate([EndGap,H-PadH,0])
        cube([PadL,PadH,A1z]);
        translate([L-EndGap-PadL,H-PadH,0])
        cube([PadL,PadH,A1z]);
    }
} //end cornerjoint module
 

A2

Welds to: A1, A6

Bolts to: Guards, Hopper mounts

Abuts: F1 (?), F9

A2x=5.96603;  //?just 6?
A2y=72;
A2z=0.5;
$fn=20;

difference(){
    cube([A2x,A2y,A2z]);
    
    translate([A2x-0.6875,0.46875,0])
    cube([0.6875,0.5625,A2z]);
    translate([A2x-0.6875,26.5874,0]) //?y.8501?
    cube([0.6875,0.5625,A2z]);
    translate([A2x-0.6875,A2y-0.71875,0])  //y 0.46875 from top
    cube([0.6875,0.5625,A2z]);
    
    hull(){
    translate([A2x-1.75,21.2,0])   //?y?
    cylinder(h = A2z, r = 0.4);
    translate([A2x-1.75,22.765,0]) //?y?
    cylinder(h = A2z, r = 0.4);   
    }
    
    hull(){
    translate([A2x-1.75,47.56,0]) //?y?
    cylinder(h = A2z, r = 0.4);
    translate([A2x-1.75,49.0785,0]) //?y?
    cylinder(h = A2z, r = 0.4);   
    }
       
//corner joints
    for(i=[0:5])
    translate([0,(i*12)+6,0])
    rotate([0,0,270])
    cornerjoint(6,0.625,0.125,0.5,0.125);
    
}

module cornerjoint(L,H,EndGap,PadL,PadH){
    difference(){
     cube([L,H,A2z]);
        translate([EndGap,H-PadH,0])
        cube([PadL,PadH,A2z]);
        translate([L-EndGap-PadL,H-PadH,0])
        cube([PadL,PadH,A2z]);
    }
} //end cornerjoint module
 

A3

Welds to: A4, A5

a3x=4;
a3y=72;
a3z=0.5;
$fn=20;

difference(){
    cube([a3x,a3y,a3z]);
    
       
//corner joints
    for(i=[0:5])
    translate([0,(i*12)+6,0])
    rotate([0,0,270])
    cornerjoint(6,0.625,0.125,0.5,0.125);
    
}

module cornerjoint(L,H,EndGap,PadL,PadH){
    difference(){
     cube([L,H,a3z]);
        translate([EndGap,H-PadH,0])
        cube([PadL,PadH,a3z]);
        translate([L-EndGap-PadL,H-PadH,0])
        cube([PadL,PadH,a3z]);
    }
} //end cornerjoint 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.
a4x=6;
a4y=72;
a4z=0.5;
$fn=20;

difference(){
    cube([a4x,a4y,a4z]);
    
    
    hull(){
    translate([a4x-2,23.725,0])   //?y?
    cylinder(h = a4z, r = 0.4);
    translate([a4x-2,24.835,0]) //?y?
    cylinder(h = a4z, r = 0.4);   
    }
    hull(){
    translate([a4x-4,23.725,0])   //?y?
    cylinder(h = a4z, r = 0.4);
    translate([a4x-4,24.835,0]) //?y?
    cylinder(h = a4z, r = 0.4);   
    }
    
    hull(){
    translate([a4x-2,47.135,0])
    cylinder(h = a4z, r = 0.4);
    translate([a4x-2,48.265,0])
    cylinder(h = a4z, r = 0.4);   
    }
        hull(){
    translate([a4x-4,47.135,0])
    cylinder(h = a4z, r = 0.4);
    translate([a4x-4,48.265,0])
    cylinder(h = a4z, r = 0.4);   
    }
       
//corner joints
    for(i=[0:5])
    translate([0,(i*11.9375)+6.0625,0])
    rotate([0,0,270])
    cornerjoint(6.0625,0.625,0.125,0.5,0.125);
    
}

module cornerjoint(L,H,EndGap,PadL,PadH){
    difference(){
     cube([L,H,a4z]);
        translate([EndGap,H-PadH,0])
        cube([PadL,PadH,a4z]);
        translate([L-EndGap-PadL,H-PadH,0])
        cube([PadL,PadH,a4z]);
    }
} //end cornerjoint module
 

A5

Welds to: A3

Bolts to: A1

a5x=6;
a5y=72;
a5z=0.5;
$fn=20;

difference(){
    cube([a5x,a5y,a5z]);

    hull(){
            translate([3,23.795,0]) 
    cylinder(h = a5z, r = 0.405);
            translate([3,24.805,0]) 
    cylinder(h = a5z, r = 0.405);
    }
    
    hull(){
            translate([3,47.2,0]) 
    cylinder(h = a5z, r = 0.405);
            translate([3,48.2,0]) 
    cylinder(h = a5z, r = 0.405);
    }
    
    
    //corner joints
    for(i=[0:5])
    translate([6,(i*12)+5.9375,0])
    rotate([0,0,90])
    cornerjoint(6.125,0.625,0.125,0.5,0.125);
    
}

module cornerjoint(L,H,EndGap,PadL,PadH){
    difference(){
     cube([L,H,a5z]);
        translate([EndGap,H-PadH,0])
        cube([PadL,PadH,a5z]);
        translate([L-EndGap-PadL,H-PadH,0])
        cube([PadL,PadH,a5z]);
    }
} //end cornerjoint 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

CEB-scad-drawer.png

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>;

//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+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();

//
//add drawer cylinger rod half and rod clevis
//

} //end main translate

 

D1

  • does not match freecad drawing from JuneGroup file
    • need to review


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(){
        cube([(d1x-brickL-d2z-d2z)/2,16,d1z]);
    translate([(d1x-brickL-d2z-d2z)/2,1.5,0]) //1.5 could be better defined, but needs to match D2's cut out
        cube([0.6,5,d1z]);  //June freecad model has larger cut out
} //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 - Not on FreeCad Model??
    
    translate([0,d2y-0.43,0])
    cube([2,0.43,d2z]);
    
    //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);  
    
} //end difference

} //end d2p module


 

D3

  • need to fix corner joint module, then double check its use here
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,((d4y-d5z)/2),0])
    tabinsert(d4z,0.5,d3z,dGap,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,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,((d4y-d5z)/2),0])
    tabinsert(d4z,0.5,d3z,dGap,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,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)-0.5-d5z)/2,d3z,0.125,((d4y-(0.75*2)-0.5-d5z)/2)-(0.125*2),0.125,270,0);
    
    translate([0,d4y-0.75-((d4y-(0.75*2)-0.5-d5z)/2),0])
    cornerjoint(d4z,(d4y-(0.75*2)-0.5-d5z)/2,d3z,0.125,((d4y-(0.75*2)-0.5-d5z)/2)-(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]);
    
    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);
 
        translate([d5x/2,3,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

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

  • 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


 

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


 


Part Review Layout

  • All parts layed out in sequence for review in DXF format
    • might find a way to label parts below X axis
review.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>;


partspacing=1; //common distance between parts

//d1
projection(cut = true) //use projection to create 2D DXF files
translate([d1y,d1x/2,0])
rotate([0,0,90])
d1p();

projection(cut = true)
translate([d1y+partspacing+d2y,0,0])
rotate([0,0,90])
d2p();

projection(cut = true)
translate([d1y+partspacing+d2y+partspacing+d2y,0,0])
rotate([0,0,90])
d2p();

projection(cut = true)
translate([d1y+partspacing+d2y+partspacing+d2y+partspacing+d3y,d3x/2,0])
rotate([0,0,90])
d3p();

projection(cut = true)
translate([d1y+partspacing+d2y+partspacing+d2y+partspacing+d3y+partspacing+d3y,d3x/2,0])
rotate([0,0,90])
d3p();

 


To Do

  • get SVnest to work for torch table layout