From asi
Guides building OpenNIRScap 24-channel fNIRS brain cap: Altium PCB to KiCad/Gerber conversion, DigiKey BOM sourcing, PCB fab, assembly, STM32 firmware flash.
npx claudepluginhub plurigrid/asi --plugin asiThis skill uses the workspace's default tool permissions.
Open-source 24-channel fNIRS wearable brain cap. Kim et al. 2025, University of Toronto.
Provides parametric OpenSCAD models for BCI hardware including electrode holders, paste adapters, headset hooks, pogo combs, fNIRS housings, and eurorack frames. Use for designing, modifying, or 3D-printing neuromodulation components.
Orchestrates BOM management for KiCad electronics projects: analyzes schematics, searches distributors (DigiKey, Mouser, LCSC, element14), updates symbol properties, exports CSVs and order files.
Share bugs, ideas, or general feedback.
Open-source 24-channel fNIRS wearable brain cap. Kim et al. 2025, University of Toronto.
Repo has Altium .PcbDoc source files, no exported gerbers or CSV BOMs.
| Project | File | Description |
|---|---|---|
| fNIRS_sensor_module | SensorModulePCB.PcbDoc | 25mm circular, combined emitter+detector |
| fNIRS_ECU | fNIRS_PCB.PcbDoc | 112x112mm main control board |
| DetectorOptode | DetectorOptode.PcbDoc | Detector-only variant |
| SourceOptode | SourceOptode.PcbDoc | Source-only variant |
| STLINK_Breakout | STLINK_Breakout.PcbDoc | Programming adapter |
perl convertpcb.pl file.PcbDoc. Repo: thesourcerer8/altium2kicad. Needs unpack.pl first.altium-cli (Rust, akiselev) — broken workspace deps, won't buildpyaltium — crashes on Python 3.14 (missing dateutil dep)altium2kicad unpack.pl worked but convertpcb.pl couldn't find unpacked filesInstall KiCad 8 (brew install --cask kicad or nix shell nixpkgs#kicad), import PcbDoc, export gerbers + BOM + CPL from KiCad.
| Part | MPN | Qty | DigiKey URL |
|---|---|---|---|
| Photodiode | VBPW34S | 24 | https://www.digikey.com/en/products/detail/vishay-semiconductor-opto-division/VBPW34S/4073399 |
| Quad op-amp | AD8618ARUZ | 12 | https://www.digikey.com/en/products/detail/analog-devices-inc/AD8618ARUZ/1993937 |
| Dual LED 660/940nm | VSMD66694 | 8 | https://www.digikey.com/en/products/detail/vishay-semiconductor-opto-division/VSMD66694/7681025 |
| N-ch MOSFET | BSD840NH6327XTSA1 | 16 | https://www.digikey.com/en/products/detail/infineon-technologies/BSD840NH6327XTSA1/5409567 |
| MCU | STM32L476RET6 | 1 | https://www.digikey.com/en/products/detail/stmicroelectronics/STM32L476RET6/5177041 |
| Analog MUX | TMUX1104DBVR | 8 | https://www.digikey.com/en/products/detail/texas-instruments/TMUX1104DBVR/9685876 |
| PWM/IO | PCA9685PW,118 | 3 | https://www.digikey.com/en/products/detail/nxp-usa-inc/PCA9685PW-118/2034325 |
| USB isolator | ADUM4160BRWZ | 1 | https://www.digikey.com/en/products/detail/analog-devices-inc/ADUM4160BRWZ/1861340 |
Core known values (exact values need Altium schematic export):
| Category | Cost |
|---|---|
| Semiconductors | ~$130 |
| Passives | ~$15 |
| PCBs | ~$13 |
| Amazon | ~$150 |
| Total | ~$310-420 |
Located in firmware/STM32/fNIRS/. STM32CubeIDE project.
Located in software/. Python 3.
forester — bci.horse forest publishing (bcf-0036 is this device's tree)reverse-engineering — MCP servers for Ghidra/radare2/IDA if binary analysis neededbinary-triage — systematic binary survey workflowperforming-firmware-extraction-with-binwalk — firmware extraction from embedded devicesprotocol-reverse-engineering — reverse engineering communication protocolsradare2-hatchery — radare2 ecosystem toolsaltium2kicad (Perl, 933 stars): https://github.com/thesourcerer8/altium2kicadaltium-cli (Rust, broken): https://github.com/akiselev/altium-cliResearch-grade fNIRS (NIRx NIRSport 2) costs $50k-150k. PLUX biosignalsplux fNIRS sensor is $789 for 1 channel with short source-detector separation — measures superficial scalp hemodynamics, not cortical activity.
Light follows a banana-shaped path through tissue. Separation controls measurement depth:
50mm: too much attenuation
Per Strangman et al. (PLOS ONE 2013): every 10mm increase up to ~45mm adds ~4% gray matter sensitivity. Depth sensitivity decays as S = 0.75 * 0.85^depth.
PLUX has emitter+detector in one housing = short path = scalp oximetry. NIRSport 2 uses separate optodes at 30mm = cortical imaging = $50k+. OpenNIRScap uses separate optodes at 35mm = cortical imaging = $419.
Build 3x OpenNIRScap ($1,257) as the walk-up fNIRS fleet. If/when a commercial reference is acquired (Artinis Brite Lite ~$6k or Cortivision Spectrum C23), use it to validate OpenNIRScap signal quality. The AFE4404 in the earlier DIY spec (bcf-0012) uses the same modified Beer-Lambert deconvolution as NIRx's proprietary pipeline — the physics is identical, only the engineering precision differs.