Devesh36/pocket-audio-player
A portable, rechargeable microSD audio player built around an RP2040, SPI flash, USB‑C charging/power management, LCD/button controls, PCM5102A I²S DAC, and TPA6132A headphone amplifier in a 3D‑printed enclosure.
- Version
- 1.0.12
- License
- unset
- Stars
- 0
mechanical-shapes.tsx
import { Fragment } from "react"
import { jscad } from "tscircuit"
import { PixelText,textWidth } from "./pixel-text"
export function ControlLegends(){return <jscad.colorize color="#969fa2"><jscad.union>
<PixelText text="menu" x={-textWidth('menu',0.38)/2} y={-1.5} z={11.53} pitch={0.38}/>
{[-1,1].map(direction=><jscad.translate key={direction} offset={[direction*24,-27,11.53]}>
<jscad.rotate angles={[0,0,direction===-1?Math.PI:0]}>
{[-0.65,0.65].map(x=><jscad.translate key={x} offset={[x,0,0]}><jscad.extrudeLinear height={0.025}><jscad.polygon points={[[-0.6,-0.7],[-0.6,0.7],[0.6,0]]}/></jscad.extrudeLinear></jscad.translate>)}
<jscad.cuboid size={[0.3,1.5,0.025]} center={[1.35,0,0]}/>
</jscad.rotate>
</jscad.translate>)}
<jscad.translate offset={[-1,-51,11.53]}><jscad.extrudeLinear height={0.025}><jscad.polygon points={[[-0.7,-0.9],[-0.7,0.9],[0.85,0]]}/></jscad.extrudeLinear></jscad.translate>
{[0.9,1.65].map(x=><jscad.cuboid key={x} size={[0.35,1.8,0.025]} center={[x,-51,11.53]}/>)}
</jscad.union></jscad.colorize>}
export function BatteryFoil(){return <jscad.colorize color="#d6d9da"><jscad.cuboid size={[29,33,4.75]} center={[0,-30.5,-3.5]}/></jscad.colorize>}
export function BatteryCap(){return <jscad.colorize color="#e2b53c"><jscad.cuboid size={[29,3,4.75]} center={[0,-12.5,-3.5]}/></jscad.colorize>}
export function BatteryLabel(){return <jscad.colorize color="#424b53"><jscad.union>
<PixelText text="BAT" x={-4} y={-25} z={-1.11} pitch={0.45}/>
<PixelText text="3.7 V" x={-4.3} y={-31} z={-1.11} pitch={0.38}/>
</jscad.union></jscad.colorize>}
function Lead({color,x}: {color:string;x:number}){
// Wire paths wrap around the lower PCB edge, clear of copper and posts.
const terminalX=color==='#d1483e'?-21:-23
const points=[[-9+x,-11,-3.5],[terminalX,-11,-3.5],[terminalX,-50,-3.5],[terminalX,-50,7.9],[terminalX,-17,7.9]]
return <jscad.colorize color={color}><jscad.union>{points.slice(0,-1).map((p,i)=><jscad.hull key={i}>
<jscad.sphere radius={0.22} center={p as [number,number,number]} segments={8}/>
<jscad.sphere radius={0.22} center={points[i+1] as [number,number,number]} segments={8}/>
</jscad.hull>)}</jscad.union></jscad.colorize>
}
export function BatteryPlusLead(){return <Lead color="#d1483e" x={-0.25}/>}
export function BatteryMinusLead(){return <Lead color="#20252b" x={0.25}/>}
export function BatteryInsulation(){return <jscad.colorize color="#545b63"><jscad.cuboid size={[29,36,0.6]} center={[0,-29,-6.19]}/></jscad.colorize>}
// Mated housings are external purchased parts, not printable pieces.
export function BatteryPlug(){return <jscad.colorize color="#f0f0e6"><jscad.cuboid size={[4.5,3.6,3]} center={[-22,-16.45,7.3]}/></jscad.colorize>}
export function DisplayPlug(){return <jscad.colorize color="#efefe8"><jscad.cuboid size={[10.1,3.1,3.6]} center={[0,-7,6.3]}/></jscad.colorize>}