Нейроуправляемое колесное шасси своими руками
В этой статье опишу очень простой, но тем не менее важный и интересный проект - колесное шасси на нейроуправлении. Этим шасси может быть как машинка, так и большой робот на колесах так и инвалидная каталка. Разницы не будет вообще.
В отличии от дрона тут не нужно долго тренировать и порог входа в тему очень низок.
План будет простой. Возьмем самую дешевую машинку с радиоуправлением, добавим ардуино с блитузм модулем и будем управлять этим всем с помощью нейроинтефейса ms-04d.
Что что нам понадобится мы будем брать с озона:
Нейроинтефейс ms-04d
Ну интерефейс ещё можно прямо с группы (https://vk.com/exomech?w=product-112940624_9878158/query )
2. Машинка на радио управлении
3. Arduino nano
4. HC-05 Bluetooth модуль для Arduino
Для того чтобы заставить это всё работать вместе нужно будет сделать несколько простых шагов. Инструкция будет максимально подробная.
Разборка пульта. Нам нужно разобрать пульт управления машинкой и вытащить из него схему
В пульте будет 2 схемы: с кнопками и с переключателем и светодиодом. Вторую удаляем.
Нам нужна только с кнопками и микросхемой RF2175.
Микросхема не должна быть повреждена.
Отключаем схему от пульта и платы с светодиодом.
К микросхеме RF2175 на схеме подключены 4 кнопки: вперед, назад, повороты вправо и влево. В общем виде всё подключено вот так:
Нажимая на кнопки мы подаем минус на отдельные порты микросхемы. Ардино нано может выдавать на порты как минус так и положительный сигнал и если мы заменим кнопки на порты ардуино то мы сможем программно задавать направление движения.
или же сделать как описано ниже.
Нам нужно определить мас адрес нейроинтерфейса. Это можно сделать по инструкции тут http://developer.neurosky.com/docs/doku.php?id=mindwave_mobile_and_arduino .Или же через иные проги. Я делал это через прогу nRF connect с гугл плея. Схема подключения модуля. Можно без резисторов сразу RX к выводу D9. И не трогать пин 34 если есть маленькая кнопочка рядом с выводами.
Далее:
Запустите приложение Arduino на компьютере.
Подключите USB-кабель Arduino к компьютеру. На Arduino должен гореть зеленый свет.
Загрузите файл .ino скетча, расположенный в конце этого шага, или скопируйте следующий код, который передает данные между Serial Monitor Arduino и модулем Bluetooth, и вставьте его в новый скетч Arduino.
#include SoftwareSerial.h // подключаем библиотеку
SoftwareSerial mySerial(8,9); // указываем пины tx и rx
void setup() {
pinMode(8,INPUT);
pinMode(9,OUTPUT);
Serial.begin(9600); // включаем hardware-порт
mySerial.begin(38400); // включаем software-порт
Serial.println("start setting");
}
void loop() {
if (mySerial.available()) {
char c = mySerial.read(); // читаем из software-порта
Serial.print(c); // пишем в hardware-порт
}
if (Serial.available()) {
char c = Serial.read(); // читаем из hardware-порта
mySerial.write(c); // пишем в software-порт
}
}
4. Загрузите скетч.
5. Удерживая нажатой маленькую кнопку над контактом EN на HC-05, подключите VCC HC-05 к + 5 В Arduino и удерживайте кнопку нажатой в течение нескольких секунд, пока красный свет на HC-05 не начнет мигать в течение 2 секунд.
6. Откройте монитор последовательного порта Arduino (правый верхний угол окна приложения Arduino) на компьютере и установите для параметров в правом нижнем углу значения “Both NL & CR” и скорость передачи данных “9600”.
7. Откройте внутри строки ввода окна Serial Monitor. Введите AT на клавиатуре компьютера и нажмите Return. Если ответ «ОК», продолжайте. Если не «ОК», попробуйте еще раз. Иногда с первого раза не получается.
8. Включите нейроинтерфейс. Индикатор на нем должен гореть постоянно синим.
9. Введите AT-команды, как прописано ниже. Ответ должен быть «ОК» после каждой команды.
AT + UART = 57600,0,0 Определяет скорость передачи, она такая и в ms-04b и в neyrosky.
AT + ROLE = 1 Устанавливает HC-05 в качестве ведущего устройства, а не ведомого.
AT + PSWD = 1234 Устанавливает пароль, используемый интерфейсе.
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.
! Модуль может не отзываться на команды и скорее всего были просто перепутаны выводы RX и TX. Достаточно просто поменять и будет работать !
После того как модуль HC-05 прошился мы его никуда не переносим. Так же оставляем как он и есть.
Далее нам нужно припаять ардуино нано к плате управления машинкой с rf2175. Схема соединения очень простая. Мы подключаем цифровые порты 2,3,4,5 вперед кнопок и будет подавать минус с ардуино.
А вот так оно будет выглядеть в живую.
На этом пайка почти завершена. Осталось впаять готовы блок в машинку и запитать от аккумулятора.
Но перед запайкой и конечным монтажом нам нужно сделать самое важное - написать код управления.
Нейроинтерфейс MS-04D довольно функциональное устройство и может выдавать большой спектр данных:
1.Исходная электроэнцефалограмма
2.Определяются следующие мозговые волны: Дельта, Тета, Низкие Альфа, Высокие Альфа, Низкие Бета, Высокие Бета, Гамма
3.Данные с гироскопа: Ускорение по трем осям и угловая скорость по трем осям.
4.Данные о концентрации и расслаблении человека.
Любые их этих наборов данных мы можем взять как данные для управления, но генерировать нужные ритмы будет куда сложнее чем концентрироваться и расслабляться.
Сделаем оба варианта. Почему и нет?
1.Вариант с концентрацией и расслаблением.
Алгоритм следующий:
Если концентрация выше расслабления то машинка едет вперед
Если концентрация меньше расслабления то машинка едет назад
Если концентрация нулевая то машинка поворачивает вправо
Если расслабление нулевое то машинка поворачивает влево
Анализ будет происходить в самом нейроинтефейсе, а машинка будет только принимать сигнал управления.
2.Вариант с ритмами.
Алгоритм следующий:
Если альфа выше бета то машинка едет вперед
Если альфа меньше бета то машинка едет назад
Теперь код. Его мы будет прошивать в ардуино.
Сначала код с ритмами
float alf;
float bet;
#include <Mindwave.h>
#include <SoftwareSerial.h>
Mindwave mindwave;
SoftwareSerial softSerial(8, 9);
void setup() {
pinMode(9,INPUT);
pinMode(10,OUTPUT);
Serial.begin(57600);
softSerial.begin(57600);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
digitalWrite(2, HIGH); // вперед
digitalWrite(3, HIGH); // вперед
digitalWrite(4, HIGH); // вперед
digitalWrite(5, HIGH); // вперед
}
void onMindwaveData() {
Serial.print(mindwave.lowAlpha());
alf=mindwave.lowAlpha();
Serial.print(", ");
Serial.print(mindwave.lowBeta());
bet=mindwave.lowBeta();
Serial.print(", ");
Serial.println();
if (alf > bet)
{
digitalWrite(2, LOW); // вперед
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
}
if (alf < bet)
{
digitalWrite(3, LOW);
digitalWrite(2, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
}
}
void loop() {
mindwave.update(softSerial, onMindwaveData);
}
Вариант с концентрацией и расслаблением:
float att;
float med;
#include <Mindwave.h>
#include <SoftwareSerial.h>
Mindwave mindwave;
SoftwareSerial softSerial(8, 9);
void setup() {
pinMode(9,INPUT);
pinMode(10,OUTPUT);
Serial.begin(57600);
softSerial.begin(57600);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
digitalWrite(2, HIGH); // вперед
digitalWrite(3, HIGH); // вперед
digitalWrite(4, HIGH); // вперед
digitalWrite(5, HIGH); // вперед
}
void onMindwaveData() {
Serial.print(mindwave.attention());
Serial.print(mindwave.meditation());
att=mindwave.attention();
med=mindwave.meditation();
Serial.print(", ");
Serial.println();
if (att > med)
{
digitalWrite(2, LOW); // вперед
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
}
if (att < med)
{
digitalWrite(3, LOW);
digitalWrite(2, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
}
if (att <= 10)
{
digitalWrite(4, LOW);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
}
if (med <= 10)
{
digitalWrite(5, LOW);
digitalWrite(2, HIGH);
digitalWrite(4, HIGH);
digitalWrite(3, HIGH);
}
}
void loop() {
mindwave.update(softSerial, onMindwaveData);
}
В обоих вариантах кода используется библиотека с архива ПО для нейроинтерфейса https://vk.com/@-112940624-programmy-skripty-i-dokumentaciya-dlya-ms-04d
Если точнее то она будет вот тут https://disk.yandex.ru/d/1yKKOvkZQWb7hA
Теперь мы можем интегрировать эту схему в машинку. Вся система управления будет там.
Теперь приступаем к самой машинке. Это будет самая быстрая часть. Аккуратно снимает верхнюю крышку.
Снизу будут болты и зажимы.
Вскрываем ей до конца.
Можем увидеть маленькую схемку, 2 мотора, выключатель питания и штекер для аккумулятора.
Далее берем платку пульта с ардуино нано и припаиваем к питанию этой схемы. Питание идет через красный и черный провод.
Черный идет напрямую от аккумулятора, а красный от переключателя. Мы припаиваемся красный к красному,а черный к черному
Ну и собственно всё. Теперь аккуратно запаковываем всё обратно в машинку и сворачиваем болтики. Аккумулятора в 3.7в хватит для питания машинки и всей системы.
Для запуска всей системы мы должны включить нейроинтерфейс, подождать секунд 10 и запустить машинку. Опять же подождать пока будет соединение. Если все сделали правильно то машинка поедет в зависимости от залитого кода и уровней ритмов/показателей концентрации . Ну и видео с тестом.
Чуть потренироваться и можно будет направлять куда нужно. Теперь точно всё. Проект простой и делается за пару дней, но дает огромный опыт в нейропроектах.
Спасибо за внимание. Подписываемся и всё такое.
И наш дискорд где можно про все это поговорить и спросить!
https://discord.gg/pMZN7TM
Обзор портативного осциллографа Hantek 6022BL
Просьбы услышал - для тех, кто не любит видео, публикую текстовую версию обзора.
Герой сегодняшнего обзора - USB-осциллограф Hantek 6022BL.
Красивая коробочка с резиновыми ножками
Кратко про характеристики (всё равно никто это не читает):
Два канала с полосой пропускания до 10 МГц, но фактически корректно работает до 2 МГц, дальше меандр уже больше синусоида, чем меандр;
Частота дискретизации 48 Мвыб/с при работе с одним каналом, 24 с двумя;
Максимальная амплитуда 4.5 В (но это не точно, так как на корпусе есть пометка рядом с разъемами для щупов +-35 VDC VAC, это будет видно на следующем фото);
Логический анализатор до 10 МГц с частотой дискретизации в 48 МГц.
Сверху находятся разъемы для подключения щупов осциллографа, ниже гребёнка логического анализатора, а в самом низу калибровочный выход с частотой в 1 кГц.
С другой стороны располагаются USB разъем и таинственная кнопка, которая, судя по документации должна открывать ПО, но у меня это почему-то не работает
Комплектация и сборка
Самое печальное, что он поставляется без чехла для переноски
Комплект самодостаточен - есть всё чтобы сразу начать работу (это пока мы не захотим установить драйвера). Щупы обычные, не шлак и не прям уж мусор. Перемычки тоже.
А вот быстрозажимные коннекторы не самого лучшего качества - при первом использовании один просто рассыпался у меня в руках.
Отдельно хочется сказать про USB провод. Я не смог найти информации, для чего ему нужны 2 USB разъема для подключения к ПК, но вероятно один используется для работы осциллографа, а другой для логического анализатора (но это не точно). Если кто знает - поправьте меня, пожалуйста, в комментариях.
Вот так вблизи выглядит коннектор для быстрого подключения к ножкам микросхем
По поводу качества сборки у меня вопросов нет - следов флюса на плате нет, за это спасибо. Единственный момент, который вызвал вопросы - входной высокочастотный тракт, который, судя по шелкографии, должен быть закрыт экранирующей пластиной, но её почему-то нет.
Вот там, сверху слева. Виден контур и даже есть отверстия под пайку этого экрана. Наверное просто забыли припаять (сарказм)
Теперь самое интересное: Софт и драйвера
Пункт 1: Драйвера
Я потратил 2 часа, чтобы найти рабочие драйвера на 11 винду. Нет, дело не в том, что их нигде нет. Просто нужно внимательнее смотреть, что качаешь. Я упорото упорно пытался установить драйвера для BL6022 (это такой же осцилл, но без логического анализатор) и долго не мог понять, почему ничего не работает. Но спустя час до меня дошло и я скачал наконец то, что нужно. На всякий случай, в самом низу я приложу ссылку на драйвер и софт.
В процессе установки есть особенность - нужно выбрать первый пункт, но потом в диспетчере устройств будет отображаться DRIVER 2, это нормально
Пункт 2: Программное обеспечение осциллографа
Софт для осциллографа меня устроил. Не сказать, что он прекрасен, но ужасным его тоже не назовёшь.
Все настройки, к которым нужен быстрый доступ, вынесены на правую панель: регулировка частоты и амплитуды каналов и настройка триггера
Помимо основных настроек тут есть возможность вручную остановить сигнал для его изучения, курсорные измерения, математические операции и возможность подгрузить референсный сигнал. Да, не густо, но для портативного за такую цену в целом достаточно.
Пункт 3: Программное обеспечение логического анализатора
А вот с логическим анализатором всё грустно. Штатный софт очень сырой и не позволяет даже декодировать сигнал. Насколько я знаю, эта проблема лечится перепрошивкой, и если это интересно, я могу сделать пост на эту тему. А пока буду пользоваться старым и проверенным китайским клоном saleae.
Очень скромно и грустно
Общее впечатление
Я остался доволен покупкой. В первую очередь я покупал его для работы вне офиса, когда тащить стационарный осцилл проблематично, да и не всегда знаешь, что он может потребоваться. Закинул в рюкзак вместе с ноутом и даже не думаешь о нём.
К плюсам можно отнести невысокую стоимость, так что даже если с ним что случится - не так жалко, компактность и возможность прямо на объекте произвести диагностику узлов.
К минусам - куцый софт для логического анализатора и отсутствие кейса для переноски (что странно, аналогичный автомобильный идет в неплохом жестком кейсе, про него тоже скоро будет обзор)
Как и обещал - ссылка на ПО и драйвера
Буду рад, любой поддержке и здравой критике.
Вы хотите головоломок?
Их есть у нас! Красивая карта, целых три уровня и много жителей, которых надо осчастливить быстрым интернетом. Для этого придется немножко подумать, но оно того стоит: ведь тем, кто дойдет до конца, выдадим красивую награду в профиль!
Jonsbo D41 Mesh - когда игорькам хочется поиграть пока копятся $ на монитор
Данный корпус предоставляет возможность использования корпусного монитора Jonsbo D41 Mesh вместо основного.
На безрыбье и рак рыба☝️
#Jonsbo #Игорьки #Монитор
Проект Доморост тестирует лампы: Nova Electric
Выжимка из многочасового тестирования лампы. Заявленное и измеренное.
Протестирована светодбодная лампа от Nova Electric. К покупке не советую.
Больше тестов ламп вы сможете найти через поиск на площадках Домороста.
Берегите глаза!
Как выглядит умный туалет будущего за 460 тыс руб
В гаджет Numi встроены функции автоматического слива, дезодорированния, подогрева сиденья, очистки воздуха и бесконтактного поднятия крышки 😅
Что надо успеть за выходные
Выспаться, провести генеральную уборку, посмотреть все новые сериалы и позаниматься спортом. Потом расстроиться, что время прошло зря. Есть альтернатива: сесть за руль и махнуть в путешествие. Как минимум, его вы всегда будете вспоминать с улыбкой. Собрали несколько нестандартных маршрутов.