ソースを参照

Acorn Squash 'flat pack' files

clementinecomputing 5 年 前
コミット
8f302b2de0
19 ファイル変更1492 行追加0 行削除
  1. 57 0
      experiment/production/housing/v-acorn-squash/PopufareHousingBack.scad
  2. 54 0
      experiment/production/housing/v-acorn-squash/PopufareHousingBackLipAttachment.scad
  3. 62 0
      experiment/production/housing/v-acorn-squash/PopufareHousingBottom.scad
  4. 225 0
      experiment/production/housing/v-acorn-squash/PopufareHousingCommon.scad
  5. 165 0
      experiment/production/housing/v-acorn-squash/PopufareHousingFrontAngle.scad
  6. 69 0
      experiment/production/housing/v-acorn-squash/PopufareHousingFrontBottom.scad
  7. 110 0
      experiment/production/housing/v-acorn-squash/PopufareHousingInnerBack.scad
  8. 78 0
      experiment/production/housing/v-acorn-squash/PopufareHousingInnerTop.scad
  9. 37 0
      experiment/production/housing/v-acorn-squash/PopufareHousingScreenCover.scad
  10. 112 0
      experiment/production/housing/v-acorn-squash/PopufareHousingSideLeft.scad
  11. 111 0
      experiment/production/housing/v-acorn-squash/PopufareHousingSideRight.scad
  12. 42 0
      experiment/production/housing/v-acorn-squash/PopufareHousingSpacer.scad
  13. 78 0
      experiment/production/housing/v-acorn-squash/PopufareHousingTop.scad
  14. 12 0
      experiment/production/housing/v-acorn-squash/README.md
  15. 3 0
      experiment/production/housing/v-acorn-squash/export/cleanit
  16. 58 0
      experiment/production/housing/v-acorn-squash/export/export-all
  17. 44 0
      experiment/production/housing/v-acorn-squash/housing_layout.scad
  18. 55 0
      experiment/production/housing/v-acorn-squash/housing_layout_3d.scad
  19. 120 0
      experiment/production/housing/version-names.list

+ 57 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingBack.scad

@@ -0,0 +1,57 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+include <PopufareHousingCommon.scad>
+
+module PopufareHousingBackPlate() {
+  w = POPUFARE_HOUSING_WIDTH;
+  h = POPUFARE_HOUSING_HEIGHT - POPUFARE_HOUSING_BACK_LIP_HEIGHT;
+
+  fixture_dx = POPUFARE_FIXTURE_DX;
+  fixture_dy = POPUFARE_FIXTURE_DY;
+  fixture_bolt = 5.0/2.0;
+
+  bx = POPUFARE_BRACKET_CX;
+  br = POPUFARE_BRACKET_D/2.0;
+
+  gland_cx = 0;
+  gland_cy = -(h/2 - 1.5*POPUFARE_GLAND_DIAMETER);
+  
+  gdx = 1*POPUFARE_GLAND_DIAMETER/2;
+  gdy = 1*POPUFARE_GLAND_DIAMETER/2;
+  
+  hinge_de = POPUFARE_HINGE1_BACK_DE;
+  hinge_dh = POPUFARE_HINGE1_BACK_DH;
+  hinge_dw = POPUFARE_HINGE1_BACK_DW;
+  hinge_r = POPUFARE_HINGE1_BACK_R + 0.25;
+
+  lip = _MATERIAL_THICKNESS;
+
+  back_bracket_dx = w/3;
+
+  difference() {
+    union() {
+      square([w,h], center=true);
+    }
+
+    // side bracket
+    //
+    translate([-(w/2 - bx), 0]) circle(br);
+    translate([ (w/2 - bx), 0]) circle(br);
+
+    translate([ -back_bracket_dx/2, (h/2 - bx)]) circle(br);
+    translate([  back_bracket_dx/2, (h/2 - bx)]) circle(br);
+
+    // lip attachment
+    //
+    translate([ 0, -(h/2 - bx)]) circle(br);
+
+  }
+}
+
+//PopufareHousingBackPlate();

+ 54 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingBackLipAttachment.scad

@@ -0,0 +1,54 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+include <PopufareHousingCommon.scad>
+
+module PopufareHousingBackLipAttachmentPlate() {
+  de = POPUFARE_BRACKET_DE;
+
+  w = POPUFARE_HOUSING_WIDTH;
+  h = POPUFARE_HOUSING_BACK_LIP_SPACE + POPUFARE_HOUSING_BACK_LIP_INSET;
+  h0 = POPUFARE_HOUSING_BACK_LIP_SPACE;
+  h1 = POPUFARE_HOUSING_BACK_LIP_INSET;
+
+  screw_ofx = POPUFARE_HOUSING_BACK_LIP_SCREW_OFFSET_SIDE_X;
+  screw_ofy = POPUFARE_HOUSING_BACK_LIP_SCREW_OFFSET_BACK_Y;
+  screw_dx = POPUFARE_HOUSING_BACK_LIP_SCREW_DX;
+  screw_r = _LIP_SCREW_D/2;
+
+  br = POPUFARE_BRACKET_D/2.0;
+  bx = POPUFARE_BRACKET_CX;
+
+
+  difference() {
+    union() {
+      square([w,h], center=true);
+    }
+
+    // helper to see where lip is
+    //
+    translate([-w/2, h/2 - h0]) square([4,1], center=true);
+    translate([ w/2, h/2 - h0]) square([4,1], center=true);
+
+    // lip screw attachments (1/4 inch bolt)
+    //
+    translate([ -screw_dx/2, (h/2 - screw_ofy) ]) circle(screw_r);
+    translate([  screw_dx/2, (h/2 - screw_ofy) ]) circle(screw_r);
+
+    // bracket to back plate
+    //
+    translate([ 0, (h/2 - h0 - bx)]) circle(br);
+
+    // bracket to side plates
+    //
+    translate([ -(w/2 - bx), (h/2 - h0 - h1/2)]) circle(br);
+    translate([  (w/2 - bx), (h/2 - h0 - h1/2)]) circle(br);
+
+  }
+
+}

+ 62 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingBottom.scad

@@ -0,0 +1,62 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+include <PopufareHousingCommon.scad>
+
+module PopufareHousingBottomPlate() {
+  w = POPUFARE_HOUSING_WIDTH;
+  h = POPUFARE_HOUSING_DEPTH;
+  
+  fixture_dx = POPUFARE_FIXTURE_DX;
+  fixture_dy = POPUFARE_FIXTURE_DY;
+  fixture_bolt = 5.0/2.0;
+  
+  bx = POPUFARE_BRACKET_CX;
+  br = POPUFARE_BRACKET_D/2.0;
+  
+  fix_c = [0,30];
+  
+  difference() {
+    square([w,h], center=true);
+    
+    // generic cable access
+    //
+    translate(fix_c)
+    circle(POPUFARE_GLAND_DIAMETER/2.0);
+    
+    // fixture bolts
+    //
+    translate(fix_c)
+    translate([-fixture_dx/2.0, -fixture_dy/2.0]) circle(fixture_bolt);
+    translate(fix_c)
+    translate([ fixture_dx/2.0, -fixture_dy/2.0]) circle(fixture_bolt);
+    translate(fix_c)
+    translate([ fixture_dx/2.0,  fixture_dy/2.0]) circle(fixture_bolt);
+    translate(fix_c)
+    translate([-fixture_dx/2.0,  fixture_dy/2.0]) circle(fixture_bolt);
+    
+    // side bracket attachments
+    //
+    translate([ (w/2 - bx), (h/2-POPUFARE_BRACKET_DE)]) circle(br);
+    translate([ (w/2 - bx),-(h/2-POPUFARE_BRACKET_DE)]) circle(br);
+    translate([-(w/2 - bx), (h/2-POPUFARE_BRACKET_DE)]) circle(br);
+    translate([-(w/2 - bx),-(h/2-POPUFARE_BRACKET_DE)]) circle(br);
+    
+    // front bracket attachments
+    //
+    translate([ (w/2 - POPUFARE_BRACKET_DE), -(h/2 - bx)]) circle(br);
+    translate([-(w/2 - POPUFARE_BRACKET_DE), -(h/2 - bx)]) circle(br);
+    
+    // hinge assembly attachment
+    //
+    
+    
+  }
+}
+
+//PopufareHousingBottomPlate();

+ 225 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingCommon.scad

@@ -0,0 +1,225 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+$fs = 1.0/64.0;
+
+// ...
+//
+
+// 1/8 inch sheet thickness
+//
+//_MATERIAL_THICKNESS = 3.175
+
+// 1/4 inch sheet thickness
+//
+_MATERIAL_THICKNESS = 6.35;
+
+_M2 = 2.0;
+_M2r = 2.0/2;
+
+_M3 = 3.0;
+_M3r = 3.0/2;
+
+_M4 = 4.0;
+_M4r = 4.0/2;
+
+_M5 = 5.0;
+_M5r = 5.0/2;
+
+// in mm
+//
+POPUFARE_HOUSING_WIDTH = 263;
+POPUFARE_HOUSING_FULL_DEPTH = 215;
+POPUFARE_HOUSING_HEIGHT = 135;
+
+_LIP_SCREW_D = 6.35;
+POPUFARE_HOUSING_BACK_LIP_HEIGHT = 49;
+POPUFARE_HOUSING_FRONT_LIP_HEIGHT = 7.25;
+POPUFARE_HOUSING_BACK_LIP_DEPTH = 23;
+POPUFARE_HOUSING_BACK_LIP_SCREW_DX = 147.25 + _LIP_SCREW_D;
+POPUFARE_HOUSING_BACK_LIP_SCREW_OFFSET_SIDE_X = 30 + _LIP_SCREW_D/2;
+POPUFARE_HOUSING_BACK_LIP_SCREW_OFFSET_BACK_Y = 13.75 + _LIP_SCREW_D/2;
+POPUFARE_HOUSING_BACK_LIP_SPACE = POPUFARE_HOUSING_BACK_LIP_DEPTH + 10;
+
+POPUFARE_HOUSING_BACK_LIP_INSET = 30;
+
+POPUFARE_HOUSING_DEPTH = POPUFARE_HOUSING_FULL_DEPTH - POPUFARE_HOUSING_BACK_LIP_SPACE;
+
+POPUFARE_SCREEN_WIDTH_CAPACITIVE = 122;
+POPUFARE_SCREEN_HEIGHT_CAPACITIVE = 78;
+
+POPUFARE_SCREEN_WIDTH_RESISTIVE = 119;
+POPUFARE_SCREEN_HEIGHT_RESISTIVE = 71;
+
+POPUFARE_SCREEN_INNER_WIDTH_RESISTIVE = 117.5;
+POPUFARE_SCREEN_INNER_HEIGHT_RESISTIVE = 70;
+
+POPUFARE_GLAND_DIAMETER = 37;
+POPUFARE_SCREEN_OUTER_WIDTH = 122;
+
+//POPUFARE_SCREEN_WIDTH = 118 + 1;
+//POPUFARE_SCREEN_HEIGHT = 70 + 1;
+
+POPUFARE_SCREEN_OUTER_HEIGHT = 78;
+
+POPUFARE_FRONT_HEIGHT = 60;
+
+POPUFARE_FIXTURE_DX = 65;
+POPUFARE_FIXTURE_DY = 65;
+POPUFARE_FIXTURE_SCREW_D = 7.5;
+
+POPUFARE_HINGE1_TOP_R = 2;
+POPUFARE_HINGE1_TOP_DE = 7.25 + POPUFARE_HINGE1_TOP_R;
+POPUFARE_HINGE1_TOP_DH = (25 - 2*POPUFARE_HINGE1_TOP_R);
+POPUFARE_HINGE1_TOP_DW = (28 + 2*POPUFARE_HINGE1_TOP_R);
+
+POPUFARE_HINGE1_BACK_R = 2;
+POPUFARE_HINGE1_BACK_DE = 8.5 + POPUFARE_HINGE1_BACK_R;
+POPUFARE_HINGE1_BACK_DH = (22 - 2*POPUFARE_HINGE1_BACK_R);
+POPUFARE_HINGE1_BACK_DW = (28 + 2*POPUFARE_HINGE1_BACK_R);
+
+// bracket
+//
+
+// center of bracket to end
+//
+POPUFARE_BRACKET_CX = 20;
+
+// screw size to fit through bracket (bracket itself is 6mm in diameter)
+//
+POPUFARE_BRACKET_D = 5;
+
+POPUFARE_BRACKET_DS = 100;
+POPUFARE_BRACKET_DE = 40;
+POPUFARE_BRACKET_DE_MEDIUM = 30;
+POPUFARE_BRACKET_DE_SHORT = 20;
+
+// buck
+//
+
+POPUFARE_BUCK_HOLE_WIDTH0 = 53.6 + (59.8-53.6)/2;
+POPUFARE_BUCK_HOLE_WIDTH1 = 39 + (45-39)/2;
+
+POPUFARE_BUCK_HOLE_LEN1 = 6.2;
+POPUFARE_BUCK_HOLE_R = 3.0/2;
+
+POPUFARE_BUCK_WIDTH = 49.8;
+POPUFARE_BUCK_HEIGHT = 52.9;
+POPUFARE_BUCK_HOLE_DH = 25 + (6.25)/2 - 3.0/2;
+
+// 117 - 111 = 6
+// 111 + 3 = 114
+//
+// 87 - 81 = 6
+// 81 + 3 = 84
+
+// inner plates
+//
+POPUFARE_INNER_PLATE_WIDTH = 90;
+POPUFARE_INNER_PLATE_HEIGHT = 70;
+
+//POPUFARE_INNER_PLATE_HOLE_WIDTH = POPUFARE_SCREEN_OUTER_WIDTH + 0;
+//POPUFARE_INNER_PLATE_HOLE_HEIGHT = POPUFARE_SCREEN_OUTER_HEIGHT + 20;
+
+POPUFARE_INNER_PLATE_HOLE_WIDTH = 114;
+POPUFARE_INNER_PLATE_HOLE_HEIGHT = 84;
+
+
+POPUFARE_SPEAKER_HOLE_R = 2.5/2;
+POPUFARE_SPEAKER_HOLE_WIDTH = 34.5 + ((39.5 - 34.5) / 2);
+
+// hinge
+//
+POPUFARE_HINGE_TOP_HOLE_WIDTH = 32;
+POPUFARE_HINGE_TOP_HOLE_DE = 36;
+
+POPUFARE_HINGE_BACK_HOLE_WIDTH = 45;
+POPUFARE_HINGE_BACK_HOLE_DE = 28;
+
+POPUFARE_HINGE_D = _M4;
+
+// Raspberry Pi measurements
+//
+_RASPBERRY_PI_B_HOLE_DX = 58;
+_RASPBERRY_PI_B_HOLE_DY = 48;
+
+_SCREEN_HOLE_DX = 93;
+_SCREEN_HOLE_DY = 69;
+
+
+// Center for raspberry pi from screen
+// that sits on top of it.
+//
+_SCREEN_OUTER_CENTER = [ POPUFARE_SCREEN_OUTER_WIDTH/2, POPUFARE_SCREEN_OUTER_HEIGHT/2 ];
+
+// offset of left screen m2 screws
+// as seen from the back, front ribbon down
+//
+_SCREEN_LL_M2_C = [ 5,5 ];
+_SCREEN_UL_M2_C = [ 5, POPUFARE_SCREEN_OUTER_HEIGHT - 4 ];
+
+_SCREEN_CX = _SCREEN_HOLE_DX/2 + _SCREEN_LL_M2_C[0] - _SCREEN_OUTER_CENTER[0];
+_SCREEN_CY = _SCREEN_HOLE_DY/2 + _SCREEN_LL_M2_C[1] - _SCREEN_OUTER_CENTER[1];
+
+_RASPBERRY_PI_B_CX = (_SCREEN_HOLE_DX - _RASPBERRY_PI_B_HOLE_DX/2) + _SCREEN_LL_M2_C[0] - _SCREEN_OUTER_CENTER[0];
+_RASPBERRY_PI_B_CY = (_SCREEN_HOLE_DY - _RASPBERRY_PI_B_HOLE_DY/2) + _SCREEN_LL_M2_C[1] - _SCREEN_OUTER_CENTER[1];
+
+
+// Bounding box width of rouned rect is w and h,
+// so this function compensates for the rounded corner
+// radius.
+//
+// w - width or rectangle
+// h - height of rectangle
+// r - corner radius
+//
+// rounded rectangle has center of mass (center) at (0,0)
+//
+module rounded_rect(w,h,r) {
+  _w = w-2*r;
+  _h = h-2*r;
+  
+  x2 = _w/2;
+  y2 = _h/2;
+  
+  hull() {
+    translate([-x2, y2]) circle(r);
+    translate([ x2, y2]) circle(r);
+    translate([ x2,-y2]) circle(r);
+    translate([-x2,-y2]) circle(r);
+  }
+}
+
+
+// adapter dimensions
+//
+
+_POWER_CONNECTOR_WIDTH = 36.5;
+_POWER_CONNECTOR_HEIGHT = 10.5;
+_POWER_CONNECTOR_DEPTH = 14.5;
+
+_POWER_USB_HOLE_DW = 9.11 + (15.11-9.11)/2;
+_POWER_USB_HOLE_R = 3/2;
+
+_PIU_USB_HOLE_DW = 9.25 + (12.5-9.25)/2;
+_PIU_USB_HOLE_DE = 8.5;
+_PIU_USB_HOLE_R = 2/2;
+_PIU_USB_WIDTH = 12;
+
+_POWER_BOX_R = 3/2;
+_POWER_BOX_WIDTH = _POWER_CONNECTOR_WIDTH + 12*_POWER_BOX_R;
+_POWER_BOX_HEIGHT = 3*_POWER_CONNECTOR_WIDTH + 12*_POWER_BOX_R;
+
+_POWER_BOX_PIU_USB_H = -_POWER_BOX_HEIGHT/4;
+
+
+_POWER_BOX_STRAP_DW = 18;
+_POWER_BOX_STRAP_DH = 22;
+_POWER_BOX_STRAP_R = 3/2;
+
+

