Elektroenzephalografie
Die Elektroenzephalografie (kurz EEG) ist eine Methode der medizinischen Diagnostik und der neurologischen Forschung zur Messung der summierten elektrischen Aktivität des Gehirns durch Aufzeichnung der Spannungsschwankungen an der Kopfoberfläche.
Mit dem Arduino lässt sich ein solches EEG leicht umsetzen. Man benötigt lediglich einen eigentlich für Spiele gedachten Sensor namens Mindflex. Mit diesem Sensor, welchen man am Kopf trägt, soll man angeblich einen Ball durch einen Parcour mit seinen Gedanken steuern können. Der relevante Chip zur Erfassung der Gehirnwellen stammt von Neurosky.
Als EEG in Verwendung wird die Aktivität in mehreren Gehirnwellenbereichen (Frequenzbereichen) erfasst und kann graphisch etwa in Form eines Diagramms dargestellt werden. Aufgezeichnet werden folgende Bereiche: Attention, Meditation, Delta, Theta, Low Alpha, High Alpha, Low Beta, High Beta, Low Gamma und High Gamma. Ich verwende in meinem Arduinoprogramm im Moment lediglich “Meditation” und steuere mit den Werten eine LED-Reihe an.
Zur Verbindung mit dem Arduino: Hier müssen lediglich der T-Pin auf der Mindflex-Platine (= TX pin) mit dem RX-Pin am Arduino und GND des Arduinos mit GND der Mindflex-Platine verbunden werden.
Ob nun dieses System wirklich echte Gehirnströme aufzunehmen imstande ist oder nicht muss jeder für sich entscheiden bzw. testen. Eine lustige Spielerei ist es aber mit Sicherheit…
Arduino-Code:
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 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
// Arduino Brain Library - Brain Serial Test // Description: Grabs brain data from the serial RX pin and sends CSV out over the TX pin (Half duplex.) // More info: https://github.com/kitschpatrol/Arduino-Brain-Library // Author: Eric Mika, 2010 revised in 2014 #include <Brain.h> int meditation; int meditation_LED; int attention; // Set up the brain parser, pass it the hardware serial object you want to listen on. Brain brain(Serial); void setup() { // Start the hardware serial. Serial.begin(9600); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); } void loop() { // Expect packets about once per second. // The .readCSV() function returns a string (well, char*) listing the most recent brain data, in the following format: // "signal strength, attention, meditation, delta, theta, low alpha, high alpha, low beta, high beta, low gamma, high gamma" if (brain.update()) { //Serial.println(brain.readErrors()); Serial.println(brain.readCSV()); meditation = brain.readMeditation(); attention = brain.readAttention(); Serial.print("Meditation = "); Serial.println(meditation); /* Serial.print(brain.readSignalQuality()); Serial.print(" "); Serial.print(brain.readDelta()); Serial.print(" "); Serial.print(brain.readTheta()); Serial.print(" "); Serial.print(brain.readLowAlpha()); Serial.print(" "); Serial.print(brain.readLowBeta()); Serial.print(" "); Serial.println(brain.readHighBeta()); */ meditation_LED = map(meditation,0,100,0,90); if ((meditation_LED >= 0) && (meditation_LED < 10)) { digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } if ((meditation_LED >= 10) && (meditation_LED < 20)) { digitalWrite(2, LOW); digitalWrite(3, HIGH); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } if ((meditation_LED >= 20) && (meditation_LED < 30)) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } if ((meditation_LED >= 30) && (meditation_LED < 40)) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } if ((meditation_LED >= 40) && (meditation_LED < 50)) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, HIGH); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } if ((meditation_LED >= 50) && (meditation_LED < 60)) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } if ((meditation_LED >= 60) && (meditation_LED < 70)) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, HIGH); digitalWrite(9, LOW); digitalWrite(10, LOW); } if ((meditation_LED >= 70) && (meditation_LED < 80)) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, HIGH); digitalWrite(10, LOW); } if ((meditation_LED >= 80) && (meditation_LED <= 90)) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, HIGH); } } } |