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

PCBPCB preview for index.tsx
SchematicSchematic preview for index.tsx
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>
  )
}