jaiume1973/EZ-Gate
The code defines a PCB layout featuring key hardware components such as a microcontroller (ESP32-S3), LoRa radio module, power regulation circuitry including buck converters and LDOs, USB-C connector, relays, sensors, buttons, and status LEDs, with traces connecting these components on a 75mm by 55mm board.
- Version
- 0.0.1
- License
- unset
- Stars
- 0
index.tsx
PCB
Schematic
import React from "react"
// Board: 100mm x 40mm per spec §8
// Left short edge (X≈-50): J_POWER, J_RELAY, J_USB
// Power/buck zone: left-center top
// ESP32: board center
// LoRa RF zone: right half, along long edge
const BOARD_W = 100
const BOARD_H = 40
export default function EntryZenGateController() {
return (
<board
width={`${BOARD_W}mm`}
height={`${BOARD_H}mm`}
pcbX={0}
pcbY={0}
autorouter="auto-cloud"
routingDisabled={false}
>
{/* ── BOARD ANNOTATION ── */}
<pcbnotetext pcbX={-48} pcbY={19} text="EntryZen GC v1.0 100x40mm" fontSize={1.2} layer="top" />
<pcbnotetext pcbX={-48} pcbY={16.5} text="MF-R110 | SMBJ33A | MB6S | LM2596S-5.0 | MCP1700" fontSize={0.75} layer="top" />
<pcbnotetext pcbX={-48} pcbY={14.8} text="ESP32-S3-WROOM-1-N8 | RA-02 | SRD-05VDC | AO3400 | USBLC6" fontSize={0.75} layer="top" />
{/* RF keep-out visual box */}
<pcbnoterect pcbX={28} pcbY={3} width={40} height={32} strokeWidth={0.2} color="#ff0000" hasStroke isStrokeDashed layer="top" />
<pcbnotetext pcbX={35} pcbY={19} text="RF KEEP-OUT — LoRa/Antenna zone" fontSize={0.9} layer="top" />
{/* Zone labels */}
<pcbnotetext pcbX={-47} pcbY={7} text="POWER IN" fontSize={1.0} layer="top" />
<pcbnotetext pcbX={-47} pcbY={-6} text="RELAY OUT" fontSize={1.0} layer="top" />
<pcbnotetext pcbX={-47} pcbY={-14} text="USB" fontSize={1.0} layer="top" />
<pcbnotetext pcbX={8} pcbY={-13} text="SENSOR IN" fontSize={0.9} layer="top" />
<pcbnotetext pcbX={8} pcbY={-19} text="CONFIG / BOOT / RESET" fontSize={0.9} layer="top" />
{/* ── POWER INPUT PROTECTION (left short edge → right along top) ── */}
{/* J_POWER: 2-pin screw terminal on left short edge, top area */}
<group name="power-input">
<connector name="J_POWER" schX={-33} schY={-2} pcbX={-48} pcbY={8}
pinCount={2} pinLabels={{ pin1: "IN1", pin2: "IN2" }} />
{/* MF-R110 resettable fuse */}
<chip name="F1" schX={-28} schY={-2} pcbX={-42} pcbY={8}
pinLabels={{ pin1: "A", pin2: "B" }} />
{/* SMBJ33A TVS diode */}
<diode name="TVS1" schX={-24} schY={2.7} pcbX={-38} pcbY={13} type="tvs" />
{/* MB6S bridge rectifier */}
<chip name="BR1" schX={-20} schY={-2} pcbX={-34} pcbY={8}
pinLabels={{ pin1: "AC1", pin2: "AC2", pin3: "NEG", pin4: "POS" }} />
{/* 100uF 50V bulk electrolytic after rectifier */}
<capacitor name="CIN_BULK" schX={-15} schY={-2} pcbX={-28} pcbY={8}
capacitance="100uF" voltageRating="50V" polarized />
</group>
{/* ── BUCK CONVERTER — LM2596S-5.0 (SO-8: OUT,VIN,VIN,FB,ON/OFF,GND,NC,NC mapped as 6-pin) ── */}
{/* Keep SW loop tight: U_BUCK → L1 → COUT close together */}
<group name="buck-v5">
<chip name="U_BUCK" schX={-6} schY={-2} pcbX={-22} pcbY={10}
pinLabels={{ pin1: "BOOT", pin2: "VIN", pin3: "EN", pin4: "GND", pin5: "FB", pin6: "SW" }} />
{/* 33uH inductor */}
<chip name="L1" schX={-1} schY={-2} pcbX={-16} pcbY={10}
pinLabels={{ pin1: "A", pin2: "B" }} />
{/* SS34 catch diode: anode=GND, cathode=SW_NODE */}
<diode name="D_BUCK" schX={-1} schY={2} pcbX={-16} pcbY={15} type="schottky" />
{/* SS34 field-power OR-ing diode: anode=buck_out(V5_FIELD), cathode=net.V5 */}
<diode name="D_FIELD" schX={3} schY={2} pcbX={-10} pcbY={15} type="schottky" />
{/* 100uF 10V output bulk cap */}
<capacitor name="COUT5_BULK" schX={3} schY={-2} pcbX={-10} pcbY={10}
capacitance="100uF" voltageRating="10V" polarized />
<resistor name="RFB1" schX={-3} schY={4} pcbX={-20} pcbY={15} resistance="52.3k" footprint="0402" />
<resistor name="RFB2" schX={1} schY={4} pcbX={-14} pcbY={15} resistance="10k" footprint="0402" />
<capacitor name="CBUCK_IN" schX={-8} schY={4} pcbX={-26} pcbY={15} capacitance="100nF" footprint="0402" />
<capacitor name="CBUCK_BOOT" schX={-6} schY={4} pcbX={-24} pcbY={15} capacitance="100nF" footprint="0402" />
<pcbnotetext pcbX={-18} pcbY={7} text="Keep SW loop tight" fontSize={0.8} layer="top" />
</group>
{/* ── 3.3V LDO — MCP1700-3302E SOT-23: pin1=VIN pin2=GND pin3=VOUT ── */}
<group name="ldo-v3v3">
<chip name="U_LDO" schX={12} schY={-2} pcbX={-4} pcbY={10}
pinLabels={{ pin1: "VIN", pin2: "GND", pin3: "VOUT" }} />
<capacitor name="CLDO_IN" schX={9} schY={3} pcbX={-7} pcbY={15} capacitance="1uF" footprint="0402" />
<capacitor name="CLDO_OUT" schX={15} schY={3} pcbX={-1} pcbY={15} capacitance="1uF" footprint="0402" />
</group>
{/* ── USB-C (left short edge, bottom area) ── */}
<group name="usb-c">
<chip name="J_USB" schX={-2} schY={-17} pcbX={-48} pcbY={-14}
pinLabels={{
pin1:"GND1", pin2:"VBUS1", pin3:"CC1", pin4:"DP1", pin5:"DM1",
pin6:"SBU1", pin7:"VBUS2", pin8:"GND2", pin9:"GND3", pin10:"VBUS3",
pin11:"SBU2", pin12:"DM2", pin13:"DP2", pin14:"CC2",
pin15:"VBUS4", pin16:"GND4",
}} />
{/* SS14/SS34 OR-ing diode: USB VBUS → net.V5, prevents field power backfeed to USB */}
<diode name="D_USB" schX={5} schY={-17} pcbX={-40} pcbY={-14} type="schottky" />
{/* USBLC6-2SC6 USB ESD: IO1/IO3=D+lines, IO2/IO4=D-lines, pin2=GND, pin4=VBUS */}
<chip name="U_ESD" schX={5} schY={-13} pcbX={-40} pcbY={-9}
pinLabels={{ pin1:"IO1", pin2:"GND", pin3:"IO2", pin4:"VBUS", pin5:"IO3", pin6:"IO4" }} />
{/* 5.1k CC resistors for USB-C 5V sink */}
<resistor name="RCC1" schX={0} schY={-12.5} pcbX={-44} pcbY={-9} resistance="5.1k" footprint="0402" />
<resistor name="RCC2" schX={2.5} schY={-12.5} pcbX={-44} pcbY={-6} resistance="5.1k" footprint="0402" />
<pcbnotetext pcbX={-41} pcbY={-17.5} text="USB-C | OR-ing | USBLC6 ESD | 5.1k CC" fontSize={0.75} layer="top" />
</group>
{/* ── RELAY OUTPUT (left-center bottom: RGATE→Q1→K1, J_RELAY on left edge) ── */}
{/* AO3400: G=pin1, S=pin2, D=pin3. Low-side switch: S=GND, D=coil_neg */}
{/* SRD-05VDC-SL-C: COILP(1), COILN(2), COM(3), NO(4), NC(5) */}
<group name="relay-output">
<resistor name="RGATE" schX={25} schY={10} pcbX={-32} pcbY={-8} resistance="10k" footprint="0402" />
<chip name="Q1" schX={30} schY={10} pcbX={-26} pcbY={-8}
pinLabels={{ pin1:"G", pin2:"S", pin3:"D" }} />
<diode name="D_FLY" schX={35} schY={12.5} pcbX={-20} pcbY={-5} type="schottky" />
<chip name="K1" schX={40} schY={10} pcbX={-20} pcbY={-10}
pinLabels={{ pin1:"COILP", pin2:"COILN", pin3:"COM", pin4:"NO", pin5:"NC" }} />
{/* Relay connector on left short edge */}
<connector name="J_RELAY" schX={48} schY={10} pcbX={-48} pcbY={-7}
pinCount={2} pinLabels={{ pin1:"COM", pin2:"NO" }} />
</group>
{/* ── ESP32-S3-WROOM-1-N8 (board center) ── */}
{/* Using simplified pin map; real module has castellated pads on edges */}
<group name="esp32-s3-core">
<chip name="U1" schX={10} schY={-15} pcbX={4} pcbY={0}
pinLabels={{
pin1:"V3V3", pin2:"EN",
pin3:"GPIO4", pin4:"GPIO10", pin5:"GPIO11", pin6:"GPIO12",
pin7:"GPIO13", pin8:"GPIO14", pin9:"GPIO15", pin10:"GPIO16",
pin11:"GPIO19",pin12:"GPIO20",pin13:"GPIO34",pin14:"GPIO35",
pin15:"GPIO38",pin16:"GPIO0", pin17:"GND",
}} />
<capacitor name="C3V3_BULK" schX={2} schY={-9} pcbX={-4} pcbY={5} capacitance="10uF" footprint="0603" />
<capacitor name="C3V3_DEC1" schX={4} schY={-9} pcbX={-2} pcbY={5} capacitance="100nF" footprint="0402" />
<capacitor name="C3V3_DEC2" schX={6} schY={-9} pcbX={0} pcbY={5} capacitance="100nF" footprint="0402" />
<resistor name="REN" schX={15} schY={-12} pcbX={8} pcbY={5} resistance="10k" footprint="0402" />
<resistor name="RGPIO0_PU" schX={15} schY={-16} pcbX={8} pcbY={3} resistance="10k" footprint="0402" />
<resistor name="RCONFIG_PU"schX={15} schY={-20} pcbX={8} pcbY={1} resistance="10k" footprint="0402" />
</group>
{/* ── STATUS LED (right of ESP32) ── */}
<group name="status-led">
<resistor name="RLED1" schX={22} schY={-4} pcbX={17} pcbY={4} resistance="270" footprint="0402" />
<led name="LED1" schX={26} schY={-4} pcbX={20} pcbY={4} color="green" footprint="0402" />
</group>
{/* ── BUTTONS (bottom edge, center area) ── */}
<group name="buttons">
<chip name="SW_CONFIG" schX={23} schY={-21} pcbX={2} pcbY={-17} pinLabels={{ pin1:"A", pin2:"B" }} />
<chip name="SW_BOOT" schX={27} schY={-21} pcbX={8} pcbY={-17} pinLabels={{ pin1:"A", pin2:"B" }} />
<chip name="SW_RESET" schX={31} schY={-21} pcbX={14} pcbY={-17} pinLabels={{ pin1:"A", pin2:"B" }} />
<pcbnotetext pcbX={8} pcbY={-19.5} text="CFG BOOT RST" fontSize={0.85} layer="top" />
</group>
{/* ── SENSOR INPUT (center-right bottom) ── */}
{/* U3: opto-coupler. pin1=ANODE, pin2=CATHODE (LED), pin3=EMITTER, pin4=COLLECTOR */}
<group name="sensor-input">
<resistor name="R_OPTO_LED" schX={38} schY={-13} pcbX={1} pcbY={-10} resistance="1k" footprint="0402" />
<chip name="U3" schX={43} schY={-13} pcbX={7} pcbY={-10}
pinLabels={{ pin1:"ANODE", pin2:"CATHODE", pin3:"EMITTER", pin4:"COLLECTOR" }} />
<resistor name="R_SENSOR_PU" schX={43} schY={-8} pcbX={7} pcbY={-6} resistance="10k" footprint="0402" />
<connector name="J_SENSOR" schX={50} schY={-13} pcbX={14} pcbY={-10}
pinCount={2} pinLabels={{ pin1:"IN", pin2:"GND" }} />
</group>
{/* ── LoRa RADIO — SX1276 RA-02 (right half, along top long edge, inside RF keep-out) ── */}
<group name="lora-radio">
<chip name="U2" schX={31} schY={-3} pcbX={30} pcbY={7}
pinLabels={{
pin1:"VCC", pin2:"GND", pin3:"SCK", pin4:"MISO",
pin5:"MOSI", pin6:"NSS", pin7:"RESET", pin8:"BUSY",
pin9:"DIO1", pin10:"ANT",
}} />
<capacitor name="CLORA_DEC" schX={26} schY={2} pcbX={24} pcbY={12} capacitance="100nF" footprint="0402" />
{/* SMA/U.FL antenna connector on right long edge */}
<chip name="J_ANT" schX={38} schY={-6} pcbX={44} pcbY={7} pinLabels={{ pin1:"RF" }} />
<pcbnotetext pcbX={36} pcbY={17} text="RA-02 LoRa — keep antenna at board edge" fontSize={0.8} layer="top" />
</group>
{/* ════════════════ TRACES ════════════════ */}
{/* Power input protection chain */}
<trace from=".J_POWER > .pin1" to=".F1 > .pin1" />
<trace from=".F1 > .pin2" to=".BR1 > .pin1" />
<trace from=".J_POWER > .pin2" to=".BR1 > .pin2" />
<trace from=".TVS1 > .pin1" to=".J_POWER > .pin1" />
<trace from=".TVS1 > .pin2" to=".J_POWER > .pin2" />
<trace from=".BR1 > .pin4" to="net.VIN_RAW" />
<trace from=".BR1 > .pin3" to="net.GND" />
<trace from=".CIN_BULK > .pin1" to="net.VIN_RAW" />
<trace from=".CIN_BULK > .pin2" to="net.GND" />
{/* Buck converter — LM2596S */}
<trace from=".U_BUCK > .pin2" to="net.VIN_RAW" />
<trace from=".U_BUCK > .pin3" to="net.VIN_RAW" />
<trace from=".U_BUCK > .pin4" to="net.GND" />
<trace from=".U_BUCK > .pin6" to="net.SW_NODE" />
<trace from=".CBUCK_IN > .pin1" to="net.VIN_RAW" />
<trace from=".CBUCK_IN > .pin2" to="net.GND" />
<trace from=".CBUCK_BOOT > .pin1" to=".U_BUCK > .pin1" />
<trace from=".CBUCK_BOOT > .pin2" to="net.SW_NODE" />
<trace from=".L1 > .pin1" to="net.SW_NODE" />
<trace from=".L1 > .pin2" to="net.V5_FIELD" />
{/* SS34 catch diode: anode=GND, cathode=SW_NODE */}
<trace from=".D_BUCK > .pin1" to="net.GND" />
<trace from=".D_BUCK > .pin2" to="net.SW_NODE" />
<trace from=".COUT5_BULK > .pin1" to="net.V5_FIELD" />
<trace from=".COUT5_BULK > .pin2" to="net.GND" />
<trace from=".RFB1 > .pin1" to="net.V5_FIELD" />
<trace from=".RFB1 > .pin2" to=".U_BUCK > .pin5" />
<trace from=".RFB2 > .pin1" to=".U_BUCK > .pin5" />
<trace from=".RFB2 > .pin2" to="net.GND" />
{/* Field-power OR-ing diode: anode=V5_FIELD, cathode=V5 */}
<trace from=".D_FIELD > .pin1" to="net.V5_FIELD" />
<trace from=".D_FIELD > .pin2" to="net.V5" />
{/* USB-C OR-ing, ESD, CC resistors */}
<trace from=".J_USB > .pin2" to=".D_USB > .pin1" />
<trace from=".J_USB > .pin7" to=".D_USB > .pin1" />
<trace from=".J_USB > .pin10" to=".D_USB > .pin1" />
<trace from=".J_USB > .pin15" to=".D_USB > .pin1" />
<trace from=".D_USB > .pin2" to="net.V5" />
<trace from=".J_USB > .pin1" to="net.GND" />
<trace from=".J_USB > .pin8" to="net.GND" />
<trace from=".J_USB > .pin9" to="net.GND" />
<trace from=".J_USB > .pin16" to="net.GND" />
<trace from=".RCC1 > .pin1" to=".J_USB > .pin3" />
<trace from=".RCC1 > .pin2" to="net.GND" />
<trace from=".RCC2 > .pin1" to=".J_USB > .pin14" />
<trace from=".RCC2 > .pin2" to="net.GND" />
{/* USBLC6-2SC6 ESD: IO1/IO3 = DP lines, IO2/IO4 = DM lines */}
<trace from=".J_USB > .pin4" to=".U_ESD > .pin1" />
<trace from=".J_USB > .pin13" to=".U_ESD > .pin1" />
<trace from=".J_USB > .pin5" to=".U_ESD > .pin3" />
<trace from=".J_USB > .pin12" to=".U_ESD > .pin3" />
<trace from=".U_ESD > .pin2" to="net.GND" />
<trace from=".U_ESD > .pin4" to="net.V5" />
{/* D+/D- to ESP32 native USB pins */}
<trace from=".U_ESD > .pin5" to=".U1 > .pin11" />
<trace from=".U_ESD > .pin6" to=".U1 > .pin12" />
{/* LDO — MCP1700-3302E */}
<trace from=".U_LDO > .pin1" to="net.V5" />
<trace from=".U_LDO > .pin2" to="net.GND" />
<trace from=".U_LDO > .pin3" to="net.V3V3" />
<trace from=".CLDO_IN > .pin1" to="net.V5" />
<trace from=".CLDO_IN > .pin2" to="net.GND" />
<trace from=".CLDO_OUT > .pin1" to="net.V3V3" />
<trace from=".CLDO_OUT > .pin2" to="net.GND" />
{/* ESP32-S3 power and decoupling */}
<trace from=".U1 > .pin1" to="net.V3V3" />
<trace from=".U1 > .pin17" to="net.GND" />
<trace from=".C3V3_BULK > .pin1" to="net.V3V3" />
<trace from=".C3V3_BULK > .pin2" to="net.GND" />
<trace from=".C3V3_DEC1 > .pin1" to="net.V3V3" />
<trace from=".C3V3_DEC1 > .pin2" to="net.GND" />
<trace from=".C3V3_DEC2 > .pin1" to="net.V3V3" />
<trace from=".C3V3_DEC2 > .pin2" to="net.GND" />
<trace from=".REN > .pin1" to="net.V3V3" />
<trace from=".REN > .pin2" to=".U1 > .pin2" />
<trace from=".RGPIO0_PU > .pin1" to="net.V3V3" />
<trace from=".RGPIO0_PU > .pin2" to=".U1 > .pin16" />
<trace from=".RCONFIG_PU > .pin1" to="net.V3V3" />
<trace from=".RCONFIG_PU > .pin2" to=".U1 > .pin14" />
{/* Buttons */}
<trace from=".SW_RESET > .pin1" to=".U1 > .pin2" />
<trace from=".SW_RESET > .pin2" to="net.GND" />
<trace from=".SW_BOOT > .pin1" to=".U1 > .pin16" />
<trace from=".SW_BOOT > .pin2" to="net.GND" />
<trace from=".SW_CONFIG > .pin1" to=".U1 > .pin14" />
<trace from=".SW_CONFIG > .pin2" to="net.GND" />
{/* LoRa radio SPI + control */}
<trace from=".U2 > .pin1" to="net.V3V3" />
<trace from=".U2 > .pin2" to="net.GND" />
<trace from=".CLORA_DEC > .pin1" to="net.V3V3" />
<trace from=".CLORA_DEC > .pin2" to="net.GND" />
<trace from=".U2 > .pin3" to=".U1 > .pin7" />
<trace from=".U2 > .pin4" to=".U1 > .pin6" />
<trace from=".U2 > .pin5" to=".U1 > .pin5" />
<trace from=".U2 > .pin6" to=".U1 > .pin4" />
<trace from=".U2 > .pin7" to=".U1 > .pin8" />
<trace from=".U2 > .pin8" to=".U1 > .pin9" />
<trace from=".U2 > .pin9" to=".U1 > .pin10" />
<trace from=".U2 > .pin10" to=".J_ANT > .pin1" />
{/* Relay driver */}
<trace from=".U1 > .pin3" to=".RGATE > .pin1" />
<trace from=".RGATE > .pin2" to=".Q1 > .pin1" />
<trace from=".Q1 > .pin2" to="net.GND" />
<trace from=".Q1 > .pin3" to=".K1 > .pin2" />
<trace from=".K1 > .pin1" to="net.V5" />
<trace from=".D_FLY > .pin1" to=".K1 > .pin2" />
<trace from=".D_FLY > .pin2" to="net.V5" />
<trace from=".K1 > .pin3" to=".J_RELAY > .pin1" />
<trace from=".K1 > .pin4" to=".J_RELAY > .pin2" />
{/* Sensor opto-coupler */}
<trace from=".R_OPTO_LED > .pin1" to="net.V3V3" />
<trace from=".R_OPTO_LED > .pin2" to=".U3 > .pin1" />
<trace from=".U3 > .pin2" to=".J_SENSOR > .pin1" />
<trace from=".J_SENSOR > .pin2" to="net.GND" />
<trace from=".U3 > .pin3" to="net.GND" />
<trace from=".U3 > .pin4" to=".U1 > .pin13" />
<trace from=".R_SENSOR_PU > .pin1" to="net.V3V3" />
<trace from=".R_SENSOR_PU > .pin2" to=".U1 > .pin13" />
{/* Status LED */}
<trace from=".U1 > .pin15" to=".RLED1 > .pin1" />
<trace from=".RLED1 > .pin2" to=".LED1 > .pin1" />
<trace from=".LED1 > .pin2" to="net.GND" />
<schematictext x={-34} y={22} text={"100x40mm\nField: MF-R110→SMBJ33A→MB6S→LM2596S→MCP1700\nMCU: ESP32-S3-WROOM-1-N8 | LoRa: RA-02\nRelay: SRD-05VDC+AO3400 | USB: USBLC6-2SC6"} />
</board>
)
}