+ 165 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingFrontAngle.scad

@@ -0,0 +1,165 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+include <PopufareHousingCommon.scad>
+
+
+module PopufareHousingFrontAnglePlate_resistive() {
+  dh = POPUFARE_HOUSING_HEIGHT - POPUFARE_FRONT_HEIGHT;
+
+  w = POPUFARE_HOUSING_WIDTH;
+  h = sqrt(2.0)*dh;
+
+  bx = POPUFARE_BRACKET_CX;
+  br = POPUFARE_BRACKET_D/2.0;
+  de = POPUFARE_BRACKET_DE;
+  des = POPUFARE_BRACKET_DE_SHORT;
+
+  lip = _MATERIAL_THICKNESS;
+
+  screen_w = POPUFARE_SCREEN_WIDTH_RESISTIVE;
+  screen_h = POPUFARE_SCREEN_HEIGHT_RESISTIVE;
+  screen_cx = 0;
+  screen_cy = 0;
+  screen_attach_dw = POPUFARE_INNER_PLATE_HOLE_WIDTH;
+  screen_attach_dh = POPUFARE_INNER_PLATE_HOLE_HEIGHT;
+
+  difference() {
+    union() {
+      square([w + 2*lip,h + 2*lip + 2*lip], center=true);
+
+    };
+
+    // attach to side plate brackets
+    //
+    translate([ -(w/2 - bx), -(h/2-des) ]) circle(br);
+    translate([ -(w/2 - bx),  (h/2-des) ]) circle(br);
+    translate([  (w/2 - bx), -(h/2-des) ]) circle(br);
+    translate([  (w/2 - bx),  (h/2-des) ]) circle(br);
+
+    // screen center
+    //
+    translate([screen_cx, screen_cy]) square([screen_w, screen_h], center=true);
+    translate([screen_cx, screen_cy]) translate([ screen_attach_dw/2, screen_attach_dh/2]) circle(_M3r);
+    translate([screen_cx, screen_cy]) translate([ screen_attach_dw/2,-screen_attach_dh/2]) circle(_M3r);
+    translate([screen_cx, screen_cy]) translate([-screen_attach_dw/2,-screen_attach_dh/2]) circle(_M3r);
+    translate([screen_cx, screen_cy]) translate([-screen_attach_dw/2, screen_attach_dh/2]) circle(_M3r);
+
+  }
+
+}
+
+
+
+module PopufareHousingFrontAnglePlate_resistive_waveshare() {
+  dh = POPUFARE_HOUSING_HEIGHT - POPUFARE_FRONT_HEIGHT;
+  
+  lip = _MATERIAL_THICKNESS;
+  
+  w = POPUFARE_HOUSING_WIDTH;
+  h = sqrt(2.0)*dh ;
+
+  bx = POPUFARE_BRACKET_CX;
+  br = POPUFARE_BRACKET_D/2.0;
+  de = POPUFARE_BRACKET_DE;
+  //des = POPUFARE_BRACKET_DE_SHORT;
+  des = POPUFARE_BRACKET_DE_MEDIUM;
+
+  lip = _MATERIAL_THICKNESS;
+
+  screen_w = POPUFARE_SCREEN_WIDTH_CAPACITIVE;
+  screen_h = POPUFARE_SCREEN_HEIGHT_CAPACITIVE;
+  screen_cx = 0;
+  screen_cy = 0;
+  screen_attach_dw = POPUFARE_INNER_PLATE_HOLE_WIDTH;
+  screen_attach_dh = POPUFARE_INNER_PLATE_HOLE_HEIGHT;
+
+  bottom_extra = 4.25;
+  top_extra = 1.25;
+  left_extra = 2.25;
+  right_extra = 2.25;
+
+  difference() {
+    union() {
+      square([w + 2*lip,h + 4*lip], center=true);
+    }
+
+    // attach to side plate brackets
+    //
+    translate([ -(w/2 - bx), -(h/2-des) ]) circle(br);
+    translate([ -(w/2 - bx),  (h/2-des) ]) circle(br);
+    translate([  (w/2 - bx), -(h/2-des) ]) circle(br);
+    translate([  (w/2 - bx),  (h/2-des) ]) circle(br);
+
+    // screen center
+    //
+    translate([screen_cx, screen_cy]) square([screen_w - (left_extra + right_extra), screen_h - (top_extra + top_extra) ], center=true);
+
+    translate([screen_cx, screen_cy]) translate([ screen_attach_dw/2, screen_attach_dh/2]) circle(_M3r);
+    translate([screen_cx, screen_cy]) translate([ screen_attach_dw/2,-screen_attach_dh/2]) circle(_M3r);
+    translate([screen_cx, screen_cy]) translate([-screen_attach_dw/2,-screen_attach_dh/2]) circle(_M3r);
+    translate([screen_cx, screen_cy]) translate([-screen_attach_dw/2, screen_attach_dh/2]) circle(_M3r);
+
+  }
+
+}
+
+module PopufareHousingFrontAnglePlate_capacitive() {
+  dh = POPUFARE_HOUSING_HEIGHT - POPUFARE_FRONT_HEIGHT;
+  
+  lip = _MATERIAL_THICKNESS;
+  
+  w = POPUFARE_HOUSING_WIDTH;
+  h = sqrt(2.0)*dh ;
+
+  bx = POPUFARE_BRACKET_CX;
+  br = POPUFARE_BRACKET_D/2.0;
+  de = POPUFARE_BRACKET_DE;
+  des = POPUFARE_BRACKET_DE_SHORT;
+
+  lip = _MATERIAL_THICKNESS;
+
+  screen_w = POPUFARE_SCREEN_WIDTH_CAPACITIVE;
+  screen_h = POPUFARE_SCREEN_HEIGHT_CAPACITIVE;
+  screen_cx = 0;
+  screen_cy = 0;
+  screen_attach_dw = POPUFARE_INNER_PLATE_HOLE_WIDTH;
+  screen_attach_dh = POPUFARE_INNER_PLATE_HOLE_HEIGHT;
+
+  difference() {
+    union() {
+      square([w + 2*lip,h + 4*lip], center=true);
+    }
+
+    // attach to side plate brackets
+    //
+    translate([ -(w/2 - bx), -(h/2-des) ]) circle(br);
+    translate([ -(w/2 - bx),  (h/2-des) ]) circle(br);
+    translate([  (w/2 - bx), -(h/2-des) ]) circle(br);
+    translate([  (w/2 - bx),  (h/2-des) ]) circle(br);
+
+    // screen center
+    //
+    translate([screen_cx, screen_cy]) square([screen_w, screen_h], center=true);
+    translate([screen_cx, screen_cy]) translate([ screen_attach_dw/2, screen_attach_dh/2]) circle(_M3r);
+    translate([screen_cx, screen_cy]) translate([ screen_attach_dw/2,-screen_attach_dh/2]) circle(_M3r);
+    translate([screen_cx, screen_cy]) translate([-screen_attach_dw/2,-screen_attach_dh/2]) circle(_M3r);
+    translate([screen_cx, screen_cy]) translate([-screen_attach_dw/2, screen_attach_dh/2]) circle(_M3r);
+
+  }
+
+}
+
+
+module PopufareHousingFrontAnglePlate() {
+  //PopufareHousingFrontAnglePlate_resistive();
+  //PopufareHousingFrontAnglePlate_capacitive();
+  PopufareHousingFrontAnglePlate_resistive_waveshare();
+}
+
+//PopufareHousingFrontAnglePlate();

+ 69 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingFrontBottom.scad

@@ -0,0 +1,69 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+include <PopufareHousingCommon.scad>
+
+module PopufareHousingFrontBottomPlate() {
+
+  w = POPUFARE_HOUSING_WIDTH;
+  h = POPUFARE_FRONT_HEIGHT;
+
+  bx = POPUFARE_BRACKET_CX;
+  br = POPUFARE_BRACKET_D/2.0;
+  de = POPUFARE_BRACKET_DE;
+
+  frontlip = POPUFARE_HOUSING_FRONT_LIP_HEIGHT;
+
+  mt = _MATERIAL_THICKNESS;
+
+  lip = _MATERIAL_THICKNESS;
+  lip_top = _MATERIAL_THICKNESS * sqrt(2.0);
+
+  h_tot = h - lip_top + lip;
+
+  fudge = 10;
+
+  difference() {
+    union() {
+      square([w,h], center=true);
+
+      // left/right overhang
+      //
+      translate([-w/2-lip, -h/2 ]) square([lip,h_tot]);
+      translate([ w/2, -h/2 ]) square([lip,h_tot]);
+    };
+
+    // legacy housing fron lip
+    //
+    translate([0, -(h/2 - frontlip/2)]) square([w + 2*lip,frontlip], center=true);
+
+    // get rid of ghost edges
+    //
+    translate([0, -(h/2 - frontlip/2)]) square([w + 2*lip + 1,frontlip], center=true);
+    translate([0, -(h/2)]) square([w + 2*lip + 1,frontlip/2], center=true);
+
+    // shave off top front panel to accomodate angle plate.
+    // fudge to guard against stray geometry
+    //
+    translate([0, (h/2 - 0.4999*lip_top)]) square([2*w, lip_top + 0.15], center=true);
+
+    // side plate bracket attachment
+    //
+    translate([ -(w/2 - bx), 0]) circle(br);
+    translate([  (w/2 - bx), 0]) circle(br);
+
+    // bottom lip attachment
+    //
+    translate([ -(w/2 - 8*mt), -(h/2 - bx)]) circle(br);
+    translate([  (w/2 - 8*mt), -(h/2 - bx)]) circle(br);
+
+  }
+
+}
+
+//PopufareHousingFrontBottomPlate();

+ 110 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingInnerBack.scad

