mirror of
https://github.com/sweidac/kidsbox.git
synced 2026-10-28 06:52:57 +01:00
A printable reimagining of the wooden Kidsbox: rectangular cabinet with two front speakers, removable top lid (NFC tag rests there, reader mounts beneath), and swappable speaker mounts. - kidsbox.scad: master model + part dispatcher (body/lid/speaker_adapter/grill) - params.scad: all tunable dimensions in one place - lib.scad: helper modules (rounded shell, bosses, bolt circles) - Fixed front-panel speaker interface + swappable adapter so any driver fits by printing a new adapter (edit spk_* params, re-export) - Internal mounts: 2x18650 cradle, ESP32-LyraT standoffs, RC522 under lid, 3 buttons on lid, USB/charge + power-switch side ports, back-wall vents - Snap-in speaker grills - Makefile to export STLs and render previews (headless via xvfb) - Exported STLs and preview renders included - Link enclosure from main README Dimensions are sensible defaults from the reference photos and common parts; README flags the fit-critical values to verify before mass-printing. https://claude.ai/code/session_01MhAnh68DPNnTjcKqjNYDmk
97 lines
4.9 KiB
OpenSCAD
97 lines
4.9 KiB
OpenSCAD
// ============================================================================
|
|
// Kidsbox enclosure — parameters
|
|
// All dimensions in millimetres. Edit here, then re-export the STLs.
|
|
// See README.md for the export commands.
|
|
// ============================================================================
|
|
|
|
// ---- global print settings ------------------------------------------------
|
|
$fn = 64; // facet count for curves (raise for final render)
|
|
wall = 3.0; // shell wall thickness
|
|
floor_t = 3.0; // bottom thickness
|
|
corner_r = 6.0; // outer vertical-edge radius
|
|
fit = 0.30; // general clearance for mating parts (per side)
|
|
|
|
// ---- outer box dimensions (interior is derived) ---------------------------
|
|
box_w = 190; // width (X) — roughly one banana, per reference photo
|
|
box_h = 110; // height (Z)
|
|
box_d = 115; // depth (Y)
|
|
|
|
// derived interior
|
|
inner_w = box_w - 2*wall;
|
|
inner_d = box_d - 2*wall;
|
|
inner_h = box_h - floor_t; // open-top shell, lid closes it
|
|
|
|
// ---- lid -------------------------------------------------------------------
|
|
lid_t = 2.4; // thin enough for 13.56 MHz NFC to read through PLA
|
|
lid_rim_h = 6.0; // depth of the lip that drops into the box
|
|
lid_rim_t = 1.6; // thickness of that lip
|
|
lid_screw_d = 3.2; // M3 clearance
|
|
lid_boss_d = 9.0; // corner screw-boss outer diameter
|
|
lid_boss_inset = 9.0; // boss centre inset from interior corner
|
|
|
|
// ---- speaker panel interface (FIXED) --------------------------------------
|
|
// This is the standard "mount for the speaker mount". Every swappable
|
|
// speaker adapter bolts to THIS pattern, so the box never changes.
|
|
spk_sound_d = 66; // sound opening through the front panel
|
|
spk_bolt_d = 80; // bolt circle for the adapter screws
|
|
spk_bolt_count = 4; // number of adapter screws
|
|
spk_bolt_hole_d = 3.2; // M3 clearance through the panel
|
|
spk_boss_d = 8.0; // screw boss diameter on the inside of the panel
|
|
spk_boss_h = 5.0; // screw boss height (into the box)
|
|
spk_spacing = 94; // centre-to-centre of the two speakers (X)
|
|
spk_center_z = 48; // speaker centre height from the box floor (Z)
|
|
|
|
// ---- swappable speaker ADAPTER (edit for YOUR speaker) ---------------------
|
|
// Print one adapter per speaker model. Defaults suit a common 3" driver.
|
|
adapter_t = 3.0; // adapter plate thickness
|
|
adapter_outer_d = 88; // outer diameter of the adapter disc
|
|
spk_frame_d = 66; // speaker outer frame diameter (seat recess)
|
|
spk_frame_seat = 1.5; // depth the frame sinks into the adapter
|
|
spk_cutout_d = 58; // cone clearance hole through the adapter
|
|
spk_screw_count = 4; // the SPEAKER's own mounting holes
|
|
spk_screw_bolt_d = 60; // bolt circle of the speaker's mounting holes
|
|
spk_screw_d = 3.0; // speaker screw clearance
|
|
|
|
// ---- speaker grill (snaps into the sound opening) -------------------------
|
|
grill_t = 2.4; // grill face thickness
|
|
grill_rings = 3; // number of concentric rings
|
|
grill_spokes = 6; // number of radial spokes
|
|
grill_lip_h = 5.0; // snap lip depth into the sound hole
|
|
grill_standoff = 3.0; // gap the grill holds off the cone
|
|
|
|
// ---- buttons (top lid, row near the front edge) ---------------------------
|
|
// Kept off the front face (which stays clean like the reference box) and
|
|
// clear of the central NFC reader, which sits under the lid centre.
|
|
btn_d = 12.2; // panel hole for a 12 mm momentary switch
|
|
btn_count = 3; // vol-, play/pause, vol+
|
|
btn_pitch = 26; // spacing between buttons along X
|
|
btn_row_y = 18; // distance of the button row from the front wall
|
|
|
|
// ---- side ports ------------------------------------------------------------
|
|
usb_w = 12; // micro-USB / charge access cutout (W)
|
|
usb_h = 7; // (H)
|
|
usb_center_z = 22; // height of the port from the floor
|
|
sw_d = 7; // power slide-switch hole diameter
|
|
sw_center_z = 22;
|
|
|
|
// ---- ESP32-LyraT v4.3 mount (verify against your board) -------------------
|
|
lyrat_w = 99; // board long edge
|
|
lyrat_d = 57; // board short edge
|
|
lyrat_hole_dx = 92; // mounting-hole rectangle, long axis (VERIFY)
|
|
lyrat_hole_dy = 50; // mounting-hole rectangle, short axis (VERIFY)
|
|
lyrat_standoff_h = 6; // standoff height off the floor
|
|
lyrat_standoff_d = 6; // standoff outer diameter
|
|
lyrat_screw_d = 2.6; // self-tap for M2.5/M3
|
|
|
|
// ---- 2x 18650 battery holder cradle ---------------------------------------
|
|
batt_holder_w = 78; // typical 2-cell holder footprint (X)
|
|
batt_holder_d = 39; // (Y)
|
|
batt_holder_h = 21; // (Z)
|
|
batt_wall = 2.0; // cradle wall
|
|
batt_clip = true; // add retaining clips
|
|
|
|
// ---- ventilation -----------------------------------------------------------
|
|
vent_slot_w = 3;
|
|
vent_slot_len = 28;
|
|
vent_count = 5;
|