summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2015-10-23 14:46:42 +0100
committerdakkar <dakkar@thenautilus.net>2015-10-23 14:46:42 +0100
commitbcd4dae66c187f37e7b92769ec11cef2b6d48086 (patch)
treeb590b2d06dcf3cd7235f5b75b2af04e76c479db9
parentbump anime (diff)
downloadthenautilus-bcd4dae66c187f37e7b92769ec11cef2b6d48086.tar.gz
thenautilus-bcd4dae66c187f37e7b92769ec11cef2b6d48086.tar.bz2
thenautilus-bcd4dae66c187f37e7b92769ec11cef2b6d48086.zip
mindflex
-rw-r--r--src/HW/mindflex/.gitignore2
-rw-r--r--src/HW/mindflex/document.en.rest.txt153
-rw-r--r--src/HW/mindflex/document.it.rest.txt156
l---------src/HW/mindflex/du2html.xsl1
4 files changed, 312 insertions, 0 deletions
diff --git a/src/HW/mindflex/.gitignore b/src/HW/mindflex/.gitignore
new file mode 100644
index 0000000..08d33d4
--- /dev/null
+++ b/src/HW/mindflex/.gitignore
@@ -0,0 +1,2 @@
+/document.en.du.xml
+/document.it.du.xml
diff --git a/src/HW/mindflex/document.en.rest.txt b/src/HW/mindflex/document.en.rest.txt
new file mode 100644
index 0000000..472a19a
--- /dev/null
+++ b/src/HW/mindflex/document.en.rest.txt
@@ -0,0 +1,153 @@
+========================
+Playing with a Mind Flex
+========================
+:CreationDate: 2015-10-23 13:11:34
+:Id: HW/mindflex
+:tags: - hardware
+ - software
+
+Some time ago I bought a `Mind Flex`_, with the idea of interfacing it
+to some motors, and control a thing **with my mind**!.
+
+Of course it sat unused for years.
+
+Then I got myself a `MicroView`_, because it was pretty.
+
+Of course it, too, sat unused for years.
+
+Today I finally put the two together.
+
+.. _`Mind Flex`: http://store.neurosky.com/products/mindflex
+.. _`MicroView`: http://learn.microview.io/Intro/general-overview-of-microview.html
+
+Software setup
+==============
+
+First of all, I had to set up the Arduino IDE + compilers. On a Gentoo
+system it's a bit tricky, but thanks to `a very clear post on the
+Apollo NG site`_ I got it installed::
+
+ emerge arduino crossdev dev-java/rxtx
+
+ USE="multilib -cxx" crossdev -s1 --without-headers \
+ --target avr \
+ --gcc 4.5.4 --binutils 2.21.1-r1 --libc 1.7.0
+
+ USE="multilib cxx" crossdev -s4 \
+ --target avr \
+ --gcc 4.5.4 --binutils 2.21.1-r1 --libc 1.7.0
+
+ ln -nsf /usr/x86_64-pc-linux-gnu/avr/lib/ldscripts \
+ /usr/avr/lib/ldscripts
+
+ ln -nsf /usr/x86_64-pc-linux-gnu/avr/lib/ldscripts \
+ /usr/x86_64-pc-linux-gnu/avr/binutils-bin/2.20.1/ldscripts
+
+ cd /usr/avr/lib
+
+ ln -nsf avr5/crtm328p.o .
+ ln -nsf avr6/crtm2561.o .
+ ln -nsf avr6/crtm2560.o .
+
+.. _`a very clear post on the Apollo NG site`: https://apollo.open-resource.org/mission:log:2015:01:20:gentoo-crossdev-compile-avr-gcc-for-arduino-and-cura
+
+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@github.com:geekammo/MicroView-Arduino-Library.git \
+ MicroView
+
+ git clone git@github.com:kitschpatrol/Brain
+
+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.
+
+.. _`read the Neurosky EEG data`: https://github.com/kitschpatrol/Brain
+.. _`control the MicroView hardware`: https://github.com/geekammo/MicroView-Arduino-Library/
+
+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 pin 8, power to pin 16, signal to pin 9 (serial
+receive).
+
+.. _`Frontier Nerds`: http://www.frontiernerds.com/brain-hack
+
+The program
+===========
+
+This is the very simple program I wrote::
+
+ #include <MicroView.h>
+ #include <Brain.h>
+
+ // the MindFlex is connected to the serial input
+ Brain brain(Serial);
+
+ void setup() {
+ // the MindFlex speaks 9600 bps
+ Serial.begin(9600);
+ // setup the MicroView display
+ uView.begin();
+ uView.clear(ALL);
+ // use the smallest font, 5x7
+ uView.setFontType(0);
+ }
+
+ const int hist_width=3;
+ const int hist_pad=1;
+
+ void loop() {
+ if (brain.update()) { // do we have data to show?
+ uView.clear(PAGE);
+
+ // print the signal quality, 0=good, 200=no signal
+ uView.setCursor(0,0); uView.print(brain.readSignalQuality());
+
+ // print the two "high level" signals
+ uView.setCursor(0,9); uView.print(brain.readAttention());
+ uView.setCursor(18,9); uView.print(brain.readMeditation());
+
+ // we then have 8 frequency bands
+ const uint32_t* power = brain.readPowerArray();
+ // find the maximum value, for scaling
+ uint32_t max_value=0;
+ for (int x=0;x<8;++x) {
+ if (power[x] > max_value) {
+ max_value = power[x];
+ }
+ }
+
+ // draw a simple bar chart
+ for (int x=0;x<8;++x) {
+ int x0 = (hist_width + hist_pad) * x;
+ // we have 30 vertical pixels
+ int height = power[x] * 30 / max_value;
+ for (int o=0;o<hist_width;++o) {
+ uView.lineV(x0+o,47-height,height);
+ }
+ }
+
+ // blit the buffer to the display
+ uView.display();
+ }
+ }
+
+And that's it.
diff --git a/src/HW/mindflex/document.it.rest.txt b/src/HW/mindflex/document.it.rest.txt
new file mode 100644
index 0000000..abef570
--- /dev/null
+++ b/src/HW/mindflex/document.it.rest.txt
@@ -0,0 +1,156 @@
+==============================
+Giocherellare con un Mind Flex
+==============================
+:CreationDate: 2015-10-23 13:11:34
+:Id: HW/mindflex
+:tags: - hardware
+ - software
+
+Qualche tempo fa comprai un `Mind Flex`_, con l'idea di interfacciarlo
+a qualche motore, e controllare qualcosa **con la mente**!
+
+Ovviamente è rimasto su uno scaffale per anni.
+
+Successivamente mi sono procurato un `MicroView`_, perché è bellino.
+
+Ovviamente, pure quello è rimasto su uno scaffale per anni.
+
+Oggi ho finalmente messo assieme le due cose.
+
+.. _`Mind Flex`: http://store.neurosky.com/products/mindflex
+.. _`MicroView`: http://learn.microview.io/Intro/general-overview-of-microview.html
+
+Il software
+===========
+
+Prima di tutto, ho dovuto mettere su l'IDE Arduino e il
+compilatore. Farlo su una Gentoo è meno ovvio di quanto dovrebbe, ma
+grazie a `un post molto chiaro su sito Apollo NG`_ sono riuscito a
+installare il tutto::
+
+ emerge arduino crossdev dev-java/rxtx
+
+ USE="multilib -cxx" crossdev -s1 --without-headers \
+ --target avr \
+ --gcc 4.5.4 --binutils 2.21.1-r1 --libc 1.7.0
+
+ USE="multilib cxx" crossdev -s4 \
+ --target avr \
+ --gcc 4.5.4 --binutils 2.21.1-r1 --libc 1.7.0
+
+ ln -nsf /usr/x86_64-pc-linux-gnu/avr/lib/ldscripts \
+ /usr/avr/lib/ldscripts
+
+ ln -nsf /usr/x86_64-pc-linux-gnu/avr/lib/ldscripts \
+ /usr/x86_64-pc-linux-gnu/avr/binutils-bin/2.20.1/ldscripts
+
+ cd /usr/avr/lib
+
+ ln -nsf avr5/crtm328p.o .
+ ln -nsf avr6/crtm2561.o .
+ ln -nsf avr6/crtm2560.o .
+
+.. _`un post molto chiaro su sito Apollo NG`: https://apollo.open-resource.org/mission:log:2015:01:20:gentoo-crossdev-compile-avr-gcc-for-arduino-and-cura
+
+Librerie Arduino
+----------------
+
+Mi sono servite due librerie: quella per `leggere i dati del EEG
+Neurosky`_ e quella per `controllare l'hardware del Microview`_.
+
+Le ho clonate della directory del mio "sketchbook"::
+
+ mkdir -p ~/sketchbook/libraries
+ cd ~/sketchbook/libraries
+
+ git clone git@github.com:geekammo/MicroView-Arduino-Library.git \
+ MicroView
+
+ git clone git@github.com:kitschpatrol/Brain
+
+Notare che la libreria del MicroView deve stare in una cartella
+chiamata ``MicroView``, e non ``MicroView-Arduino-Library``: l'IDE
+Arduino ha delle restrizioni sui nomi delle librerie.
+
+.. _`leggere i dati del EEG Neurosky`: https://github.com/kitschpatrol/Brain
+.. _`controllare l'hardware del Microview`: https://github.com/geekammo/MicroView-Arduino-Library/
+
+L'hardware
+==========
+
+Ho seguito le istruzioni che ho trovato su `Frontier Nerds`_: ho
+saldato un file al piedino "T" della scheda Neurosky, un filo a massa,
+e (aggiunta mia) un filo al "+" della batteria. In questo modo posso
+alimentare il MicroView con le batterie del Mind Flex: quando avevo
+provato a alimentarli separatamente, la scheda Neurosky non riusciva a
+prendere il segnale, probabilmente a causa del rumore sulla linea di
+alimentazione.
+
+Ho poi connesso (tramite una piccola breadboard, per il momento) il
+MicroView ai fili: massa al piedino 8, alimentazione al piedino 16,
+segnale al piedino 9 (ingresso seriale).
+
+.. _`Frontier Nerds`: http://www.frontiernerds.com/brain-hack
+
+Il programma
+============
+
+Questo è il programmino, molto semplice, che ho scritto::
+
+ #include <MicroView.h>
+ #include <Brain.h>
+
+ // il MindFlex è connesso alla seriale
+ Brain brain(Serial);
+
+ void setup() {
+ // il MindFlex parla a 9600 bps
+ Serial.begin(9600);
+ // prepara il display del MicroView
+ uView.begin();
+ uView.clear(ALL);
+ // usa il font più piccolo, 5x7
+ uView.setFontType(0);
+ }
+
+ const int hist_width=3;
+ const int hist_pad=1;
+
+ void loop() {
+ if (brain.update()) { // abbiamo dati da mostrare?
+ uView.clear(PAGE);
+
+ // mostra la qualità del segnale, 0=buono, 200=nessun segnale
+ uView.setCursor(0,0); uView.print(brain.readSignalQuality());
+
+ // mostra i due segnali di "alto livello"
+ uView.setCursor(0,9); uView.print(brain.readAttention());
+ uView.setCursor(18,9); uView.print(brain.readMeditation());
+
+ // ci sono poi 8 bande di frequenza
+ const uint32_t* power = brain.readPowerArray();
+ // trova il massimo, per scalarle
+ uint32_t max_value=0;
+ for (int x=0;x<8;++x) {
+ if (power[x] > max_value) {
+ max_value = power[x];
+ }
+ }
+
+ // disegna un semplice istogramma
+ for (int x=0;x<8;++x) {
+ int x0 = (hist_width + hist_pad) * x;
+ // abbiamo 30 pixel in verticale
+ int height = power[x] * 30 / max_value;
+ for (int o=0;o<hist_width;++o) {
+ uView.lineV(x0+o,47-height,height);
+ }
+ }
+
+ // copia il buffer sul display
+ uView.display();
+ }
+ }
+
+E questo è tutto.
+
diff --git a/src/HW/mindflex/du2html.xsl b/src/HW/mindflex/du2html.xsl
new file mode 120000
index 0000000..e2487e0
--- /dev/null
+++ b/src/HW/mindflex/du2html.xsl
@@ -0,0 +1 @@
+../../../templates/du2html.xsl \ No newline at end of file