
Comment le cerveau fonctionne?
Le cerveau est le roi de notre corps; c’est lui qui prend les décisions et reçoit les informations. Lorsque nous sommes actifs, tout dépendant de ce que nous faisons, différentes parties du cerveau sont utilisées, certaines plus que d’autres. Ainsi, la communication se fait entre notre cerveau et les autres parties de notre corps. De plus, nos sensations sont toutes rattachées à une partie de notre cerveau. Par exemple, le cortex visuel est la partie qui reçoit l’information prise par nos yeux!
Mais pourquoi notre cerveau crée des ondes et surtout, comment elle fait?
Notre cerveau contient 86 milliards de neurones et celles-ci communiquent toutes entre elles! Comment ça fonctionne? Un peu comme un ordinateur, la communication entre ces neurones se fait au moyen de signaux électriques. Notre cerveau ressemble drôlement à comment un ordinateur communique entres ces différentes composantes. L’ordinateur comprends seulement du binaire, c’est à dire qu’il reçoit un signal électrique ou pas. Dans le corps humain, il y a des signaux positifs et négatifs. Les ions de potassium sont négatifs et les ions de sodium sont positifs!

L’axone dans le neurone est capable biochimiquement de conserver la charge électrique reçue et de la transmettre d’un côté à l’autre de la neurone. Pour passer d’une neurone à l’autre, cela se fait par les branches nommées des synapses. Ceux-ci transmettent la charge électrique à des neurotransmetteurs qui eux peuvent traverser l’espace synaptique (l’espace séparant deux neurones). C’est les branches postsynaptiques de la neuronnes voisine qui recevront la charge éléctrique et le processus se répète.
De nos jours, nous pouvons étudier ce qui se passe dans notre cerveau avec une machine comme l’électroencéphalogramme, ou EEG! Toutes les neurones de notre cerveau créent des vagues d’électricité qui peuvent être calculées en Hertz (Nombre de vagues par seconde). Il est prouvé que nos états mentaux sont tous caractérisés par différentes fréquences. En effet, par exemple, quand nous sommes concentrés, notre cerveau est beaucoup plus sollicité, donc il y a plus d’activité neuronique et ainsi plus de signaux électriques. Cela veut dire que l’électroencéphalogramme va capter de plus hautes fréquences. L’inverse se produit lorsque nous sommes en état de relaxation et pensons de façon modérée.
Brain.h?

Tout d’abord, on doit donner un très gros crédit à Eric Mika qui à fait tout le travail difficile de rendre simple l’information reçu par notre électroencephalogram. Eric est entré dans les documents de NeuroSky, la compagnie qui fait plusieurs headset EEG, dont le notre, pour venir lire les informations qui sont transmis par le headset. En regardant ces informations il observe que qu’il y a deux types de signaux qui sont envoyées par le headset. Le premier est le niveau de la qualité de la connection entre le headset et le dispositif qu’il contrôle, c’est une échèlle de 0-200. 0 signifie une connection parfaite, 200 signifie une connection interrompue. Le deuxième signal que l’électroencephalogram envoie est le niveau de concentration ou de méditation de l’individu. C’est ce signal que nous allons s’atarder d’avantage! Ce que nous reçevons c’est seulement un numéro sur une échelle de 0-100. Inuitivement, 100 signifie un niveau de concentration élevée et 0 un état mental de méditation. Le problème avec notre EEG c’est qu’il ne transmets pas la fréquence réelle qu’émets le cerveau. Par conséquent, ce que Eric a fait c’est de donner sept zones qui correspondent chacune à des ondes qu’émets le cerveau.

Pour aller plus en profondeur, la librairie fonctionne comme une application qui viens extraire des informations d’un fichier texte. Dans Brain.cpp, la fonction update() viens extraire les informations prises par l’electroencephalogram dans tableau de type unsigned int 32 (uint32_t). Il est important de noter que la partie unsigned de la variable signifie qu’on ne peut pas prendre des données négatives (Range = 0 à 4,294,967,295 ).

Une fois que le packet est remplie (32 éléments dans le tableau) on viens confirmer que nous avons un nouveau packet. Par la suite, il y a la fonction parsePacket() qui va venir lire le nouveau packet et identifier quel type de fréquence célébrale il fait partie. Nous sommes chanceux puisque le fabriquant du EEG (Neurosky Mindset) nous à donné un protocole de communication fabriqué par eux.

Voici ce qui est enregistré dans le tableau packet. En observant de plus près, nous pouvons comprendre qu’il y 35 bytes qui sont tous reliées à des informations transmises par l’electroencephalogram. Les bytes de 7-30 indique les fréquences émis par le cerveau, pour un total de 8 zones possibles de fréquences contenant chacun 3 bytes. Les autres bytes servent à signifier la longueur :
-([ 7]: 0x18 // [VLENTGH] 24 bytes && [ 2]: 0x20 // [PLENGTH] (payload length) of 32 bytes).
Un booléen d’attention ou de méditation (j’imagine que c’est ce qu’utilise le jeu):
-([31]: 0x04 // [ATTENTION] eSense && [33]: 0x05 // [MEDITATION]eSense ).
Des bytes qui transmettent des informations de signal :
-( [ 3]: 0x02 // [POOR_SIGNAL] Quality && [ 4]: 0x00 // No poor signal detected (0/200) ).
Finalement, il y a des bytes qui se nomment SYNC qui se situent au début de chaque packet.
-( [ 0]: 0xAA // [SYNC] && [ 1]: 0xAA // [SYNC] ).
Comment on parse le packet?
Avant de parser, on doit vérifier si le packet est bon. D’après le PDF distribué par Neurosky, pour parser un packet, on doit lire toutes les bytes jusqu’à la rencontre d’un byte SYNC. Si le byte qui le succède est aussi un SYNC, on continue la fonction. Ensuite, nous allons prendre la valeur du byte [PLENGTH] et s’assurer que [PLENGTH]<170 (C’est trop large comme packet si ça dépasse 170 de longeur). La prochaine étape est compliqué, mais cela assure qu’il n’y a pas de corruption dans le packet. À cet effet, le but est d’arriver au même nombre que dans le byte [CHKSUM]. Pour ce faire, on additionne toutes les bytes dans un unsigned char puis on inverse les 8 bytes les plus bas(** Pourquoi??? **). Si le nombre que nous venons de calculer est égale à la valeur du byte [CHKSUM], le packet est alors valide et prêt à être utilisé.

Eric Mika à décidé de faire un switch qui parcours le packet avec les valeurs de bytes qui l’intéresse. Il enregistre la qualité du signal [0x2], le niveau d’attention [0x4] et le niveau de méditation [0x5] dans des variables de type unsinged int de 8 bytes. De plus il enregsitre le signal que nous allons utiliser d’avantage : [0x83], c’est la valeur de bytes qui correspondent aux 8 zones que l’electroencephalogram peut capter (8 = fréquences Gamma && 0 = fréquences Delta). Enfin, toutes les informations ont été ressorti du packet et mis dans des variables, il est possible maintenant d’envoyer l’information receuilli par signal Serial, ou l’utiliser comme on veut.
Création d’un graphe qui démontre en temps réel les lectures de l’electroencephalogram.
Sources :
- https://mayfieldclinic.com/pe-eeg.htm (15 Février 2019)
- https://www.assistancescolaire.com/eleve/4e/svt/reviser-une-notion/la-communication-entre-les-neurones-la-transmission-synaptique-3sad06 (16 Février 2019)
- https://en.wikipedia.org/wiki/Human_brain (11 Février 2019)