@@ -0,0 +1,110 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+include <PopufareHousingCommon.scad>
+
+// when looking down (to negative z-axis)
+// it's as if you're looking at the back of the panel,
+// screen facing outwards, front ribbon on screen
+// going 'down' (negative y-axis).
+//
+module PopufareHousingInnerBackPlate() {
+  _r = 3;
+  _outr = 16;
+  
+  hole_width  = POPUFARE_INNER_PLATE_HOLE_WIDTH;
+  hole_height = POPUFARE_INNER_PLATE_HOLE_HEIGHT;
+
+  w2 = hole_width/2;
+  h2 = hole_height/2;
+  x = hole_width + _outr;
+  y = hole_height + _outr;
+  
+  rpi_hole_c = [_RASPBERRY_PI_B_CX, _RASPBERRY_PI_B_CY];
+  rpi_hole_dx = _RASPBERRY_PI_B_HOLE_DX;
+  rpi_hole_dy = _RASPBERRY_PI_B_HOLE_DY;
+  
+  screen_hole_c = [_SCREEN_CX,_SCREEN_CY];
+  screen_hole_dx = _SCREEN_HOLE_DX;
+  screen_hole_dy = _SCREEN_HOLE_DY;
+  
+  
+  d_pi_screen = [screen_hole_dx - rpi_hole_dx, screen_hole_dy - rpi_hole_dy];
+
+  access_left_w = 25;
+  access_left_h = screen_hole_dy - 10;
+  access_left_c = [ rpi_hole_c[0] - rpi_hole_dx/2  - d_pi_screen[0]/2, screen_hole_c[1] ];
+
+  access_middle_w = rpi_hole_dx - 16;
+  access_middle_h = rpi_hole_dy - 16;
+  access_middle_c = [_RASPBERRY_PI_B_CX,_RASPBERRY_PI_B_CY];
+
+  access_right_w = hole_width/2 - (rpi_hole_c[0] + rpi_hole_dx/2);
+  access_right_h = 5*hole_height/8;
+  access_right_c = [ (rpi_hole_c[0] + rpi_hole_dx/2) + access_right_w/2 + _r, 0];
+  
+  access_top_w = rpi_hole_dx - 25;
+  access_top_h = 6;
+  access_top_c  = [rpi_hole_c[0], rpi_hole_c[1] + rpi_hole_dy/2 + access_top_h/2 + 4];
+  
+  access_bottom_w = rpi_hole_dx - 25;
+  access_bottom_h = 24;
+  access_bottom_c  = [rpi_hole_c[0], rpi_hole_c[1] - rpi_hole_dy/2 - access_bottom_h/2 - 8];
+
+  sx2 = hole_width/2;
+  sy2 = hole_height/2;
+  difference() {
+    rounded_rect(x,y,_r);
+
+    // RPi m2 joining holes
+    //
+    translate(rpi_hole_c) translate([ rpi_hole_dx/2, rpi_hole_dy/2]) circle(_M2r);
+    translate(rpi_hole_c) translate([ rpi_hole_dx/2,-rpi_hole_dy/2]) circle(_M2r);
+    translate(rpi_hole_c) translate([-rpi_hole_dx/2,-rpi_hole_dy/2]) circle(_M2r);
+    translate(rpi_hole_c) translate([-rpi_hole_dx/2, rpi_hole_dy/2]) circle(_M2r);
+    
+    // opening access points in case we need them (heat sinks, USB cables, etc.)
+    //
+    translate(rpi_hole_c) rounded_rect(3*rpi_hole_dx/4, 3*rpi_hole_dy/4, _r);
+    translate(access_left_c) rounded_rect(access_left_w,access_left_h, _r);
+    translate(access_right_c) rounded_rect(access_right_w, access_right_h, _r);
+    translate(access_top_c) rounded_rect(access_top_w, access_top_h, _r);
+    translate(access_bottom_c) rounded_rect(access_bottom_w, access_bottom_h, _r);
+
+    // screen m2 joining holes
+    //
+    translate(screen_hole_c) translate([ screen_hole_dx/2, screen_hole_dy/2]) circle(_M2r);
+    translate(screen_hole_c) translate([ screen_hole_dx/2,-screen_hole_dy/2]) circle(_M2r);
+    translate(screen_hole_c) translate([-screen_hole_dx/2,-screen_hole_dy/2]) circle(_M2r);
+    translate(screen_hole_c) translate([-screen_hole_dx/2, screen_hole_dy/2]) circle(_M2r);
+
+    // Joining for outer angle plate
+    //
+    translate([-hole_width/2, -hole_height/2]) circle(_M3r);
+    translate([ hole_width/2, -hole_height/2]) circle(_M3r);
+    translate([ hole_width/2,  hole_height/2]) circle(_M3r);
+    translate([-hole_width/2,  hole_height/2]) circle(_M3r);
+
+    // usb power out
+    //
+    translate([-1*x/7,-3.5*y/10]) translate([0,  _POWER_USB_HOLE_DW/2]) circle(_POWER_USB_HOLE_R);
+    translate([-1*x/7,-3.5*y/10]) translate([0, -_POWER_USB_HOLE_DW/2]) circle(_POWER_USB_HOLE_R);
+
+    translate([-2.1*x/7,-4*y/10]) translate([ _POWER_USB_HOLE_DW/2, 0]) circle(_POWER_USB_HOLE_R);
+    translate([-2.1*x/7,-4*y/10]) translate([-_POWER_USB_HOLE_DW/2, 0]) circle(_POWER_USB_HOLE_R);
+    
+    translate([-2.1*x/7, 4*y/10]) translate([ _POWER_USB_HOLE_DW/2, 0]) circle(_POWER_USB_HOLE_R);
+    translate([-2.1*x/7, 4*y/10]) translate([-_POWER_USB_HOLE_DW/2, 0]) circle(_POWER_USB_HOLE_R);
+    
+    translate([ 2.1*x/7, 4.2*y/10]) translate([ _POWER_USB_HOLE_DW/2, 0]) circle(_POWER_USB_HOLE_R);
+    translate([ 2.1*x/7, 4.2*y/10]) translate([-_POWER_USB_HOLE_DW/2, 0]) circle(_POWER_USB_HOLE_R);
+
+  }
+}
+
+//PopufareHousingInnerBackPlate();

+ 78 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingInnerTop.scad

@@ -0,0 +1,78 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+include <PopufareHousingCommon.scad>
+
+module PopufareHousingInnerTopPlate() {
+  _r = 3;
+  _outr = 18;
+
+  idx = POPUFARE_SCREEN_WIDTH_CAPACITIVE;
+  idy = POPUFARE_SCREEN_HEIGHT_CAPACITIVE;
+
+  hole_width  = POPUFARE_INNER_PLATE_HOLE_WIDTH;
+  hole_height = POPUFARE_INNER_PLATE_HOLE_HEIGHT;
+
+  w2 = hole_width/2;
+  h2 = hole_height/2;
+  //x = hole_width + _outr;
+  //y = hole_height + _outr;
+  
+  x = POPUFARE_INNER_PLATE_HOLE_WIDTH + _outr;
+  y = POPUFARE_INNER_PLATE_HOLE_HEIGHT + _outr;
+
+  w2 = hole_width/2;
+  h2 = hole_height/2;
+  
+  tab_w = 10;
+  tab_h = 30;
+  
+  band_w = 10;
+  band_p = 2.5;
+  
+  top_dh = (y - idy)/2;
+  
+  open_dw = 85;
+  
+  union() {
+    difference() {
+      rounded_rect(x,y, _r);
+      
+
+      // straps across middle to support
+      //
+      rounded_rect(idx - band_w*4 + 2*_r, idy, _r);
+      
+      translate([-idx/2 + band_w/2,  idy/2 - idy/(2*band_p)]) rounded_rect(band_w, idy/band_p, _r);
+      translate([-idx/2 + band_w/2, -idy/2 + idy/(2*band_p)]) rounded_rect(band_w, idy/band_p, _r);
+      
+      translate([ idx/2 - band_w/2,  idy/2 - idy/(2*band_p)]) rounded_rect(band_w, idy/band_p, _r);
+      translate([ idx/2 - band_w/2, -idy/2 + idy/(2*band_p)]) rounded_rect(band_w, idy/band_p, _r);
+      
+      // joining screw holes
+      //
+      translate([-hole_width/2, -hole_height/2]) circle(_M3r);
+      translate([ hole_width/2, -hole_height/2]) circle(_M3r);
+      translate([ hole_width/2,  hole_height/2]) circle(_M3r);
+      translate([-hole_width/2,  hole_height/2]) circle(_M3r);
+      
+      // hdmi and usb access
+      //
+      translate([0, y/2]) square([open_dw,30], center=true);
+   
+    }
+    
+    // round the over hang tabs at top
+    //
+    translate([-open_dw/2,idy/2+top_dh/2]) rounded_rect(10, top_dh, _r);
+    translate([ open_dw/2,idy/2+top_dh/2]) rounded_rect(10, top_dh, _r);
+
+  }
+}
+
+//PopufareHousingInnerTopPlate();

+ 37 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingScreenCover.scad

@@ -0,0 +1,37 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+include <PopufareHousingCommon.scad>
+
+module PopufareHousingScreenCoverPlate() {
+
+  idx = POPUFARE_SCREEN_INNER_WIDTH_RESISTIVE;
+  idy = POPUFARE_SCREEN_INNER_HEIGHT_RESISTIVE;
+  
+  odx = idx+4;
+  ody = idy+4;
+
+  flap = 10;
+  
+  union() {
+    difference() {
+      square([odx,ody], center=true);
+      square([idx,idy], center=true);
+    }
+    
+    translate([0, (ody/2 + flap/2)]) square([odx,flap], center=true);
+    translate([0,-(ody/2 + flap/2)]) square([odx,flap], center=true);
+    
+    translate([-(odx/2 + flap/2), 0]) square([flap, ody], center=true);
+    translate([ (odx/2 + flap/2), 0]) square([flap, ody], center=true);
+  }
+   
+
+}
+
+//PopufareHousingScreenCoverPlate();

+ 112 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingSideLeft.scad

@@ -0,0 +1,112 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+include <PopufareHousingCommon.scad>
+
+module PopufareHousingSideLeftPlate() {
+  w = POPUFARE_HOUSING_DEPTH;
+  h = POPUFARE_HOUSING_HEIGHT;
+
+  br = POPUFARE_BRACKET_D/2.0;
+  bx = POPUFARE_BRACKET_CX;
+  de = POPUFARE_BRACKET_DE;
+  des = POPUFARE_BRACKET_DE_SHORT;
+
+  dh = POPUFARE_HOUSING_HEIGHT - POPUFARE_FRONT_HEIGHT;
+  alen = dh*sqrt(2.0);
+  w_right = w - dh;
+
+  defa = POPUFARE_BRACKET_DE_MEDIUM;
+
+  lip = _MATERIAL_THICKNESS;
+
+  buck_dw0 = POPUFARE_BUCK_HOLE_WIDTH0;
+  buck_dw1 = POPUFARE_BUCK_HOLE_WIDTH1;
+  buck_dh = POPUFARE_BUCK_HOLE_DH;
+  buck_r = POPUFARE_BUCK_HOLE_R;
+
+  //buck_center = [35,-3];
+  buck_center = [25,-3];
+
+  back_h = POPUFARE_HOUSING_HEIGHT - POPUFARE_HOUSING_BACK_LIP_HEIGHT;
+  back_lip_inset = POPUFARE_HOUSING_BACK_LIP_INSET;
+  back_lip_screw_h = (h/2 - dh + bx);
+
+  difference() {
+    union() {
+      square([w,h], center=true);
+
+      translate([-(w/2-dh),h/2 + lip/2])
+      difference() {
+        square([lip, lip], center=true);
+        translate([-lip,-lip])  rotate(45, [0,0,1]) square([3*lip, 3*lip]);
+      }
+
+      translate([-w/2,h/2 - dh])
+      difference() {
+        square([lip, lip], center=true);
+        translate([-lip,-lip])  rotate(45, [0,0,1]) square([3*lip, 3*lip]);
+      }
+    }
+
+    // chop off angle
+    //
+    translate([-w/2,-(h/2-POPUFARE_FRONT_HEIGHT)]) rotate(45, [0,0,1]) square([4*w,4*w]);
+
+    // bottom bracket
+    //
+    translate([-(w/2-de), -(h/2-bx) ]) circle(br);
+    translate([ (w/2-de), -(h/2-bx) ]) circle(br);
+
+    // front bracket
+    //
+    translate( [ -(w/2-bx), -(h/2 - POPUFARE_FRONT_HEIGHT/2) ]) circle(br);
+
+    // front angle bracket
+    //
+    translate([-w/2, -(h/2-POPUFARE_FRONT_HEIGHT)]) rotate(45, [0,0,1])
+      //translate([de/2, -bx]) circle(br);
+      translate([defa, -bx]) circle(br);
+    translate([-w/2, -(h/2-POPUFARE_FRONT_HEIGHT)]) rotate(45, [0,0,1])
+      //translate([alen - de/2, -bx]) circle(br);
+      translate([alen - defa, -bx]) circle(br);
+
+    // top bracket
+    //
+    //translate([ (w/2 - (w_right/2.0)), (h/2 - bx) ]) circle(br);
+    translate([ (w/2 - des), (h/2 - bx) ]) circle(br);
+    translate([ (w/2 - (w_right) + des), (h/2 - bx) ]) circle(br);
+
+    // buck screw attachment
+    //
+    translate(buck_center)
+    union() {
+      translate([-buck_dw0/2, -buck_dh/2]) circle(buck_r);
+      translate([ buck_dw0/2, -buck_dh/2]) circle(buck_r);
+      translate([-buck_dw1/2,  buck_dh/2]) circle(buck_r);
+      translate([ buck_dw1/2,  buck_dh/2]) circle(buck_r);
+    }
+
+    // back panel brackets
+    //
+    translate([w/2 - bx, h/2 - back_h/2]) circle(br);
+
+    // lip attachment bracket
+    //
+    translate([ (w/2 - back_lip_inset/2), h/2 - back_h + bx]) circle(br);
+
+
+
+    // usb power out
+    //
+    //translate([0,-h/4-10]) translate([0,_POWER_USB_HOLE_DW/2]) circle(_POWER_USB_HOLE_R);
+    //translate([0,-h/4-10]) translate([0,-_POWER_USB_HOLE_DW/2]) circle(_POWER_USB_HOLE_R);
+  }
+}
+
+//PopufareHousingSideLeftPlate();

+ 111 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingSideRight.scad

@@ -0,0 +1,111 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+include <PopufareHousingCommon.scad>
+
+module PopufareHousingSideRightPlate() {
+  w = POPUFARE_HOUSING_DEPTH;
+  h = POPUFARE_HOUSING_HEIGHT;
+
+  br = POPUFARE_BRACKET_D/2.0;
+  bx = POPUFARE_BRACKET_CX;
+  de = POPUFARE_BRACKET_DE;
+
+  defa = POPUFARE_BRACKET_DE_MEDIUM;
+
+  des = POPUFARE_BRACKET_DE_SHORT;
+
+  dh = POPUFARE_HOUSING_HEIGHT - POPUFARE_FRONT_HEIGHT;
+  alen = dh*sqrt(2.0);
+  w_right = w - dh;
+
+  spkr_dw = POPUFARE_SPEAKER_HOLE_WIDTH;
+
+  lip = _MATERIAL_THICKNESS + 0.125;
+
+  back_h = POPUFARE_HOUSING_HEIGHT - POPUFARE_HOUSING_BACK_LIP_HEIGHT;
+  back_lip_inset = POPUFARE_HOUSING_BACK_LIP_INSET;
+  back_lip_screw_h = (h/2 - dh + bx);
+
+  difference() {
+    union() {
+      square([w,h], center=true);
+
+      translate([w/2-dh,h/2 + lip/2])
+      difference() {
+        square([lip, lip], center=true);
+        translate([lip,-lip])  rotate(45, [0,0,1]) square([3*lip, 3*lip]);
+      }
+
+      translate([w/2,h/2 - dh])
+      difference() {
+        square([lip, lip], center=true);
+        translate([lip,-lip])  rotate(45, [0,0,1]) square([3*lip, 3*lip]);
+      }
+    }
+
+    // chop off angle
+    //
+    translate([ w/2,-(h/2-POPUFARE_FRONT_HEIGHT)]) rotate(-45, [0,0,1])
+      translate([-4*w,0]) square([4*w,4*w]);
+
+    // bottom bracket
+    //
+    translate([-(w/2-de), -(h/2-bx) ]) circle(br);
+    translate([ (w/2-de), -(h/2-bx) ]) circle(br);
+
+    // front bracket
+    //
+    translate( [ (w/2-bx), -(h/2 - POPUFARE_FRONT_HEIGHT/2) ]) circle(br);
+
+    // front angle bracket
+    //
+    translate([ w/2, -(h/2-POPUFARE_FRONT_HEIGHT)]) rotate(-45, [0,0,1])
+      //translate([-de/2, -bx]) circle(br);
+      //translate([ -(de/2), -bx]) circle(br);
+      translate([ -(defa), -bx]) circle(br);
+    translate([ w/2, -(h/2-POPUFARE_FRONT_HEIGHT)]) rotate(-45, [0,0,1])
+      translate([-(alen - defa), -bx]) circle(br);
+
+    // top bracket
+    //
+    translate([ -(w/2  - des), (h/2 - bx) ]) circle(br);
+    translate([ -w/2 + w_right - des, (h/2 - bx) ]) circle(br);
+
+    // back panel brackets
+    //
+    translate([-(w/2 - bx), h/2 - back_h/2]) circle(br);
+
+    // lip attachment bracket
+    //
+    translate([-(w/2 - back_lip_inset/2), h/2 - back_h + bx]) circle(br);
+
+
+    // speaker access and mounting screw holes
+    //
+    spkr_cx = -30;
+    spkr_cy = 0;
+    spkr_r = 2*spkr_dw/6;
+    offset_x = 4.5;
+    _w = 2.5;
+    translate([spkr_cx,spkr_cy]) rotate(45, [0,0,1]) rounded_rect(_w,2*spkr_r, _w/2);
+    translate([spkr_cx,spkr_cy]) rotate(45, [0,0,1]) translate([offset_x,0]) rounded_rect(_w,2*sqrt(spkr_r*spkr_r - offset_x*offset_x), _w/2);
+    translate([spkr_cx,spkr_cy]) rotate(45, [0,0,1]) translate([2*offset_x,0]) rounded_rect(_w,2*sqrt(spkr_r*spkr_r - (2*2*offset_x*offset_x)), _w/2);
+    //translate([spkr_cx,spkr_cy]) rotate(45, [0,0,1]) translate([3*offset_x,0]) rounded_rect(_w,2*sqrt(spkr_r*spkr_r - (3*3*offset_x*offset_x)), _w/2);
+
+    translate([spkr_cx,spkr_cy]) rotate(45, [0,0,1]) translate([-offset_x,0]) rounded_rect(_w,2*sqrt(spkr_r*spkr_r - offset_x*offset_x), _w/2);
+    translate([spkr_cx,spkr_cy]) rotate(45, [0,0,1]) translate([-2*offset_x,0]) rounded_rect(_w,2*sqrt(spkr_r*spkr_r - (2*2*offset_x*offset_x)), _w/2);
+    //translate([spkr_cx,spkr_cy]) rotate(45, [0,0,1]) translate([-3*offset_x,0]) rounded_rect(_w,2*sqrt(spkr_r*spkr_r - (3*3*offset_x*offset_x)), _w/2);
+
+    translate([spkr_cx - spkr_dw/2,spkr_cy]) circle(POPUFARE_SPEAKER_HOLE_R);
+    translate([spkr_cx + spkr_dw/2,spkr_cy]) circle(POPUFARE_SPEAKER_HOLE_R);
+
+  }
+}
+
+//PopufareHousingSideRightPlate();

