greatfet

tools and accesories for using with the GreatFET
git clone https://git.e1e0.net/greatfet.git
Log | Files | Refs

greatfet_support.scad (2779B)


      1 holeSpacingH = 60.96;
      2 holeFrontSpacingV = 40.64;
      3 holeBackSpacingV = 45.72;
      4 
      5 frameEdgePaddingH = 14;
      6 frameEdgePaddingV = 8;
      7 
      8 frameSize = [holeSpacingH + frameEdgePaddingH*2, holeBackSpacingV + frameEdgePaddingV*2];
      9 frameThickness = 2;
     10 frameReinforcementHeight = 4;
     11 frameReinforcementThickness = 1.5;
     12 frameWidth = 8;
     13 
     14 mountLength = 15;
     15 mountDia = 7;
     16 mountHoleDia = 3.5;
     17 mountColumns = [0, holeSpacingH, holeSpacingH];
     18 
     19 union() {
     20   frame();
     21   mounts();
     22 }
     23 
     24 module mounts() {
     25   union() {
     26     linear_extrude(mountLength) difference() {
     27       mountOutlines(mountDia);
     28       mountOutlines(mountHoleDia);
     29     }
     30     mountFlanges();
     31   }
     32 }
     33 
     34 module frame() {
     35   linear_extrude(frameThickness) frameOutline();
     36   linear_extrude(frameReinforcementHeight) frameRim(frameReinforcementThickness);
     37 }
     38 
     39 module frameOutline() {
     40   union() {
     41     frameRim(frameWidth);
     42     mountOutlines(mountDia);
     43     frameFlanges(mountDia);
     44   }
     45 }
     46 
     47 module frameReinforcementOutline() {
     48   difference() {
     49     frameRim(frameReinforcementThickness);
     50     mountOutlines(mountHoleDia);
     51   }
     52 }
     53 
     54 module frameRim(width) {
     55   difference() {
     56     offset(r=width/2) square(size=frameSize, center=true);
     57     offset(r=-width/2) square(size=frameSize, center=true);
     58   }
     59 }
     60 
     61 module mountOutline(d) {
     62   circle(d/2, $fn=32);
     63 }
     64 
     65 module mountOutlines(d) {
     66   // front
     67   translate([-holeSpacingH/2, holeFrontSpacingV/2]) mountOutline(d);
     68   translate([-holeSpacingH/2, -holeFrontSpacingV/2]) mountOutline(d);
     69   // back
     70   translate([holeSpacingH/2, holeBackSpacingV/2]) mountOutline(d);
     71   translate([holeSpacingH/2, -holeBackSpacingV/2]) mountOutline(d);
     72 }
     73 
     74 module frameFlanges(length) {
     75   translate([-holeSpacingH/2-mountDia/2, holeFrontSpacingV/2]) square(size=[length, frameWidth]);
     76   translate([-holeSpacingH/2-mountDia/2, -holeFrontSpacingV/2-mountDia-frameThickness/2]) square(size=[length, frameWidth]);
     77   translate([holeSpacingH/2-mountDia/2, holeBackSpacingV/2]) square(size=[length, frameWidth]);
     78   translate([holeSpacingH/2-mountDia/2, -holeBackSpacingV/2-mountDia-frameThickness/2]) square(size=[length, frameWidth]);
     79 }
     80 
     81 module mountFlange(edgePadding) {
     82   translate([-frameReinforcementThickness/2, 0]) rotate([90, 0, 90])
     83     linear_extrude(frameReinforcementThickness) polygon(points=[
     84     [mountHoleDia/2, 0],
     85     [edgePadding, 0],
     86     [edgePadding, frameReinforcementHeight],
     87     [mountHoleDia/2, mountLength]]);
     88 }
     89 
     90 module flangeFront() {
     91   translate([-holeSpacingH/2, holeFrontSpacingV/2+frameReinforcementThickness]) mountFlange(mountDia+(holeBackSpacingV-holeFrontSpacingV)/2);
     92 }
     93 
     94 module flangeBack() {
     95   translate([holeSpacingH/2, holeBackSpacingV/2+frameReinforcementThickness]) mountFlange(mountDia);
     96 }
     97 
     98 module mountFlanges() {
     99   flangeFront();
    100   mirror([0,1,0]) flangeFront();
    101   flangeBack();
    102   mirror([0,1,0]) flangeBack();
    103 }