57

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

Привет, Пикабу.

Хочу рассказать в этот раз как можно использовать разработанный и производимый мной нейроинтерфейс . Кроме очевидного снятия ЭЭГ его можно подключать к периферийным устройствам через блитуз .

Одной из самой нетривиальной задачей с нейроинтерфейсом является его подключение к низкоуровневому устройству. Например, реле или сервоприводу. Сложность заключается и в анализе и в самой реализации.

План организации управления сервом через нейроинтерфейс такой: Нейроинтерфейс ms-04b / NeuroSky 2 распознает мозговые волны и передает их на микроконтроллер Arduino через Bluetooth. Arduino управляет серводвигателем.

Инструменты и материалы:

-Нейроинтерфейс ms-04b// NeuroSky 2;

-Батарейка AAA;

-Компьютер;

-Arduino Uno;

-Модуль Bluetooth HC-05;

-Серводвигатель (любой);

-Макетная плата;

-Макетные провода;

-Зеленый светодиод и желтый светодиод;

-2 резистора по 330 Ом;

-2 резистора по 1 кОм;

-2 резистора по 2 кОм;

-Держатель АА на три батареи;

-Напильник (он всегда нужен когда чего то делаешь);

Шаг 1: подключение HC-05 Ардуино

Установите HC-05 на макетную плату и подключите его к Arduino, как описано ниже и показано на фотографии. RXD HC-05 к контакту 11 через делитель напряжения из 2 резисторов, TXD к контакту 10, GND к GND, EN к выводу 9 через делитель напряжения из 2 резисторов.

Пока не подключайте VCC HC-05.

Причина использования делителей напряжения заключается в том, что RXD и EN HC-05 имеют тенденцию к выходу из строя после получения 5 вольт в течение некоторого времени, и напряжение должно быть уменьшено до 3,3 вольт. Делитель напряжения состоит из резистора на 1 кОм, один конец которого подключен к 5 вольтам Arduino, а второй конец - к резистору 2 кОм. В свою очередь другой конец этого резистора подключен к заземлению. Требуются два делителя напряжения: один для RXD, а другой для EN.

Шаг 2: код для HC-05

Нам нужно определить мас адрес устройства. Это можно сделать по инструкции тут

http://developer.neurosky.com/docs/doku.php?id=mindwave_mobile_and_arduino

Или же через иные проги. Я делал это через прогу nRF connect с гугл плея.

Далее:

1. Запустите приложение Arduino на компьютере.

2. Подключите USB-кабель Arduino к компьютеру. На Arduino должен гореть зеленый свет.

3. Загрузите файл .ino скетча, расположенный в конце этого шага, или скопируйте следующий код, который передает данные между Serial Monitor Arduino и модулем Bluetooth, и вставьте его в новый скетч Arduino.

#include<SoftwareSerial.h>

SoftwareSerial BT(10,11);

void setup() { pinMode(9,OUTPUT);

digitalWrite(9,HIGH);

Serial.begin(38400);

BT.begin(38400);

Serial.println("Bluetooth AT command mode");

}

void loop()

{

if(BT.available()) Serial.write(BT.read());

if(Serial.available()) BT.write(Serial.read());

}

4. Загрузите скетч.

5. Удерживая нажатой маленькую кнопку над контактом EN на HC-05, подключите VCC HC-05 к + 5 В Arduino и удерживайте кнопку нажатой в течение нескольких секунд, пока красный свет на HC-05 не начнет мигать в течение 2 секунд.

6. Откройте монитор последовательного порта Arduino (правый верхний угол окна приложения Arduino) на компьютере и установите для параметров в правом нижнем углу значения “Both NL & CR” и скорость передачи данных “38400”.

7. Откройте внутри строки ввода окна Serial Monitor. Введите AT на клавиатуре компьютера и нажмите Return. Если ответ «ОК», продолжайте. Если не «ОК», попробуйте еще раз. Иногда с первого раза не получается.

8. Включите нейроинтерфейс. Индикатор на нем должен гореть постоянно синим.

9. Введите AT-команды, как прописано ниже. Ответ должен быть «ОК» после каждой команды.

AT + UART = 57600,0,0 Определяет скорость передачи, она такая и в ms-04b и в neyrosky.

AT + ROLE = 1 Устанавливает HC-05 в качестве ведущего устройства, а не ведомого.

AT + PSWD = 0000 Устанавливает пароль, используемый интерфейсе. Он такой и и в ms-04b и в neyrosky.

AT + CMODE = 0 Для подключения HC-05 к определенному устройству.

AT + CLASS = 0 Определяет класс устройства.

AT + INQM = 1,9,48 Устанавливает параметры для сопряжения.

AT + INQ, команда чтобы узнать, распознает ли HC-05 интерфейс. Поиск интерфейса может занять 15-20 секунд. Одно из отображаемых устройств должно иметь тот же адрес, что и интерфейс, в формате xxxx: xx: xxxxxx. Этот адрес используется в следующих 3 командах (показаны как addr), за исключением того, что двоеточия должны быть заменены запятыми.

AT + PAIR = addr, 30 (здесь не было ответа «ОК».)

AT + BIND = addr (красный свет на HC-05 мигает каждые 2 секунды)

AT + LINK = addr

10. Красный индикатор HC-05 должен мигать 2 раза каждые 3-4 секунды. В первый раз, когда мастер прописал команды частота моргания не изменилась. Поэтому он дважды проверил, правильно ли установлены контакты проводов на Arduino и макетной плате, вытащил провод + 5В из HC-05, выполнил снова шаг 5 и набрал команды PAIR, BIND и LINK. На этот раз красный индикатор изменился на 2 быстрых мигания каждые 3-4 секунды. Это значит, что устройства сопряжены. В следующий раз, при пользовании устройствами, они автоматически подключатся к ним в течение нескольких секунд.

11. Отсоедините провод TXD HC-05 от вывода 10 Arduino и подключите его к RX (вывод 0) Arduino. Отсоедините провода HC-05 от делителей напряжения и снимите их, а также снимите резисторы, используемые в качестве делителей напряжения. Теперь проводка должна быть такой, как показано на фото.

12. Закройте Serial Monitor.

13. Отключите интерфейс.

14. Отсоедините USB-кабель от Arduino или компьютера.

15. Закройте приложение Arduino.

Шаг 4: подключение Arduino

Подключается Ардуино (начиная с пункта 11 предыдущего шага) следующим образом: Один контакт резистора 330 Ом к контакту 2, а другой провод к длинной ножки зеленого светодиода. Короткая ножка зеленого светодиода идет к GND на макетной плате. Один контакт резистора 330 Ом к контакту 4, а другой контакт к длинной ножке желтого светодиода. Короткая ножка желтого светодиода идет к GND на макетной плате. Контакт 9 идет к сигнальному (желтому) проводу сервопривода. Оранжевый провод сервопривода идет к плюсовому разъему отдельного источника питания. Коричневый провод сервопривода идет к GND на макетной плате. Минус отдельного источника питания идет на GND на макетной плате. Для проверки, следующие части должны быть подключены к GND макетной платы: оба светодиода, сервопривод, GND Arduino и HC-05. Следующие компоненты должны быть подключены к плюсовому источнику питания макетной платы: GND Arduino и HC-05.

Шаг 5: загрузка кода

1.Запустите приложение Arduino на компьютере.

2. Подключите USB-кабель Arduino к компьютеру. Светодиод HC-05 должен быстро мигать.

3. Подключите провода питания сервопривода к отдельному источнику питания и подключите минус этого источника питания к земле Arduino или макета.

4. Загрузите файл .ino скетча (находится в самом конце этого шага) или скопируйте следующий код и вставьте его в новый скетч Arduino.

//

// LEDs on and servo moving when Attention is high

// Yellow LED on when Attn more than 50

// Green LED on when Attn more than 70

// Servo moves 90 degrees when Attn is more than 50

#include<Servo.h>

#define BAUDRATE 57600

#define YLED 4

#define GLED 2

////////// Variables Servo myservo;

byte payloadData[32] = {0};

byte Attention[5]={0};

byte checksum=0;

byte generatedchecksum=0;

int Plength,Temp;

int Att_Avg=0;

int k=0;

signed int j=0;

////////// Arduino setup void setup()

{

Serial.begin(BAUDRATE);

pinMode(YLED, OUTPUT);

pinMode(GLED, OUTPUT);

Serial.println("Average Attention Values");

myservo.attach(9);

myservo.write(0);

delay(15);

}

////////// Read data byte ReadOneByte()

{

int ByteRead;

while(!Serial.available());

ByteRead = Serial.read();

return ByteRead;

}

////////// Main program void loop()

{

////// Look for sync bytes and read data while (1)

{

if(ReadOneByte() == 170)

{ if(ReadOneByte() == 170)

{ Plength = ReadOneByte();

if(Plength == 32) {

generatedchecksum = 0;

for(int i = 0; i < Plength; i++)

{ payloadData[i] = ReadOneByte();

generatedchecksum += payloadData[i] ;

}

generatedchecksum = 255 - generatedchecksum;

checksum = ReadOneByte();

////// Obtain Attention data and calculate an average

if(checksum == generatedchecksum)

{

if (payloadData[28]==4)

{

if (j<4)

{

Attention [k] = payloadData[29];

Temp += Attention [k]; j++;

}

else { Att_Avg = Temp/4;

////// Display average Attention in Serial Monitor, move servo, and light LEDs Serial.println(Att_Avg, DEC);

// The next 2 statements would move the servo based on average Attention level. // Attention level is between 0 and 100, moving servo between 0 and 100 degrees. // But they are now comments because I decided to move the servo 90 degrees // when average Attention is higher than 50. //

myservo.write(Att_Avg);

//

delay(15);

if (Att_Avg>50)

{

digitalWrite(YLED, HIGH); myservo.write(90);

delay(15);

}

else { digitalWrite(YLED, LOW);

myservo.write(0);

delay(15);

}

if(Att_Avg>70)

{

digitalWrite(GLED, HIGH);

}

else { digitalWrite(GLED, LOW); } j=0;

Temp=0;

}

}

}

}

}

}

}

}

5. Отсоедините провод TXD HC-05 от RX (контакт 0) Arduino, загрузите эскиз и снова подключите этот провод RX.

6. Откройте Serial Monitor. Убедитесь, что скорость передачи составляет 57600.

7. Включите интерфейс. Через несколько секунд светодиод HC-05 должен сделать 2 быстрых мигания каждые 3-4 секунды, показывая, что устройства сопряжены.

8. Оденьте интерфейс на голову. Теперь устройство должно отправлять данные в Arduino. Последовательный монитор должен показывать уровень внимания каждые несколько секунд, желтый светодиод должен включаться, а вилка сгибаться, когда внимание больше 50, а зеленый светодиод загораться, когда внимание больше 70.

9. По окончании закройте Serial Monitor.

10. Отключите интерфейс.

11. Отсоедините USB-кабель от Arduino или компьютера.

12. Закройте приложение Arduino.

13. Отсоедините провода питания сервопривода от отдельного источника питания.

Шаг 6: использование устройства

Чтобы управлять устройством нужно сконцентрировать внимание. Это куда сложнее чем кажется и требуется тренировка.

Если прошивка HC-05 имеет версию 2 или 3, команда AT + INIT необходима перед командой AT + INQ. Чтобы проверить версию HC-05, введите эту команду: AT + VERSION

Если вы нажмете кнопку сброса Arduino, это вернет настройки HC-05 к заводским значениям по умолчанию. Все шаги по сопряжению придется повторить. Если TXD HC-05 не отключен от RX Arduino перед загрузкой скетча, в нижней части окна приложения Arduino на экране компьютера появится сообщение об ошибке. Если используется сервопривод, ему нужен отдельный источник питания, например, 3 батареи по 1,5 В. GND Arduino необходимо подключить к минусу внешнего источника питания. Без внешнего источника питания, недостаточно энергии от источника USB, и модуль HC-05 теряет сопряжение. Он соединяется через несколько секунд, а затем отключается при следующем срабатывании сервопривода.

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

Спасибо за внимание. Подробнее про такие устройства как обычно тут

https://vk.com/exomech

https://www.facebook.com/Exomech

https://www.instagram.com/exomech_official

Кроме того есть специальный бионическо-экзоскелетный дискорд канал

https://discord.gg/pMZN7TM

https://create.arduino.cc/projecthub/tony3/brainwaves-bend-a...

Лига Биоников

113 постов710 подписчиков

Правила сообщества

Стандартные правила
Оскорбления, провокации, токсичное общение, слишком частый флуд, наезды, жирный троллинг - выдаем 2 предупреждения, на третий раз бан.

Вы смотрите срез комментариев. Показать все
0
Автор поста оценил этот комментарий

Привет, уже несколько дней сталкиваюсь с тем, что реклама выдает мне вещи, о которых я ПОДУМАЛ про себя,  типа Перчатка для груминга домашних животных, строительный фен и прочее. Сейчас меня никто не переубедит, что либо телефоны считывают энцефалограмму мозговой активности, которую они успешно сняли с человечества, загрузили в бигдату и расшифровали с помощью нейросетей, либо мощнейшая нейросеть работает со всеми камерами в мире и просто насквозь видит каждого абонента

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да просто запросы твои гугл или яндекс проанализировал и всё)

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества