chiark / gitweb /
fairphone-case: adjust led pos from caliper measurement
[reprap-play.git] / fairphone-case.scad
index c0df34586c8f547aa319c0e852f1871676bb8ab3..deb40ba01a1036cc2a0c879f7311e665e0427335 100644 (file)
@@ -25,6 +25,7 @@ initial_layer_width = 0.125; // ^ needed for mode 3 only
 multicolour_gap = 0.15; // each side
 
 phone_cnr_rad = 6.0;
+phone_rim_depth = 0.80; // includes allowance for a screen protector
 
 button_cutout_depth = 9;
 
@@ -39,9 +40,9 @@ camera_pos_br = [ 22.300, 37.600 ]; // tl/br as seen from back
 jack_pos = [ 13.83, 8.485 ];
 jack_dia = 10.64 + .5; // some jack I had lying around
 
-led_pos = [ 12.50, 8.00 ];
+led_pos = [ 10.86, 8.58 ];
 led_aperture = 5;
-led_windowledge = 0.75; // each side
+led_window_ledge = 0.75; // each side
 
 noisecancelmic_pos = [ 19.54, 7.37 ];   // from rhs
 noisecancelmic_dia = 4.00;
@@ -57,7 +58,7 @@ microusb_below = 0.0;
 microusb_width = 16.12 + 1.25;
 
 case_th_bottom = 2.5;
-case_th_lid = 2.5;
+case_th_lid = 3.0;
 case_th_side = 2;
 case_th_lip = 1.2;
 
@@ -196,7 +197,19 @@ kppa = [ kppb[0], kppf[1] ];
 lpp10 = [ epp5[0] + lid_gap_x, kppc[1] + lid_gap_z ];
 lpp11 = [ lpp10[0],            epp5[1] + lid_gap_z ];
 
-lp_r12 = case_th_lid - (lpp11[1] - lpp10[1]);
+lpp14 = lpp10 + [1,0] * keeper_inner_width;
+// exact x posn not very important; must extend past end of keeper
+
+lpp15 = [ lpp14[0],
+         epp0[1] - phone_rim_depth + 1/2.5 * case_th_lid ];
+// ^ beam theory says to maximise force before contact,
+//   the gap below the `beam' (the lid) must be 1/3
+//   the thickness (ie the lid thickness) if the beam
+//   is solid, or 1/2 if it has a top and bottom only.
+//   ours is mostly solid.
+
+lp_r12 = max(case_th_lid - (lpp11[1] - lpp15[1]),
+            case_th_lip);
 
 lpp12 = [ epp4[0] + lp_r12,    lpp11[1] ];
 lpp13 = [ lpp12[0],            lpp12[1] + lp_r12 ];
@@ -221,7 +234,7 @@ bppW = lpp10;
 // notification led aperture
 
 nla_r0 = led_aperture/2;
-nla_r1 = nla_r0 + led_windowledge;
+nla_r1 = nla_r0 + led_window_ledge;
 nla_r2 = nla_r1 + multicolour_gap;
 nla_t =
   led_window_style >= 3 ? initial_layer_thick :
@@ -342,7 +355,7 @@ module AdhocMultiprintFrame(phase, z0, zs) {
   p1 = [ xrange[1], yrange[1] ];
   echo(p0, p1);
   translate([0,0, z0])
-    mirror([0,0, zs<0])
+    mirror([0,0, zs<0 ? 1 : 0])
     linear_extrude(height= initial_layer_thick)
     difference(){
       rectfromto(p0 - [1,1] * initial_layer_width,
@@ -377,7 +390,9 @@ module LidEdgeProfile(){
            lpp12,
            lpp13,
            lpp13 + [10, 0],
-           lpp10 + [10, 0]
+           lpp15 + [10, 0],
+           lpp15,
+           lpp14,
            ]);
   intersection(){
     circleat(lpp12, r=lp_r12);
@@ -912,6 +927,12 @@ module Case(){ ////toplevel
   }
 }
 
+module LidAdhocMultiprintFrame(phase){
+  if (led_window_style >= 3) {
+    AdhocMultiprintFrame(phase, lpp13[1], -1);
+  }
+}
+
 module Lid(){ ////toplevel
   difference(){
     union(){
@@ -965,9 +986,7 @@ module Lid(){ ////toplevel
 
     }
 
-  if (led_window_style >= 3) {
-    AdhocMultiprintFrame(1, lpp13[1], -1);
-  }
+  LidAdhocMultiprintFrame(1);
 }
 
 module HingeLever(){ ////toplevel
@@ -993,6 +1012,33 @@ module HingeLever(){ ////toplevel
   }
 }
 
+module LidWindow(){ ////toplevel
+  translate([led_pos[0], -led_pos[1], lpp13[1]])
+    mirror([0,0,1])
+    cylinder(r= nla_r1, h=nla_t);
+  LidAdhocMultiprintFrame(0, lpp13[1], -1);
+}
+
+module LidWindowPrint(){ ////toplevel
+  rotate([0,180,0])
+    LidWindow();
+}
+
+module DemoLidWindowSelect(){
+  translate([led_pos[0], led_pos[1], -100]) {
+    translate([0, -30, 0]) cube([400, 400, 200]);
+  }
+}
+
+module DemoLidWindow(){ ////toplevel
+  %Lid();
+  LidWindow();
+  translate([0,40,0]){
+    color("blue") intersection(){ Lid(); DemoLidWindowSelect(); }
+    color("red") intersection(){ LidWindow(); DemoLidWindowSelect(); }
+  }
+}
+
 module HingeLeverPrint(){ ////toplevel
   rotate([-90,0,0])
     translate([-phone_width/2, phone_height, 0])
@@ -1113,6 +1159,8 @@ module TestSelectFrame(){
 
 module TestSelectLidFrame(){
   TestSelectFrame();
+  translate([led_pos[0], -led_pos[1], -50])
+    cylinder(r= nla_r2+2, h=100);
 }
 
 module TestFrameCase(){ ////toplevel