An automotive electronics product taken from blank schematic to fabricated, hand-assembled hardware running on motorcycles — across four revisions and several per-vehicle variants.
The board installs inline in a motorcycle's ignition harness. It unplugs the factory connector, sits between the key side and the bike side, re-presents every wire it does not need to touch, and intercepts only the starter trigger. On top of that intercept it layers an ESP32-WROOM-32D: wireless control, battery-voltage and engine-temperature monitoring, RPM sensing, and a relay path that stays gated by the physical key.
Designed end-to-end by Mauricio Marcano in KiCad 7 — schematic capture, PCB layout, footprint authoring, component sourcing, landed-cost modelling and release-ready fabrication outputs.
Starter One V3 — 33 × 100 mm, 2-layer FR4. Top and bottom layers.
Aftermarket motorcycle immobilisers and remote-start modules usually require cutting into the factory loom. That is invasive, hard to reverse, and a warranty and reliability liability.
Starter One is a pass-through module. BR (brown) and GR (gray) run straight from J1 pin 3/4 to J2 pin 3/4 with no series element. +12V is bussed to pin 1 of all three connectors. Only the starter trigger is broken and routed through the relays. Installation is connector-in, connector-out; removal restores the bike to stock.
Because every motorcycle model routes its ignition harness slightly differently, the design is maintained as a family of small variants rather than one universal board — see revision history.
| Starter One V3 | Starter Max One Pro V2 | |
|---|---|---|
| File | se.kicad_pcb |
starter_max_one_pro.kicad_pcb |
| Silkscreen | STARTER ONE V3 · JUNE 2024 |
STARTER ONE V2 · MAY 2024 |
| Size | 33 × 100 mm | 99 × 105 mm |
| Footprints | 44 | 138 |
| Routing | 462 segments · 39 vias · 1 pour | 1281 segments · 105 vias · 3 pours |
| Fab package | — | fab/ (released Gerbers + drills) |
Both are 2-layer FR4, 1.6 mm, 1 oz copper. The V3 is the compact revision; the Pro is the larger, higher-integration variant whose released fabrication package ships in this repo.
Starter Max One Pro V2 — 99 × 105 mm, top layer.
| MCU | Espressif ESP32-WROOM-32D — Wi-Fi 802.11 b/g/n + Bluetooth/BLE |
| Board | 33 × 100 mm, 2-layer FR4, 1.6 mm, 1 oz copper |
| Supply | 12 V vehicle battery, zener-clamped → 3.3 V @ 3 A buck rail |
| Switching | 2 × SPDT power relays (SRD-12VDC-SL-C), parallel BJT + MOSFET low-side drive |
| Analog in | Battery voltage (0–16.5 V), NTC engine temperature |
| Digital in | Ignition-key state, engine witness, external button, RPM pickup |
| Outputs | Starter trigger (relay), external status LED, wireless control line |
| Harness | 3 × 6-pin 2.2 mm Sumitomo HM 090 sealed automotive connectors |
| Programming | 2×3 × 2.54 mm UART header (TE 1734598-6) |
| Design | 42 components · 44 footprints · 31 connected nets |
| EDA | KiCad 7.0 |
flowchart LR
BAT["12 V battery"] --> CLAMP["Zener clamp<br/>CMZ5352B"]
CLAMP --> BUCK["MP1584EN buck<br/>12 V to 3.3 V, 3 A"]
BUCK --> RAIL["3V3 rail<br/>1000 uF + 10 uF"]
RAIL --> ESP["ESP32-WROOM-32D"]
KEY["J1 Key End"] -->|BR, GR pass through| BIKE["J2 Bike End"]
KEY -->|KEY_SENSOR_IN| Q8["Q8 level shift"] -->|GPIO27| ESP
SENS["J3 Sensor<br/>NTC, button, LED"] -->|BUTTON_SENSOR| Q3["Q3 level shift"] -->|GPIO34| ESP
SENS -->|ENGINE_WITNESS| Q1["Q1 level shift"] -->|GPIO25| ESP
DIV["30k / 7.5k divider"] -->|GPIO39| ESP
BAT --> DIV
SENS -->|NTC + 10k| ADC["GPIO36"] --> ESP
RPMH["J9 RPM module"] -->|GPIO33| ESP
ESP -->|GPIO23 WIRELESS_OUT| Q2["Q2 follower"]
SENS -->|ENGINE_WITNESS| Q9["Q9 follower"]
Q2 --> TRIG(("RELAY_TRIGGER<br/>1000 uF hold"))
Q9 --> TRIG
TRIG --> DRV["Q5 BJT + Q6 MOSFET<br/>low-side, GS1001FL flyback"]
DRV --> RLY["K1 / K2 SPDT"]
RLY -->|START_TRIGGER| BIKE
ESP -->|GPIO26| LEDD["Q4 LED driver"] --> SENS
These are the decisions worth talking through.
RELAY_TRIGGER is not a GPIO. Two emitter followers pull it up from +12V:
- Q2, based on
WIRELESS_OUT(GPIO23) — the firmware path - Q9, based on
ENGINE_WITNESS(J3 pin 1) — a hardware path independent of the MCU
Either source can raise the node; neither can veto the other. RELAY_TRIGGER then drives R13 into the bases of Q5 (FCX690BTA BJT) and Q6 (TK11S10N1L logic-level MOSFET) in parallel, switching the relay coils low-side, with D2 (GS1001FL) freewheeling from +12V across the coil node and R12 as a base pull-down.
The same ENGINE_WITNESS line is also read back by the MCU through Q1 → GPIO25, so firmware can observe the state it does not exclusively control. The schematic labels these two drive paths "Option 1 / Option 2" — the board was laid out so either could be populated.
C4 (1000 µF) sits on RELAY_TRIGGER, not on the supply. Once the node is pulled up it stays up while the cap discharges through the base network — giving the starter a hold time and contact debounce in hardware, with no firmware timer in the loop. It is the kind of detail that only shows up after a board has been on a real bike.
Every 12 V vehicle line entering the MCU goes through the same building block: an NHDTC114ET pre-biased digital transistor (integrated base and base-emitter resistors, SOT-23), collector pulled to 3.3 V, emitter grounded — a one-part 12 V → 3.3 V active-low translator with no external biasing.
| Channel | Input | Transistor | Pull-up | To MCU |
|---|---|---|---|---|
| Ignition key | KEY_SENSOR_IN (J1 pin 2) |
Q8 | R5 10 kΩ | GPIO27 |
| External button | BUTTON_SENSOR (J3 pin 3) |
Q3 | R10 10 kΩ | GPIO34 |
| Engine witness | ENGINE_WITNESS (J3 pin 1) |
Q1 | R4 10 kΩ | GPIO25 |
One pattern, three instances, one part number to stock — and the ESP32 never sees more than 3.3 V.
A 12 V motorcycle rail is a hostile supply: crank sag, alternator ripple, inductive kick from the starter solenoid.
| Stage | Part | Purpose |
|---|---|---|
| Clamp | D3 — CMZ5352B zener, SMB/SMC | Transient and overvoltage clamp across +12V |
| Conversion | J5 — MP1584EN module, 12 V → 3.3 V @ 3 A | Step-down; module footprint keeps the switching node off the main board |
| Rail bulk | C5 1000 µF + C0 10 µF + 100 nF locals | Rail stability under ESP32 TX current bursts |
| Freewheel | D2 — GS1001FL across the coil node | Absorbs relay coil inductive kick |
| Trigger path | D4 — SBR10B45P5 super-barrier rectifier | Steers BR into +START_TRIGGER at a low forward drop |
- Battery voltage — R6/R7 = 30 kΩ / 7.5 kΩ off
+12Vinto GPIO39, filtered by C2. Full scale is 3.3 V × (37.5 / 7.5) = 16.5 V, which brackets crank sag and a 14.4 V charging rail without clipping the ADC. - Engine temperature — NTC on J3 pin 6 against a 10 kΩ pull-up (R1), filtered by C1, into GPIO36.
- RPM — dedicated 5-pin module header (J9) into GPIO33, pickup broken out to J4.
Net classes are defined and honoured — routing splits cleanly into 0.5 mm power (179 segments: +12vdc, +3.3vdc, AC Power) and 0.25 mm signal (283 segments), over a ground pour. DRC is a conservative rule set any low-cost prototype house can hold:
min track / clearance 0.20 mm min via diameter 0.40 mm
min annular ring 0.10 mm min through-hole 0.30 mm
min hole-to-hole 0.25 mm copper-to-edge 0.025 mm
microvias / blind-buried disabled
The silkscreen carries the install map on the board — KEY+, KEY-, BROWN, GRAY, CDI, PARKING, POSITIVE, NEGATIVE, RPM, TEMP +, TEMP -, BAT SEN, LED OUT, TURN OFF SEN — so a technician does not need the schematic in hand.
| Module pin | GPIO | Net | Function |
|---|---|---|---|
| 4 | GPIO36 (SENSOR_VP) | TEMP+ |
NTC engine temperature — ADC |
| 5 | GPIO39 (SENSOR_VN) | BATTERY_IN |
Battery voltage via 30k/7.5k — ADC |
| 6 | GPIO34 | BUTTON_IN |
External button, via Q3 |
| 9 | GPIO33 | RPM_IN |
RPM pickup from J9 |
| 10 | GPIO25 | VEHICLE_IN |
Engine-witness readback, via Q1 |
| 11 | GPIO26 | LT_7 |
Status-LED driver (Q4 → J3 LED OUT) |
| 12 | GPIO27 | KEY_DETECTOR_IN |
Ignition-key state, via Q8 |
| 16 | GPIO13 | RESET_NET |
On-board reset button, 10 kΩ pull-up |
| 37 | GPIO23 | WIRELESS_OUT |
Relay trigger — firmware path |
| 3 | EN | EN |
Bootstrap — J6 pin 4 |
| 25 | GPIO0 | IO0 |
Bootstrap — J6 pin 3 |
| 34 / 35 | RXD0 / TXD0 | RX0 / TX0 |
UART flash — J6 pins 5/6 |
Unused GPIOs are left free and un-routed, so firmware variants do not force a respin.
| Ref | Label | Type | Pinout |
|---|---|---|---|
| J1 | Key End | 6-pin Sumitomo HM 090, 2.2 mm | 1 +12V · 2 KEY_SENSOR_IN · 3 BR · 4 GR · 5 -START_TRIGGER_OTHER_END · 6 -START_TRIGGER |
| J2 | Bike End | 6-pin Sumitomo HM 090, 2.2 mm | 1 +12V · 2 +START_TRIGGER · 3 BR · 4 GR · 5 GND · 6 -START_TRIGGER |
| J3 | Sensor | 6-pin Sumitomo HM 090, 2.2 mm | 1 ENGINE_WITNESS · 2 LED OUT · 3 BUTTON_SENSOR · 4/5 GND · 6 TEMP+ (NTC) |
| J5 | Buck module | MP1584EN module footprint | 1 GND · 2 +12V in · 3 +3V3 out · 4 GND |
| J6 | Program | TE 1734598-6, 2×3 × 2.54 mm | 1 GND · 2 +3V3 · 3 IO0 · 4 EN · 5 RX0 · 6 TX0 |
| J9 | RPM module | 1×5 × 2.54 mm header | 1 GND · 2 +3V3 · 3 +12V · 4 RPM_IN · 5 RPM+ |
Relay contacts. K1 throws KEY_SENSOR_IN (pole) between +12V and +START_TRIGGER. K2 throws -START_TRIGGER_OTHER_END (pole) between ground and -START_TRIGGER through R100 — 100 Ω in a 2512 body, sized for the pulse energy rather than the average power.
The three harness connectors land on custom solder-pad footprints (PAD Connector 6), with sealed Sumitomo pigtails soldered on — wire-to-board without a costly board-mount automotive connector.
fab/ holds the released 2-layer fabrication package for the Pro board — Gerbers plus Excellon drills, as sent out:
starter_max_one_pro-F_Cu.gtl / -B_Cu.gbl copper
starter_max_one_pro-F_Mask.gts / -B_Mask.gbs solder mask
starter_max_one_pro-F_Silkscreen.gto / -B_...gbo silkscreen
starter_max_one_pro-Edge_Cuts.gm1 outline
starter_max_one_pro-PTH.drl / -NPTH.drl drills (Excellon)
starter_max_one_v2.zip packaged release
Boards from these packages were fabricated, hand-assembled and run on motorcycles. Each release point is marked in git (see below), so any revision can be re-cut from the exact files that went to the fab. An earlier release package for the compact board (fab/se_production-*, September 2023) is preserved in history at commit 5234121.
se.csv is a grouped BOM exported straight from Eeschema, carrying manufacturer part numbers, Mouser order numbers, datasheet links and component height as schematic fields — so sourcing and mechanical fit-check come out of the same source of truth as the netlist. Change a part in the schematic and the purchasing data moves with it; there is no second spreadsheet to keep in sync.
Cost was modelled per unit across the whole delivered product — components, bare PCB, freight, assembly labour and enclosure — not just the BOM line. That full-product view is what drove the part reductions across revisions: removing the MAX6675 and the discrete power stage was a cost decision as much as a design one.
Version tags mark each release point. The original branch names are kept because they record which motorcycle each build targeted — every bike routes its ignition harness a little differently, so each variant is a small deviation from the same core design.
| Tag | Product tag | Branch | Date | Commit | Notes |
|---|---|---|---|---|---|
v1.0 |
STARTER-MAX-V1, V1 |
V1, KLR |
2024-03-16 | db16baf |
Component values unified. KLR is the vehicle-specific build off this point. |
v2.0 |
— | V3 |
2024-03-21 | 17861fe |
PCB revision |
v3.0 |
STARTER-MAX-V2 |
STARTER-MAX-V2, V4 |
2024-04-29 | 40fab11 |
Starter Max One Pro line — the 99 × 105 mm board |
v4.0 |
STARTER-ONE-V3 |
main |
2024-06-10 | 9371ddd |
Current design: compact 33 × 100 mm board, cost values finalised |
vN.0 tags are chronological release order; the product tags are the original names. The tag at v3.0 is the squashed release commit — branches STARTER-MAX-V2 and V4 both carry the un-squashed development history behind it (New PCB → Regroup → Antes de quitar las luces → Almost done before BR diode → STARTER MAX V2 release), which is the clearest record of how the Pro board came together.
None of these track the silkscreen revision printed on the board — the compact board at v4.0 is silkscreened STARTER ONE V3, and the Pro board at v3.0 is silkscreened STARTER ONE V2. This table is the authoritative mapping.
Design evolution. The V2-era BOM (V2 BOOM .xlsx, 46 components) carried a MAX6675 thermocouple interface and TE 3PCV-02-006 barrier terminal blocks. Both were removed: an NTC divider resolves engine temperature well inside the useful band for a shutdown threshold, deleting an SOIC, its decoupling and three SPI nets; and barrier blocks are wrong for a vehicle exposed to vibration and water, so the harness moved to sealed Sumitomo HM 090 connectors — what the bike already uses.
Work in progress. Branch HARD-TURN-ON-OFF takes this further: it removes the discrete power stage (Q5, Q6) and the button / engine-witness / vehicle-in circuitry, and feeds a new STARTER_OFF line (GPIO25) through R8 into the relay-driver base so the key detector and the MCU share a single summing node — an interlock where firmware cannot energise the starter unless the physical key state allows it. 42 → 38 components. Bench-validated, not yet in a shipped build.
se.kicad_sch / se.kicad_pcb / se.kicad_pro Starter One V3 (current design)
starter_max_one_pro.kicad_pcb / .kicad_pro Starter Max One Pro V2
se.csv BOM with MPNs, pricing, heights
fab/ released Gerbers + Excellon drills
docs/ rendered boards and schematic
fp-lib-table / sym-lib-table project-local library tables
Libraries/
├── Perceptive.pretty/ buck module + reset switch
├── PAD Connector/ hand-authored harness solder pads
├── 1734598-6/ TE programming header
├── MAX6675 - KiCad/ thermocouple interface (V2-era)
├── TK11S10N1L,LQ - KiCad/ Toshiba MOSFET
└── freetronics_kicad_library-master/ generic symbols (D4)
V2 BOOM .xlsx V2-era BOM
Only the symbols and footprints this design actually uses are tracked — the repository carries 51 files, down from 2936, with no vendored dump of third-party libraries.
git clone https://github.com/rinripper/STARTER.gitOpen se.kicad_pro in KiCad 7.0 or newer. Both library tables are project-local and use ${KIPRJMOD} relative paths, so the design opens with every symbol and footprint resolved — no global library configuration, no submodules, no missing-library dialogs.
Regenerate the documentation renders:
kicad-cli pcb export svg --output docs/v3-top.svg --layers "F.Cu,F.SilkS,Edge.Cuts" --page-size-mode 2 --exclude-drawing-sheet se.kicad_pcbFull schematic: docs/schematic.pdf · docs/schematic.svg
Hardware — mixed-signal schematic capture · 2-layer PCB layout with net-class-driven routing and ground pour · automotive 12 V front-end protection (clamping, freewheeling, transient tolerance) · relay drive with parallel BJT/MOSFET low-side stages · level shifting with pre-biased digital transistors · ADC signal conditioning and range sizing · RF module integration · custom footprint and symbol authoring · DFM-conscious rule sets
Systems — hardware paths that stay independent of firmware · non-invasive integration with an existing vehicle harness · per-vehicle variant management under version control · design-for-service silkscreen documentation
Product — component sourcing with live distributor data · landed-cost modelling and cost-driven part reduction · fabrication release packaging · four revisions carried through to fabricated, assembled, working hardware
This repository is the hardware design: schematic, layout, libraries, BOM and fabrication outputs. Firmware for the ESP32 lives outside this repo.
All schematic capture, PCB layout, footprint authoring, sourcing and cost work is my own.
Mauricio Marcano — hardware / embedded systems design 📧 marcanomauro@gmail.com
Open to hardware design, embedded systems and product-engineering roles.