Ordering one helmet
Everything to buy for one exocortex, from whom, and every option on every order form: $2,142.76 all in.
Every figure here is read from out/sourcing/cost.json, which uv run python -m exo.cost writes from the boards as built. Add --refresh to re-fetch every JLC and LCSC price and stock first. Prices are as of 2026-11-04. This page is regenerated by uv run python -m exo.order_doc.
The script reads:
out/pcb/cap/placement.jsonandboards.json: the 9 tile designs and how many of each the helmet uses.- The panels from
exo.pcb.panel. - The hub and camera BOMs.
out/sourcing/bom.json: the price catalog, with every URL.out/sourcing/fees.json: JLC's fee schedule, with sources.
What it costs
JLC assembles at least 2 of every panel. So each tile panel holds half a helmet's tiles of its designs, plus a spare pair of each design, and is assembled twice: the two copies are one helmet and its spares. The hub and camera orders still build two sets, so their second set is spare.
| supplier | what | per helmet | what you pay |
|---|---|---|---|
| JLCPCB: boards, stencils, assembly | 4 orders (table below) | $1,197.55 | |
| JLCPCB: parts from its library | every part with an LCSC number on the boards, hub and cameras | $532.23 | $737.97 |
| LCSC (cart) | FPC jumpers, M2 screws and inserts, the hub's antenna | $10.90 | $16.76 |
| Probots (India) | OV2640 2 MP 160° camera module | $56.57 | $56.57 |
| Law Abiding Biker (USA) | Micro-ratchet (micrometric) helmet buckle: receiver + toothed tongue | $15.99 | $15.99 |
| eBay.de | Closed-cell neoprene foam strip | $2.23 | $2.23 |
| K2 (Australia) | 20 mm nylon webbing | $0.70 | $0.70 |
| certified cell seller (to quote) | Li-ion 1S 3.7 V >= 2 | $51.00 | $51.00 |
| oddjobhats.com | Oddjob Big Beanie | $40.00 | $40.00 |
| prusa3d.com | PETG 1.75 mm | $23.99 | $23.99 |
| total | $733.61 in parts | $2,142.76 |
A second helmet is a second order of the same files (the tile spares are only a pair per design).
The biggest lines, by what you pay:
| item | qty (helmet / order) | unit | total |
|---|---|---|---|
| TLV333IDCKR (JLCPCB parts library) | 1,187 / 1,532 | $0.1659 | $254.16 |
| KH-205580-DZ (JLCPCB parts library) | 1,127 / 1,464 | $0.1111 | $162.65 |
| CH32V203G6U6 (JLCPCB parts library) | 128 / 166 | $0.4514 | $74.93 |
| PRO2229 (Probots (India)) | 5 / 5 | $11.31 | $56.57 |
| 1S Li-ion pouch to docs/hub.md § power (not yet chosen) (certified cell seller (to quote)) | 1 / 1 | $51.00 | $51.00 |
| Big Beanie XXL (oddjobhats.com) | 1 / 1 | $40.00 | $40.00 |
| JLC setup fees (charged once per design) | 11 designs | $562.32 |
Not included:
- shipping and import duty/VAT on every order
- X-ray (optional)
- JLC's monthly $8 PCBA coupon
- the shell print's electricity and the printer
Not exact: each of these lines has a reason in its note in cost.json.
- PCB price: the bare-board price per panel is computed from JLC's published prices. JLC shows the real price only after the Gerbers are uploaded.
- Prices from search results: the beanie comes from a search-indexed listing, because that site refuses automated fetches.
- Hardware: stocked M2 screws are pan heads, not ISO 7380 button heads.
- Inputs this run used: the FPC data came from out/shell_v1_report.json fpc, and the hardware counts from out/shell_v1_report.json hardware.
The pin
Kinghelm KH-205580-DZ (JLC C530677) goes on every contact and on the hub's REF and BIAS contacts, placed and reflowed by JLC like any SMD part.
- Dimensions: 8.0 mm above its pad, Ø2.0 mm base, ~2.0 mm of plunger travel (drawing Kinghelm KH-205580-DZ (PG2.0-8.0-0.5T)).
- Force: at most 70 g (the maker's figure); the force curve isn't published, measure it on a bench.
- Working range on the helmet: the scalp sits 6.2–7.7 mm from each tile's face; in the layout every pin is 6.294–7.606 mm.
- Pad: Ø2.2 on the boards.
1. JLCPCB
Every part on the tiles, the hub and the cameras is in JLC's library: nothing to source or consign.
The files
| order | upload | BOM | CPL |
|---|---|---|---|
| CAP-01 (R1 × 7, R1E × 2, R2 × 10, R3 × 7, R3E × 3) | out/pcb/cap/panels/CAP-01/CAP-01-gerbers.zip |
out/pcb/cap/panels/CAP-01/CAP-01-bom-jlc.csv |
out/pcb/cap/panels/CAP-01/CAP-01-cpl-jlc.csv |
| CAP-02 (TA × 3, TB × 5, TC × 3, TD × 3) | out/pcb/cap/panels/CAP-02/CAP-02-gerbers.zip |
out/pcb/cap/panels/CAP-02/CAP-02-bom-jlc.csv |
out/pcb/cap/panels/CAP-02/CAP-02-cpl-jlc.csv |
| HUB | out/pcb/hub/EXO-430-gerbers.zip |
out/pcb/hub/hub-bom-jlc.csv |
out/pcb/hub/hub-cpl-jlc.csv |
| CAM | out/pcb/camera/EXO-450-gerbers.zip |
out/pcb/camera/EXO-450-bom-jlc.csv |
out/pcb/camera/EXO-450-cpl-jlc.csv |
If out/pcb/cap/panels/ doesn't exist yet, build it first: PCB_OUT=out/pcb/cap uv run python -m exo.pcb.panel.
Each panel already has its rails, fiducials, tooling holes, mouse-bite tabs and per-board designators (R1x3_U4: design R1, copy 3).
The order form (once per row of the table)
PCB options:
| option | CAP-xx (tile panels) | HUB | CAM |
|---|---|---|---|
| Layers | 6 | 4 | 4 |
| Dimensions | the panel size (table below) | 80 × 56 | 19.0 × 17.0 |
| PCB qty | 5 | 5 | 5 (panels) |
| Different design | the panel's design count | 1 | 1 |
| Delivery format | Panel by Customer | Panel by JLCPCB, 1 × 1, edge rails top and bottom, at least 7 mm each (so the panel reaches the 70 mm minimum) | Panel by JLCPCB, 3 × 1, edge rails on |
| Thickness | 1.0 mm | 1.6 mm | 1.0 mm |
| Surface finish | ENIG | ENIG | ENIG |
| Outer / inner copper | 1 oz / 0.5 oz | 1 oz / 0.5 oz | 1 oz / 0.5 oz |
| Via covering | Epoxy filled & capped (POFV, free on 6-layer) | Tented | Tented (no via in a pad: the GND pads have dogbones) |
| Impedance control | No | Yes: JLC's 1.6 mm 4-layer stack-up (USB 2.0 HS pair, 90 Ω differential) | No |
| Mark on PCB | Remove mark | Remove mark | Remove mark |
| Electrical test | flying probe | flying probe | flying probe |
PCB Assembly options:
| option | CAP-xx | HUB | CAM |
|---|---|---|---|
| PCBA type | Standard (0201 parts) | Standard | Standard (double-sided) |
| Assembly side | Both sides (pins, protection resistors, test pads on the scalp face) | Both sides | Both sides |
| PCBA qty | 2 | 2 | 2 (panels: 6 boards) |
| Tooling holes | Added by customer | Added by JLCPCB | Added by JLCPCB |
| Confirm Parts Placement | Yes ($0.45) | Yes | Yes |
| Others | unticked | unticked | unticked |
Then, for each order:
- Upload the BOM and CPL.
- On the parts page, check every line against
cost.json: same LCSC number, stock green. - In the placement preview, check these: - pin 1 of every QFN (the CH32V203s; the hub's RP2350s and FT2232H); - the SC70 op-amps and buffers and the SOT-363 mux; - the FPC connectors' orientation; - that every pogo pin sits on the scalp face.
- Compare the quote with the row for that order below.
Per-order fees ($), from cost.json → panels:
| order | designs | panel mm | PCB ×5 (est.) | setup | stencil | loading | joints | joint $ | hand-placed pins $ | other | total |
|---|---|---|---|---|---|---|---|---|---|---|---|
| CAP-01 | 5 | 212.24 × 174.41 | 129.93 | 255.60 | 20.62 | 29.07 | 32,926 | 52.68 | 0.00 | 17.39 | 505.29 |
| CAP-02 | 4 | 235.95 × 71.58 | 59.28 | 204.48 | 16.42 | 29.07 | 14,038 | 22.46 | 0.00 | 17.38 | 349.09 |
| HUB | 1 | 80.0 × 70.0 | 5.12 | 51.12 | 16.42 | 113.22 | 3,550 | 5.68 | 0.00 | 17.37 | 208.93 |
| CAM | 3 | 70.0 × 70.0 | 4.42 | 51.12 | 16.42 | 42.84 | 1,290 | 2.06 | 0.00 | 17.37 | 134.24 |
| Global Sourcing inspection | 0.00 | ||||||||||
| total | 198.75 | 562.32 | 69.88 | 214.20 | 82.88 | 0.00 | 69.51 | 1197.55 |
How the fees are built:
- Setup: $51.12 per order on double-sided Standard PCBA, plus the same again for each extra design in a panel. A panel of n designs therefore costs n setups, so panels save stencils, fabrication and the per-order fees, not setup.
- Stencil: $16.42, plus $4.20 for a self-panelled stencil with 5 or more designs.
- Loading: $1.53 for each unique part.
- Joints: $0.0016 per joint.
- Hand-placed pins: $0.017 per pin (none on the cap: its pogo pins are placed like any SMD part).
- Other: confirm placement $0.45, packing $0.50 + $0.00003/cm², and fixtures $16.42.
- PCB: 6-layer panels are priced at $2 up to 25 cm², rising linearly to $35.10 at 100 cm², then in proportion to area above that. The 4-layer hub and camera boards use $2 rising to $9.55. All of these are for 5 pieces.
- Global Sourcing: $20 inspection per part type.
Sources: assembly price, extra charges, panelization, ordering, PCBA capabilities, minimum qty, Global Sourcing, consignment, 6-layer.
2. LCSC (cart)
Go to lcsc.com → BOM Tool, upload a CSV with the columns LCSC Part #, Quantity from the table below, check that every row matched, then check out.
| LCSC | item | links | qty | total |
|---|---|---|---|---|
| C916292 | RF Antennas RoHS | 2 | $5.28 | |
| C910056 | 1.3 RF Antennas | 2 | $0.77 | |
| C18212937 | JS05B-12P-060-3-4: 12 Position FFC, FPC Cable 0.5mm 6cm | R2-01.J102-R1E-02.J101 | 5 | $0.51 |
| C2857701 | JS05B-12P-150-4-8: 12 Position FFC, FPC Cable 0.5mm 15cm | R3-02.J102-R3-01.J101 | 5 | $0.50 |
| C2857702 | JS05B-12P-200-4-8: 12 Position FFC, FPC Cable 0.5mm 20cm | R3-05.J102-R1-06.J101, R3-08.J102-R1-08.J101, R1-05.J101-HUB.P07 | 5 | $0.59 |
| C2857703 | JS05B-12P-250-4-8: 12 Position FFC, FPC Cable 0.5mm 25cm | CAM3.J2-HUB.C3, CAM4.J2-HUB.C4, TC-04.J101-HUB.P11, R3-04.J101-HUB.P05, R2-13.J101-HUB.P16 | 5 | $0.68 |
| C2857704 | JS05B-12P-300-4-8: 12 Position FFC, FPC Cable 0.5mm 30cm | CAM2.J2-HUB.C2, TD-01.J101-HUB.P03, R1-03.J101-HUB.P08, R1-10.J101-HUB.P14 | 5 | $0.46 |
| C3002771 | JS05B-12P-130-3-5: 12 Position FFC, FPC Cable 0.5mm 13cm | R3-09.J102-R3-10.J101, R1E-02.J102-R1E-01.J101 | 5 | $0.46 |
| C5151980 | JS05B-12P-100-3-4: 12 Position FFC, FPC Cable 0.5mm 10cm | TC-01.J102-R3-02.J101, R3-12.J102-TA-01.J101, R3-04.J102-R3-03.J101, TD-02.J102-TB-04.J101, R3E-02.J102-TA-04. | 20 | $1.99 |
| C5371249 | JS05B-12P-080-4-8: 12 Position FFC, FPC Cable 0.5mm 8cm | TA-04.J102-TA-03.J101, TB-08.J102-TB-05.J101, TB-07.J102-TB-06.J101, TB-05.J102-TD-03.J101, TC-03.J102-TB-08.J | 21 | $1.96 |
| C5371250 | JS05B-12P-120-4-8: 12 Position FFC, FPC Cable 0.5mm 12cm | R3-10.J102-R2-14.J101, R3-03.J102-R2-05.J101, R2-16.J102-R2-17.J101, R3-01.J102-TB-02.J101, R2-10.J102-R2-11.J | 7 | $0.69 |
| C55509681 | 0.512P400B4/4*8/8: 0.3mm 12P 0.5mm Same Side 40cm P=0.5m | the only 400 mm 12-way 0.5 mm FFC at LCSC; its model number says type B but LCSC's description says 'Same Side | 7 | $1.13 |
| C357534 | Pan Head Phillips Machine Screws PM2X6 Nickel Plated | pan head Phillips, nickel-plated steel: the closest stocked M2 x 6; not an A2 ISO 7380 button head; for: 132 x | 136 | $0.26 |
| C51939026 | Double Knurled Heat-Set Threaded Insert M233.5 Brass | for: 4 x M2 x 3 heat-set insert + M2 x 5 button head (battery cover) | 50 | $0.50 |
| C5222494 | Torx Pan Head Machine Screw PM2×5 Black Oxide | Torx pan head, black oxide: the closest stocked M2 x 5; for: 4 x M2 x 3 heat-set insert + M2 x 5 button head ( | 100 | $0.41 |
| C357545 | Pan Head Phillips Machine Screws PM3X10 Nickel Plated | fetched 2026-11-03; the headband's link pins: thread-forming into the shell's Ø9 bosses (Ø2.5 pilot, 6 mm of t | 100 | $0.30 |
| C357543 | Pan Head Phillips Machine Screws PM3X6 Nickel Plated | fetched 2026-11-03; the ratchet's two webbing loops, two screws each into the band's 2.4 mm blocks; for: 4 x M | 100 | $0.27 |
About the FPC jumpers:
- Every link is Type B (contacts on opposite sides at the two ends), because both ends use the same bottom-contact connector wired pin to pin (see the shell report's FPC type note).
- Every link is 12-way: tile to tile along a chain, a chain's first tile to a hub port, and the cameras.
- The 400 mm 12-way cable (C55509681) is labelled type B in its model number but "Same Side" in LCSC's description. Check the photo before you order it.
3. Other suppliers
| item | where | qty | total |
|---|---|---|---|
| OV2640 2 MP 160° camera module, 24-pin 0.5 mm FPC, 21 mm tail (ESP32-CAM pinout) | Probots (India) PRO2229 | 5 | $56.57 |
| Micro-ratchet (micrometric) helmet buckle: receiver + toothed tongue, stainless, for a strap up to 25 mm | Law Abiding Biker (USA) Quick release chin strap stainless ratchet buckle kit | 1 | $15.99 |
| Closed-cell neoprene foam strip, 20 mm wide, 3 mm thick, self-adhesive, 2 m (the band takes 0.65 m) | eBay.de Self-adhesive neoprene sponge strip 20 x 3 mm | 1 | $2.23 |
| 20 mm nylon webbing, 1 m (two 60 mm loops hold the ratchet's halves) | K2 (Australia) ANSCO Web HD Nylon 20mm, per m | 1 | $0.70 |
| Li-ion 1S 3.7 V >= 2,500 mAh, >= 5 A continuous, own PCM, 10k B3435 NTC lead, <= 70 x 45 x 9 mm, JST PH 3-pin (BAT+, NTC, BAT-); IEC 62133-2 and UN 38.3 test reports | certified cell seller (to quote) 1S Li-ion pouch to docs/hub.md § power (not yet chosen) | 1 | $51.00 |
| Oddjob Big Beanie, size XXL, 100 % acrylic knit, 64 cm around as made | oddjobhats.com Big Beanie XXL | 1 | $40.00 |
| PETG 1.75 mm, 1 kg spool (the six printed parts slice to 530 g) | prusa3d.com Prusament PETG Jet Black 1 kg | 1 | $23.99 |
Things to know before you buy:
- Battery: Li-ion 1S 3.7 V >= 2,500 mAh, >= 5 A continuous, own PCM, 10k B3435 NTC lead, <= 70 x 45 x 9 mm, JST PH 3-pin (BAT+, NTC, BAT-); IEC 62133-2 and UN 38.3 test reports (certified cell seller (to quote), 1S Li-ion pouch to docs/hub.md § power (not yet chosen)). Price is a placeholder: the MaxAmps Lipo-2000-1S's $51.00 (recorded 2026-10-28), until a seller with the IEC 62133-2 and UN 38.3 reports quotes. LCSC and JLC sell no pouch cells (searched 2026-11-03). The MaxAmps pack it replaces is a hobby RC pack with no PCM (docs/regulatory.md § 3).
- Camera module: the price is converted from INR at the rate stored in
bom.json→fx.
4. The shell print
- Print
out/stl/EXO-140.stl…EXO-145.stlin PETG on an Ender-3 V3 SE: 0.4 mm nozzle, 0.2 mm layers, 7 walls, 5 top and bottom layers, 20 % infill, 240 °C nozzle, 80 °C bed, 60 mm/s, 40 % fan, a brim. - The parts are already in print orientation. See
docs/shell.mdfor the times and grams. - Heat-set the 4 battery-cover inserts.