Playing with a Mind Flex

Other languages

Some time ago I bought a Mind Flex, with the idea of interfacing it to some motors, and control a thing with my mind!. As for the "thing", I bought a Keepon.

Of course they sat unused for years.

Then I got myself a MicroView, because it was pretty.

Of course it, too, sat unused for years.

I've finally started putting the three together.

Software setup

First of all, I had to set up the Arduino IDE + compilers. On a Gentoo system it used to be a bit tricky (although there is a very clear post on the Apollo NG site that helped), but now it's just:

emerge arduino crossdev dev-java/rxtx

USE="multilib cxx" crossdev --target avr

These additional symlinks are probably still needed, though:

ln -nsf /usr/x86_64-pc-linux-gnu/avr/lib/ldscripts \

ln -nsf /usr/x86_64-pc-linux-gnu/avr/lib/ldscripts \

cd /usr/avr/lib

ln -nsf avr5/crtm328p.o .
ln -nsf avr6/crtm2561.o .
ln -nsf avr6/crtm2560.o .

Arduino libraries

I needed two libraries: the one to read the Neurosky EEG data, and the one to control the MicroView hardware.

I cloned them in my "sketchbook" directory:

mkdir -p ~/sketchbook/libraries
cd ~/sketchbook/libraries

git clone \

git clone

Note that the MicroView library needs to be in a folder called MicroView, not MicroView-Arduino-Library: the Arduino IDE really dislikes dashes in library names.

I also copied code from BeatBots' GitHub repository.

Hardware setup

I followed the instruction at Frontier Nerds, soldering a wire to the "T" pin of the Neurosky board, one wire to ground, and (my addition) one wire to battery "+". This way I can power the MicroView from the same batteries as the Mind Flex: when I tried powering them separately, the Neurosky board seemed to have serious difficulty getting a signal, probably because of noise on the power line.

I then connected (currently via a small breadboard) the MicroView to the wires: ground to ground, power to VIN, signal to pin Rx.

For the Keepon, I connected four wires as explained by BeatBots: ground to ground, power to A0 (to read when the Keepon is turned on), clock to A5, data to A4.

The program

You can browse the repository for the program; I'm using EMACS and the Arduino Makefile, instead of the normal IDE, because I like command-line interfaces better than point&click, and also because my C++ is so rusty that the real-time feedback of Flymake is necessary.

Currently working:

  • read from the Neurosky
  • get control of the Keepon every time it's turned on
  • queue commands to the Keepon
  • show all status on the MicroView

Future work:

  • read the status of the Keepon (button presses, sensors, maybe ever microphone?)
  • write some more interesting logic to map brain readings to movements
DatesCreated: 2015-10-23 13:11:34 Last modification: 2023-02-10 12:45:24