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;
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;
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);
}
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);
}
}
+module at_board() {
+ translate([0, -pico_board_w/2, -pico_board_h])
+ children();
+}
+
module tattlekey_case() {
key_interface();
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();