В этой статье мастер-самодельщик со стажем расскажет нам, как можно управлять устройством силой мысли. В данном случае силой мысли он будет сгибать вилку, но в принципе можно использовать и для других целей. Принцип работы устройства основан на использовании датчика NeuroSky. Гарнитура NeuroSky распознает мозговые волны и передает их на микроконтроллер Arduino через Bluetooth. Arduino управляет серводвигателем, который тянет нить, соединенную с вилкой.
Инструменты и материалы:
-Гарнитура NeuroSky MindWave Mobile 2;
-Батарейка AAA;
-Компьютер;
-Arduino Uno;
-Модуль Bluetooth HC-05;
-Серводвигатель;
-Макетная плата;
-Макетные провода;
-Зеленый светодиод и желтый светодиод;
-2 резистора по 330 Ом;
-2 резистора по 1 кОм;
-2 резистора по 2 кОм;
-Держатель АА на три батареи;
-Небольшая коробка;
-Пластиковая вилка;
-Крепеж;
-Кабельная стяжка;
-Шуруповерт;
-Напильник;
-Клей;
-Отвертка;
Шаг первый: подключение 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.
Шаг второй: код для HC-05
Найдите наклейку на MindWave с адресом Bluetooth. Если на вашем MindWave нет наклейки перейдите на этот сайт. проект Под заголовком «Определение MAC-адреса вашего MindWave Mobile» ознакомьтесь с инструкцией.
Далее:
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. Включите MindWave. Индикатор рядом с переключателем MindWave Mobile 2 должен гореть постоянно синим.
9. Введите AT-команды, как прописано ниже. Ответ должен быть «ОК» после каждой команды.
AT + UART = 57600,0,0 Определяет скорость передачи, используемую MindWave.
AT + ROLE = 1 Устанавливает HC-05 в качестве ведущего устройства, а не ведомого.
AT + PSWD = 0000 Устанавливает пароль, используемый MindWave.
AT + CMODE = 0 Для подключения HC-05 к определенному устройству.
AT + CLASS = 0 Определяет класс устройства.
AT + INQM = 1,9,48 Устанавливает параметры для сопряжения.
AT + INQ, команда чтобы узнать, распознает ли HC-05 MindWave. Поиск MindWave может занять 15-20 секунд. Одно из отображаемых устройств должно иметь тот же адрес, что и на наклейке MindWave, в формате 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. Отключите MindWave.
14. Отсоедините USB-кабель от Arduino или компьютера.
15. Закройте приложение Arduino.
Bluetooth_Serial_AT_Command_mode.ino
Шаг третий: управляемый механизм
Первым делом нужно найти подходящую коробку или футляр. Затем подпилите ручку ложки или вилки, чтобы она стала гибкой.
Конструкция механизма проста, как показано на фото.
Шаг четвертый: подключение Arduino
Подключается Ардуино (начиная с пункта 11 предыдущего шага) следующим образом:
Один контакт резистора 330 Ом к контакту 2, а другой провод к длинной ножки зеленого светодиода. Короткая ножка зеленого светодиода идет к GND на макетной плате.
Один контакт резистора 330 Ом к контакту 4, а другой контакт к длинной ножке желтого светодиода. Короткая ножка желтого светодиода идет к GND на макетной плате.
Контакт 9 идет к сигнальному (желтому) проводу сервопривода.
Оранжевый провод сервопривода идет к плюсовому разъему отдельного источника питания.
Коричневый провод сервопривода идет к GND на макетной плате.
Минус отдельного источника питания идет на GND на макетной плате.
Для проверки, следующие части должны быть подключены к GND макетной платы: оба светодиода, сервопривод, GND Arduino и HC-05. Следующие компоненты должны быть подключены к плюсовому источнику питания макетной платы: GND Arduino и HC-05.
Шаг пятый: загрузка кода
1. Запустите приложение Arduino на компьютере.
2. Подключите USB-кабель Arduino к компьютеру. Светодиод HC-05 должен быстро мигать.
3. Подключите провода питания сервопривода к отдельному источнику питания и подключите минус этого источника питания к земле Arduino или макета.
4. Загрузите файл .ino скетча (находится в самом конце этого шага) или скопируйте следующий код и вставьте его в новый скетч Arduino.
Показать / Скрыть текст//
// LEDs on and servo moving when Attention is high
// December 1, 2020
// Arduino with HC-05 Bluetooth and NeuroSky MindWave Mobile 2
// 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. Включите MindWave. Через несколько секунд светодиод HC-05 должен сделать 2 быстрых мигания каждые 3-4 секунды, показывая, что устройства сопряжены.
8. Оденьте MindWave на голову. Теперь устройство должно отправлять данные в Arduino. Последовательный монитор должен показывать уровень внимания каждые несколько секунд, желтый светодиод должен включаться, а вилка сгибаться, когда внимание больше 50, а зеленый светодиод загораться, когда внимание больше 70.
9. По окончании закройте Serial Monitor.
10. Отключите MindWave.
11. Отсоедините USB-кабель от Arduino или компьютера.
12. Закройте приложение Arduino.
13. Отсоедините провода питания сервопривода от отдельного источника питания.
LEDs_servo_when_Attn_high.ino
Шаг шестой: использование устройства
Чтобы управлять устройством нужно сконцентрировать внимание. Мастер советует следующие упражнения:
Сосредоточьтесь на чтении списка ингредиентов какого ни будь продукта.
Считайте в обратном порядке.
Проделайте арифметические операции в уме.
Послушайте рэп-песню и постарайтесь понять слова. -)))
Прочтите что-нибудь на языке, которым вы не владеете.
Важные заметки.
Если прошивка 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 теряет сопряжение. Он соединяется через несколько секунд, а затем отключается при следующем срабатывании сервопривода.
В дальнейшем мастер планирует поэкспериментировать с этим устройством в управлении роботом или дроном.
Все готово и в конце видео с демонстрацией работы устройства.
Источник (Source)
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Источник: