mohan-bee/four-gang-wifi-switch-layout
A tscircuit package created by mohan-bee.
- Version
- 0.0.9
- License
- unset
- Stars
- 0
relay.circuit.tsx
PCB
Schematic
import { defaultCapacity } from "./default-capacity"
// 48 x 50 mm relay PCB. All external connections are pin headers.
// Unrated prototype: 2.4 mm live bus, 1.5 mm switched branches, 0.8 mm neutral.
// Place alongside the controller or use insulated cabling; stacked height is unspecified.
export default function RelayBoard() {
return (
<board width={48} height={50} layers={2} thickness={1.6} doubleSidedAssembly={false}
title="4 gang WiFi - four relay board" autorouter="auto_local" routeRemaining={false} autorouterVersion="beta_pipeline9" minViaPadDiameter={0.6} minViaHoleDiameter={0.3} minTraceWidth={0.25} minTraceToPadEdgeClearance={0.2} minTraceToHoleEdgeClearance={0.2} minViaEdgeToPadEdgeClearance={0.2} minPadEdgeToPadEdgeClearance={0.2} minViaHoleEdgeToViaHoleEdgeClearance={0.2} minBoardEdgeClearance={0.5} schAutoLayoutEnabled>
<net name="AC_L" nominalTraceWidth={2.4} routingPhaseIndex={0} />
<net name="OUT1" nominalTraceWidth={1.5} routingPhaseIndex={4} />
<net name="OUT2" nominalTraceWidth={1.5} routingPhaseIndex={3} />
<net name="OUT3" nominalTraceWidth={1.5} routingPhaseIndex={2} />
<net name="OUT4" nominalTraceWidth={1.5} routingPhaseIndex={1} />
<net name="AC_N" nominalTraceWidth={0.8} routingPhaseIndex={5} />
<net name="V5" nominalTraceWidth={0.4} routingPhaseIndex={6} />
<net name="GND" nominalTraceWidth={0.4} routingPhaseIndex={6} />
{[1,2,3,4].flatMap(i => ["CH","COIL"].map(prefix => <net key={`${prefix}${i}`} name={`${prefix}${i}`} nominalTraceWidth={0.25} routingPhaseIndex={prefix === "CH" ? 7 : 8} />))}
<autoroutingphase name="mains-live" phaseIndex={0} minTraceWidth={2.2} minTraceToPadEdgeClearance={1.5} minTraceToHoleEdgeClearance={1.5} algorithmFn={defaultCapacity({name:"relay-mains-live",side:"below",layer:"top",preserveHighDensityPaths:true})} />
<autoroutingphase name="switched-output-4" phaseIndex={1} minTraceWidth={1.5} minTraceToPadEdgeClearance={1.5} minTraceToHoleEdgeClearance={1.5} algorithmFn={defaultCapacity({name:"relay-switched-output-4",side:"below",layer:"bottom",preserveHighDensityPaths:true})} />
<autoroutingphase name="switched-output-3" phaseIndex={2} minTraceWidth={1.5} minTraceToPadEdgeClearance={1.5} minTraceToHoleEdgeClearance={1.5} algorithmFn={defaultCapacity({name:"relay-switched-output-3",side:"below",layer:"bottom",preserveHighDensityPaths:true})} />
<autoroutingphase name="switched-output-2" phaseIndex={3} minTraceWidth={1.5} minTraceToPadEdgeClearance={1.5} minTraceToHoleEdgeClearance={1.5} algorithmFn={defaultCapacity({name:"relay-switched-output-2",side:"below",layer:"bottom",preserveHighDensityPaths:true})} />
<autoroutingphase name="switched-output-1" phaseIndex={4} minTraceWidth={1.5} minTraceToPadEdgeClearance={1.5} minTraceToHoleEdgeClearance={1.5} algorithmFn={defaultCapacity({name:"relay-switched-output-1",side:"below",layer:"bottom",preserveHighDensityPaths:true})} />
<autoroutingphase name="supply-neutral" phaseIndex={5} minTraceWidth={0.8} minTraceToPadEdgeClearance={1.5} minTraceToHoleEdgeClearance={1.5} algorithmFn={defaultCapacity({name:"relay-supply-neutral",side:"below",layer:"bottom",guardPhysicalEdges:true,preserveHighDensityPaths:true})} />
<autoroutingphase name="control" phaseIndex={7} minTraceWidth={0.25} minTraceToPadEdgeClearance={0.2} minTraceToHoleEdgeClearance={0.2} minViaEdgeToPadEdgeClearance={0.2} minViaPadDiameter={0.6} minViaHoleDiameter={0.3} algorithmFn={defaultCapacity({name:"relay-control",side:"above"})} />
<autoroutingphase name="coil-drives" phaseIndex={8} minTraceWidth={0.25} algorithmFn={defaultCapacity({name:"relay-coil-drives",side:"above"})} />
<autoroutingphase name="coil-power" phaseIndex={6} minTraceWidth={0.35} algorithmFn={defaultCapacity({name:"relay-coil-power",side:"above"})} />
{[-16.5,-5.5,5.5,18].map((x,i) => (
<chip layer="top" doNotPlace key={i} name={`K${i+1}`} manufacturerPartNumber="HF32F-G/005-HS"
footprint="jlcpcb:C74541" supplierPartNumbers={{jlcpcb:["C74541"]}}
pcbX={x} pcbY={2} pcbRotation={-90}
pinLabels={{pin1:"COIL_P",pin2:"COIL_N",pin3:"COM",pin4:"NO"}}
connections={{COIL_P:"net.V5",COIL_N:`net.COIL${i+1}`,COM:"net.AC_L",NO:`net.OUT${i+1}`}} />
))}
<chip layer="top" name="U1" manufacturerPartNumber="ULN2003LVPWR"
footprint="jlcpcb:C2870605" supplierPartNumbers={{jlcpcb:["C2870605"]}}
pcbX={0} pcbY={15.5} pcbRotation={180}
pinLabels={{pin1:"IN1",pin2:"IN2",pin3:"IN3",pin4:"IN4",pin5:"IN5",pin6:"IN6",pin7:"IN7",pin8:"GND",pin9:"COM",pin10:"OUT7",pin11:"OUT6",pin12:"OUT5",pin13:"OUT4",pin14:"OUT3",pin15:"OUT2",pin16:"OUT1"}}
pinAttributes={{GND:{requiresGround:true}}}
connections={{IN1:"net.CH4",IN2:"net.CH3",IN3:"net.CH2",IN4:"net.CH1",IN5:"net.GND",IN6:"net.GND",IN7:"net.GND",GND:"net.GND",COM:"net.V5",OUT1:"net.COIL4",OUT2:"net.COIL3",OUT3:"net.COIL2",OUT4:"net.COIL1"}} />
<capacitor layer="top" name="C1" capacitance="22uF" voltageRating={25} footprint="0805" supplierPartNumbers={{jlcpcb:["C45783"]}} pcbX={8} pcbY={15.5} connections={{pin1:"net.V5",pin2:"net.GND"}} />
<capacitor layer="top" name="C2" capacitance="100nF" voltageRating={50} footprint="0603" supplierPartNumbers={{jlcpcb:["C14663"]}} pcbX={-7} pcbY={15.5} connections={{pin1:"net.V5",pin2:"net.GND"}} />
<pinheader pinCount={6} gender="male" layer="top" doNotPlace name="J_LINK" manufacturerPartNumber="17-0020-002" footprint="jlcpcb:C6800644" supplierPartNumbers={{jlcpcb:["C6800644"]}}
pcbX={13} pcbY={22} pinLabels={{pin1:"V5",pin2:"GND",pin3:"CH1",pin4:"CH2",pin5:"CH3",pin6:"CH4"}}
connections={{V5:"net.V5",GND:"net.GND",CH1:"net.CH1",CH2:"net.CH2",CH3:"net.CH3",CH4:"net.CH4"}} />
<pinheader pinCount={2} gender="male" layer="top" doNotPlace name="J_AC_IN" manufacturerPartNumber="PZ508V-11-02P-H25" footprint="jlcpcb:C25170858" supplierPartNumbers={{jlcpcb:["C25170858"]}}
pcbX={-17.5} pcbY={-19.8} pinLabels={{pin1:"L",pin2:"N"}}
connections={{L:"net.AC_L",N:"net.AC_N"}}><courtyardrect width={10.66} height={6.85} /></pinheader>
<pinheader pinCount={2} gender="male" layer="top" doNotPlace name="J_AC_PWR" manufacturerPartNumber="PZ508V-11-02P-H25" footprint="jlcpcb:C25170858" supplierPartNumbers={{jlcpcb:["C25170858"]}}
pcbX={-4} pcbY={-19.8} pinLabels={{pin1:"L",pin2:"N"}}
connections={{L:"net.AC_L",N:"net.AC_N"}}><courtyardrect width={10.66} height={6.85} /></pinheader>
<pinheader pinCount={4} gender="male" layer="top" doNotPlace name="J_OUT" manufacturerPartNumber="PZ508V-11-04P-H25" footprint="jlcpcb:C41355716" supplierPartNumbers={{jlcpcb:["C41355716"]}}
pcbX={12} pcbY={-19.8} pinLabels={{pin1:"OUT1",pin2:"OUT2",pin3:"OUT3",pin4:"OUT4"}}
connections={{OUT1:"net.OUT1",OUT2:"net.OUT2",OUT3:"net.OUT3",OUT4:"net.OUT4"}}><courtyardrect width={20.82} height={6.85} /></pinheader>
{/* Barrier between coil-side and contact-side copper; relay bodies bridge it. */}
<keepout shape="rect" pcbX={0} pcbY={2} width={48} height={6} layers={["top","bottom"]} excludeRefs={[".K1",".K2",".K3",".K4"]} />
<silkscreentext text="4 RELAYS / 48x50" pcbX={-10} pcbY={22} fontSize={0.9} />
<silkscreentext text="5V G 1 2 3 4" pcbX={13} pcbY={24.4} fontSize={0.8} />
<silkscreentext text="L N" pcbX={-17.5} pcbY={-14.5} fontSize={0.8} />
<silkscreentext text="L N" pcbX={-4} pcbY={-14.5} fontSize={0.8} />
<silkscreentext text="1 2 3 4" pcbX={12} pcbY={-14.5} fontSize={0.8} />
<silkscreentext text="IN TO PSU OUT" pcbX={-2} pcbY={-12.5} fontSize={0.9} />
</board>
)
}