Ordering one helmet
Everything to buy for one exocortex, from whom, and every option on every order form: $11,784.14 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-10-28. This page is regenerated by uv run python -m exo.order_doc.
The script reads:
out/pcb/poly/placement.json: the contact boards and controllers.- 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. The cheapest legitimate order for one helmet therefore buys parts and assembly for two sets of boards, and the second set is your spares.
| supplier | what | per helmet | what you pay |
|---|---|---|---|
| JLCPCB: boards, stencils, assembly | 16 orders (table below), plus the Global Sourcing inspection | $5,295.83 | |
| JLCPCB: parts from its library | every part with an LCSC number on the boards, hub and cameras | $1,595.43 | $3,191.53 |
| JLCPCB: Global Sourcing | the Mill-Max pins and the DF40C-10DP headers, bought from DigiKey by JLC | $1,157.45 | $2,363.77 |
| WPG Americas, consigned to JLC | PAT9125EL-TKMT optical sensors | $360.96 | $767.04 |
| LCSC (cart) | FPC jumpers, M2 screws and inserts | $6.20 | $8.10 |
| Probots (India) | OV2640 2 MP 160° camera module | $56.57 | $56.57 |
| Zoro | M2 x 8 socket head cap screw | $2.87 | $2.99 |
| Pololu | Nylon spacer 4 mm OD | $3.20 | $3.33 |
| MaxAmps (USA) | Li-po 1S 3.7 V 2000 mAh | $51.00 | $51.00 |
| carhartt.com | Carhartt A18 knit cuffed beanie | $19.99 | $19.99 |
| prusa3d.com | PETG 1.75 mm | $23.99 | $23.99 |
| total | $3,277.65 in parts | $11,784.14 |
If you build two helmets from the same order, the spare set gets used and only the loose items double. Each helmet then costs $5,975.05.
The biggest lines, by what you pay:
| item | qty (helmet / order) | unit | total |
|---|---|---|---|
| ADS131M08IRSNR (JLCPCB parts library) | 179 / 358 | $6.62 | $2,371.50 |
| 0919-0-15-20-89-14-11-0 (JLC Global Sourcing (DigiKey ED10766-ND)) | 1,277 / 2,610 | $0.8728 | $2,277.93 |
| PAT9125EL-TKMT (WPG Americas (consigned to JLC)) | 64 / 136 | $5.64 | $767.04 |
| TLV333IDCKR (JLCPCB parts library) | 1,374 / 2,748 | $0.1662 | $456.72 |
| DF40C-10DP-0.4V(51) (JLC Global Sourcing (DigiKey H11616CT-ND)) | 64 / 128 | $0.6706 | $85.84 |
| PRO2229 (Probots (India)) | 5 / 5 | $11.31 | $56.57 |
| JLC setup fees (charged once per design) | 66 designs | $3,373.92 |
Not included:
- shipping and import duty/VAT on every order
- JLC's consignment pre-deposit (duty + VAT + handling) on the PAT9125
- 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 PAT9125 (WPG Americas), the beanie and the M2 × 8 screws come from search-indexed listings, because those sites refuse automated fetches.
- Hardware: stocked M2 screws are pan heads, not ISO 7380 button heads. The spacer listing is 2 mm thick, not 1.5 mm.
- FPC lengths: these use the older routes until the shell report lists its links.
- 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
Mill-Max 0919-0-15-20-89-14-11-0 goes on every contact and on the hub's REF and BIAS contacts.
- Dimensions: 9.63 mm free and 6.63 mm at the 3.0 mm hard stop. Mill-Max recommends 0.76–2.54 mm of working travel.
- Force: 25 g at the initial height, 85 g at mid-stroke, 127 g at 2.54 mm.
- Shape: plunger Ø1.07 mm with a hemispherical tip, barrel Ø1.50 mm, base Ø1.83 mm.
- Pad: Ø2.2 on the boards. Mill-Max asks for at least Ø2.08.
- Packaging: bulk only, so JLC hand-places the pins at $0.017 each and reflows them.
- Supply: DigiKey ED10766-ND has 10,710 in stock.
1. JLCPCB
Order the parts JLC doesn't stock (9–20 business days)
- Global Sourcing. Go to Parts Manager → Order Parts → Global Sourcing Parts and search each MPN:
-
0919-0-15-20-89-14-11-0× 2,610 (https://www.digikey.com/en/products/result?keywords=0919-0-15-20-89-14-11-0) -DF40C-10DP-0.4V(51)× 128 (https://www.digikey.com/en/products/result?keywords=DF40C-10DP-0.4V(51)) - Pay within the hour. The parts then appear under My Parts. - Consignment. Order 136 PAT9125EL-TKMT from WPG Americas by phone (1-888-974-8881). - Have them shipped on cut tape to the Hong Kong address that JLC's Consign Parts form gives ("Outside Mainland China"). - Enter the tracking number, a unit price of $5.64 and the HS code, then pay the deposit.
The files
| order | upload | BOM | CPL |
|---|---|---|---|
| CB-01 (T15 T10 T09 T14 T16) | out/pcb/poly/panels/CB-01/CB-01-gerbers.zip |
out/pcb/poly/panels/CB-01/CB-01-bom-jlc.csv |
out/pcb/poly/panels/CB-01/CB-01-cpl-jlc.csv |
| CB-02 (T03 T11 T08 T05 T13) | out/pcb/poly/panels/CB-02/CB-02-gerbers.zip |
out/pcb/poly/panels/CB-02/CB-02-bom-jlc.csv |
out/pcb/poly/panels/CB-02/CB-02-cpl-jlc.csv |
| CB-03 (T06 T02 T12 T07 T04) | out/pcb/poly/panels/CB-03/CB-03-gerbers.zip |
out/pcb/poly/panels/CB-03/CB-03-bom-jlc.csv |
out/pcb/poly/panels/CB-03/CB-03-cpl-jlc.csv |
| CB-04 (F03 F02 T01 F01 F04) | out/pcb/poly/panels/CB-04/CB-04-gerbers.zip |
out/pcb/poly/panels/CB-04/CB-04-bom-jlc.csv |
out/pcb/poly/panels/CB-04/CB-04-cpl-jlc.csv |
| CB-05 (F06 F07 F05 F08 F09) | out/pcb/poly/panels/CB-05/CB-05-gerbers.zip |
out/pcb/poly/panels/CB-05/CB-05-bom-jlc.csv |
out/pcb/poly/panels/CB-05/CB-05-cpl-jlc.csv |
| CB-06 (F13 F18 F15 F10 F19) | out/pcb/poly/panels/CB-06/CB-06-gerbers.zip |
out/pcb/poly/panels/CB-06/CB-06-bom-jlc.csv |
out/pcb/poly/panels/CB-06/CB-06-cpl-jlc.csv |
| CB-07 (F14 F21 F16 F12 F11) | out/pcb/poly/panels/CB-07/CB-07-gerbers.zip |
out/pcb/poly/panels/CB-07/CB-07-bom-jlc.csv |
out/pcb/poly/panels/CB-07/CB-07-cpl-jlc.csv |
| CB-08 (F17 F22 F20 F23 F31) | out/pcb/poly/panels/CB-08/CB-08-gerbers.zip |
out/pcb/poly/panels/CB-08/CB-08-bom-jlc.csv |
out/pcb/poly/panels/CB-08/CB-08-cpl-jlc.csv |
| CB-09 (F24 F32 F25 F26 F28) | out/pcb/poly/panels/CB-09/CB-09-gerbers.zip |
out/pcb/poly/panels/CB-09/CB-09-bom-jlc.csv |
out/pcb/poly/panels/CB-09/CB-09-cpl-jlc.csv |
| CB-10 (F29 F30 F27) | out/pcb/poly/panels/CB-10/CB-10-gerbers.zip |
out/pcb/poly/panels/CB-10/CB-10-bom-jlc.csv |
out/pcb/poly/panels/CB-10/CB-10-cpl-jlc.csv |
| CTL-01 (T15K T10K T09K T14K T16K) | out/pcb/poly/panels/CTL-01/CTL-01-gerbers.zip |
out/pcb/poly/panels/CTL-01/CTL-01-bom-jlc.csv |
out/pcb/poly/panels/CTL-01/CTL-01-cpl-jlc.csv |
| CTL-02 (T03K T11K T08K T05K T13K) | out/pcb/poly/panels/CTL-02/CTL-02-gerbers.zip |
out/pcb/poly/panels/CTL-02/CTL-02-bom-jlc.csv |
out/pcb/poly/panels/CTL-02/CTL-02-cpl-jlc.csv |
| CTL-03 (T06K T02K T12K T07K T04K) | out/pcb/poly/panels/CTL-03/CTL-03-gerbers.zip |
out/pcb/poly/panels/CTL-03/CTL-03-bom-jlc.csv |
out/pcb/poly/panels/CTL-03/CTL-03-cpl-jlc.csv |
| CTL-04 (T01K) | out/pcb/poly/panels/CTL-04/CTL-04-gerbers.zip |
out/pcb/poly/panels/CTL-04/CTL-04-bom-jlc.csv |
out/pcb/poly/panels/CTL-04/CTL-04-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/poly/panels/ doesn't exist yet, build it first: PCB_OUT=out/pcb/poly uv run python -m exo.pcb.panel.
Each panel already has its rails, fiducials, tooling holes, mouse-bite tabs and per-board designators (T01_U1).
The order form (once per row of the table)
PCB options:
| option | CB-xx (contact panels) | CTL-xx (controller panels) | HUB | CAM |
|---|---|---|---|---|
| Layers | 6 | 6 | 4 | 6 |
| Dimensions | the panel size (table below) | the panel size | 80 × 56 | 16.45 × 18.7 |
| PCB qty | 5 | 5 | 5 | 5 (panels) |
| Different design | the panel's design count | the panel's design count | 1 | 1 |
| Delivery format | Panel by Customer | 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.0 mm | 1.6 mm | 1.0 mm |
| Surface finish | ENIG | ENIG | ENIG | ENIG |
| Outer / inner copper | 1 oz / 0.5 oz | 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) | Epoxy filled & capped | Tented | Epoxy filled & capped (the board has vias in pads, inpad_vias.json) |
| Impedance control | No | 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 | Remove mark |
| Electrical test | flying probe | flying probe | flying probe | flying probe |
PCB Assembly options:
| option | CB-xx | CTL-xx | HUB | CAM |
|---|---|---|---|---|
| PCBA type | Standard (0201 parts) | Standard | Standard | Standard (double-sided) |
| Assembly side | Both sides | Both sides (DF40 headers on top, everything else on the bottom) | Both sides | Both sides |
| PCBA qty | 2 | 2 | 2 | 2 (panels: 6 boards) |
| Tooling holes | Added by customer | Added by customer | Added by JLCPCB | Added by JLCPCB |
| Confirm Parts Placement | Yes ($0.45) | Yes | Yes | Yes |
| Others | unticked | 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. - Tick the My Parts entries for the Mill-Max pin, the DF40C-10DP and the consigned PAT9125.
- In the placement preview, check these: - pin 1 of every QFN (ADS131M08, RP2040, 74AHC138); - the SC70 op-amps and buffers; - DF40 polarity and the FPC connectors; - that every Mill-Max 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| CB-01 | 5 | 105.67 × 173.82 | 64.47 | 255.60 | 20.62 | 30.60 | 11,430 | 18.29 | 9.21 | 17.38 | 416.17 |
| CB-02 | 5 | 107.31 × 162.46 | 61.19 | 255.60 | 20.62 | 30.60 | 9,530 | 15.25 | 7.48 | 17.38 | 408.12 |
| CB-03 | 5 | 101.95 × 147.31 | 52.71 | 255.60 | 20.62 | 30.60 | 8,556 | 13.69 | 6.53 | 17.38 | 397.13 |
| CB-04 | 5 | 92.83 × 153.45 | 50.00 | 255.60 | 20.62 | 33.66 | 7,566 | 12.11 | 5.95 | 17.38 | 395.31 |
| CB-05 | 5 | 86.95 × 145.12 | 44.29 | 255.60 | 20.62 | 24.48 | 5,868 | 9.39 | 4.66 | 17.38 | 376.41 |
| CB-06 | 5 | 73.33 × 135.07 | 34.68 | 255.60 | 20.62 | 24.48 | 4,214 | 6.74 | 2.92 | 17.38 | 362.42 |
| CB-07 | 5 | 81.51 × 137.9 | 39.45 | 255.60 | 20.62 | 24.48 | 3,548 | 5.68 | 2.48 | 17.38 | 365.69 |
| CB-08 | 5 | 70.0 × 149.7 | 36.78 | 255.60 | 20.62 | 24.48 | 3,262 | 5.22 | 2.11 | 17.38 | 362.18 |
| CB-09 | 5 | 106.16 × 89.36 | 32.83 | 255.60 | 20.62 | 22.95 | 2,064 | 3.30 | 1.33 | 17.38 | 354.00 |
| CB-10 | 3 | 82.44 × 74.02 | 17.90 | 153.36 | 16.42 | 22.95 | 1,150 | 1.84 | 0.68 | 17.37 | 230.52 |
| CTL-01 | 5 | 105.67 × 173.82 | 64.47 | 255.60 | 20.62 | 22.95 | 2,008 | 3.21 | 0.00 | 17.38 | 384.23 |
| CTL-02 | 5 | 107.31 × 162.46 | 61.19 | 255.60 | 20.62 | 24.48 | 2,200 | 3.52 | 0.00 | 17.38 | 382.79 |
| CTL-03 | 5 | 101.95 × 147.31 | 52.71 | 255.60 | 20.62 | 24.48 | 2,356 | 3.77 | 0.00 | 17.38 | 374.56 |
| CTL-04 | 1 | 70.0 × 70.0 | 12.59 | 51.12 | 16.42 | 22.95 | 500 | 0.80 | 0.00 | 17.37 | 121.25 |
| HUB | 1 | 80.0 × 70.0 | 5.12 | 51.12 | 16.42 | 99.45 | 3,468 | 5.55 | 0.07 | 17.37 | 195.10 |
| CAM | 3 | 70.0 × 70.0 | 12.59 | 51.12 | 16.42 | 30.60 | 1,152 | 1.84 | 0.00 | 17.37 | 129.95 |
| Global Sourcing inspection | 40.00 | ||||||||||
| total | 642.97 | 3373.92 | 313.12 | 494.19 | 110.20 | 43.42 | 278.04 | 5295.83 |
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.
- 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 uses $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 |
|---|---|---|---|---|
| C2857702 | JS05B-12P-200-4-8: 12 Position FFC, FPC Cable 0.5mm 20cm | F22.J300-T04K.J301, T10K.J100-HUB.P07, CAM3.J2-HUB.C3, CAM4.J2-HUB.C4 | 5 | $0.59 |
| C2857703 | JS05B-12P-250-4-8: 12 Position FFC, FPC Cable 0.5mm 25cm | T14K.J100-HUB.P09, T09K.J100-HUB.P04, T15K.J100-HUB.P14 | 5 | $0.68 |
| C2857704 | JS05B-12P-300-4-8: 12 Position FFC, FPC Cable 0.5mm 30cm | T05K.J100-HUB.P03, CAM2.J2-HUB.C2, T03K.J100-HUB.P06 | 5 | $0.46 |
| C3002771 | JS05B-12P-130-3-5: 12 Position FFC, FPC Cable 0.5mm 13cm | F09.J300-T12K.J303 | 5 | $0.46 |
| C5151980 | JS05B-12P-100-3-4: 12 Position FFC, FPC Cable 0.5mm 10cm | F23.J300-T16K.J301, F24.J300-T10K.J301, F19.J300-T12K.J301, F12.J300-T11K.J302, F13.J300-T01K.J302, F25.J300-T | 14 | $1.39 |
| C5151984 | JS05B-16P-100-3-4: 16 Position FFC, FPC Cable 0.5mm 10cm | F03.J300-T04K.J304, F04.J300-T04K.J303, F02.J300-T03K.J302, F01.J300-T07K.J303 | 5 | $0.48 |
| C5371249 | JS05B-12P-080-4-8: 12 Position FFC, FPC Cable 0.5mm 8cm | F29.J300-T02K.J301, F26.J300-T06K.J301, F08.J300-T01K.J304, F32.J300-T05K.J301, F14.J300-T07K.J301, F07.J300-T | 9 | $0.84 |
| C5371250 | JS05B-12P-120-4-8: 12 Position FFC, FPC Cable 0.5mm 12cm | F18.J300-T01K.J301, F28.J300-T14K.J302, F05.J300-T04K.J302, F30.J300-T01K.J303, T11K.J100-HUB.P05 | 5 | $0.49 |
| 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 | 10 | $1.61 |
| 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: 92 x | 100 | $0.19 |
| 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 |
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).
- F01–F04 and their controllers use 16-way cables. The rest are 12-way.
- 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 |
| M2 x 8 socket head cap screw, stainless, 50-pack | Zoro M510500200008 | 50 | $2.99 |
| Nylon spacer 4 mm OD, 2.7 mm ID, 2 mm long, 50-pack | Pololu Pololu 1970 | 50 | $3.33 |
| Li-po 1S 3.7 V 2000 mAh, 54 A continuous, 70 x 45 x 9 mm; order with a JST-PH lead | MaxAmps (USA) Lipo-2000-1S-Pack-10 | 1 | $51.00 |
| Carhartt A18 knit cuffed beanie, 100 % acrylic rib knit | carhartt.com A18 | 1 | $19.99 |
| PETG 1.75 mm, 1 kg spool (the shell uses 428 g) | prusa3d.com Prusament PETG Jet Black 1 kg | 1 | $23.99 |
Things to know before you buy:
- Battery: Li-po 1S 3.7 V 2000 mAh, 54 A continuous, 70 x 45 x 9 mm; order with a JST-PH lead (MaxAmps (USA), Lipo-2000-1S-Pack-10). Price $51.00 from the listing as recorded 2026-10-28 (a live re-fetch was rate-limited). 54 A continuous against the hub's 3.33 A average / 3.79 A peak with all five cameras streaming; the shell's pocket is sized for it (72 x 47 x 10 mm inside). Choose the JST-PH 2.0 lead; the hub's 3-pin S3B-PH (BAT+, NTC, BAT-) takes it with a 10k resistor (or NTC) on the TS pin.
- Camera module: the price is converted from INR at the rate stored in
bom.json→fx. - Spacers: no stocked spacer is 1.5 mm thick with a 2.2 mm bore. Print the spacers in PETG, or change the DF40 stack height.
4. The shell print
- Print
out/stl/EXO-140.stl…EXO-144.stlin PETG on an Ender-3 V3 SE: 0.4 mm nozzle, 0.2 mm layers, 6 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.