+ 42 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingSpacer.scad

@@ -0,0 +1,42 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+include <PopufareHousingCommon.scad>
+
+module PopufareHousingSpacerPlate() {
+  
+  w0 = POPUFARE_HINGE_TOP_HOLE_WIDTH + POPUFARE_HINGE_D*3;
+  h0 = POPUFARE_HINGE_D*4;
+  dx0 = POPUFARE_HINGE_TOP_HOLE_WIDTH;
+  _r0 = POPUFARE_HINGE_D/2;
+  translate([0,h0/2 + 1])
+  difference() {
+    rounded_rect(w0, h0, _r0);
+    translate([-dx0/2, 0]) circle(POPUFARE_HINGE_D/2);
+    translate([ dx0/2, 0]) circle(POPUFARE_HINGE_D/2);
+  };
+  
+  w1 = POPUFARE_HINGE_D*4;
+  h1 = POPUFARE_HINGE_D*4;
+  dx1 = POPUFARE_HINGE_BACK_HOLE_WIDTH;
+  translate( [-w1/2-1, -h1/2-1 ])
+  difference() {
+    rounded_rect(w1, h1, _r0);
+    translate([0, 0]) circle(POPUFARE_HINGE_D/2);
+  }
+  
+  translate( [ w1/2+1, -h1/2-1 ])
+  difference() {
+    rounded_rect(w1, h1, _r0);
+    translate([0, 0]) circle(POPUFARE_HINGE_D/2);
+  }
+  
+}
+
+
+//PopufareHousingSpacerPlate();

+ 78 - 0
experiment/production/housing/v-acorn-squash/PopufareHousingTop.scad

@@ -0,0 +1,78 @@
+// License: CC0
+//
+// To the extent possible under law, Clementine Computing LLC has waived
+// all copyright and related or neighboring rights to this file.
+//
+// This work is published from: United States.
+//
+
+include <PopufareHousingCommon.scad>
+
+// hinge1 measurements
+// dh_inner = 10.5
+// dh_outter = 22
+// dh_first = 8
+// dh_second = 3.75
+// bot_to_under = 8.25
+// dw = 27.75, 35.5
+
+module PopufareHousingTopPlate() {
+  dh = POPUFARE_HOUSING_HEIGHT - POPUFARE_FRONT_HEIGHT;
+  w = POPUFARE_HOUSING_WIDTH;
+  h = POPUFARE_HOUSING_DEPTH-dh;
+
+  bx = POPUFARE_BRACKET_CX;
+  br = POPUFARE_BRACKET_D/2.0;
+  de = POPUFARE_BRACKET_DE;
+  des = POPUFARE_BRACKET_DE_SHORT;
+
+  lip = _MATERIAL_THICKNESS;
+
+  hinge_de = POPUFARE_HINGE1_TOP_DE;
+  hinge_dh = POPUFARE_HINGE1_TOP_DH;
+  hinge_dw = POPUFARE_HINGE1_TOP_DW;
+  hinge_r = POPUFARE_HINGE1_TOP_R + 0.25;
+
+  back_bracket_dx = w/3;
+
+  difference() {
+    union() {
+      square([w,h], center=true);
+      translate([0, (h/2 + lip/2) - 0.001]) square([w, lip], center=true);
+
+      // add overhang to back and sides but not front
+      //
+      translate([-w/2, -h/4]) square([lip, h/2], center=true);
+      translate([ w/2, -h/4]) square([lip, h/2], center=true);
+
+      translate([-w/2, h/4 + lip/2]) square([lip, h/2 + lip], center=true);
+      translate([ w/2, h/4 + lip/2]) square([lip, h/2 + lip], center=true);
+
+    };
+
+    // shave off top front panel to accomodate angle plate
+    //
+    translate([0, -(h/2 - lip/2) - 0.01]) square([2*w, lip], center=true);
+
+    // attach to back plate bracket
+    //
+    //translate([ -(w/2 - de), (h/2-bx) ]) circle(br);
+    //translate([  (w/2 - de), (h/2-bx) ]) circle(br);
+
+    // side plate bracket attachment
+    //
+    translate([ -(w/2 - bx), (h/2-des)]) circle(br);
+    translate([ -(w/2 - bx),-(h/2-des)]) circle(br);
+    translate([  (w/2 - bx), (h/2-des)]) circle(br);
+    translate([  (w/2 - bx),-(h/2-des)]) circle(br);
+
+    // back bracket attachment
+    //
+    translate([ -back_bracket_dx/2, h/2 - bx ]) circle(br);
+    translate([  back_bracket_dx/2, h/2 - bx ]) circle(br);
+
+  }
+
+}
+
+//PopufareHousingTopPlate();

+ 12 - 0
experiment/production/housing/v-acorn-squash/README.md

@@ -0,0 +1,12 @@
+Popufare Driver Interface Unit Housing, Version: `Acorn Squash`
+===
+
+###### 2020-01-20
+
+![housing preview](img/housing.png)
+
+This is version 'acorn squash' of the Driver Interface Unit (DIU) housing.
+There is a legacy mounting plate that needs to be attached to.
+This version will be used to attach to the legacy mounting plate.
+
+

+ 3 - 0
experiment/production/housing/v-acorn-squash/export/cleanit

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+rm -f *.gp *.ngc *.svg *.ps *.eps

+ 58 - 0
experiment/production/housing/v-acorn-squash/export/export-all

@@ -0,0 +1,58 @@
+#!/bin/bash
+
+VERSION=2.1.10
+
+function ngc_position {
+  ifn="$1"
+
+  offsetx=10
+  offsety=15
+
+  if [[ "$ifn" == "" ]] ; then
+    echo "provide file"
+    exit 1
+  fi
+
+  dos2unix $ifn
+  sed -i 's/;.*//' $ifn
+
+  mx=`ngc_bounds $ifn | grep min_x | cut -f2 -d' '`
+  my=`ngc_bounds $ifn | grep min_y | cut -f2 -d' '`
+
+  shiftx=` echo "-($mx) + $offsetx" | bc -l`
+  shifty=` echo "-($my) + $offsety" | bc -l`
+
+  tfn=`mktemp`
+
+  #echo "G0 F5000" > $tfn
+  grecode -shift "$shiftx" "$shifty" $ifn | \
+    grep -v '^(' >> $tfn 2> /dev/null
+  mv $tfn $ifn
+
+  rm -f $tfn
+}
+
+tmpfn=`mktemp`
+
+for fn in `ls ../Popufare*.scad  | grep -v PopufareHousingCommon.scad ` ; do
+  bfn=`basename $fn .scad`
+  svg="$bfn.$VERSION.svg"
+  ngc="$bfn.$VERSION.ngc"
+
+  echo "## $bfn"
+
+  basedir=`dirname $( pwd ) `
+
+  echo "include <$basedir/$bfn.scad>" > $tmpfn
+  echo "${bfn}Plate();" >> $tmpfn
+
+  openscad -o "$svg" "$tmpfn"
+  svg2ngc "$svg" 2> /dev/null
+  ngc_position "$ngc" 2> /dev/null
+
+  sed -i 's/F800/F150/g' "$ngc"
+  sed -i 's/G0\(.*\)S\(.*\)/G0\1 F5000 S\2/g' "$ngc"
+
+done
+
+rm $tmpfn

+ 44 - 0
experiment/production/housing/v-acorn-squash/housing_layout.scad

@@ -0,0 +1,44 @@
+include <PopufareHousingCommon.scad>
+
+include <PopufareHousingBottom.scad>
+include <PopufareHousingFrontAngle.scad>
+include <PopufareHousingFrontBottom.scad>
+include <PopufareHousingSideLeft.scad>
+include <PopufareHousingSideRight.scad>
+include <PopufareHousingTop.scad>
+include <PopufareHousingBack.scad>
+
+include <PopufareHousingInnerBack.scad>
+include <PopufareHousingInnerTop.scad>
+
+spacing = 10;
+
+dw = POPUFARE_HOUSING_WIDTH;
+dh = POPUFARE_HOUSING_HEIGHT;
+dz = POPUFARE_HOUSING_DEPTH;;
+
+iw = POPUFARE_INNER_PLATE_HOLE_WIDTH;
+ih = POPUFARE_INNER_PLATE_HOLE_HEIGHT;
+
+hh = POPUFARE_FRONT_HEIGHT;
+hz = dz-hh;
+
+
+PopufareHousingBottomPlate();
+translate( [ -(dw+spacing), 0 ] ) rotate(90, [0,0,1]) PopufareHousingSideLeftPlate();
+translate( [  (dw+spacing), 0 ] ) rotate(-90, [0,0,1]) PopufareHousingSideRightPlate();
+
+translate( [ 0, -(dz/2 + hh/2 + spacing)] ) PopufareHousingFrontBottomPlate();
+
+translate( [ 0, -(dz + hh + 2*spacing)] ) PopufareHousingFrontAnglePlate();
+
+translate( [ 0, dz + spacing  ] ) PopufareHousingBackPlate();
+translate( [ 0, dz + hz + 2*spacing] ) PopufareHousingTopPlate();
+
+//---
+
+translate([  (dw/2 + iw/2+2*spacing),  -(dz + hh + 2*spacing )]) PopufareHousingInnerBackPlate();
+//translate([  (dw/2 + 3*iw/2 + 4*spacing), -(dz + hh + 2*spacing)]) PopufareHousingInnerTopPlate();
+
+translate([  (0), -(dz + hh + + 3*ih/2+ 2*spacing )]) PopufareHousingInnerTopPlate();
+

+ 55 - 0
experiment/production/housing/v-acorn-squash/housing_layout_3d.scad

@@ -0,0 +1,55 @@
+include <PopufareHousingCommon.scad>
+
+include <PopufareHousingBottom.scad>
+include <PopufareHousingFrontAngle.scad>
+include <PopufareHousingFrontBottom.scad>
+include <PopufareHousingSideLeft.scad>
+include <PopufareHousingSideRight.scad>
+include <PopufareHousingTop.scad>
+include <PopufareHousingBack.scad>
+
+include <PopufareHousingInnerBack.scad>
+include <PopufareHousingInnerTop.scad>
+
+spacing = 30;
+
+dw = POPUFARE_HOUSING_WIDTH;
+dh = POPUFARE_HOUSING_HEIGHT;
+dz = POPUFARE_HOUSING_DEPTH;
+
+dbacklip = POPUFARE_HOUSING_BACK_LIP_HEIGHT;
+
+iw = POPUFARE_INNER_PLATE_HOLE_WIDTH;
+ih = POPUFARE_INNER_PLATE_HOLE_HEIGHT;
+
+hh = POPUFARE_FRONT_HEIGHT;
+hz = dz-hh;
+
+
+PopufareHousingBottomPlate();
+
+translate( [ -(dw/2 + spacing), 0, dh/2 + spacing ] ) rotate(-90, [0,1,0]) rotate(-90, [0,0,1])
+  PopufareHousingSideRightPlate();
+translate( [  (dw/2+spacing), 0, dh/2 + spacing ] ) rotate(90, [0,1,0]) rotate(90, [0,0,1])
+  PopufareHousingSideLeftPlate();
+
+translate( [ 0, -(dh/2 + spacing), hh/2 + spacing]) rotate(90, [1,0,0])
+  PopufareHousingFrontBottomPlate();
+
+translate( [ 0, -dz/2, hh + sqrt(2)*(dh-hh)/2 + spacing] ) rotate(45, [1,0,0])
+  PopufareHousingFrontAnglePlate();
+
+translate( [ 0, dz/2 + spacing, dh/2 + spacing + dbacklip/2] ) rotate(90, [1,0,0])
+  PopufareHousingBackPlate();
+translate( [ 0, dw/2 - 50, dz + spacing] ) PopufareHousingTopPlate();
+
+//---
+
+translate([  0, -1.5*dh, 30])
+  rotate(45, [1,0,0])
+  PopufareHousingInnerBackPlate();
+
+translate([  0, -1.5*dh, 100])
+  rotate(45, [1,0,0])
+  PopufareHousingInnerTopPlate();
+

+ 120 - 0
experiment/production/housing/version-names.list

@@ -0,0 +1,120 @@
+acorn squash
+alfalfa sprout
+amaranth
+anise
+artichoke
+arugula
+asparagus
+aubergine
+azuki bean
+banana squash
+basil
+bean sprout
+beet
+black bean
+black-eyed pea
+bok choy
+borlotti bean
+broad beans
+broccoflower
+broccoli
+brussels sprout
+butternut squash
+cabbage
+calabrese
+caraway
+carrot
+cauliflower
+cayenne pepper
+celeriac
+celery
+chamomile
+chard
+chayote
+chickpea
+chives
+cilantro
+collard green
+corn
+corn salad
+courgette
+cucumber
+daikon
+delicata
+dill
+eggplant
+endive
+fennel
+fiddlehead
+frisee
+garlic
+gem squash
+ginger
+green bean
+green pepper
+habanero
+herbs and spice
+horseradish
+hubbard squash
+jalapeno
+jerusalem artichoke
+jicama
+kale
+kidney bean
+kohlrabi
+lavender
+leek 
+legume
+lemon grass
+lentils
+lettuce
+lima bean
+mamey
+mangetout
+marjoram
+mung bean
+mushroom
+mustard green
+navy bean
+new zealand spinach
+nopale
+okra
+onion
+oregano
+paprika
+parsley
+parsnip
+patty pan
+pea
+pinto bean
+potato
+pumpkin
+radicchio
+radish
+rhubarb
+rosemary
+runner bean
+rutabaga
+sage
+scallion
+shallot
+skirret
+snap pea
+soy bean
+spaghetti squash
+spinach
+squash 
+sweet potato
+tabasco pepper
+taro
+tat soi
+thyme
+topinambur
+tubers
+turnip
+wasabi
+water chestnut
+watercress
+white radish
+yam
+zucchini