Devesh36/key-finder

A compact BLE key finder for keys, bags and remotes: replaceable CR2032, piezo alert, status LED and pair button in a 38 mm black keyring enclosure. Includes routed PCB, enclosed/exploded assembly and BOM. Firmware/app and physical qualification remain separate.

Version
0.1.2
License
unset
Stars
0

assembly.circuit.tsx

PCBPCB preview for assembly.circuit.tsx
SchematicSchematic preview for assembly.circuit.tsx
import { assembly,jscad } from 'tscircuit'
import { renderToJscadPlan } from 'jscad-fiber/headless'
import KeyFinderBoard from './index.circuit'
import {Base,Lid,Button,Lens,Cell,Piezo,Wires,Wordmark} from './mechanics'

export function KeyFinderAssembly({exploded=false}:{exploded?:boolean}){
 const lift=exploded?14:0
 return <assembly.device name="Key Finder">
  <KeyFinderBoard/>
  <assembly.printedpart name="CASE_BACK" displayName="Matte black removable back • Ø38 mm" material="petg" jscad={<jscad.translate offset={[0,0,exploded?-19:0]}><Base/></jscad.translate>}/>
  <assembly.printedpart name="CASE_FRONT" displayName="Front • keyring eye and sound vents" material="petg" jscad={<jscad.translate offset={[0,0,lift]}><Lid/></jscad.translate>}/>
  <assembly.part name="FRONT_WORDMARK" displayName="tscircuit • blue nonconductive surface print" cadModel={{jscad:renderToJscadPlan(<jscad.translate offset={[0,0,lift]}><Wordmark/></jscad.translate>)}}/>
  <assembly.printedpart name="PAIR_BUTTON" displayName="Pair / silence button cap" material="petg" jscad={<jscad.translate offset={[0,0,lift]}><Button/></jscad.translate>}/>
  <assembly.printedpart name="STATUS_LENS" displayName="Status LED lens • translucent material" material="petg" jscad={<jscad.translate offset={[0,0,lift]}><Lens/></jscad.translate>}/>
  <assembly.part name="CR2032" displayName="Panasonic CR2032 • 20 × 3.2 mm • replaceable, non-rechargeable" cadModel={{jscad:renderToJscadPlan(<jscad.translate offset={[0,0,exploded?-8:0]}><Cell/></jscad.translate>)}}/>
  <assembly.part name="PIEZO_DISC" displayName="PUI AB1541B-LW100-R • 15 mm • wired to BZ1" cadModel={{jscad:renderToJscadPlan(<jscad.translate offset={[0,0,exploded?7:0]}><Piezo/></jscad.translate>)}}/>
  {!exploded && <assembly.part name="PIEZO_LEADS" displayName="Two insulated piezo leads • illustrative route" cadModel={{jscad:renderToJscadPlan(<Wires/>)}}/>}
 </assembly.device>
}
export default function EnclosedKeyFinder(){return <KeyFinderAssembly/>}