Como ler sinais cerebrais com Mindlfex e Arduino
Tags: c, mindflex, arduino, brain
Published: 2020-09-07 01:55:19

Já pensou em coletar os sinais elétricos do seu cérebro de um jeito muito fácil e barato? Se sim, vai ficar muito feliz em conhecer o **_Mindflex_** :) 

### **Mind ... o que?** 

<p align="justify">

Mindflex é um brinquedo que foi fabricado pela empresa
<a src="http://neurosky.com/">Neurosky</a>  em meados de 2009. Como vocês podem ver na imagem, o jogador coloca o dispositivo na cabeça e os sinais elétricos são enviados sem fio para a plataforma.

</p>

<img src="https://cdn.shopify.com/s/files/1/0031/6882/products/B001UEUHCG-2-lgm_large.jpeg?v=1424447930" width="500">

Basicamente, o jogo consiste em se concentrar no movimento que a bolinha faz. Quanto mais se concentrar, mais alto a bolinha subirá. Enquanto isso, ela percorre os obstáculos da plataforma.

**Por baixo dos panos**

O fato da bolinha subir e descer com o "poder da sua mente" não é magica. Na verdade, o sensor (eletrodo) faz a leitura dos sinais transmitidos pelo seu cérebro e envia para o circuito eletrônico, realizando cálculos para determinar o seu nível de atenção e meditação. Ou seja, os seus sinais servem como entrada para o dispositivo. 

Baseado nesses níveis, o _cooler_ da plataforma (que fica sempre embaixo da bolinha) pode girar com mais ou menos velocidade. 

**O que importa pra gente?**

Não vamos usar a plataforma do brinquedo, já que nossa intensão é apenas **ler os dados**. Precisaremos na verdade **adaptar** o capacete para conectar á um outro dispositivo que vai mostrar essa leitura para nós: o Arduíno. 

#### O que é Arduíno 

