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>
	);
}