Giocherellare con un Mind Flex

Altre lingue

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.

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 .

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.

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.

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
DateCreato: 2015-10-23 13:11:34 Ultima modifica: 2016-04-30 18:47:14