Управление инвалидной коляской при помощи Arduino и ЭЭГ-гарнитуры


Используя контроллер Arduino и систему OpenBCI, позволяющую считывать биопотенциалы человека (ЭЭГ, ЭМГ, ЭКГ) — можно помочь парализованным людям управлять различными устройствами. Например — инвалидными колясками.

В данном проекте, авторы считывают сигналы электромиограммы (ЭМГ) от лицевых мышц при помощи шлема Ultracortex «Mark IV» EEG Headset и 8-канального усилителя Cyton Biosensing Board (усилитель — Texas Instruments ADS1299). Затем данные обрабатываются простым скриптом на Python, который через Bluetooth передаёт управляющие команды на контроллер Arduino.


"""Python Code"""

from pylsl import StreamInlet, resolve_stream
import time  
import serial

# set up Arduino serial port - replace with the one you are using
ser = serial.Serial('COM4', 9600) 

# resolve an EMG stream on the lab network and notify the user
print("Looking for an EMG stream...")
streams = resolve_stream('type', 'EEG')
inlet = StreamInlet(streams[0])
# inlet_ch2 = StreamInlet(streams[1])
print("EMG stream found!")

# initialize time threshold and variables for storing time
time_thres = 500
prev_time = 0
flex_thres = 0.5

while True:

	samples, timestamp = inlet.pull_sample() # get EMG data sample and its timestamp

	curr_time = int(round(time.time() * 1000)) # get current time in milliseconds


	if ((samples[0] >=  flex_thres) & (curr_time - time_thres > prev_time)): # if an EMG spike is detected from the left eyebrow muscles send 'F'
		prev_time = int(round(time.time() * 1000)) # update time
		ser.write(b'B') 


	elif((samples[1] >=  flex_thres) & (curr_time - time_thres > prev_time)): # if an EMG spike is detected from the right eyebrow muscles send 'R'
		prev_time = int(round(time.time() * 1000)) # update time
		ser.write(b'F')


	elif((samples[2] >=  flex_thres) & (curr_time - time_thres > prev_time)): # if an EMG spike is detected from the left side of th jaw muscles send 'L'
		prev_time = int(round(time.time() * 1000)) # update time
		ser.write(b'L')


	elif((samples[3] >=  flex_thres) & (curr_time - time_thres > prev_time)): # if an EMG spike is detected from the right side of th jaw muscles send 'B'
		prev_time = int(round(time.time() * 1000)) # update time
		ser.write(b'R')

		
	elif(curr_time - time_thres > prev_time): # if no spike is detected send 'S' 
		prev_time = int(round(time.time() * 1000)) # update time
		ser.write(b'S')


Ссылки
Mindwave Wheelchair
OpenBCI — Open Source Biosensing Tools

По теме
Управление роботом при помощи ЭЭГ и жестов
Управление роботом силой мысли — исправление ошибок робота с использованием ЭЭГ сигналов
Управление манипулятором при помощи интерфейса мозг-компьютер
Интерфейс мозг-компьютер для управления роботом телеприсутствия
Компьютерное зрение с использованием человеческого мозга
Мысленное управление Arduino-роботом
  • 0
  • 26 ноября 2020, 08:23
  • admin

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.