Inspiration

I saw Perri Karyal, a Twitch streamer, playing games like Elden Ring and Armored Core completely hands-free — no controller at all, just an EEG headset reading her brainwaves and custom software translating trained mental patterns into game commands. It was one of the coolest things I'd seen, but her headset cost $2,000. So I attempted to build something at a fraction of the price ~$80

What it does

3 electrodes stream raw EEG through an Arduino Uno R4 Minima to a Python pipeline that computes rolling alpha-band (8-13Hz) power in real time. When that power crosses a threshold — which happens reliably when you close your eyes and relax — it fires a discrete >>> ACTION event. That event is rendered live on an animated 3D brain model built on MNE-Python's fsaverage template, which snaps from a calm purple baseline to a lit-up red indicator the instant the threshold trips — visible side-by-side with the live detection log and the actual electrode on my forehead.

How I built it

Hardware: Upside Down Labs BioAmp EXG Pill + Arduino Uno R4 Minima, with gel electrodes in the standard 3-lead montage (signal on the forehead, reference behind the ear, ground on the forehead).

Firmware: A Chords-protocol Arduino sketch (firmware/arduino_r6_neuralink/) streaming 6-channel packets at 230400 baud with 14-bit ADC resolution, driven by a hardware timer interrupt and a simple WHORU/START/STOP serial handshake.

Software: A Python pipeline (software/chords_protocol.py) parses the raw binary packet stream, runs an FFT over a rolling window to extract alpha-band power, and applies threshold detection with hysteresis to turn a noisy continuous signal into a clean discrete event. That event drives a live 3D visualization (software/brain_model_live_chords.py) built with MNE-Python and PyVista/VTK, updated in real time as the signal streams in.

Challenges we ran into

Almost every layer of this stack fought back at some point. The 3D brain renderer doesn't expose a simple "update the data" API — the naive approach of tearing down and rebuilding the visualization every frame was 6x too slow to feel live, and even after fixing that, the render window silently refused to repaint on its own because Qt only flushes drawing when its event loop is pumped and VTK needs an explicit render call, not just a scheduled one. On the hardware side, I lost time to the Arduino IDE's own serial monitor silently holding the port open, macOS reassigning the serial device path between reboots, and figuring out which of the three electrode leads was actually carrying signal versus just completing the amplifier's reference circuit.

Accomplishments that we're proud of

Getting a genuinely live closed loop — real brainwave in, real-time FFT analysis, discrete threshold event out, visible feedback on screen and having it actually captured on camera: the electrode on my forehead, the detection log firing >>> ACTION, and the brain model turning red, all at once. I'm also proud of keeping the demo scientifically honest: with one electrode, there's no way to actually localize activity to a specific brain region, so the visualization is clearly framed as an illustrative indicator of signal strength, not a diagnostic map, rather than overselling what a single-channel rig can do.

What we learned

Real-time signal processing on a noisy, single-channel biosignal is a different problem than clean textbook EEG — movement and muscle artifacts are broadband and can look deceptively like real brain activity to a naive power threshold. I also learned a lot about the unglamorous plumbing of real-time GUIs (why a render call and a scheduled repaint are two different things) and about game-input platforms — Rainbow Six Siege's 2026 native mouse-and-keyboard support on console turned out to be the key that unlocks the whole next phase, since it sidesteps the PS5 controller-authentication problem entirely.

What's next for Controller4Siege

What's next for Controller4Siege The next real milestone is turning the detected event into an actual game input, without needing a Cronus Zen or a Windows PC at all: Siege now accepts a real USB mouse/keyboard plugged directly into a PS5, and the Arduino Uno R4 Minima can natively act as a USB HID keyboard/mouse. So the plan is to move detection onto the Arduino itself and have it fire a real click straight into the console. Beyond that: moving past single-electrode threshold detection toward a proper multi-channel setup, pairing EEG with webcam-based gaze tracking for richer control, and building a more robust artifact-rejection stage so the trigger stays reliable outside a controlled sit-still test. When I connect it to siege I will also post a video of how I made it and connected it into siege

Built With

Share this project:

Updates

Submission history