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...

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

108 постов709 подписчиков

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

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