abse/smartwatch-flex-top-only
Three-panel flex smartwatch with two parallel R3.9 bends, all components flat-top, low-profile JST connector harnesses, split heartbeat optical windows and screw-retained PCB mounting. Modeled 39 × 50.5 × 14.5mm prototype; 100% routing, zero native DRC and shorts. Hardware qualification pending.
- Version
- 0.2.20
- License
- unset
- Stars
- 0
watch.circuit.tsx
PCB
Schematic
import React from 'react'
import {assembly} from 'tscircuit'
import Board from './index'
import battery from './mechanical/battery-envelope'
import ferrite from './mechanical/ferrite-envelope'
import motor from './mechanical/relocated-motor'
import display from './mechanical/display'
import windows from './mechanical/optical-windows'
import lightSeal from './mechanical/optical-light-seal'
import probes from './mechanical/temperature-probes'
import batteryHarness from './mechanical/battery-harness'
import hapticHarness from './mechanical/haptic-harness'
import batteryNtcHarness from './mechanical/battery-ntc-harness'
import coilNtcHarness from './mechanical/coil-ntc-harness'
import motorInlineConnector from './mechanical/motor-inline-connector'
import motorFactoryLeads from './mechanical/motor-factory-leads'
import buttonActuator from './mechanical/button-actuator'
import {AssemblyCable} from './components/AssemblyCable'
import {PcbMounts} from './components/PcbMounts'
import motorSupport from './mechanical/motor-support-shim'
import {casePose,caseModel} from './components/CaseFrame'
// A real routed board and mechanical-only siblings, like the clip-lamp reference.
// Native bends fold the PCB and its actual components in the 3D viewer. Mechanical
// parts use the same fixed case-to-PCB frame as enclosure-fit.circuit.tsx.
export default function Watch({displayFitted=true,transparentShell=true}:{displayFitted?:boolean;transparentShell?:boolean}={}){return <assembly.device name={displayFitted?"Native folded smartwatch PCB inside assembly enclosure":"Mount installation: display removed for top-side PH0 screwdriver access"}>
<Board />
<assembly.subassembly name="BATTERY_MAXIMUM_ENVELOPE" cadModel={caseModel(battery,{x:3,y:-0.19159126281738,z:-3.6})} />
<assembly.subassembly name="FERRITE_ENVELOPE" cadModel={caseModel(ferrite,{x:0,y:-8.99159126281738,z:-6.78})} />
<assembly.subassembly name="RELOCATED_HAPTIC_MOTOR_ENVELOPE" cadModel={caseModel(motor)} />
<assembly.part name="REMOVABLE_MOTOR_SUPPORT_SHIM" displayName="0.2mm maximum insulating motor-support stack on PCB backing; not printed" cadModel={caseModel(motorSupport)}/>
{displayFitted&&<assembly.subassembly name="ORIGINAL_AMOLED_DISPLAY" cadModel={{...caseModel(display),showAsTranslucentModel:transparentShell}} />}
<PcbMounts bezelFitted={displayFitted} pose={casePose} transparentShell={transparentShell}/>
<assembly.part name="BATTERY_TEMPERATURE_PROBE" cadModel={null}/>
<assembly.part name="COIL_TEMPERATURE_PROBE" cadModel={null}/>
<assembly.part name="FACTORY_PREWIRED_TEMPERATURE_PROBES" cadModel={caseModel(probes)}/>
<assembly.part name="SEPARATE_LED_AND_PHOTODIODE_WINDOWS" cadModel={caseModel(windows)}/>
<assembly.part name="BLACK_OPTICAL_LIGHT_SEAL" cadModel={caseModel(lightSeal)}/>
<assembly.part name="MOTOR_INLINE_CONNECTOR" cadModel={caseModel(motorInlineConnector)}/>
<assembly.part name="FLUSH_SIDE_BUTTON_ACTUATOR" cadModel={caseModel(buttonActuator)}/>
<AssemblyCable name="BATTERY_CABLE" from=".J3" to=".BATTERY_MAXIMUM_ENVELOPE" modelUrl={batteryHarness} pose={casePose}/>
<AssemblyCable name="HAPTIC_CABLE" from=".J4" to=".MOTOR_INLINE_CONNECTOR" modelUrl={hapticHarness} pose={casePose}/>
<AssemblyCable name="MOTOR_FACTORY_LEADS" from=".RELOCATED_HAPTIC_MOTOR_ENVELOPE" to=".MOTOR_INLINE_CONNECTOR" modelUrl={motorFactoryLeads} pose={casePose}/>
<AssemblyCable name="BATTERY_NTC_CABLE" from=".J7" to=".BATTERY_TEMPERATURE_PROBE" modelUrl={batteryNtcHarness} pose={casePose}/>
<AssemblyCable name="COIL_NTC_CABLE" from=".J8" to=".COIL_TEMPERATURE_PROBE" modelUrl={coilNtcHarness} pose={casePose}/>
</assembly.device>}