Skip to the content
PCBKitNew board
2 layers107 × 137 mmWalkeeg v3.0, the printed circuit board in 3D

Walkeeg v3.0

WalkEEG/WalkEEG4

Reload now

Size
107 × 137 mm
Copper layers
2
Thickness
1.6 mm
Parts
106
Nets
85
Pads
313
Tracks, vias
520, 69
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
20 Oct 2016
Updated
5 Nov 2026

Overview

Walkeeg v3.0 is an open-source printed circuit board by WalkEEG, from the WalkEEG/WalkEEG repository on GitHub. It is a 2-layer board of 107 × 137 mm with 106 parts on 85 nets, routed with 520 tracks and 69 vias.

It is built around the CH340C, W25Q80DVSSIG and AMS1117-3.3, with the PRTR5V0U2X among its other parts. Its parts include 14 capacitors, 14 connectors, 12 resistors, 5 ICs and 2 diodes.

Main components

4

README

README.md

WalkEEG

An open-source wearable biosignal platform for EEG, ECG and EMG.

Schematics, firmware, mobile app, cloud backend — and a 500 Hz live browser dashboard. Built for BCI research, education, and anyone curious about the electrical activity inside their body.

License: MIT Website Firmware: Zephyr App: Flutter


What is this?

WalkEEG captures electrophysiological signals from the body, streams them wirelessly, and makes them visible in real time — on a phone, in a browser, or in a desktop oscilloscope.

SignalSourceAmplitudeBandwidth
EEG — ElectroencephalographyCortical neurons firing together10 – 100 µV0.5 – 100 Hz
ECG — ElectrocardiographyThe electrical sequence pacing each heartbeat0.5 – 5 mV0.05 – 150 Hz
EMG — ElectromyographyMotor units contracting a muscle10 – 1000 µV20 – 500 Hz

These span four orders of magnitude in amplitude. A front end that handles all three rates its noise against the weakest (EEG) while keeping enough headroom for the strongest (EMG) — which is what an 80–120 dB CMRR analog front end delivers.


What's in the box

text
walkeeg/
├── 01-hardware/     KiCad schematics — analog front end, power, connectors
├── 02-firmware/     nRF52840 firmware (Zephyr / Nordic Connect SDK)
├── 03-PC program/   Desktop oscilloscope (LabVIEW, EN + Chinese)
├── 04-MATLAB program/ Analysis scripts (legacy, optional)
├── 05-Flutter program/ iOS + Android app
├── 06-website/      www.walkeeg.com (static, S3 + CloudFront)
├── 07-backend/      AWS SAM — one deployment example, not the platform
├── 08-realtime/     500 Hz WebSocket relay + live browser dashboard
├── algorithms/      Platform-neutral signal statistics (stdlib Python)
└── docs/            Design notes and interface specs
     └── algorithms/ Algorithm contracts + conformance tests
ComponentStackStatus
HardwareKiCad 10 · AD8232 + ADS1293v3.0
FirmwarenRF52840 · Zephyr · BLE 5.0 (2M PHY, DLE, MTU 498)working
Mobile appFlutter 3.16+ · Dart 3.3+iOS + Android
PC softwareLabVIEWreleased
BackendAWS SAM · Node 20deployed
Live dashboardNode · WebSocket · vanilla JSworking

Quick start

Firmware

The firmware targets the nRF52840 and builds with Nordic Connect SDK. A complete, verified toolchain lives at /opt/nordic/ncs/v2.5.99-dev1 on macOS — but any recent NCS works.

bash
# 1. Source the NCS environment (adjust paths to your install)
export ZEPHYR_BASE=/path/to/ncs/zephyr
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=/path/to/ncs/toolchains/*/opt/zephyr-sdk

# 2. Build from inside the NCS west workspace — not from the app dir
west build -b nrf52840dk/nrf52840 -d /tmp/build-walkeeg 02-firmware

# 3. Flash (Nordic boards)
nrfutil device recover   --serial-number <SN>
nrfutil device program   --serial-number <SN> --firmware /tmp/build-walkeeg/zephyr/zephyr.hex
nrfutil device reset     --serial-number <SN>

Building with J-Link instead? Older J-Link firmware (e.g. V9) can fail to program the nRF52840 — erase succeeds, writes silently don't stick. Use nrfutil instead.

Startup diagnostics. The firmware blinks the run LED N times to report how far it got:

BlinksMeaning
1bt_enable() OK
2NUS service initialised
3Analog front end initialised
4BLE advertising started
8bt_le_adv_start() failed

Mobile app

bash
cd "05-Flutter program"
cp lib/config/app_config.example.dart lib/config/app_config.dart  # then fill in your AWS values
flutter pub get
flutter run

Requires Bluetooth permissions. On iOS, add NSBluetoothAlwaysUsageDescription to Info.plist.

Live dashboard

bash
cd 08-realtime
npm install
node server.js          # http://0.0.0.0:8787
node simulate.js        # optional: synthetic 500 Hz source

Open http://<your-lan-ip>:8787. The phone relays frames over WebSocket to /ingest; browsers subscribe at /live.


How it works

text
    AD8232                  nRF52840                 Phone / PC
 ┌──────────┐   analog   ┌────────────┐    BLE    ┌────────────┐
 │ Electrodes│ ────────▶ │  SAADC     │ ────────▶ │  Flutter   │
 │  + AFE    │  10-1000µV│  + NUS GATT│  2 Mbps   │  app       │
 └──────────┘            └────────────┘           └─────┬──────┘
                                                        │ WebSocket
                                                        ▼
                                              ┌──────────────────┐
                                              │ 08-realtime      │
                                              │ browser dashboard│
                                              └──────────────────┘
  1. Acquire — electrodes pick up microvolt-level potentials; the AFE amplifies and filters them.
  2. Transmit — the nRF52840 digitises at 500 Hz – 4 kHz and streams over BLE 5.0 using Nordic UART Service, with 2M PHY, data-length extension (251-byte payloads) and a 498-byte MTU.
  3. Visualise — the Flutter app renders live waveforms with QRS detection and HRV metrics.
  4. Store — sessions upload to S3 via Cognito-authenticated direct PUT; metadata lands in DynamoDB.
  5. Share — the app can relay raw frames to a local WebSocket server, so any browser on the network sees the same signal live.

BLE packet format

text
magic 'W' (0x57) | version (1) | seq (u16 LE) | t_ms (u64 LE) | n (u8) | ch[8][n] (u16 LE)
└──────────────────────────── 13-byte header ─────────────────────────────┘

8 channels, 500 Hz, n = 50 samples per batch → ~10 frames per second.


Repository map

PathWhat you'll find
01-hardware/KiCad 10 project, AD8232 / ADS1293 front ends, connector pinouts
02-firmware/Zephyr application, board overlays, Kconfig switches
05-Flutter program/Cross-platform app, BLE link, relay service
06-website/Static site source, deployed to S3 + CloudFront
07-backend/AWS SAM deployment example (optional if you're not on AWS)
08-realtime/WebSocket relay and browser charting
algorithms/Reusable signal statistics — stdlib Python, no cloud SDK
docs/Interface specs, migration notes, hardware revisions
docs/algorithms/Platform-neutral signal processing contracts

Contributing

Issues and pull requests are welcome. Before opening a PR:

  1. Keep the firmware buildable against current NCS — note the NCS version you tested with.
  2. For hardware changes, attach the updated schematic PDF alongside the KiCad files.
  3. For protocol changes, update docs/ in the same commit.

Where does algorithm code belong?

Signal processing is specified once in docs/algorithms/ and implemented once in algorithms/. That pair is the only place the math should exist.

  • Real-time algorithms run next to the data (app DSP, relay) — latency forbids a network round trip. They reimplement the contract for performance, and must match it.
  • Offline / batch algorithms belong in algorithms/. 07-backend/ is just one way to run them, on one cloud. Swap it for cron, a Kubernetes job, or a laptop script without touching the math.
  • Every implementation must satisfy docs/algorithms/conformance.md against the same fixtures.

Run the contract tests at any time:

bash
python3 algorithms/python/conformance_test.py

See CONTRIBUTING.md for details (coming soon).


License

MIT — see LICENSE.

Copyright (c) 2026 the WalkEEG team · www.walkeeg.com

Parts

106
QtyValueFootprintReferences
52TestPointConnector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_VerticalTP1, TP2, TP10, TP11, TP12, TP13, TP14, TP15, TP16, TP17, TP18, TP19, TP20, TP21, TP22, TP23 +36
9100nFCapacitor_SMD:C_0603_1608MetricC1, C2, C4, C5, C6, C8, C10, C12, C13
810kResistor_SMD:R_0603_1608MetricR1, R2, R3, R4, R5, R11, R12, R13
8AD8232_connectorConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ3, J4, J5, J6, J7, J8, J9, J10
410uFCapacitor_SMD:C_0805_2012MetricC3, C7, C9, C11
3120R 0.55AInductor_SMD:L_0603_1608MetricFB1, FB2, FB3
21kResistor_SMD:R_0603_1608MetricR9, R10
2220RResistor_SMD:R_0603_1608MetricR7, R8
2Con_2_coreConnector_PinHeader_2.54mm:PinHeader_2x13_P2.54mm_VerticalJ1, J2
2LEDLED_SMD:LED_0805_2012MetricLED1, LED2
110nFCapacitor_SMD:C_0603_1608MetricC14
1ADS1293Connector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_VerticalJ11
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U8
1CH340CPackage_SO:SOIC-16_3.9x9.9mm_P1.27mmU7
1Conn_02x05_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_VerticalJ15
1H1MountingHole_3.2mm_M3H1
1H2MountingHole_3.2mm_M3H2
1H3MountingHole_3.2mm_M3H3
1Micro_SD_CardConnector_Card:microSD_HC_Hirose_DM3AT-SF-PEJM5U6
1PRTR5V0U2XPackage_TO_SOT_SMD:SOT-143U9
1SW_PushButton_Switch_SMD:SW_Push_1P1T_NO_CK_KMR2SW1
1USB_B_MicroConnector_USB:USB_Micro-B_Molex-105017-0001J13
1USB_B_Micro_UARTConnector_USB:USB_Micro-B_Molex-105017-0001J12
1W25Q80DVSSIGPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU5

Questions

How big is the Walkeeg v3.0 PCB?

It measures 107 × 137 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Walkeeg v3.0 use?

106 parts, built around the CH340C, W25Q80DVSSIG, AMS1117-3.3 and PRTR5V0U2X. 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.

Where can I download the Walkeeg v3.0 KiCad files?

From the WalkEEG/WalkEEG repository on GitHub, at the commit this page was made from: the board is 01-hardware/walkeeg_v3.0/walkeeg_v3.0.kicad_pcb and its schematic 01-hardware/walkeeg_v3.0/walkeeg_v3.0.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Walkeeg v3.0 design in my own project?

Its repository states no licence, so its author keeps all rights: ask WalkEEG before reusing the design.

Similar boards

  • 4 layers95 × 95 mmTelemetryOnboard, the printed circuit board in 3D

    TelemetryOnboard

    Spaceflight-Rocketry-Giessen-e-V/Telemetry

    Open-Source Rocket Telemetry System Based On Radiocrafts RC232 Radio Modules

    143 parts27CERN-OHL-S-2.0
  • 4 layers104.5 × 91 mmMbed ce ci shield v2, the printed circuit board in 3D

    Mbed ce ci shield v2

    mbed-ce/mbed-ce-ci-shield-v2

    New version of the Mbed OS CE CI Shield -- a shield containing a logic analyzer and components to test features like I2C, SPI, and PWM.

    176 parts7CERN-OHL-P-2.0
  • 2 layers63 × 39 mmEsdp, the printed circuit board in 3D

    Esdp

    Ashley-Ann-Benoy/Digital-Stethoscope

    A digital stethoscope that amplifies, filters, and digitally processes heart sounds for enhanced diagnostics and remote monitoring.

    33 parts1
  • 2 layers72 × 59 mmMuon, the printed circuit board in 3D

    Muon

    Dekanova/muon-kbd

    Simple OSU! keypad

    61 parts1
  • 4 layers93.5 × 72.5 mm000018 PGKB, the printed circuit board in 3D

    000018 PGKB

    kalliod/PGKB

    Programmable keyboard

    157 partsGPL-3.0
  • 4 layers84 × 40 mmCpu, the printed circuit board in 3D

    Cpu

    MichaelBell/RV4028

    RV4028 - A hackable Risc-V computer

    40 parts9BSD-3-Clause
  • 2 layers68.6 × 53.3 mmFTUno, the printed circuit board in 3D

    FTUno

    HackableElectronics/FTUno

    Arduino Uno R3 compatible development board

    60 partsGPL-3.0