EEG EMG EOG development board for Fluid Interface

Fluid BCI


The Board

It is a 3-months project in Fluid Interface Research Group in MIT Media Lab. Guillermo a PhD student in Fluid Interface and I developed the development board to collect EEG, EMG, ECG and EOG signal for the research group.

The development board use ADS1299 as ADC. One board can collect eight channels bioelectricity signal at 16k sample per second with 24 bit resolution. Several boards can be connected together so more than eight channels is also supported.

I write the Linux kernel Module and Arduino driver for the board making the board compatible both with Linux machine and Arduino. I also designed part of the schematic of the circuit.

Signal Quality


Single motor units can be seen in the system.



Interfaces and Right Leg Drive

Circuit Design

Right Leg Drive

I designed the Driven Right Leg circuit on the board to get ride of common-mode noise.

A Driven Right Leg Circuit or DRL circuit is an electric circuit that is often added to biological signal amplifiers to reduce Common-mode interference. Biological signal amplifiers such as ECG (Electrocardiogram) EEG (Electroencephalogram) or EMG circuits measure very small electrical signals emitted by the body, often as small as several micro-volts (millionths of a volt). Unfortunately, the patient's body can also act as an antenna which picks up electromagnetic interference, especially 50/60 Hz noise from electrical power lines. This interference can obscure the biological signals, making them very hard to measure. Right Leg Driver circuitry is used to eliminate interference noise by actively cancelling the interference.(from WIKIPEDIA)

Shown in the image above, the mechanism bechind Driven Right Leg Circuit is similar to how an active noise cancelling headphone works. The circuit collect all common-mode noise, then invert the signal, push it back to human body. As result, the noise is canceled.


The development board is compatibility with various of setups.

MCU Options
  • Raspberry Pi Family
  • Beaglebone Family
  • Arduino Feather Family
  • Any machine running Linux with SPI port
Electrode Options
  • Wet electrodes
  • Active dry eletrodes
  • PhysioHMD

It also has I2C port which can connect IMU, temperature sensor and so on. The ADS1299 also can be replaced by ADS129X and ADS119X family.

Arduino and Linux Kernel Module

Software Design


There are three modules in the Arduino code as shown in the following image. The three modules are ADS1299 Configuration module, ADS1299 Data Receiver module, Wifi Transmitter module and a Ring Buffer.

When the board start, the ADS1299 Configuration module writes to the registors in the ADS1299 chip through SPI port to configure the sample rate, data resolution and multiplexers.

The ADS1299 Data Receiver module response to the interrupt generated by the ADS1299 Data Ready(DRDY) pin. When interrupt happens, this module will read data from ADS1299 through SPI port and wirte the data to the Ring Buffer.

The Wifi Transmitter read data from the Ring Buffer and tramsmit the data to the receiver.

The Ring Buffer plays a very important role since the wireless communication can't be always stable. Without the Ring Buffer memory overflow may happen.

You can download the Ardunio code by clicking the link below.
Arduino Project Download

Linux Kernel

The Linux Kernel Module(LKM) is similar to the LKM in the AI Prosthetic Hand project. You can find detailed information about the LKM there.

More and More

Projects Using the Board