commit f0a37dff1fa582ca0ea34388ab9444647e0fc4dc
Author: Paco Esteban <paco@e1e0.net>
Date: Sat, 20 Nov 2021 17:37:56 +0100
bench support for the GreatFET
Diffstat:
A | greatfet_support.scad | | | 103 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 103 insertions(+), 0 deletions(-)
diff --git a/greatfet_support.scad b/greatfet_support.scad
@@ -0,0 +1,103 @@
+holeSpacingH = 60.96;
+holeFrontSpacingV = 40.64;
+holeBackSpacingV = 45.72;
+
+frameEdgePaddingH = 14;
+frameEdgePaddingV = 8;
+
+frameSize = [holeSpacingH + frameEdgePaddingH*2, holeBackSpacingV + frameEdgePaddingV*2];
+frameThickness = 2;
+frameReinforcementHeight = 4;
+frameReinforcementThickness = 1.5;
+frameWidth = 8;
+
+mountLength = 15;
+mountDia = 7;
+mountHoleDia = 3.5;
+mountColumns = [0, holeSpacingH, holeSpacingH];
+
+union() {
+ frame();
+ mounts();
+}
+
+module mounts() {
+ union() {
+ linear_extrude(mountLength) difference() {
+ mountOutlines(mountDia);
+ mountOutlines(mountHoleDia);
+ }
+ mountFlanges();
+ }
+}
+
+module frame() {
+ linear_extrude(frameThickness) frameOutline();
+ linear_extrude(frameReinforcementHeight) frameRim(frameReinforcementThickness);
+}
+
+module frameOutline() {
+ union() {
+ frameRim(frameWidth);
+ mountOutlines(mountDia);
+ frameFlanges(mountDia);
+ }
+}
+
+module frameReinforcementOutline() {
+ difference() {
+ frameRim(frameReinforcementThickness);
+ mountOutlines(mountHoleDia);
+ }
+}
+
+module frameRim(width) {
+ difference() {
+ offset(r=width/2) square(size=frameSize, center=true);
+ offset(r=-width/2) square(size=frameSize, center=true);
+ }
+}
+
+module mountOutline(d) {
+ circle(d/2, $fn=32);
+}
+
+module mountOutlines(d) {
+ // front
+ translate([-holeSpacingH/2, holeFrontSpacingV/2]) mountOutline(d);
+ translate([-holeSpacingH/2, -holeFrontSpacingV/2]) mountOutline(d);
+ // back
+ translate([holeSpacingH/2, holeBackSpacingV/2]) mountOutline(d);
+ translate([holeSpacingH/2, -holeBackSpacingV/2]) mountOutline(d);
+}
+
+module frameFlanges(length) {
+ translate([-holeSpacingH/2-mountDia/2, holeFrontSpacingV/2]) square(size=[length, frameWidth]);
+ translate([-holeSpacingH/2-mountDia/2, -holeFrontSpacingV/2-mountDia-frameThickness/2]) square(size=[length, frameWidth]);
+ translate([holeSpacingH/2-mountDia/2, holeBackSpacingV/2]) square(size=[length, frameWidth]);
+ translate([holeSpacingH/2-mountDia/2, -holeBackSpacingV/2-mountDia-frameThickness/2]) square(size=[length, frameWidth]);
+}
+
+module mountFlange(edgePadding) {
+ translate([-frameReinforcementThickness/2, 0]) rotate([90, 0, 90])
+ linear_extrude(frameReinforcementThickness) polygon(points=[
+ [mountHoleDia/2, 0],
+ [edgePadding, 0],
+ [edgePadding, frameReinforcementHeight],
+ [mountHoleDia/2, mountLength]]);
+}
+
+module flangeFront() {
+ translate([-holeSpacingH/2, holeFrontSpacingV/2+frameReinforcementThickness]) mountFlange(mountDia+(holeBackSpacingV-holeFrontSpacingV)/2);
+}
+
+module flangeBack() {
+ translate([holeSpacingH/2, holeBackSpacingV/2+frameReinforcementThickness]) mountFlange(mountDia);
+}
+
+module mountFlanges() {
+ flangeFront();
+ mirror([0,1,0]) flangeFront();
+ flangeBack();
+ mirror([0,1,0]) flangeBack();
+}