Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ firmware/test/sim
firmware/test/sim.dSYM/
firmware/test/round1.geojson
build/
rounds/
4 changes: 2 additions & 2 deletions case/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ The case is 74.4 x 74.4 x 31.6 mm (W x H x D). The GPS antenna plugs into an SMA

Viewed from the front:

- **Top wall:** the SMA antenna port. This is the GPS board's own edge-mount SMA jack, sitting 0.6 mm behind the wall. An 11 mm opening lets the plug's coupling nut reach the thread. Next to it are a zip-tie anchor (to strain-relieve the antenna cable) and a lanyard lug.
- **Top wall:** the SMA antenna port. This is the GPS board's own edge-mount SMA jack, sitting 0.6 mm behind the wall. An 11 mm opening lets the plug's coupling nut reach the thread. To its left are a zip-tie anchor (to strain-relieve the antenna cable) and a lanyard lug. To its right, a small bulge holds a 5 mm pocket behind the GPS's top-edge Qwiic port, so a plug fits there.
- **Front:** the OLED window with the Twist dial below it, and the **RESET button** between them. A printed plunger, standing 1 mm proud of the lid, presses the Thing Plus RESET button, which wakes the device from firmware power-off.
- **Left side:** the **EN slide switch**, the hard power-off. It pulls the Thing Plus EN pin to GND, which disables the main 3.3 V regulator. Charging still works with it off.
- **Bottom end:** USB-C (charging and programming) and a microSD slot, both on the Thing Plus.
Expand Down Expand Up @@ -70,7 +70,7 @@ Collision-check targets (`chk_shell`, `chk_lid`, `chk_plate`, …) intersect eac
3. Solder the slide switch: the centre pin to the Thing Plus **EN** pin and one outer pin to **GND**. Slide = off pulls EN low. Hold the switch against the left wall with the actuator through the slot and fix it with hot glue (there's no cradle; the plate has a notch so it drops in past the switch).
4. Put the battery in the shell. The lead exits toward the left side.
5. Screw the Thing Plus and the GPS to the plate, then drop the plate in over the battery. Route the battery lead up through the left notch into the Thing Plus JST. Screw the plate down (3x M2.5 flat head).
6. Connect Qwiic: Thing Plus → GPS → OLED → Twist. On the GPS, use the Qwiic port that faces the bottom of the case. The one facing the top wall has no room for a plug.
6. Connect Qwiic: Thing Plus → GPS → OLED → Twist. Both GPS Qwiic ports are usable. The one facing the top wall plugs into the pocket beside the SMA port.
7. Hook the lid's top tongues under the top wall, swing the bottom down, and fit the 2 M3 x 25 screws from the back.
8. Screw the antenna onto the SMA port. Zip-tie the cable to the anchor next to the port so tugs don't load the GPS board's edge connector.

Expand Down
32 changes: 30 additions & 2 deletions case/cad/shot_tracker_case.scad
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ tp_sd_x = 11.6; // microSD card centre (bottom side
gps_l = 40.64; gps_w = 36.80;
gps_holes = [[2.54,2.54],[38.10,2.54],[2.54,34.26],[38.10,34.26]];
gps_sma_y = 25.65;
gps_qwiic_y = 15.60; // J4, right-angle Qwiic on the SMA edge (faces the top wall once rotated)

// Qwiic OLED 1.3" (Eagle): body 35.56 x 25.40 + corner ears, holes 30.48 x 31.75
oled_w = 35.56; oled_body_h = 25.40; oled_ear = 5.715;
Expand All @@ -69,6 +70,14 @@ batt_clear = 0.6;
sma_edge_gap = 0.6; // GPS board edge to inside of top wall
sma_port_d = 11.0; // wall opening: lets the plug's 8 mm coupling nut reach the thread

// The GPS's top-edge Qwiic port (J4) sits right beside the SMA, but the SMA pins the board
// 0.6 mm from the top wall, leaving no room for a plug. A pocket bulges out of the top
// wall behind J4 instead, so the board (and the SMA) stay put.
qwiic_gap = 5.0; // GPS board edge to the back of the pocket: plug + wire bend
qwiic_pocket = [8.0, 7.0]; // [width (X), height (Z)]; the plug is ~6 mm wide
qwiic_pocket_dx = 0.6; // shifted away from the SMA so the bulge clears the antenna plug's nut
qwiic_pocket_wall = 1.2;

// ---------- layout ----------
W_in = 70;
plate_region_h = 70;
Expand Down Expand Up @@ -96,6 +105,9 @@ gps_x0 = W_in - 1.0 - gps_w; // GPS rotated 90 deg so SMA points +Y out the
gps_y0 = H_in - sma_edge_gap - gps_l; // SMA edge sits against the top wall
sma_x = gps_x0 + (gps_w - gps_sma_y);
sma_y = gps_y0 + gps_l;
qwiic_x = gps_x0 + (gps_w - gps_qwiic_y);
qwiic_pocket_cx = qwiic_x + qwiic_pocket_dx;
qwiic_z0 = z_board_bot + 1.0; // pocket floor, a little below the board's top face

// front boards
tw_cx = W_in/2; tw_cy = 1 + tw_h/2;
Expand Down Expand Up @@ -183,8 +195,18 @@ module shell() {
// (no switch cradle: the switch is glued into its wall slot so the plate drops in cleanly)
// lanyard lug, top-left outer corner
translate([r_out + 2, Ho - 0.5, Ds - 9]) lanyard_lug();
// zip-tie anchor beside the SMA port (strain relief for the antenna cable)
translate([wall + sma_x + sma_port_d/2 + 3, Ho - 0.5, z_board_bot + 0.8 - 4]) lanyard_lug();
// zip-tie anchor beside the SMA port (strain relief for the antenna cable).
// On the left of the port: the Qwiic pocket bulges out on the right.
translate([wall + sma_x - sma_port_d/2 - 3 - 10, Ho - 0.5, z_board_bot + 0.8 - 4]) lanyard_lug();
// bulge on the top wall that houses the Qwiic pocket; 45-degree underside so it
// prints back-down without supports
qb = [qwiic_pocket[0] + 2*qwiic_pocket_wall,
wall + (sma_y + qwiic_gap - H_in) + qwiic_pocket_wall,
qwiic_pocket[1] + 2*qwiic_pocket_wall];
translate([wall + qwiic_pocket_cx - qb[0]/2, Ho - wall - 0.01, qwiic_z0 - qwiic_pocket_wall]) hull() {
cube(qb);
translate([0, 0, -(qb[1] - wall)]) cube([qb[0], wall, 0.01]);
}
}
inner() {
// lid screw holes + back counterbores
Expand All @@ -202,6 +224,9 @@ module shell() {
}
// left wall: slide-switch actuator slot
translate([-1, wall + sw_y - sw_slot[0]/2, sw_z - sw_slot[1]/2]) cube([wall + 2, sw_slot[0], sw_slot[1]]);
// top wall: Qwiic plug pocket behind GPS J4
translate([wall + qwiic_pocket_cx - qwiic_pocket[0]/2, Ho - wall - 1, qwiic_z0])
cube([qwiic_pocket[0], 1 + wall + (sma_y + qwiic_gap - H_in), qwiic_pocket[1]]);
// top wall: SMA antenna port
translate([wall + sma_x, Ho - wall - 1, z_board_bot + 0.8]) rotate([-90,0,0])
cylinder(d=sma_port_d, h=wall + 2);
Expand Down Expand Up @@ -391,6 +416,9 @@ module comp_plate() inner() {
cube([gps_w, gps_l, 1.6]);
translate([gps_w/2 - 6, gps_l/2 - 8, 1.6]) cube([12, 16, 2.4]); // NEO-M9N
}
// J4 Qwiic + mated plug (JST SH, ~6 x 3 mm) sticking out past the board edge
color("white") translate([qwiic_x - 3, sma_y - 4.2, z_board_bot + 1.6]) cube([6, 4.2, 3.0]);
color("white") translate([qwiic_x - 3, sma_y, z_board_bot + 1.6]) cube([6, qwiic_gap - 0.5, 3.0]);
color("gold") translate([sma_x, sma_y, z_board_bot + 0.8]) rotate([-90,0,0]) cylinder(d=6.35, h=6.0); // jack
color("dimgray") translate([sma_x, sma_y + 1.8, z_board_bot + 0.8]) rotate([-90,0,0]) cylinder(d=9.2, h=9, $fn=6); // plug nut
color("black") translate([sma_x, sma_y + 10.8, z_board_bot + 0.8]) rotate([-90,0,0]) cylinder(d=5, h=12); // cable boot
Expand Down
Loading
Loading