// иначе гасим
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 |


