These are non-contact electrodes – meaning they don’t need galvanic skin contact to receive signal, capacitive coupling is used instead. Sensor has isolated copper area on one side, which when placed close to the skin creates a small capacitor receiving any AC signals from the body. Signal transfer is the better the closer copper is to the skin, but still good enough at distance of 1mm, so sensor can work quite well through thin fabric or through hair – that actually was our primary goal: now for measuring brain activity you can just put it there, without applying conductive gel or using wet contact pads.
In order to achieve this, we used very sensitive LMP7702 opamps placed right over each sensor’s plate. Opamp’s input is on the same PCB in less than 2mm from the plate, so not much external noise can get in there. Signal is buffered and 10x amplified right at the sensing point, and then transferred to the measuring module.
On the measuring module each signal is amplified again using TSZ124 opamp, but this time it has software-adjustable amplification coefficient: we put there MCP4442 programmable resistors – so amplification coefficient can be changed from 1x to 90x from PC or other measuring hardware.
Then signal is measured using MCP3912 ADC. This chip has ~2V input range and 24-bit output, but only 16 bits carry useful signal – all other bits are filled with random noise. Still, 16-bit measurements is good enough, since there is adjustable pre-amplification section.
MCP3912 implements differential inputs – and we tried to make most out of it.
Each module has 4 channels: central pad and three surrounding electrodes. Measurements of surrounding electrodes are done in differential mode: difference of potential between central and each of peripheral ones is measured. Potential of the central electrode is measured relative to virtual ground. This allows to greatly reduce electrical noises for three peripherals (noise adds practically the same distortion to the central pad as it does to each peripheral one, so they cancel each out in differential mode), while also keeping track of their absolute potential by knowing absolute potential of the central pad. Although with this approach, measurement of the signal on the central pad is significantly more susceptible to noise.
On the image there is chart of heart signal measured by 3 differential channels. Signal to noise ratio is about 100:1 even without active ground attached.
We used MCP3912 as ADC unit, which in our configuration gives 16 bits of noise-free resolution (it measures signal with 24 bits precision, but noise-free resolution is 16.5 bits or less, depending on configuration), each input is double-buffered and 10x preamplified by LMP7702 opamps, and then amplified with TSZ124 opamps with the use of programmable resistors MCP4442 – so amplification coefficient can be changed during operation.
Another important feature is modular approach: there are electrodes which collect and preamplify signal, measuring module that measures it and sends over radio link, and central hub that collects data from different modules, generates active ground signal and transmits collected data via another nrf24 channel and via bluetooth.
The minimal working set consists of 3 peripheral electrodes, one central electrode, and measuring module, and provides 4 channel of data.
Radio link bandwidth allows using up to 12 such sets, providing 48 measurement channels.
All data is broadcast via nrf24 chip – so multiple independent devices can receive the same data from sensors simultaneously, reacting on them independently (number of listening RF modules is unlimited – so you can create multiple devices reacting on different signals using one Arduino and nrf24 module for each one, and they will work all at once, and you also can record/monitor raw data on PC in parallel).