Devesh36/orbit-turntable

ORBIT is a USB-C-powered display turntable for photographing jewellery, models and small products. Four-layer ESP32-C3 / ULN2003 PCB, geared stepper, OLED, push encoder, home switch and buzzer, with an enclosed and exploded assembly. Hardware prototype; firmware and physical qualification remain separate.

Version
0.1.1
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 type {ReactNode} from 'react'
import OrbitBoard from './index.circuit'
import {Base,Lid,Platter,Motor,Bearing,Coupler,Knob,Display,Lens,HomeSwitch,Harness,Feet,Fasteners,Mark,Mat,KnobTop,KnobIndex,Screen,ScreenText} from './mechanics'
const cad=(node:ReactNode,z=0)=>({jscad:renderToJscadPlan(<jscad.translate offset={[0,31,z]}>{node}</jscad.translate>)})
export function OrbitAssembly({exploded=false}:{exploded?:boolean}){
 const lift=exploded?42:0
 return <assembly.device name="ORBIT • Precision Display Turntable">
  <OrbitBoard/>
  <assembly.printedpart name="BASE" material="petg" displayName="Rounded base • USB-C opening, vents and PCB supports" jscad={<jscad.translate offset={[0,31,exploded?-24:0]}><Base/></jscad.translate>}/>
  <assembly.printedpart name="LID" material="petg" displayName="Control panel • display window and bearing seat" jscad={<jscad.translate offset={[0,31,lift]}><Lid/></jscad.translate>}/>
  <assembly.printedpart name="PLATTER" material="petg" displayName="88 mm turntable platform • rubber mat and home index lug" jscad={<jscad.translate offset={[0,31,exploded?78:0]}><Platter/></jscad.translate>}/>
  <assembly.printedpart name="SHAFT_ADAPTER" material="petg" displayName="5 mm D-shaft to 8 mm bearing adapter • fit prototype" jscad={<jscad.translate offset={[0,31,exploded?67:0]}><Coupler/></jscad.translate>}/>
  <assembly.printedpart name="DIAL" material="petg" displayName="Blue speed dial • push to start / stop" jscad={<jscad.translate offset={[0,31,lift]}><Knob/></jscad.translate>}/>
  <assembly.part name="PLATTER_MAT" displayName="Nonslip platform mat" cadModel={cad(<Mat/>,exploded?78:0)}/>
  <assembly.part name="KNOB_CAP" displayName="Blue dial cap" cadModel={cad(<KnobTop/>,lift)}/>
  <assembly.part name="KNOB_INDEX" displayName="Dial index mark" cadModel={cad(<KnobIndex/>,lift)}/>
  <assembly.part name="OLED_GLASS" displayName="OLED display surface" cadModel={cad(<Screen/>,lift)}/>
  <assembly.part name="OLED_PREVIEW" displayName="Illustrative display content • firmware required" cadModel={cad(<ScreenText/>,lift)}/>
  <assembly.part name="MOTOR" displayName="Adafruit 858 • 5V 1:16.128 geared unipolar stepper • dimensional model" cadModel={cad(<Motor/>)}/>
  <assembly.part name="BEARING" displayName="608-2Z • 8 × 22 × 7 mm platform bearing" cadModel={cad(<Bearing/>,exploded?56:0)}/>
  <assembly.part name="OLED" displayName="Waveshare 0.91-inch OLED • screen content illustrative" cadModel={cad(<Display/>,lift)}/>
  <assembly.part name="HOME_SWITCH" displayName="Omron D2F-01FL • lever-actuated index input" cadModel={cad(<HomeSwitch/>,lift)}/>
  <assembly.part name="STATUS_LIGHT_PIPE" displayName="Blue status light pipe" cadModel={cad(<Lens/>,lift)}/>
  <assembly.part name="FRONT_PRINT" displayName="ORBIT / tscircuit • nonconductive blue surface print" cadModel={cad(<jscad.colorize color="#2484ff"><jscad.union><Mark name="brand" x={-11} y={-51} z={22}/><Mark name="dial" x={28} y={-52} z={22}/></jscad.union></jscad.colorize>,lift)}/>
  <assembly.part name="RUBBER_FEET" displayName="Four nonslip feet" cadModel={cad(<Feet/>,exploded?-24:0)}/>
  <assembly.part name="M3_LID_SCREWS" displayName="Four M3 nylon service screws • antenna clearance" cadModel={cad(<Fasteners/>,lift)}/>
  {!exploded && <assembly.part name="HARNESSES" displayName="Motor, display and home switch wires • illustrative paths" cadModel={cad(<Harness/>)}/>}
 </assembly.device>
}
export default function EnclosedOrbit(){return <OrbitAssembly/>}