Devesh36/usb-c-phone-stand-light
A 3D-printed tilted phone stand integrating USB‑C PD power, a Qi wireless charging coil with magnetic alignment ring, indicator LEDs/light pipes, control and protection PCBs, wiring, fasteners, and rubber feet.
- Version
- 0.0.6
- License
- unset
- Stars
- 0
assembly.circuit.tsx
import { assembly, jscad } from "tscircuit";
import LightingBoard from "./lighting-board";
import {
BaseBody,
UsbBezel,
BaseLid,
Backrest,
ChargingCover,
ChargerRearHousing,
PowerLens,
ChargeLens,
RearSupport,
chargerFrame,
dock,
} from "./stand-mechanics";
import {
pdModule,
qiController,
qiPlate,
magneticRing,
rubberFeet,
standScrews,
supportScrews,
lidScrews,
coverScrews,
chargingHarness,
supplyHarness,
statusHarness,
panelHarness,
coilHarness,
indicatorModule,
} from "./charger-models";
// Generic CAD offsets use the PCB coordinate frame; mounted printed parts
// resolve their named world frames automatically.
const assemblyOrigin = {
x: -dock.pcbX,
y: -dock.pcbY,
z: -(dock.pcbZ + 0.2 + 0.8),
};
const chargerPosition = {
x: chargerFrame.x + assemblyOrigin.x,
y: chargerFrame.y + assemblyOrigin.y,
z: chargerFrame.z + assemblyOrigin.z,
};
const chargerRotation = { x: 70, y: 0, z: 0 };
export default function DeskGlowChargingStand() {
return (
<assembly.device name="DeskGlow">
<assembly.printedpart
name="BASE"
displayName="Electronics enclosure"
material="petg"
color="#60656b"
jscad={<BaseBody />}
/>
<assembly.printedpart
name="LID"
displayName="Base lid"
material="petg"
color="#747a80"
mountedTo="BASE.lid"
mountFace="bottom"
jscad={<BaseLid />}
/>
<assembly.printedpart
name="BACKREST"
displayName="Tilted phone cradle"
material="petg"
color="#60656b"
mountedTo="LID.backrest"
mountFace="foot"
jscad={<Backrest />}
/>
<assembly.printedpart
name="COIL_COVER"
displayName="Wireless charging face"
material="petg"
color="#e6e9ee"
mountedTo="BACKREST.charger"
mountFace="back"
jscad={<ChargingCover />}
/>
<assembly.printedpart
name="REAR_HOUSING"
displayName="Qi controller enclosure"
material="petg"
color="#747a80"
mountedTo="BACKREST.charger_rear"
mountFace="front"
jscad={<ChargerRearHousing />}
/>
<assembly.printedpart
name="LIGHT_WINDOW"
displayName="UV channel window"
material="petg"
color="#d9dce2"
mountedTo="LID.light"
mountFace="bottom"
jscad={<PowerLens />}
/>
<assembly.printedpart name="CHARGE_WINDOW" displayName="IR channel window" material="petg" color="#d9dce2" mountedTo="LID.light" mountFace="bottom" jscad={<ChargeLens/>}/>
<assembly.printedpart name="REAR_SUPPORT" mountedTo="LID.support" mountFace="bottom" displayName="Rounded central rear support" material="petg" color="#747a80" jscad={<RearSupport/>}/>
<assembly.printedpart name="USB_BEZEL" displayName="USB-C input surround" material="petg" color="#15191d" mountedTo="BASE.lid" mountFace="datum" jscad={<UsbBezel/>}/>
<LightingBoard />
<assembly.part name="INDICATOR_MODULE" displayName="C540985 UV and C540986 IR emitter board" cadModel={{jscad:indicatorModule,positionOffset:assemblyOrigin}}/>
<assembly.part name="STATUS_LEAD" displayName="Qi LED_A and ground to PCB status input" cadModel={{jscad:statusHarness,positionOffset:assemblyOrigin}}/>
<assembly.part name="INDICATOR_LEAD" displayName="Four-wire PCB to front indicators" cadModel={{jscad:panelHarness,positionOffset:assemblyOrigin}}/>
<assembly.part name="COIL_LEADS" displayName="Short matched transmitter-to-coil pair" cadModel={{jscad:coilHarness,positionOffset:chargerPosition,rotationOffset:chargerRotation}}/>
<assembly.part
name="USB_PD_MODULE"
displayName="Adafruit HUSB238 USB-C PD module / 5V 3A"
cadModel={{ jscad: pdModule, positionOffset: assemblyOrigin }}
/>
<assembly.part
name="QI_CONTROLLER"
displayName="Seeed BQ500211 Qi transmitter v1, LED mode 4"
cadModel={{
jscad: qiController,
positionOffset: chargerPosition,
rotationOffset: chargerRotation,
}}
/>
<assembly.part
name="QI_COIL"
displayName="Supplied Qi coil and ferrite plate"
cadModel={{
jscad: qiPlate,
positionOffset: chargerPosition,
rotationOffset: chargerRotation,
}}
/>
<assembly.part
name="MAGNET_RING"
displayName="58mm magnetic phone-alignment ring"
cadModel={{
jscad: magneticRing,
positionOffset: chargerPosition,
rotationOffset: chargerRotation,
}}
/>
<assembly.part
name="FEET"
displayName="Four rubber feet"
cadModel={{ jscad: rubberFeet, positionOffset: assemblyOrigin }}
/>
<assembly.part
name="STAND_SCREWS"
displayName="Four M3 stand screws"
cadModel={{ jscad: standScrews, positionOffset: assemblyOrigin }}
/>
<assembly.part name="SUPPORT_SCREWS" displayName="Rear support foot screws" cadModel={{jscad:supportScrews,positionOffset:assemblyOrigin}}/>
<assembly.part
name="LID_SCREWS"
displayName="Four M2 lid screws"
cadModel={{ jscad: lidScrews, positionOffset: assemblyOrigin }}
/>
<assembly.part
name="COVER_SCREWS"
displayName="Two M3 charging-cover screws"
cadModel={{
jscad: coverScrews,
positionOffset: chargerPosition,
rotationOffset: chargerRotation,
}}
/>
<assembly.part
name="CHARGER_POWER_LEAD"
displayName="5V power lead with micro-USB plug"
cadModel={{ jscad: chargingHarness, positionOffset: assemblyOrigin }}
/>
<assembly.part
name="SUPPLY_LEAD"
displayName="PD-module output wiring"
cadModel={{ jscad: supplyHarness, positionOffset: assemblyOrigin }}
/>
</assembly.device>
);
}