NEUROPLAY

Назначение Применение Нейроигры (БОС) Модельный ряд Программы и загрузки Разработчикам Партнёры
Каталог Корзина Доставка Обратная связь Тех. поддержка Контакты

In English +7 495 742-50-86 +7 985 680-03-36

Управление Arduino с помощью нейроинтерфейса NeuroPlay

Введение

Биоусилители серии NeuroPlay — это носимые устройства, считывающие электроэнцефалограмму мозга (ЭЭГ).
ЭЭГ показывает электрическую активность нейронов под отведениями датчиков, контактирующих с кожей.

Для нейроинтерфейса (нейроуправления) используют различную мозговую активность.
Одними из наиболее видимых и устойчивых показателей являются ритмы мозга:

  • Альфа-ритм возникает в затылке, свидетельствует о расслабленности
  • Бета-ритм регистрируют во лбу, он возникает при когнитивной нагрузке

Ингредиенты

Аппаратные средства (железо):
  • Нейрогарнитура NeuroPlay-6C или NeuroPlay-8Cap
  • Компьютер с Windows 10+ и Bluetooth 4+
  • Плата Arduino (или совместимая) и USB-кабель
Программное обеспечение:

Подготовка программного обеспечения

Скачайте последнюю версию NeuroPlayPro для Windows 10+.
На компьютере должна быть возможность использовать Bluetooth 4+
(встроенный или USB адаптер Bluetooth)

Подготовка устройства NeuroPlay-6C

  1. Разверните гарнитуру так, чтобы сам биоусилитель был в левой руке
  2. Расположите 3 лобных электрода по центру
  3. Приложите лобные электроды по центру лба
  4. Оберните правую часть повязки вокруг головы
  5. Оберните левую часть повязки и закрепите липучку
  6. Наденьте ушной электрод

Запуск регистрации ЭЭГ c устройства NeuroPlay

  1. Запустите программу NeuroPlayPro
  2. На странице «Устройство» начнётся поиск
  3. Нажмите на иконку найденного устройства NeuroPlay
  4. Добейтесь того, чтобы все электроды стали зелёными.
    Если электрод красный — подвигайте его на голове так, чтобы обеспечить контакт с кожей.


Просмотр показателей, используемых для нейроинтерфейса

Перейдите на вкладки «Медитации» или «Концентрации».
Эти вкладки показывают нормированный aльфа и бета ритмы, соответственно.
Они автоматически подстраиваются под каждого пользователя.
Каждый показатель всегда находится в пределах от 0 до 100%.
Нейроинтерфейс не действует моментально и зависит от ваших внутренних процессов.

Для тестирования «Медитации»:
  • Откройте вкладку «Медитация»
  • Займите удобное положение на стуле, чтобы избежать излишнего мышечного напряжения
  • Постарайтесь расслабиться: расслабить лицо и шею, расфокусировать взгляд, устранить все лишние мысли, представьте себе лес, море или камин.
  • Постарайтесь контролировать столбик по вашему желанию


Для тестирования «Концентрации»:
  • Откройте вкладку «Концентрация»
  • Займите удобное положение на стуле, чтобы избежать излишнего мышечного напряжения
  • Постарайтесь сконцентрироваться:
    • Начните считать в уме какой-нибудь пример, требующий напряжения (например, складывайте последовательно случайные двухзначные числа)
    • Вспоминайте стихотворение или музыкальное произведение
    • Сфокусируйте внимание на каком-нибудь предмете и анализируйте в уме его свойства
  • Постарайтесь контролировать столбик по вашему желанию

Принципы управления платой Arduino по COM-порту

Каждое Arduino-подобное устройство представлено в операционной системе как COM-порт (серийный порт).
Каждый COM-порт имеет номер (например, «COM15») и параметры подключения (скорость передачи, парность, биты данных и стоповые биты).
Определить имя COM-порта можно в «Диспетчере устройств»

При составлении скетча для Arduino (микропрограммы, зашиваемой в микроконтроллер) необходимо знать параметры скорости перадачи (baud rate), парности (parity), количества бит данных (data bits) и стоповых битов (stop bits). Обычно, при написании скетча, важно знать только скорость передачи.

Например, этот код (в Arduino IDE) даёт скорость равную 9600 бод, без парности, 8 битов данных, без стоповых битов:

Serial.begin(9600);

Программа NeuroPlayPro позволяет использовать COМ-порт для передачи данных.

На данный момент, есть два способа:
  1. (Простой) NeuroPlayPro отправляет (push) в COM-порт числовое значение Медитации или Концентрации
  2. (Более сложный) NeuroPlayPro принимает от COM-устройства текстовые команды и отвечает на них также текстом в формате JSON (см. NeuroPlay API)

Использование push-метода управления Arduino посредством NeuroPlayPro

  1. Откройте страницу «Настройки»
  2. Включите галочку «Расширенные настройки»
  3. Перейдите на вкладку «Обмен»
  4. Включите галочку «Обмен по COM-порту»
  5. Выберите порт и проверьте настройки подключения (скорость, парность, биты)
  6. Выберите «Режим обмена» — «Отправлять число» и требуемое «Отправляемое значение»
  7. В этом случае в СОМ-порт будет отправлять один байт (беззнаковый целочисленный), который надо обрабатывать на стороне Arduino


COM-порт может быть подключен исключительно к одному потоку обмену данных.

Если не получается прошить устройство через Arduino IDE — отключите галочку «Включить COM-порт» в программе NeuroPlayPro.

Если не получается подключить NeuroPlayPro к Arduino — проверьте не запущен ли «Serial monitor» в Arduino IDE.

Скетч для Arduino для использования push-метода

Открыть на GitHub

Этот скетч зажигает встроенный светодиод при значении «Медитации» больше 50% и выставляет положение сервомотора в пропорции значения «Медитации»

#include <Servo.h>

const uint8_t LED_PIN = LED_BUILTIN;

// Change SERVO_PIN and MIN/MAX to actual values
const uint8_t SERVO_PIN = 6;
const int SERVO_MIN_VALUE = 1000;
const int SERVO_MAX_VALUE = 1800;
Servo servo1;

void setup() {
  Serial.begin(115200);

  // Enable LED pin
  pinMode(LED_PIN, OUTPUT);

  // Enable servo
  servo1.attach(SERVO_PIN);
}

void loop() {
  if (Serial.available() > 0) {
    int c = Serial.read();

    // The value is a number 0-100% in case of meditation/concentration or 0-8 in case of mental states
    // Considering that the value is meditation (see Value output)
          
    // The 'meditation' value 
    int meditation = c;
    if (meditation < 0) meditation = 0;
    else if (meditation > 100) meditation = 100;

    // Activate the LED if meditation is above 50%
    digitalWrite(LED_BUILTIN, meditation > 50 ? HIGH : LOW);

    int pulse = SERVO_MIN_VALUE;
    if (meditation != 0) pulse += 100 * (SERVO_MAX_VALUE - SERVO_MIN_VALUE) / (meditation);
    // Activate the servo
    if (servo1.attached()) servo1.writeMicroseconds(pulse);
  }   
  
  delay(10); 
}