Tag Archives: OpenBCI

Hacks and Mods on OpenBCI hardware or software. OpenBCI is a project that is supposed to bring biosensing (EEG, ECG, EMG…) to the masses. Its hardware and software is open source.

OpenBCI with Plessey EPIC Electrodes

Conventional electrodes on EMG/EEG/ECG systems require low contact impedance and therefore often skin preparation is needed. Disposable electrodes can become expensive over time and to improve conductivity, with many electrodes gel has to be used, which is annoying. Capacitive electrodes have the advantage of being reusable and due to their etremely low contact impedance they can make biopotential measurements unobtrusive by incorporating them into seats or measuring through clothing.

After coming across commercial capacitive electrodes I was curious how they perform and made a carrier board for the QFN electrodes. The devices require bipolar power supplies from +- 2.4 to 5V so they are compatible with the OpenBCI V3 boards which have +-2.5V. The PS25255 is the type I finally purchased because it is low power and low gain.

The things look very interesting. The actual contact surface has a mirror finish and looks like silicon. Strangely there is a gap between the electrode contact area and the rest of the package. I think this might cause problems because the electrode is designed to be in direct contact with skin and dirt might accumulate inside this gap.
The 4 contacts (VCC, VSS, GND and SIGNAL) are on the bottom side of the QFN package and therefore my approach of mounting them to the PCB is by having plated holes in the pads and soldering from the bottom side. Use sufficient amounts of flux and the solder reflows down to the contacts and you have a perfect connection.

As a connector a 4-pin JST-style connector with 1.25mm pin pitch was used. I mounted it in a right angle to make the sensor flat. Crimping the female connectors using a PA-09 crimping tool was a challenge because they are so tiny.
Finally, I assembled an adapter board to break out the + and – 2.5V of the OpenBCI ‘Cyton’ board (AGND is already broken out on the right angle header) and tried to acquire some ECG. The signal outputs of both electrodes were connected to channel 1 an its gain was lowered to 2x (the PS25255 electrode itself already has a gain of 10). Also the channel has to be disconnected from SRB1 in the channel settings to make it ‘bipolar’.

If placing the electrodes directly on the skin you get quite good results without any skin preparation. I was also easily able to acquire EEG by placing one eclectrode on the forehead and the other one on the neck. Hair distorts the signal too much.

After putting both electrodes into plastic bags I was still able to acquire an ECG signal, but the signal was very sensitive to movement. Attempts to measure through a t-shirt were only successful if strong pressure was applied.
In all my experiments I did not use a drien right leg circuit or the bias output of the OpenBCI. Instead, only the software notch filter was enabled.

As a conclusion, I’d say that this was an interesting experiment, but 20$ per electrode seems a bit much for my hobby grade experiments. The Plessey EPIC electrodes seem to be usable for ECG, but their inability to penetrate hair for multichannel EEG is a little disappointing. It’s hard to tell how long the will last due to their peculiar packeage design. I will try some active electrode designs from the OpenEEG project with the OpenBCI soon, since they are easy to make, cheap and you can attach a comb electrode to it to be able to acquire EEG through hair hopefully more reliably than with passive electrodes.

Homebrew OpenBCI V3 and Ultracortex

I’ve been intrigued by the ADS1299 chip by TI for a long time and after I came across the OpenBCI project and felt that my SMT skills were good enough, I finally decided to give the DIY approach a trial. The documentation is very good and almost complete and everything is open source, so get ready for an exciting blog post.
First off I downloaded Design Spark, which is the PCB editor the OpenBCI designs were made with. I used it to generate gerber files for getting the boards and solder paste stencils manufactured by OSH Park. By now they even have a function for importing Design Spark files.
Anyway, here are the Gerber files for the OpenBCI V3 8bit board. You should be able to place OSH orders using these:
OpenBCI 8bit OSH Park
For OSH Stencils:
OpenBCI 8bit OSH Stencils working
32bit Gerbers:
OpenBCI 32bit
32bit board stencil Gerbers:
OpenBCI 32bit Stencil
Daisy Board Gerbers (the 8bit board stencil partially fits the Daisy board, therefore I didn’t generate stencil Gerbers for that):

Note that there’s a bug on the Daisy PCB, which is described here.
luckily I knew about that issue and fixed it during the “pick and place” process prior to soldering.

I would recommend building the 32bit version right away since it is more capable (writes to SD, can be upgraded to 16 channels, fewer power rails, runs from one lithium cell, no need for 5V+, better microcontroller and last but not least: easier to build since it has fewer parts!).

Most parts were sourced from Digikey and Mouser. The SD card holder I found somewhere on ebay.
Also, I found picking and placing of tiny 0402 parts worked best with my DIY SMD vacuum tool and a thin needle. Especially where the components are densely packed (below the ADS1299) this method was very helpful. Before you begin, make sure to print out the OpenBCI_32bit_BOM and stick the component tapes with gluestick or sticky tape right next to the part indices. That way no parts get lost and you know exactly where each one belongs.



I had better results adding a drop a thin flux from a flux pen into the solder paste and mixing it. That way the solder paste is a bit smoother and reflows better. Remember: you can never use too much flux!




The top side goes into the DIY reflow oven


The bottom side is soldered with a hot air tool, being careful not to overheat the PCB.


I’ve soldered 1.27mm header pins to the RFduino and female headers to the PCB because the wireless link is the bottleneck of the system. The headers allow to connect a different wireless module such as BT 2.1 or a USB-serial converter, which could be useful when planning to increase the sampling rate or using the system with Android devices.


Using the PICKIT 3 programmer and MPLAB IPE (you can install ithe IPE without installing the IDE) to flash the Chipkit bootloader (can be found in the OpenBCI Github repository).


The current draw of the 32bit board is about 60 mA


My own dongle design:



Time to print the headware (“Ultracortex Nova/Supernova”)

The print was done on an Ultimaker 2 clone with the recommended slicer settings and turned out ok. It took about 12 hours and I experienced some problems while printing the first half. Some parts snapped off because the print head collided with plastic that was bending up during cooldown. This happened only during a few layers of the print (approx after one third) because the structure was not stable enough at that stage. I could repair the broken parts by filling the defects with hot glue.  When printing the second half I had an eye on the process and coud prevent that from happening.


Used old PC tower cables to do the wiring. They were done in twisted pairs. All left electrodes are white and all right electrodes are colour-coded. That way you don’t need that many colors and nevertheless finding the corresponding electrode is easy.


There are spring sets sold on the usual trading platform that contain the necessary springs to build the electrode inserts. The one below contains the “weak” as well as the “strong” spring for the “dummy inserts”. The weak spring had to be pulled apart a few mm to fit better.




As you can see, I soldered the header of the Daisy board on the bottom side which takes up less space.


OpenBCI parts <–this zip file contains my snap-on lid design that also covers the Daisy board as well as the earclip electrode design. Both parts can be found on Thingiverse as well:




An 18650 holder with TP4056-based protection and charging circuit was placed on top to have a reliable power supply.



What you’re not being told: you have to print the “QUADSTAR” parts of the Ultracortex Nova/Supernova in PLA SOFT or any other elastomer filament. I had to modify my Prusa i3 extruder to prevent the soft 1.75 mm filament from kinking before entering into the bowden tube. This part fixes the issue: http://www.thingiverse.com/thing:1652091

Also I found that I had to turn off retractions because as soon as the filament passes the extruder drivewheel, it gets compressed and shoud not undergo this process twice because then it gets too damaged to be pushed into the bowden tube and extrusion simply stops at that point. Pain.


Finished Iron Maiden, err…. I mean Ultracortex, wired for the 16 channel standard configuration according to the Processing GUI with as many “comfy inserts” as possible.




One thing I noticed after using the Disposable / Reusable Dry EEG Electrode [TDE-200] was instant corrosion. Not that surprising given that two different metals (stainless steel M2 bolt and Ag/AgCl surface) come in contact. As you can see on the picture below on the left electrode the AgCl layer corroded away to that extent after only one day. As a comparison there’s a fresh electrode on the right. The only solution I see at the moment is to attach the electrodes only if they are needed.


A slight modification was done to be able to add/remove electrodes more quickly: the electrode cables were soldered directly to the M2 nuts and superglued to the back of the electrode holder, so the nut stays attached to the plastic part even if there is no bolt pressing it down.



Rocording with my eyes closed. Note the alpha peak in the FFT plot. As you can see not all channels are working. It’s not that easy getting 16 dry electrodes to work. I’m also having issues with channel 2 for some reason. Maybe there’s a bad solder joint somewhere on the PCB.



The OpenBCI V3 32bit + Daisy is a clean design and a good way to get 16 channels of electrophysiological data up and running and a great pplication for the ADS1299. The documentation is definitely good enough to build everything yourself, assuming you have some experience with SMT soldering. The DIY approach is also cheaper. I think you can get away with one third the price for the 32bit board and Daisy module, not including the cost of your labour of course. It’s a challenging project, but for me it was worth the effort. The DIY approach gives you the possibility to modify the design if you need to. I would like to use the potential of the ADS1299 more in the future and for example increase the sampling rate.
When it comes to the headware, my initial fascination faded a little when I discovered that the Ultracortex is quite painful to wear! The comb electrodes are no pleasure on your skin, let me tell you! But they do provide good signal quality almost instantaneously. The corrosion issue is also a significant one. I’m wondering how the signal quality changes as soon as the AgCl layer is gone completely. Maybe there’s a way of re-applying the layer by electrolysis in NaCl solution. This remains subject of further investigation. Other that those insights I find the design of the Ultracortex amazing! It’s a perfect example of great design specifically for 3D printing. Everything fits together perfectly well and looks great! Many thanks to the OpenBCI team for making their great work open source!



RFD22301 (RFduino) breakout

I’ve been doing some projects with the RFD22301, also known as RFduino and therefore decided to make a breakout for it. It’s also the radio used on the OpenBCI v3 system for data transfer, communication and programming. This breakout board can also be used as an OpenBCI dongle and can be plugged directly on this CP2102-based USB to TTL UART converter. Of course any other converter will do as long as it has 3.3V logic level. Watch out for that!



The jumper sets the DTR pin of the USB to serial converter to either the reset of the RFduino or its GPIO6. If it’s on “reset”, the RFduino itself is programmed during code upload. On the other position it starts programming the microcontroller on the OpenBCI board, assuming the OpenBCI firmware is flashed on the RFduinos of both the “Host” and the “Device” side.

Eagle files: