Управление инвалидной коляской при помощи 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-роботом


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение