==============================
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**! Il
"qualcosa" sarebbe stato un `Keepon`_.
Ovviamente sono rimasti su uno scaffale per anni.
Successivamente mi sono procurato un `MicroView`_, perché è bellino.
Ovviamente, pure quello è rimasto su uno scaffale per anni.
Di recente ho finalmente cominciato a mettere assieme le tre cose.
.. _`Mind Flex`: https://store.neurosky.com/products/mindflex
.. _`Keepon`: https://www.mykeepon.com/
.. _`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. Quando ho cominciato, farlo su una Gentoo era meno ovvio
di quanto avrebbe dovuto (anche se c'è `un post molto chiaro su sito
Apollo NG`_ che aiuta molto), ma ora è facile::
emerge arduino crossdev dev-java/rxtx
USE="multilib cxx" crossdev --target avr
Questi symlink sono probabilmente ancora necessari::
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.
Ho copiato un po' di codice dal `repository Github di BeatBots`_.
.. _`leggere i dati del EEG Neurosky`:
https://github.com/kitschpatrol/Brain
.. _`controllare l'hardware del Microview`:
https://github.com/geekammo/MicroView-Arduino-Library/
.. _`repository Github di BeatBots`:
https://github.com/beatbots/mykeepon
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 a massa, alimentazione a VIN, segnale al
piedino di ingresso seriale.
.. _`Frontier Nerds`: https://www.frontiernerds.com/brain-hack
Per il Keepon, ho connesso i quattro fili come spiega BeatBots: massa
a massa, alimentazione a A0 (così possiamo notare quando il Keepon
viene accesso), clock a A5, dati a A4.
Il programma
============
Potete `guardare il repository con il programma`_; uso EMACS e
l'`Arduino Makefile`_, invece della IDE, perché preferisco la riga di
comando, e anche perché il mio C++ è talmente arrugginito che senza
l'aiuto di Flymake non scriverei nulla di buono.
Cose che funzionano:
* leggere dati dal Neurosky
* ottenere il controllo del Keepon ogni volta che viene acceso
* accodare comandi per il Keepon
* mostrare lo stato completo sul MicroView
In futuro:
* leggere lo stato del Keepon (pulsanti, sensori, magari anche il
microfono?)
* scrivere un po' di logica non banale per mappare le letture del
Neurosky ai movimenti del Keepon
.. _`guardare il repository con il programma`:
https://www.thenautilus.net/cgit/keepon-eeg/tree/
.. _`Arduino Makefile`: https://github.com/sudar/Arduino-Makefile