]> git.scottworley.com Git - tattlekey/blobdiff - housing/tattlekey.scad
server: Only write CSV headers when initially creating the log file
[tattlekey] / housing / tattlekey.scad
index c6b0e734819c644bf4ee6bd806f912368cb4d32a..1f5ea4c0709e41051971179d6eae28318a52a25c 100644 (file)
@@ -4,16 +4,22 @@ key_interface_size = 18;
 key_interface_corner_r = 5;
 key_interface_thickness = 1.484;
 
-housing_inner_h = 8; // Chosen to let board fit inside
+// Chosen to let board fit inside
+housing_inner_h = 6;
 housing_inner_w = 21;
+housing_flat = 8;
+housing_extra_l = 10;
 
 thickness = 1.7;
 
+board_gap = 0.125;
+
 wiring_l = 12;
 extra_flare = wiring_l;
 
 pico_board_l = 51.0;
 pico_board_w = 21.0;
+pico_board_h = 1.0;
 pico_total_h = 3.7;
 
 $fs = .1;
@@ -27,12 +33,16 @@ module pico_hole(d, x, y) {
     cylinder(h=slop, d = d);
 }
 
+module pico_board(length = pico_board_l, gap = 0) {
+    translate([-gap - length + pico_board_l, 0, -gap])
+    cube([length + 2*gap, pico_board_w, pico_board_h + 2*gap]);
+}
+
 module pico_w(hole_d = 2.1) {
     // Dimensions from measuring and/or
     // https://datasheets.raspberrypi.com/picow/pico-w-datasheet.pdf
     board_l = pico_board_l;
     board_w = pico_board_w;
-    board_h = 1.0;
     
     hole_x1 = 2.0;
     hole_x2 = board_l - 2.0;
@@ -41,7 +51,7 @@ module pico_w(hole_d = 2.1) {
     
     difference() {
         color("green")
-        cube([board_l, board_w, board_h]);
+        pico_board();
 
         pico_hole(hole_d, hole_x1, hole_y);
         pico_hole(hole_d, hole_x2, hole_y);
@@ -104,19 +114,23 @@ module key_interface() {
 }
 
 module housing_shape(outline = thickness) {
-    inner_squish = housing_inner_h / housing_inner_w;
     housing_w = housing_inner_w + 2 * outline;
     housing_h = housing_inner_h + 2 * outline;
-    squish = housing_h / housing_w;
+    squish = housing_h / (housing_w - housing_flat);
 
     scale([1, squish])
-    circle(d = housing_w);
+    minkowski() {
+        circle(d = housing_w - housing_flat);
+        square([housing_flat, epsilon], center=true);
+    }
 }
 
-module housing(length = pico_board_l - extra_flare) {
+module housing() {
+    length = pico_board_l - extra_flare;
+    translate([-housing_extra_l, 0, 0])
     rotate([90, 0, 0])
     rotate([0, 90, 0])
-    linear_extrude(length)
+    linear_extrude(length + housing_extra_l)
     difference() {
         housing_shape();
         housing_shape(0);
@@ -144,6 +158,11 @@ module flare() {
     }
 }
 
+module at_board() {
+    translate([0, -pico_board_w/2, -pico_board_h])
+    children();
+}
+
 module tattlekey_case() {
     key_interface();
 
@@ -152,9 +171,16 @@ module tattlekey_case() {
             housing();
             flare();
         }
-        translate([0, -pico_board_w/2, -1])
-        pico_w();
+        at_board()
+        pico_board(slop, board_gap);
     }
 }
 
+module preview() {
+    at_board() pico_w();
+    render() tattlekey_case();
+}
+
+//preview();
+
 tattlekey_case();