
PKE
neriyashalom/PKE-Car-System
Final project - ESP32-S3 based PKE system for vehicle access and ignition

A single board with an ESP32-C3 (Tasmota) and two on-board relays. It sits inside a Texecom Premier Elite 64-W housing and can remotely "hard power reset" the panel by briefly cutting both its battery and 16VAC feeds.
Texecom power reset is an open-source printed circuit board by jd710313, from the jd710313/texecom-power-reset repository on GitHub. It is a 2-layer board of 92 × 70 mm with 45 parts on 28 nets, routed with 355 tracks and 16 vias.
It is built around the 74HCT4538D, 2N2222A and SRD-05VDC-SL-C, with the P6KE18A among its other parts. Its parts include 16 resistors, 8 capacitors, 7 diodes, 4 connectors and 3 ICs. It belongs with the ESP32 and RISC-V boards of this library.
Project summary:
project-summary.html: one page with the reset timing, fail-safe behaviour, schematic, PCB layers, parts and bench tests. View it rendered (GitHub shows.htmlfiles as source), or download the file and open it in a browser.
A single board with an ESP32-C3 (Tasmota) and two on-board relays. It sits inside a Texecom Premier Elite 64-W housing and can remotely "hard power reset" the panel by briefly cutting both its battery and 16VAC feeds.
Status: Design rev A with on-board relays. Schematic done (ERC clean, netlist verified). PCB rev A routed: DRC clean (0 violations, 0 unconnected), GND pour on the bottom only, with an engraved top legend (
Mill_Legend). Gerbers + drill + legend infab/. Not yet milled or tested.
The panel occasionally raises an "AUX 12V output failed" fault. The only way to clear it is to remove all power (battery and AC) and let the panel restart. This board lets you do that remotely from Home Assistant.
The root cause (probably an overloaded or tripping AUX output) is being investigated separately. This board is a remote recovery tool, not a fix.
| # | Requirement |
|---|---|
| R1 | Panel: Texecom Premier Elite 64-W (built-in Ricochet wireless) |
| R2 | Firmware: V6.05.03LS1 |
| R3 | Panel-side events after a reset (AC/battery fault logs, re-arming, etc.) are out of scope. They are handled manually. |
| R4 | AC presence and battery voltage are already monitored in Home Assistant through the Texecom integration, so this board doesn't monitor them. |
| # | Requirement |
|---|---|
| F1 | Remotely perform a "hard power reset" of the panel by cutting both the battery 12V feed and the 16VAC feed at the same time. |
| F2 | Off duration: about 3 seconds (Tasmota PulseTime 30). |
| F3 | Controlled from Home Assistant over WiFi, and reachable at all times. |
| F4 | The controller must stay powered while both panel feeds are cut. |
| # | Requirement |
|---|---|
| S1 | Panel feeds run through the relays' NC (normally closed) contacts. Coils are energised only during a reset, so a dead or unpowered board leaves the panel powered. |
| S2 | Software timeout: Tasmota PulseTime, so the relays release by themselves even if WiFi drops mid-reset. |
| S3 | Hardware timeout: a circuit between each GPIO and relay driver limits the maximum on-time (target about 5–10 s). This covers a firmware hang with the GPIO stuck high, and boot-time GPIO glitches. |
| # | Requirement |
|---|---|
| P1 | Powered from the 12V lead-acid battery only, about 7.2Ah, tapped before the battery relay so it is never switched off. |
| P2 | The whole system is backed by solar, so no low-battery cutoff is needed. |
| P3 | Regulator: Pololu S9V11E2F5 (5V buck-boost, 2–16V in, under 0.2mA quiescent). It supplies 5V to the ESP32-C3 SuperMini (5V pin), the 74HCT4538 and the relay coils. |
| P4 | Regulator input is 16V absolute max. The battery floats at about 13.7V. The board adds reverse-polarity protection, a bulk input capacitor (≥33µF; 100µF used) and transient protection. |
| P5 | The battery tap on the board gets its own small fuse (about 0.5–1A, sized for the board's load). |
| P6 | Low power: Tasmota dynamic Sleep (WiFi stays connected). Target about 10–15mA average from the battery. |
| # | Requirement |
|---|---|
| H1 | MCU: ESP32-C3 SuperMini, socketed on female headers. |
| H2 | Relays: 2 × Songle SRD-05VDC-SL-C on the main PCB (Micro Robotics). 5V coil (about 70mA each), contacts 10A at 30VDC / 250VAC, SPDT. Only COM and NC are used. |
| H3 | Each relay has a transistor driver (2N2222A), a flyback diode (1N4007) and a red indicator LED that lights while the coil is energised. |
| H4 | Single board: all field wiring lands on the PCB (battery in, battery out to the panel, 16VAC in, 16VAC out to the panel). There is no board-to-board wiring. |
| H5 | Screw terminals: KF301-2P (already on hand). 5.0mm pitch, 16A, 250V, 22–14 AWG, side entry, interlocking. Four are used (J1–J4). |
| H6 | Custom PCB (KiCad) holding the SuperMini socket, the S9V11E2F5, the 74HCT4538 hardware timeout, the relay drivers, both relays, the battery input protection and fuse, and J1–J4. |
| H7 | Everything must fit inside the panel housing. Rev A board is 92 × 70mm; the relays are the tallest part (about 15.5mm). |
| H8 | The PCB is CNC-milled in-house, double-sided (FlatCAM with alignment pins, 30° V-bit with 0.1mm tip, 0.7mm tracks proven), from on-hand copper-clad board. There are no plated through-holes, no solder mask and no silkscreen. |
| Part | Source | Status in this design |
|---|---|---|
| ESP32-C3 SuperMini | n/a | U3 |
| KF301-2P screw terminals, 5mm (10-pack) | Micro Robotics | J1–J4. Suitable: rated 16A / 250V, against about 1.6A max on the battery path and a 16VAC supply. |
| Capacitor kit (CAPKIT) | Micro Robotics | C1 (100µF), C2/C4/C7/C8 (100nF), C3 (10µF) |
| Female and male headers, heat shrink, bootlace ferrules | n/a | SuperMini socket, Pololu header, wiring |
| REL-2CHAN-335V relay module | Micro Robotics | No longer used (replaced by on-board relays). Kept as a spare and for bench tests. |
┌─────────────────────────── Main PCB ───────────────────────────┐
Battery + ──► J1 BAT IN + ──┬──────────────────────────► K1 COM ─┐ NC │
│ └──────► J2 BAT OUT + ──► Panel BATT +
└─ F1 → D1 → Pololu 5V → ESP32-C3, 74HCT4538, relay coils │
Battery − ──► J1 BAT IN − ───── GND ─────────────────────────────────► J2 BAT OUT − ──► Panel BATT −
│
16VAC ~A ──► J3 AC IN ~A ───────────────────────────► K2 COM ─┐ NC │
└──────► J4 AC OUT ~A ──► Panel AC ~A
16VAC ~B ──► J3 AC IN ~B ───────────────────────────────────────────► J4 AC OUT ~B ──► Panel AC ~B
└────────────────────────────────────────────────────────────────┘Each panel power path passes through only two screw terminals (in and out) and one relay contact.
From the Premier Elite 12-W, 24-W & 48/64-W sections:
| Item | Value |
|---|---|
| Battery fuse | F6, 1.6A electronic PTC |
| AUX 12V, Digicom, Network 1, Bell/Strobe fuses | 0.9A electronic PTC each |
| Panel current consumption | 150mA |
| Maximum current available | 1.0A, plus 0.3A battery charge (7Ah setting) |
| Battery kick-start | "The panel will only become live when the AC Mains is connected or the Battery Kick-start button is pressed." |
| Power-up order | Connect the battery first, then AC. |
| Troubleshooting | "Remove ALL power (AC Mains and Battery) and then reapply", which is the same procedure this board automates. |
Relay rating check: each relay path carries at most about 1.6A (the battery PTC limit) or the panel's AC input current. The SRD-05VDC-SL-C contacts are rated 10A. OK.
Kick-start consequence: the panel only restarts after a reset if AC is present. A reset during a real AC outage would leave the panel off until someone presses the kick-start button. The Home Assistant script therefore checks that AC is present before it resets (see below).
Battery + ─J1─┬─ F1 PTC ─ D1 ─┬─ C1/C2/D2 ─ U1 Pololu ─► +5V ─┬─ D3 ─► SuperMini 5V
│ │ bulk/TVS ├─► U2 74HCT4538 VCC
│ │ └─► relay coils, LEDs
└───────────────┼──────────────► K1 COM ─ NC ─► J2 BAT OUT +
│
GPIO4 ─ R9 1k ─┬─ reset ─┐ +5V
└─ RC ────┴─► U2 ch1 (7 s max) ─ Q ─ R7 1k ─► Q1 2N2222A ─► K1 coil ┤ D4 flyback, D6 LED
GPIO3 ─ R10 1k ─┬─ reset ─┐ +5V
└─ RC ────┴─► U2 ch2 (7 s max) ─ Q ─ R8 1k ─► Q2 2N2222A ─► K2 coil ┤ D5 flyback, D7 LED
J3 AC IN ~A ─► K2 COM ─ NC ─► J4 AC OUT ~A J3 ~B ─► J4 ~B (straight through)| Ref | Part | Purpose |
|---|---|---|
| J1 | KF301-2P screw terminal | BAT IN (+/−). The power supply taps J1+ on the PCB, before the relay path, so it is never switched. |
| F1 | Resettable PTC fuse, 1206 SMD, 0.5A hold / 1A trip, 24V (Micro Robotics PTC05A24V) | Protects the board's battery branch (not the panel's battery path). The board draws about 0.25A peak at 12V. After a short, it trips, then resets by itself once the fault is removed. |
| D1 | 1N5822 Schottky (DO-201AD, 3A 40V), in series | Reverse-polarity protection (about 0.3V drop, negligible at about 15mA). |
| C1 | 100µF 35V radial electrolytic | Damps LC spikes from the battery leads, as Pololu recommends for the S9V11 (at least 33µF). |
| C2 | 100nF ceramic (radial, 5.08mm) | High-frequency decoupling. |
| D2 | P6KE18A TVS (DO-15) | Clamps larger transients. Its 15.3V standoff sits above the 13.8V float voltage, so no leakage. It is a last line of protection; C1 is the main LC-spike damper. |
| U1 | Pololu S9V11E2F5 on a 1×4 header | 5V buck-boost, under 0.2mA quiescent. EN is left open (internal pull-up means always on). |
| C3 | 10µF 50V radial electrolytic | Output decoupling. |
| D3 | 1N5822 Schottky between +5V and SuperMini 5V | Blocks USB backfeed. The SuperMini's USB VBUS is tied straight to its 5V pin, so plugging in USB would otherwise push 5V from USB onto the relay coils and the Pololu output. The SuperMini still gets about 4.7V, which is fine for its 3.3V LDO. |
Current budget (estimated):
| State | 5V rail | From battery (at 13.6V, about 88% efficiency) |
|---|---|---|
Idle, WiFi connected, Tasmota Sleep | about 25–35mA | about 11–15mA (0.3Ah/day, solar-backed) |
| Reset (both relays and LEDs on for 3 s) | about 150mA + ESP | about 90mA for 3 s |
| Worst-case peak (WiFi TX + relays) | about 0.5A | about 0.25A |
One chip (TI CD74HCT4538E, DIP-16) covers both channels. Each channel behaves as:
relay on = GPIO high AND less than T seconds since the GPIO went high
| GPIO behaviour | Relay |
|---|---|
Normal 3 s PulseTime pulse | On for 3 s (T is longer, so it never cuts a normal pulse short) |
| GPIO stuck high (firmware hang mid-reset) | Released after T about 5–9 s (7 s nominal). It cannot re-trigger without a new low-to-high edge. |
| GPIO low or floating (crash, reboot, ESP removed) | Released immediately, because the reset input R is low |
| Short boot glitch high | Only as long as the glitch (µs), so the relay doesn't respond |
| 5V lost | 74HCT4538, drivers and relay coils all unpowered, relay released |
Why a 74HCT at 5V (not a 74HC at 3.3V): it runs from the same 5V rail as the relay drivers, and it gives a full 5V drive to the transistor bases. HCT inputs use TTL thresholds (high = 2.0V or above, low = 0.8V or below), so the ESP's 3.3V GPIO drives them reliably. (It was chosen originally when bench test 1b showed the relay module's input needed 4.77mA; with on-board relays the choice still stands.)
Wiring for each channel. TI pin names are used here; Nexperia's datasheet swaps the letters A and B, but the pin numbers and functions are identical.
| CD74HCT4538 pin (ch1 / ch2) | Connection |
|---|---|
| R 3 / 13 (active-low reset) | Node N: GPIO through R9/R10 1k, with R1/R2 100k pull-down to GND at the chip side |
| A 4 / 12 (leading-edge / rising trigger) | Node N through R5/R6 10k, with C7/C8 100nF to GND. The 1ms delay makes sure reset is released before the trigger edge arrives. The Schmitt input handles the slow edge. |
| B 5 / 11 (trailing-edge trigger) | Tied to VCC (TI: "an unused B should be tied to VCC") |
| CX 1 / 15 | GND |
| RXCX 2 / 14 | REXT R3/R4 1M to +5V. CEXT C5/C6 10µF X5R 1206 to GND through R11/R12 100Ω in series (TI's rapid power-down protection, Fig. 13). |
| Q 6 / 10 | Relay driver: R7/R8 1k to the Q1/Q2 base (§3a) |
| Q̅ 7 / 9 | Not used |
| VCC 16 | +5V, with C4 100nF decoupling |
| GND 8 | GND |
Timing: T = 0.7 × REXT × CEXT = 0.7 × 1M × 10µF ≈ 7 s nominal (TI
datasheet: τ = 0.7·RX·CX, RX min 5k; noise susceptibility "may occur for
RX > 1M", so 1M is the upper limit). It needs to stay above 3.5 s (the longest
PulseTime) and, ideally, below 30 s. Bench test 3 confirms the real value.
Tune it by lowering REXT or changing CEXT. Keep the RXCX traces short.
ESP protection (does 5V reach the ESP?): no. The ESP pins only drive the 74HCT4538's inputs, which are high-impedance CMOS gates. No 5V output connects to any ESP pin, so the ESP never sees more than its own 3.3V.
The one corner case is the 5V rail being off while the ESP is powered, for example on USB for flashing (D3 blocks USB from the 5V rail). If the ESP then drives a GPIO high, current could flow through the chip's input clamp diode into the unpowered 5V rail. R9/R10 (1k) limit that to under 3mA, which is harmless for both parts. They cost nothing in normal operation, because the HCT inputs draw no current.
| Ref (ch1 / ch2) | Part | Purpose |
|---|---|---|
| R7 / R8 | 1k, 1206 | Base resistor: (5V − 0.75V) / 1k ≈ 4.3mA base current, within the 74HCT4538's 4mA-class output rating |
| R13 / R14 | 10k, ¼W | Base pull-down: keeps the transistor off if U2 is unpowered or removed from its socket |
| Q1 / Q2 | 2N2222A, TO-92 | Low-side coil switch. Coil current about 72mA; forced gain about 17, so the transistor is fully saturated. |
| K1 / K2 | SRD-05VDC-SL-C | K1 switches the battery (J1 → COM, NC → J2); K2 switches 16VAC ~A (J3 → COM, NC → J4). NO contacts unused. |
| D4 / D5 | 1N4007 | Flyback diode across each coil (cathode to +5V) |
| R15 / R16 + D6 / D7 | 1k, 1206 + red 3mm LED | Across each coil: lights (about 3mA) while that relay is energised, that is while the panel feed is cut |
Relay pin-out (KiCad Relay_SPDT_SANYOU_SRD_Series_Form_C, matches the Songle SRD): 1 = COM, 4 = NC, 3 = NO, 2 and 5 = coil.
2N2222A pin-out warning: TO-92 2N2222A parts are usually E-B-C, but some makers use other orders. The footprint is TO-92 inline with pin 1 = E, 2 = B, 3 = C. Check the pin-out of the actual transistors before soldering.
Fail-safe chain: GPIO low / ESP dead → U2 reset low → Q low → R13/R14 hold the base low → coil off → NC closed → panel powered. U2 unpowered or pulled from its socket gives the same result.
Screw terminals: all KF301-2P (5.0mm pitch, 16A / 250V, 22–14 AWG).
| Ref | Label (engraved) | Pin 1 | Pin 2 | Wires to |
|---|---|---|---|---|
| J1 | BAT IN | + | − | Battery |
| J2 | BAT OUT | + | − | Panel BATT terminals |
| J3 | AC IN | ~A | ~B | 16VAC supply |
| J4 | AC OUT | ~A | ~B | Panel AC terminals |
| From | To |
|---|---|
| Battery + / − | J1 BAT IN + / − |
| J2 BAT OUT + / − | Panel BATT + / − (the panel's original battery leads) |
| 16VAC supply ~A / ~B | J3 AC IN ~A / ~B |
| J4 AC OUT ~A / ~B | Panel AC terminals |
Wire: 0.5–0.75mm² (20–18 AWG) for the battery and AC runs, with ferrules in the screw terminals.
Recommended: an in-line fuse (about 3A) on the battery + lead, close to the battery. The battery current now runs through the PCB, and a 7Ah SLA battery can deliver very high currents into a short before the panel's own F6 PTC (which sits downstream) can do anything.
Process: KiCad → Gerbers + Excellon drill → FlatCAM (isolation and drill G-code) → CNC. Double-sided, with FlatCAM flip alignment using alignment pins. Tool: 30° V-bit, 0.1mm tip. The machine has milled 0.7mm tracks reliably (see the example board), and all common drill sizes are available.
Milled boards have no plated through-holes, no solder mask and no silkscreen, so the layout follows these rules:
| Rule | Why |
|---|---|
| Double-sided, but a top-layer connection is only allowed on pads that can be soldered on top. Axial resistors and diodes, and radial capacitors and LEDs mounted slightly raised, can be soldered on top. The IC socket, female headers, male header under the Pololu, relays, TO-92 transistors (usually) and KF301 terminals cannot, because their bodies cover the top pads. | There's no plating to carry a top trace to a bottom joint. |
| Enforced in KiCad: the footprints of the covered parts get bottom-copper-only pads, so neither manual routing nor the autorouter can connect to them on top. | Makes the rule impossible to break by accident, including by the autorouter. |
| Vias are drilled and fitted with a wire link soldered on both sides. Keep them few (target 10 or fewer), with 0.8mm drill and 2.0mm pads. 0Ω links (RES-0E-50) can also serve as crossings. | Every via is a manual solder job. |
| 1206 SMD parts go on the bottom side. | They're soldered on the same side as the through-hole joints. |
| Traces 0.7mm by default (proven on this machine; 0.6mm minimum where needed), clearance at least 0.4mm. Power paths at least 2mm, and 16VAC traces at least 1mm from logic. | Proven geometry for the 30°/0.1mm V-bit |
| Oval, oversized pads (for example 2.0 × 3.0mm for 0.8–1.0mm holes, bigger for terminals, relays and the 1N5822s). | User's standard practice for easy hand soldering |
| Extra clearance around pads: a custom KiCad rule of at least 0.8mm from any pad to other copper (tracks at 0.4mm to each other), plus component spacing that keeps neighbouring pads and bodies well clear. | The user prefers wider isolation around pads for easy hand soldering and no solder bridges. FlatCAM's multi-pass isolation needs room to widen the cut around pads without eating into neighbouring traces. |
| Drill sizes: 0.8mm (resistors, small capacitors, LEDs, TO-92, vias), 1.0mm (headers, IC socket, 1N4007, 0Ω links), 1.3–1.5mm (KF301, relay pins, 1N5822 at 1.3mm leads, C1), 3.2mm (M3 mounting holes). | Few tool changes |
| GND pour on the bottom only. The top layer has no pour; its unused copper stays as floating copper and carries the engraved legend. | Faster milling and good grounding on the bottom. A top pour would reach pads that can't be soldered on top, and it would leave nowhere to engrave the legend. |
| SuperMini USB-C at the board edge (antenna end inward). | Flashing in place, and it let the corrected footprint keep the proven routing. Use the V2's external-antenna option if WiFi is weak. |
Legend engraved into the top copper from the Mill_Legend layer (User.1): part outlines, polarity and pin-1 marks, references, the terminal labels BAT IN / BAT OUT / AC IN / AC OUT with + / − on the battery terminals, and a small ring beside every pad that must be soldered on top (key: "○ = SOLDER TOP"). The rings are placed so each one is clearly nearest its own pad. Generated so every line stays at least 0.35mm clear of any top copper feature or hole (plus half the line width), so an engrave can never cut a track or pad. | No silkscreen. The legend shows where each part goes. |
| After testing, coat the board (conformal coat or clear lacquer). | No solder mask, and the board lives in the panel for years. |
Routing: I place the parts and then try routing. If that's poor, use the user's preferred autorouter, the KiCad routing tools (Go implementation), with the rules above as design rules.
| File | Contents |
|---|---|
texecom-power-reset.kicad_pro / .kicad_sch | Project and schematic (A3, single sheet). Drawn with wires; only GND, +5V and +5V_MCU use power symbols or labels. |
texecom-power-reset-schematic.pdf | Schematic PDF export |
texecom-power-reset.kicad_sym | Project symbols: ESP32-C3-SuperMini (from the esp32c3-button-led project), Pololu_S9V11E2F5 |
texecom-power-reset.pretty/ | Project footprints: ESP32-C3-SuperMini (pin rows corrected 2026-09-25: the first version was mirrored, which would have put 5V and GND on GPIO5/GPIO6 with the module button side up), Pololu_S9V11E2x (pin order VOUT, GND, VIN, EN per the Pololu drawing) |
backup/ | Earlier schematic versions (label-connected, and wired with the off-board relay module), kept for reference only. Not used for the PCB. |
project-summary.html | One-page visual project summary (self-contained HTML, open in a browser) |
fab/ | Reference export (maintained with the design): Gerbers F.Cu / B.Cu / Edge.Cuts / Mill_Legend, Excellon drill, drill map |
kicad-output/ | Working KiCad output folder used for milling (Gerbers, drill and anything else needed) |
flatcam/ | FlatCAM work: project files and generated G-code |
docs/ | Copper renders (top includes the legend), 3D renders, and the top and bottom assembly drawings (pcb-assembly-top / pcb-assembly-bottom, SVG + PDF) |
tools/make_legend.py | Regenerates the Mill_Legend engrave layer, kept clear of all top copper |
tools/make_assembly.py | Regenerates the top and bottom assembly drawings (SVG + PDF) from the board |
Layout: power path across the top. Channel 2 (GPIO3, K2 AC relay) is in the middle band and channel 1 (GPIO4, K1 battery relay) in the lower band. This order avoids wire crossings from the SuperMini. J3/J4 (AC) sit next to K2, and J2 (BAT OUT) next to K1. The BAT_IN+ wire runs from J1 over the top and down the right side to K1 COM.
Reference designators match BOM.md: U1 Pololu, U2 74HCT4538 (units A/B = channels 1/2, unit C = power), U3 SuperMini, J1–J4 KF301 terminals, K1/K2 relays, Q1/Q2 2N2222A, F1 PTC, D1/D3 1N5822, D2 P6KE18A, D4/D5 1N4007, D6/D7 LEDs, C1–C8, R1–R16, MH1/MH2 M3 holes.
Verification: ERC 0 errors, 0 warnings. The KiCad netlist was checked net by net against the intended circuit (32 nets). The only unconnected pins are the intentional ones (relay NO, Q̅ outputs, Pololu EN, unused SuperMini pins).
| Item | Value |
|---|---|
| Board | 92 × 70mm, 2 layers, 2 × M3 holes (top-left, bottom-right) |
| Placement | Terminals along the bottom edge: J4 AC OUT, J3 AC IN, J2 BAT OUT, J1 BAT IN (left to right). K2 (AC) above J4/J3, K1 (battery) above J2/J1. Drivers and LEDs above the relays, 74HCT4538 top-middle, SuperMini top-right (button side up, USB-C at the right-hand edge, antenna end pointing inward), power section bottom-right. |
| Routing | KiCad routing tools (drandyhaas), with a milling floor: 0.8mm clearance everywhere (1.0mm for 16VAC), 0.7mm signal tracks, 1.0mm supply tracks, 2.0mm battery/AC tracks. GND by a bottom-layer pour only, plus a few GND tracks. |
| Vias | 16 wire-link vias (0.8mm drill, 2.0mm pad): solder a short wire on both sides. |
| Legend | Mill_Legend layer (User.1), engraved into the top copper with the V-bit. See Engraving the legend below. |
| DRC | 0 violations, 0 unconnected against the project rules (.kicad_pro net classes + .kicad_dru). |
| Fab files | fab/: texecom-power-reset-F_Cu.gbr, -B_Cu.gbr, -Edge_Cuts.gbr, -Mill_Legend.gbr (legend engrave), texecom-power-reset.drl (Excellon, mm, absolute origin; PTH and NPTH merged), drill map PDF. |
Drill sizes:
| Drill | Holes | Used for |
|---|---|---|
| 0.8mm | 66 | Resistors, disc caps, electrolytics, TO-92, DIP socket, the 16 vias |
| 0.9mm | 4 | LEDs |
| 1.0mm | 30 | SuperMini and Pololu headers, 1N4007/P6KE18A, relay coil pins |
| 1.3mm | 14 | KF301 terminals, relay contact pins |
| 1.5mm | 4 | 1N5822 (1.3mm leads) |
| 3.2mm | 2 | M3 mounting holes |
How the "no top joint on covered pads" rule is enforced (so the router can't create a connection that can't be soldered):
*_Mill footprints in texecom-power-reset.pretty/..kicad_dru rule "no top pour on
covered pads" (zone_connection none on F.Cu) is kept as a guard in case a
top pour is ever added again. DRC connectivity is therefore honest: every
connection it counts is solderable.Assembly notes for the milled board:
Two assembly drawings, both printable at 2:1 on A4 landscape (print at 100%). The vias carry the same numbers on both.
Vias: fit a wire through each of the 16 vias and solder both sides first.
SMD (1206) parts are on the bottom (F1, C5, C6, R7–R12, R15, R16): solder them first, on the bottom.
Axial parts and disc capacitors (R1–R6, R13, R14, D1–D5, C2, C4, C7, C8): mount them 1–2mm off the board so the iron can reach the top pads, and solder every pad on both sides. The holes aren't plated, so the top and bottom pads are only joined by solder on the lead. Twenty of these pads carry a top track, and for those the top joint is essential (some have no bottom track at all). They're marked on the board with a small engraved ring (○ = SOLDER TOP) next to the pad. Soldering the other top pads is harmless and keeps the rule simple.
| Part | Type | Pads with a top track | Net |
|---|---|---|---|
| R1 | Axial resistor | 1, 2 | U2A reset, GND |
| R2 | Axial resistor | 1 | U2B reset |
| R3 | Axial resistor | 1 | +5V |
| R4 | Axial resistor | 1 | +5V |
| R5 | Axial resistor | 1, 2 | U2A reset, U2A trigger |
| R6 | Axial resistor | 1, 2 | U2B reset, U2B trigger |
| R13 | Axial resistor | none | |
| R14 | Axial resistor | 2 | GND |
| D1 | Axial diode (1N5822) | 1 | D1 cathode |
| D2 | Axial diode (P6KE18A) | 1 | D1 cathode |
| D3 | Axial diode (1N5822) | none | |
| D4 | Axial diode (1N4007) | 1, 2 | +5V, D4 anode |
| D5 | Axial diode (1N4007) | 1 | +5V |
| C2 | Disc capacitor | 1 | D1 cathode |
| C4 | Disc capacitor | 1, 2 | +5V, GND |
| C7 | Disc capacitor | 1 | U2A trigger |
| C8 | Disc capacitor | 1 | U2B trigger |
Solder the top joint first, then the bottom. Afterwards, check continuity from each ringed pad to the far end of its top track.
Everything else (terminals, relays, socket, headers, TO-92s, electrolytics, LEDs) is soldered on the bottom only; their top pads are isolated rings.
After testing, coat the board (no solder mask).
Milling order (double-sided, alignment pins, height map):
Isolation passes (copper layers): use 4, not 1
The first board was milled with one pass of the V-bit (about 0.14mm wide at −0.07mm). Isolation routing cuts a line around the outline of each copper shape; it doesn't clear the space between shapes. With one pass:
Settings for both copper layers (FlatCAM Beta, Isolation tool):
| Setting | Value |
|---|---|
| Passes | 4 |
| Overlap | 15–20% |
| Combine | On (all passes in one job) |
| Tool, depth, height map | Unchanged (30° V-bit, 0.1mm tip, −0.07mm, auto-level) |
That gives about 0.45–0.5mm of isolation from every copper edge: the 0.8mm bottom gaps are cleared completely (no slivers, even look), and the top pads get about 0.5mm to the floating copper. The legend stays a single Follow pass. FlatCAM's Non-Copper Clearing would remove all unused copper, but with a 0.1mm V-bit it's very slow; the extra passes give the clearance that matters.
Checking a milled board: under magnification, scrape out any copper slivers with a sharp hobby knife and brush the dust away. Then check with a continuity meter for shorts between neighbouring pads, and from each pad to the copper around it, especially the terminal, relay and 5V pads, before soldering.
Alignment holes with a 2.4mm fishtail end mill (at 12,000rpm):
| Setting | Value | Why |
|---|---|---|
| Z (plunge) feed | 100–150mm/min (no more than about 200) | About 0.0125mm/rev, or 0.006mm per flute on a 2-flute bit: enough to cut chips in FR4. The earlier 60mm/min tends to rub, which heats the resin, glazes the hole and dulls the bit. A fishtail isn't a drill (no point, no self-centring), and hobby machines flex under heavier plunges. |
| Step-down | 1mm per step, full retract between steps (−1, −2, −3mm) | Clears the fibreglass dust; 3mm total is a 1.6mm board plus about 1.4mm into the spoilboard for the pins. |
| Dust | Vacuum while drilling | Fibreglass dust packs into the flutes. |
Hole drills at 12,000rpm (carbide PCB drills in FR4):
| Drill | Holes | Z (plunge) feed |
|---|---|---|
| 0.8mm | 66 | 60–90mm/min |
| 1.0mm (includes the 0.9mm LED holes) | 34 | 80–120mm/min |
| 1.5mm (includes the 1.3mm terminal and relay-contact holes) | 18 | 100–150mm/min |
| 3.2mm (M3) | 2 | 120–180mm/min |
Engraving the legend (FlatCAM):
The legend Gerber is made of 0.15mm-wide lines. Normal isolation routing would cut around each line (a double outline); Follow geometry runs the tool once down the centre of each line, so the V-bit cuts a single thin groove.
fab/texecom-power-reset-Mill_Legend.gbr together with the F.Cu
Gerber. It shares their origin, so it lines up with the top isolation and
the alignment pins. Apply exactly the same offset or double-sided
move/mirror to the legend as to F.Cu (select both and apply it once).…_follow geometry.tools/make_legend.py (run with
KiCad's Python; see the script header) rather than editing it by hand.FlatCAM menu names differ a little between versions.
Build: tasmota32c3.bin (flash through the SuperMini's USB-C, with the board
unpowered from the battery; D3 isolates USB from the relay rail).
Configuration → Configure Module (Generic ESP32-C3):
| GPIO | Function |
|---|---|
| GPIO4 | Relay 1 (battery, K1) |
| GPIO3 | Relay 2 (AC, K2) |
| GPIO8 | None (WS2812 RGB LED and strapping pin; leave unassigned) |
Console:
Backlog PowerOnState 0; PulseTime1 30; PulseTime2 35; Sleep 100; FriendlyName1 Panel Battery Cut; FriendlyName2 Panel AC Cut| Setting | Why |
|---|---|
PowerOnState 0 | Relays are always off after an ESP reboot or power-up. |
PulseTime1 30 | Battery cut for 3.0 s. |
PulseTime2 35 | AC cut for 3.5 s. Battery comes back first, then AC, which matches the manual's power-up order. The panel goes live when AC returns. |
Sleep 100 | Dynamic sleep for lower average current while WiFi stays connected. |
If the SuperMini has trouble holding a WiFi connection (a known issue with some
SuperMini antenna layouts), try WifiPower 8.5. On this board the antenna end
points inward over the PCB, so if the signal inside the panel housing is poor,
switch the V2 to its IPEX external antenna.
Entity IDs are placeholders. Adjust them, and the AC-OK condition, to match the Tasmota and Texecom integrations.
script:
texecom_hard_power_reset:
alias: "Texecom hard power reset"
mode: single
sequence:
# Never reset without AC: the panel would not restart without the kick-start button.
- condition: state
entity_id: binary_sensor.texecom_ac_ok # placeholder
state: "on"
- action: switch.turn_on
target:
entity_id:
- switch.texecom_reset_panel_battery_cut # placeholder
- switch.texecom_reset_panel_ac_cut # placeholderDo these with a bench supply of about 12–13.8V on J1, before connecting the panel.
Power1. K1 clicks, D6 lights, and J1+ to J2+ opens
for 3.0 s, then everything releases. Repeat with Power2 (K2, D7, 3.5 s).PulseTime1 0 (no software timeout) and turn on
Power1, so the GPIO stays high. K1 should release after about 5–9 s
(7 s nominal) and stay off. Afterwards, restore PulseTime1 30. Repeat for
channel 2.The full BOM and sourcing tracker (on hand / Micro Robotics / Communica) is in BOM.md.
If milling the custom board isn't worth it, Micro Robotics' ESP8266-2CH-30A (R236, 83 × 68mm) can do the same job with the same wiring (checked against its schematic):
tasmota.bin, Generic module): Relay1 = GPIO12 (or 13),
Relay2 = GPIO14, Button1 = GPIO0, LedLink_i = GPIO5 (blue LED; check the
polarity). Use the same PowerOnState 0; PulseTime1 30; PulseTime2 35.
Flash through the UART header with a 3.3V USB-TTL adapter (IO0 to GND while
flashing); later updates go over the air.What it gives up compared with the custom board:
| Custom board | ESP8266-2CH-30A | |
|---|---|---|
| Hardware timeout (S3) | 74HCT4538 releases the relays after about 7 s even if the firmware hangs with a GPIO high | None. Relies on PulseTime and the ESP8266 watchdog (a reset floats the pins and the pull-downs release the relays). A firmware bug that keeps the pin high while the chip keeps running isn't covered. |
| Idle current from the battery | about 11–15mA | about 25–40mA (ESP8266 plus a non-synchronous buck); fine with solar backing |
| Flashing | USB-C, in place | UART header and USB-TTL adapter; OTA afterwards |
| Antenna | Ceramic, plus the V2's IPEX external-antenna option | ESP-12F PCB antenna only (could be weak inside a metal housing) |
| Build effort | Mill, drill and assemble | Buy, move one link, wire up |
Verdict: a sound substitute, especially with relay 1 moved to GPIO12/13. The custom board is kept for the hardware timeout, lower idle current, USB-C flashing and the external-antenna option.
fab/ (2026-09-25)| Decision | Reason |
|---|---|
| Pololu S9V11E2F5 instead of the XL7015 | The XL7015 (5–80V, 150kHz, non-synchronous) is inefficient at light load and bulky. The S9V11E2F5 has under 0.2mA quiescent current, a light-load mode, and a 10.9 × 16.5mm footprint. |
| Battery-only supply (no 16VAC diode-OR) | Rectified 16VAC peaks at about 22–25V, above the S9V11E2F5's 16V max. Solar backing makes battery drain a non-issue. |
| No low-battery cutoff | The system is solar-backed. |
| No AC or battery monitoring on the board | Already provided by the Texecom integration in HA. |
| KF301-2P terminals (on hand) | Rated 16A / 250V and accepts up to 14 AWG, well above the 1.6A battery path and 16VAC. |
Hardware timeout in addition to PulseTime | PulseTime is software and can't release a relay if the firmware hangs with the GPIO high. |
| 4538 monostable for the hardware timeout | One chip covers both channels. Its precise timing (0.7·R·C) beats a MOSFET-threshold RC, and its reset input gives "GPIO AND timer" logic without extra gates. |
Battery restores 0.5 s before AC (PulseTime1 30 / PulseTime2 35) | Matches the manual's power-up order (battery first, then AC). |
| HA script requires AC present | Without AC the panel won't restart unless the kick-start button is pressed. |
| D3 Schottky diode in the SuperMini 5V feed | The SuperMini's USB VBUS connects straight to its 5V pin. The diode stops USB from backfeeding the relay rail and regulator. |
| Through-hole parts wherever possible; 1206 SMD acceptable | User preference. 1206 is large enough to hand-solder. |
| F1 = PTC05A24V (1206, 0.5A hold) instead of the radial WDS250-500 (0.25A hold) | More margin over the peak load, and it's in stock at Micro Robotics. |
| CEXT 10µF X5R 1206 with REXT 1M | 22µF through-hole ceramics are hard to find. 10µF with 1M gives T ≈ 7 s. |
| 1N5822 for D1/D3 | Micro Robotics stocks the 1N5822, not the 1N5819. |
| Parts sourced from Micro Robotics (robotics.org.za) where possible | User preference. Tracked in BOM.md. The 74HCT4538 and the P6KE18A come from Communica. |
| 74HCT4538E at 5V instead of 74HC4538 at 3.3V | Bench test 1b measured 4.77mA per relay-module input at 3.3V, too close to a 3.3V 74HC's drive limit. At 5V the HCT has margin, and its TTL input levels still accept 3.3V from the ESP. It also suits the on-board transistor drivers. |
| 1k series resistors (R9/R10) between the GPIOs and the 74HCT4538 | They limit the clamp-diode current if the ESP drives a GPIO high while the 5V rail is off (USB-only power). |
| 100Ω in series with CEXT (R11/R12) | TI's recommended rapid power-down protection for CX of 0.5µF or more, without adding diode leakage across the 1M timing resistor. |
| Kept the Pololu S9V11E2F5 over the on-hand XL4015 and MP4560 modules | XL4015: too large (54 × 23 × 18mm), high idle current, trimpot output. MP4560: acceptable (55V input, pulse skipping), but its trimpot output could drift and over-voltage the ESP, 74HCT4538 and relays. The Pololu has a fixed 5V output and under 0.2mA idle current. |
| Schematic drawn with wires (not only net labels) | Readability. Only GND, +5V and +5V_MCU use power symbols or labels. |
| On-board SRD-05VDC-SL-C relays instead of the REL-2CHAN-335V module | Each panel power path drops from 4 screw terminals plus 2 wires to 2 terminals. A loose connection there would silently cut the panel's battery or AC. It also removes the inter-board wiring, the crimped control lead, J5–J7, the Q/Q̅ links and R7/R8 (220Ω). The cost is a board about 70 × 50mm and a few cheap driver parts. |
| 2N2222A + 1k base + 10k pull-down + 1N4007 flyback per relay | Standard low-side driver, all in stock at Micro Robotics. The pull-down keeps the relay off if U2 is unpowered or removed. |
| Red LED + 1k across each coil | Shows at a glance which feed is being cut (it replaces the module's indicator LEDs) and helps with bench testing. |
| Per-pad F.Cu keepouts in the covered footprints (not NPTH + bottom SMD pads) | KiCad forces plated pads onto both layers. Modelling the pads as NPTH + B.Cu SMD made the router treat each hole as an obstacle to its own pad. Keepouts inside the footprints block top tracks, vias and pour at those pads, travel with the part, and the router honours them. |
| 0.8mm clearance on every net class (not just around pads) | Wide isolation for easy hand soldering and FlatCAM multi-pass isolation. The board is not dense enough to need less. |
zone_connection none rule on F.Cu for covered pads | Keeps DRC connectivity honest for a board without plated holes. |
| GND pour on the bottom only; the top copper carries an engraved legend (2026-09-25) | The top pour added little: GND is well connected on the bottom, and three pads needed only short re-routes (one extra via). Without it, the free top copper can take a V-bit legend (outlines, references, BAT/AC terminal labels) to guide assembly. The legend is pre-clipped 0.35mm clear of all top copper, so it can't cut a track or pad. |
| SuperMini footprint corrected and rotated 180°; GPIO4 = channel 1, GPIO3 = channel 2 (2026-09-25) | The first footprint had its pin rows mirrored (it matched the module's bottom-view pinout drawing), so the module would only have fitted button side down. With the rows corrected, rotating the module 180° puts GPIO4/GPIO3 exactly on the old IO pads and 5V/GND next to D3 and the main GND pour, so the proven routing stays (DRC clean, still 16 vias). Keeping the antenna at the edge instead would have put 5V and GND against the board edge and split the GND pour. The trade-off is the antenna end pointing inward; the V2's IPEX external-antenna option covers weak WiFi. GPIO3 and GPIO4 have no pull-up at reset. |
| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 1k | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R7, R8, R9, R10, R15, R16 |
| 4 | 100nF | texecom-power-reset:C_Disc_D5.0mm_W2.5mm_P5.00mm_Mill | C2, C4, C7, C8 |
| 4 | 10k | texecom-power-reset:R_Axial_DIN0207_P10.16mm_Mill | R5, R6, R13, R14 |
| 2 | 100 | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R11, R12 |
| 2 | 100k | texecom-power-reset:R_Axial_DIN0207_P10.16mm_Mill | R1, R2 |
| 2 | 10uF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C5, C6 |
| 2 | 1M | texecom-power-reset:R_Axial_DIN0207_P10.16mm_Mill | R3, R4 |
| 2 | 1N4007 | texecom-power-reset:D_DO-41_P10.16mm_Mill | D4, D5 |
| 2 | 1N5822 | texecom-power-reset:D_DO-201AD_P15.24mm_Mill | D1, D3 |
| 2 | 2N2222A | texecom-power-reset:TO-92_Inline_Wide_Mill | Q1, Q2 |
| 2 | M3 | MountingHole:MountingHole_3.2mm_M3 | MH1, MH2 |
| 2 | RED | texecom-power-reset:LED_D3.0mm_Mill | D6, D7 |
| 2 | SRD-05VDC | texecom-power-reset:Relay_SRD_Form_C_Mill | K1, K2 |
| 1 | 100uF | texecom-power-reset:CP_Radial_D6.3mm_P2.50mm_Mill | C1 |
| 1 | 10uF | texecom-power-reset:CP_Radial_D5.0mm_P2.50mm_Mill | C3 |
| 1 | 74HCT4538 | texecom-power-reset:DIP-16_W7.62mm_Socket_Mill | U2 |
| 1 | AC IN | texecom-power-reset:KF301-2P_P5.00mm_Mill | J3 |
| 1 | AC OUT | texecom-power-reset:KF301-2P_P5.00mm_Mill | J4 |
| 1 | BAT IN | texecom-power-reset:KF301-2P_P5.00mm_Mill | J1 |
| 1 | BAT OUT | texecom-power-reset:KF301-2P_P5.00mm_Mill | J2 |
| 1 | ESP32-C3 SuperMini | texecom-power-reset:ESP32-C3-SuperMini_Mill | U3 |
| 1 | P6KE18A | texecom-power-reset:D_DO-15_P10.16mm_Mill | D2 |
| 1 | PTC 0.5A | Fuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolder | F1 |
| 1 | Pololu S9V11E2F5 | texecom-power-reset:Pololu_S9V11E2x_Mill | U1 |

neriyashalom/PKE-Car-System
Final project - ESP32-S3 based PKE system for vehicle access and ignition

Antozjr/Super-5-RTOS
Sistema CAN distribuido para un Renault 5 GTL (BCM + Gateway)


Willis75/portero-bot-hardware
PCB design and ESP32 firmware for Portero Bot gate controller (Claustro4)



borislav968/s3mono
ЭСУД SECU-3 поддерживает использование регуляторов холостого хода на основе шагового привода или электромагнита (ШИМ).

karolhof/ASV-PCBs
Actualizado el 05/10/2026 para KiCad 10. El esquema conserva cables continuos entre la alimentación, el ESP32, el LoRa y los dos conectores UART. Un punto marca una unión; un cruce sin punto no conecta.
It measures 92 × 70 mm and has 2 copper layers, 1.6 mm thick.
45 parts, built around the 74HCT4538D, 2N2222A, SRD-05VDC-SL-C and P6KE18A. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the jd710313/texecom-power-reset repository on GitHub, at the commit this page was made from: the board is texecom-power-reset.kicad_pcb and its schematic backup/texecom-power-reset_labels-version.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask jd710313 before reusing the design.