// иначе гасим

  digitalWrite(LED, LOW);

  // отображаем на мониторе последовательного порта:

  // уровень помех

  Serial. print("PoorQuality: ");

  Serial. print(poorQuality, DEC);

  // уровень концентрации внимания

  Serial. print(" Attention: ");

  Serial. print(attention, DEC);

  // время после передачи последнего пакета данных

  Serial. print(" Time since last packet: ");

  Serial. print(millis() - lastReceivedPacket, DEC);

  lastReceivedPacket = millis();

  Serial. print("\n");

  // отображаем уровень концентрации внимания по десятой

  // доле на каждый светодиод

  switch(attention / 10) {

  case 0:

  digitalWrite(LED1, LOW);

  digitalWrite(LED2, LOW);

  digitalWrite(LED3, LOW);

  digitalWrite(LED4, LOW);

  digitalWrite(LED5, LOW);

  digitalWrite(LED6, LOW);

  digitalWrite(LED7, LOW);

  digitalWrite(LED8, LOW);

  digitalWrite(LED9, LOW);

  digitalWrite(LED10, LOW);

  break;

  case 1:

  digitalWrite(LED1, HIGH);

  digitalWrite(LED2, LOW);

  digitalWrite(LED3, LOW);

  digitalWrite(LED4, LOW);

  digitalWrite(LED5, LOW);

  digitalWrite(LED6, LOW);

  digitalWrite(LED7, LOW);

  digitalWrite(LED8, LOW);

  digitalWrite(LED9, LOW);

  digitalWrite(LED10, LOW);

  break;

  case 2:

  digitalWrite(LED1, HIGH);

  digitalWrite(LED2, HIGH);

  digitalWrite(LED3, LOW);

НЕ нашли? Не то? Что вы ищете?

  digitalWrite(LED4, LOW);

  digitalWrite(LED5, LOW);

  digitalWrite(LED6, LOW);

  digitalWrite(LED7, LOW);

  digitalWrite(LED8, LOW);

  digitalWrite(LED9, LOW);

  digitalWrite(LED10, LOW);

  break;

  case 3: 

  digitalWrite(LED1, HIGH);

  digitalWrite(LED2, HIGH);

  digitalWrite(LED3, HIGH);

  tone(LED3,1000,10);

  digitalWrite(LED4, LOW);

  digitalWrite(LED5, LOW);

  digitalWrite(LED6, LOW);

  digitalWrite(LED7, LOW);

  digitalWrite(LED8, LOW);

  digitalWrite(LED9, LOW);

  digitalWrite(LED10, LOW);

  break;

  case 4:

  digitalWrite(LED1, HIGH);

  digitalWrite(LED2, HIGH);

  digitalWrite(LED3, HIGH);

  digitalWrite(LED4, HIGH);

  tone(LED4,1000,10); // индикация звуком (срабатывание пъезодинамика) на последнем

  // из зажженных светодиодов текущего нейросеанса– уровень адаптации

  digitalWrite(LED5, LOW);

  digitalWrite(LED6, LOW);

  digitalWrite(LED7, LOW);

  digitalWrite(LED8, LOW);

  digitalWrite(LED9, LOW);

  digitalWrite(LED10, LOW);

  break;

  case 5:

  digitalWrite(LED1, HIGH);

  digitalWrite(LED2, HIGH);

  digitalWrite(LED3, HIGH);

  digitalWrite(LED4, HIGH);

  digitalWrite(LED5, HIGH);

  tone(LED5,1000,10);

  digitalWrite(LED6, LOW);

  digitalWrite(LED7, LOW);

  digitalWrite(LED8, LOW);

  digitalWrite(LED9, LOW);

  digitalWrite(LED10, LOW);

  break;

  case 6: 

  digitalWrite(LED1, HIGH);

  digitalWrite(LED2, HIGH);

  digitalWrite(LED3, HIGH);

  digitalWrite(LED4, HIGH);

  digitalWrite(LED5, HIGH);

  digitalWrite(LED6, HIGH);

  tone(LED6,1000,10);

  digitalWrite(LED7, LOW);

  digitalWrite(LED8, LOW);

  digitalWrite(LED9, LOW);

  digitalWrite(LED10, LOW);

  break;

  case 7:

  digitalWrite(LED1, HIGH);

  digitalWrite(LED2, HIGH);

  digitalWrite(LED3, HIGH);

  digitalWrite(LED4, HIGH);

  digitalWrite(LED5, HIGH);

  digitalWrite(LED6, HIGH);

  digitalWrite(LED7, HIGH);

  tone(LED7,1000,10);

  digitalWrite(LED8, LOW);

  digitalWrite(LED9, LOW);

  digitalWrite(LED10, LOW);

  break;

  case 8:

  digitalWrite(LED1, HIGH);

  digitalWrite(LED2, HIGH);

  digitalWrite(LED3, HIGH);

  digitalWrite(LED4, HIGH);

  digitalWrite(LED5, HIGH);

  digitalWrite(LED6, HIGH);

  digitalWrite(LED7, HIGH);

  digitalWrite(LED8, HIGH);

  tone(LED8,1000,10);

  digitalWrite(LED9, LOW);

  digitalWrite(LED10, LOW);

  break;

  case 9:

  digitalWrite(LED1, HIGH);

  digitalWrite(LED2, HIGH);

  digitalWrite(LED3, HIGH);

  digitalWrite(LED4, HIGH);

  digitalWrite(LED5, HIGH);

  digitalWrite(LED6, HIGH);

  digitalWrite(LED7, HIGH);

  digitalWrite(LED8, HIGH);

  digitalWrite(LED9, HIGH);

  tone(LED9,1000,10);

  digitalWrite(LED10, LOW);

  break;

  case 10:

  digitalWrite(LED1, HIGH);

  digitalWrite(LED2, HIGH);

  digitalWrite(LED3, HIGH);

  digitalWrite(LED4, HIGH);

  digitalWrite(LED5, HIGH);

  digitalWrite(LED6, HIGH);

  digitalWrite(LED7, HIGH);

  digitalWrite(LED8, HIGH);

  digitalWrite(LED9, HIGH);

  digitalWrite(LED10, HIGH);

  break;

  }

  }

  #endif

  bigPacket = false

  }

  else {

  // Ошибка контрольной суммы

  }  // end if else для контрольной суммы

  } // end if read 0xAA byte

  } // end if read 0xAA byte

}

Рис.7. Листинг скетча, обеспечивающего работу прибора №1

При этом красные уровни АГМ (зажжены красные светодиоды) соответствуют слабой концентрации внимания, желтые – средней, зеленые – высокой. Синий светодиод загорается при получении устойчивого нейросигнала (при отсутствии шумов-помех). Пъезодинамик может программно переключаться на предельный уровень, достигнутый в данном нейросеансе, – адаптивный уровень. В следующем нейросеансе звук из пъезодинамика будет означать увеличение уровня АГМ, достигнутого в предыдущем сеансе, т. е. прогресс в концентрации внимания.

В результате выполнения скетча, помимо световой и звуковой индикации уровней АГМ, на монитор последовательного порта выводятся следующие показатели: PoorQuality (0-200) – уровень шума (помех): 0 – устойчивый нейросигнал, 200 – плохой; Attention (1-100) – уровень нейросигнала; Time since last packet (мс) – время в миллисекундах после передачи последнего пакета байтов по Bluetooth-соединению (рис. 8).

Рис.8. Показатели нейросигнала и Bluetooth-соединения на мониторе последовательного порта при устойчивом нейросигнале (PoorQuality: 0)

В качестве примера, изменение показателя Attention во времени одного из нейросеансов, обработанное в программе Microsoft Excel, представлено в виде графика на рис. 9.

Рис.9. График зависимости показателя Attention от времени

Правда, чтение показателей на мониторе последовательного порта идет в ущерб автономности прибора измерения АГМ из-за необходимости его подключения к компьютеру. Для устранения этого недостатка мы добавили к прибору №1 OLED-дисплей (рис. 10, 11) с высокой яркостью и широким углом обзора, на экран которого выводится числовое значение Attention, а также время в секундах. Поскольку при измерении АГМ важен не только уровень концентрации внимания, но и скорость достижения этого уровня.

Рис.10. Автономный прибор №1 с OLED-дисплеем вместо пъезодинамика с индикацией секундомера и уровня концентрации внимания

Рис.11. Схема электрических соединений прибора №1 с OLED-дисплеем

Далее дано изображение разработанного нами автономного прибора №2, отличающегося от прибора №1 наличием светодиодной шкалы вместо отдельных светодиодов. Это позволило сделать прибор измерения АГМ более компактным и надежным (рис. 12). Электрическая схема соединений этого прибора представлена на рис. 13.

Рис.12. Автономный прибор №2 со световой индикацией 10-ти уровней АГМ на основе платы Arduino UNO, Bluetooth-модуля HC-05 и светодиодной шкалы

Рис.13. Схема электрических соединений прибора №2

Принцип работы прибора №2 аналогичен прибору №1 за исключением звуковой индикации, убранной для большей компактности прибора. В скетче (рис. 7) также удален блок звуковой индикации.

Для дальнейшего повышения компактности прибора измерения АГМ было решено использовать непосредственно микроконтроллер ATmega 328P-PU, входящий в состав платы Arduino UNO, убрав громоздкую обвязку последней.

Для этого вынем микроконтроллер из платы. Затем, чтобы ATmega 328P-PU стала независимой от внешнего кварцевого генератора (16 МГц) Arduino UNO, загрузим в среду программирования Arduino IDE программное обеспечение для внутреннего генератора микроконтроллера на 8МГц (Atmega 328 on a breadboard (8 MHz internal clock)). Затем прошьем вынутый микроконтроллер загрузчиком c другой платы (с контроллером) согласно схеме (рис. 14) и скетчу ArduinoISP из примеров Arduino IDE. После чего загрузим в ATmega 328P-PU скетч (рис. 7), используя схему согласно рис. 15.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4