summaryrefslogtreecommitdiff
path: root/src/HW/mindflex/document.it.rest.txt
blob: ad73aeeb39d6b12d2e8d096294ac1c1846c3cae5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
==============================
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`: http://store.neurosky.com/products/mindflex
.. _`Keepon`: http://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`: http://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