It’s here! It’s here! The (near) future has arrived! I have received an early OpenBCI V3 board from my friends over at OpenBCI. Check out the photo below. It’s a little smaller than I expected. Very cool! Let’s get it running and see what it can do!
The OpenBCI V3 board is a smaller than I expected. Looks great!
|
OpenBCI says that the Bluetooth module is compatible with standard protocols (to enable connection to your mobile device) and that it has a special high-speed mode, if you have a mating BT module for your PC. To enable these high-speed modes, OpenBCI includes a BT USB dongle, which is shown at the bottom of the picture below.
When diving into new hardware, it’s best to take baby steps. Start from something that works and then add features incrementally, with lots of tests along the way. This makes it much easier to identify and squash the bugs as they pop up. For my first work with OpenBCI V3, here’s my approach
- Test the wireless link using pre-defined dummy data
- Test getting data from the ADS1299 using its built-in test signals
- Test getting real data from the ADS1299 by recording my ECG
- Test the full system by recording my EEG
Dummy Data: To get this process started, Joel (of OpenBCI) provided some example code that exercised the wireless link using dummy data. He even pre-loaded this software on to the V3 board for me. So, all I had to do was plug in the USB BT dongle, connect a battery to the OpenBCI board, and I was good to go. I started my Terminal program on my PC and was immediately interacting with the OpenBCI V3 board. It correctly transferred the pre-defined dummy data. Success!
Built-In Test Signals: Building from this working code base, and building from OpenBCI’s initial code for configuring the ADS1299 EEG chip, I added the ability to grab data from the ADS1299 and send it out the wireless link. I started with the ADS1299’s built-in test signals. After some fiddling with 24-bit vs 32-bit number formats (and then discovering that Joel already programmed the solution for me), I got the nice square wave signal as shown below. This proves that I can communicate with the ADS1299 chip and that I’ve got all the number formats correct. Success again!
ECG Data: As you may know from my previous “getting started” post, I like to start my collection of real data by recording my ECG (ie, heart signals). I do this because ECG signals are so much stronger and simpler than EEG signals. Having strong signals makes it more obvious when the system is working correctly (and when it is not working correctly). So, I got out my disposable ECG electrodes, put one on each wrist, and started recording. As you can see in the plot below, I got a nice sample of my ECG. My code for OpenBCI V3 might be rough, and my code is definitely not feature-complete, but it does work.
My wrist-to-wrist ECG looks pretty good. |
So, returning to my four step process described earlier, I’ve got 3 of the steps completed. Before I do the last step — collected actual EEG data — I’d like to revise the code a little more. Right now, I cannot view the streaming data in real time because the data format is a little different then before. To move forward, I need to adjust the code in my Processing GUI so that it can interpret the data packets and plot the data in real time. Once I get that to happen, I’ll hook up some electrodes to my head and maybe make my robot dance some more! Wish me luck!
Follow-Up: Raw data and analysis code is here.