muse/book-reading-clip-lamp

A Wi‑Fi/USB‑C ESP32‑S3 reading lamp with OV5640 camera, microphone, speaker amplifier, rechargeable Li‑Po power management, six-LED boost light, USB protection/charging detection, and a clip/gooseneck enclosure with external FlexPIFA antenna.

Version
0.4.3
License
unset
Stars
0

controls-parts.tsx

import type { PushButtonProps } from "@tscircuit/props"
import { tactileSwitchModel } from "./enclosure-geometry"

/** E-Switch TL3305AF160QG — SPST normally-open momentary tactile switch.
 * Official TL3305 datasheet, 2022-09-28, p2 land pattern and schematic:
 * https://www.e-switch.com/wp-content/uploads/2023/01/TL3305.pdf
 * Manufacturer pins 1+2 form one permanently joined contact (lower row);
 * manufacturer pins 3+4 form the other contact (upper row).
 * Logical pin1 = physical 1+2; logical pin2 = physical 3+4.
 * Four 1.6x1.6 mm lands. Outer x span8.8, inner gap5.6 => x centres±3.6.
 * Outer y span4.4 => y centres±1.4. Body4.5x4.5, actuator height3.8mm.
 * Do not substitute a button with vertical-side contact pairing.
 */
export function AskButton(props: PushButtonProps) {
 return <pushbutton manufacturerPartNumber="TL3305AF160QG"
   cadModel={{ jscad: tactileSwitchModel, modelOriginPosition: { x: 0, y: 0, z: 0 },
     size: { x: 8.5, y: 4.5, z: 3.8 }, modelUnitToMmScale: 1 }}
   footprint={<footprint insertionDirection="from_above" cutoutApertureDirection="from_above">
    <smtpad shape="rect" portHints={["pin1"]} pcbX={-3.6} pcbY={-1.4} width={1.6} height={1.6}/>
    <smtpad shape="rect" portHints={["pin1"]} pcbX={3.6} pcbY={-1.4} width={1.6} height={1.6}/>
    <smtpad shape="rect" portHints={["pin2"]} pcbX={-3.6} pcbY={1.4} width={1.6} height={1.6}/>
    <smtpad shape="rect" portHints={["pin2"]} pcbX={3.6} pcbY={1.4} width={1.6} height={1.6}/>
    <silkscreenrect width={4.5} height={4.5}/>
    <silkscreencircle radius={1.25}/>
    <courtyardrect width={9.3} height={5}/>
   </footprint>} {...props}/>
}