![arduino](https://user-images.githubusercontent.com/46378210/91670395-6de68d80-eaf3-11ea-9409-f891fcbe9569.png)

O Arduíno é uma placa eletrônica de baixo custo, _open source_ e com capacidade de conectar outros dispositivos eletrônicos como LEDs, motores e sensores. Por isso, é muito utilizado em pequenos projetos de eletrônica e automação. 

Para controlar o funcionamento desses dispositivos, enviamos um código em _linguagem C/C++_ para ele a partir de um cabo USB conectado de um computador ou [Raspberry](https://www.raspberrypi.org/) para a placa.

Existem [diversos modelos](https://www.arduino.cc/en/main/products) no mercado, mas o mais comum e que iremos utilizar aqui é **Arduíno UNO**. Inclusive, vamos precisar de mais algumas coisinhas:

#### O que vamos precisar: 

| <img src="https://user-images.githubusercontent.com/46378210/92339992-13b77080-f08f-11ea-86cd-6aa86058fad5.jpeg"/> | <img src="https://user-images.githubusercontent.com/46378210/92339998-17e38e00-f08f-11ea-9fdf-8e7c71c7c409.jpeg"> |
| :----: | :----: |
|  <p align="center">Materiais</p>  | <p align="center">Capacete com pilhas</p> |

:electric_plug: [Placa Arduino UNO e cabo USB](https://www.baudaeletronica.com.br/arduino-uno-r3.html)
:electric_plug: [Capacete _Mindlfex_](https://www.ebay.com/sch/i.html?_from=R40&_trksid=p2499334.m570.l1313&_nkw=mindflex&_sacat=2540) - [Manual do brinquedo](https://service.mattel.com/instruction_sheets/P2639-0920G1.pdf)
:electric_plug: 3 pilhas do tipo AAA
:electric_plug: Ferro de solda 
:electric_plug: Solda
:electric_plug: 2x [Jumpers macho-macho](https://www.curtocircuito.com.br/kit-jumper-macho-macho-40-pcs.html?gclid=CjwKCAjwkdL6BRAREiwA-kiczNa5KmN2Tbuy5XakCMHbSYyj2mOW7tKDCYYyByCjfJxxmflO0VIaChoCHEwQAvD_BwE) 
:electric_plug: Chave estrela (cerca de 1/4'')

#### Preparando o _Mindflex_ 

O capacete vem fechado, já que ele foi feito para se conectar com sua plataforma. Mas podemos abrir a placa facilmente e soldar alguns pontos importantes: o ponto de leitura e referencia. 

:memo: Abra o capacete usando uma **chave estrela**. Você encontrará algo como: 


<img src="https://user-images.githubusercontent.com/46378210/92340242-ee773200-f08f-11ea-8cc3-9e88f71568dd.jpg" width=500/>


:memo: Encontre os pontos de leitura e referencia da placa:

![Screenshot_2020-09-06 Apresentação sem título - Apresentações Google](https://user-images.githubusercontent.com/46378210/92339313-d43b5500-f08b-11ea-8782-5304585bd214.png)


:memo: Solde os pontos indicados com os fios que serão conectados ao Arduíno posteriormente.

:memo: Para ligar o _Mindflex_, encaixe as pilhas e use a chave para ligar e desligar.

<img src="https://user-images.githubusercontent.com/46378210/92341550-7e1edf80-f094-11ea-89a7-dca891a7dcf5.jpg" width="350"/>


#### Preparando a IDE

Com o nosso Mindflex pronto, está na hora de preparar a placa para coletar os dados. Se você nunca usou o Arduíno, vai precisar fazer o download da IDE [clicando aqui](https://www.arduino.cc/en/main/software).

Se estiver usando Ubuntu, você pode abrir o terminal e rodar esse comando: 

```
$ sudo snap install arduino
```

Depois de instalar, ao abri-la você vai encontrar uma interface como essa: 

![ide](https://user-images.githubusercontent.com/46378210/92340425-a73d7100-f090-11ea-8b35-0519724aa455.jpg)

Primeiro, vamos precisar instalar uma lib especifica para ler dados dos capacetes na Neurosky: o [Brain](https://github.com/kitschpatrol/Brain).

Para importar a lib no Arduíno, siga os passos:

1. Faça o download da lib pelo [Github](https://github.com/kitschpatrol/Brain), gerando um arquivo `.ZIP`

2. Pela IDE, abra `Sketch > Include Library > Add ZIP library` e selecione a pasta ZIP.

3. De novo, acesse `Sketch > Include Library` e selecione Brain-master.

Agora, bora pro código: 
```
#include <Brain.h>

Brain brain(Serial);

void setup() {
  Serial.begin(9600);
  delay(10);
}

void loop() {
  if (brain.update()) {
    if(brain.readSignalQuality() <= 60){
       Serial.println(brain.readCSV()); 
    }
  }
}
```
A partir desse código, estamos importando a biblioteca Brain com `#include`.

Dentro de `void setup()` estamos abrindo a comunicação serial com velocidade de 9600 bits por segundo e dando um pequeno _delay_ antes de realizar a primeira leitura. Vale lembrar, que essa parte será realizada **apenas uma vez**.

O que será executando o **tempo todo** é código dentro de `void loop()`. Dentro dele, estamos chamando a função `brain.update()`, que retorna `true` se for possível ler os dados. 

Depois, chamamos a função `brain.readSignalQuality()`, que retorna a qualidade dos sinais em um intervalo de 0 á 200.

**Ok, mas que sinais são esses?**

A leitura do _Mindflex_ vai retornar 11 colunas, que indicam:

| Coluna | Significado |
| :----: | :----: |
| **Qualidade do Sinal** | quanto mais próxima de 0, melhor, quanto mais próxima de 200, pior.|
| **Atenção** | retorna uma estimativa de atenção, variando de 0 (mínimo) á 100 (máximo). |
| **Meditação** | retorna uma estimativa de meditação, variando de 0 (mínimo) á 100 (máximo). |

Os demais sinais são valores referentes aos nossos [**5 tipos de ondas cerebrais**](https://amenteemaravilhosa.com.br/tipos-de-ondas-cerebrais/), que representam resumidamente:

| Onda | Significado |
| :----: | :----: |
| **Delta** | relacionada ao sono profundo sem sonhos. |
| **Theta** | relacionada ao sono, reflexão e imaginação. |
| **Alfa Baixo** | relacionada com calma e relaxamento. |
| **Alfa Alto** | idem, com frequência mais alta. |
| **Beta Baixo** | relacionado ao nosso estado de atenção. |
| **Beta Alto** | idem, com frequência mais alta. |
| **Gama Baixo** | relacionado com estados cognitivos, ou seja, quando estamos aprendendo ou memorizando algo. |
| **Gama Alto** | idem, com frequência mais alta. |

Pelo nosso código, determinamos que se a qualidade do sinal for menor que 60, os dados serão mostrados na porta serial pela função `brain.readCSV()`, retornando o valor de cada sinal separado por virgula. 

Claro que o ideal seria captar somente os dados em que a qualidade fosse o mais próximo possível de 0, mas outros eletrodomésticos/dispositivos que emitem ondas eletromagnéticas podem influenciar na nossa leitura. 

> Para conhecer outras funções que essa lib oferece acesse a [documentação](https://github.com/kitschpatrol/Brain) 

Show! Agora conecte o cabo USB na placa e depois na sua máquina. Vá em `Tools > Board` para selecionar o tipo da placa (no caso, Arduíno UNO) e a porta em `Tools > Port`, que pode ser algo como `AMC0`, `TTY`, etc (pode variar). 

Conecte o _Mindflex_ com o Arduíno da seguinte forma:

![Screenshot_2020-08-30 printhandler ashx(1)](https://user-images.githubusercontent.com/46378210/92339038-76f2d400-f08a-11ea-88ff-37534ec10980.png)

Show! Agora, vista o headset de modo que o sensor eletrodo fique em contato com a sua testa e conecte os clips em suas orelhas (eles são necessários para referenciar o sinal). 

#### Lendo os dados

Para ver os dados, vá em `Tools > Serial Portal` 

![Screenshot_2020-09-06 Apresentação sem título - Apresentações Google(1)](https://user-images.githubusercontent.com/46378210/92339814-4ad95200-f08e-11ea-96a8-e49f728c0b6f.png)

Pronto! Agora conseguimos ver os sinais. 

#### Indo além:

Se ficou interessado no Mindflex e como podemos fazer coisas incríveis com ele, sugiro que de uma olhada nesses materiais: 

:books: [Monografia de graduação](http://fatecsantoandre.edu.br/arquivos/TCC/162-Mecatronica/162-TCC0007.pdf) da Tamires dos Santos, atualmente estudante de Mestrado da Universidade Federal do ABC e desenvolvedora de IHR

:books: Minha [monografia](https://drive.google.com/drive/u/1/folders/1BwFU-i0rMpZyeC6p6guxBRgwvLBT5jEN) usando o Mindflex, com foco em automatizar os processos de coleta, tratamento e treinamento da RNA para os dados

:books: [Monografia](https://repositorio.uniceub.br/jspui/bitstream/235/6906/1/20943054.pdf) sobre sistema de neurofeedback para análise de nível de concentração 

:books: [Artigo](https://docplayer.com.br/13056447-Utilizacao-de-ondas-cerebrais-para-controle-de-componentes-eletronicos.html) sobre o uso de ondas cerebrais para o controle de componentes eletrônicos. 

:books: [How to Hack Mindlex](http://www.frontiernerds.com/brain-hack)

:books: [Tutorial sobre Mindflex](http://fab.cba.mit.edu/classes/863.15/section.Architecture/people/Tahouni/single%2010.html#!prettyPhoto/5/)