Дрон для управления разумом
Компоненты и расходные материалы
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 4 | |||
![]() |
| × | 4 | |||
![]() |
| × | 12 | |||
![]() |
| × | 1 | |||
| × | 1 |
Необходимые инструменты и машины
![]() |
| |||
![]() |
|
Приложения и онлайн-сервисы
| ||||
![]() |
|
Об этом проекте
Фон
Мне нравятся дроны, эти маленькие летательные аппараты, которые могут делать все что угодно. Когда у меня появилась возможность сделать проект с использованием крутых технологий, я решил осуществить мечту мальчика, управляя дроном своим умом.
В исследовании, которое я провел для этого проекта, я не нашел никаких руководств, в которых рассказывалось бы, как легко взломать контроллер дрона. Большинство доступных руководств посвящены тому, как создать собственный дрон с помощью Arduino или как взломать протокол передачи.
В этом руководстве описывается самая базовая концепция взлома печатной платы для управления ею в цифровом виде. Цель этого руководства - познакомить вас с основными концепциями, которые позволят вам поэкспериментировать с дроном и создать что-нибудь забавное.
Уведомления
Вы потенциально можете убить свой дрон или контроллер и сделать его непригодным для использования.
В этом проекте не будет рассказано, как управлять вашим дроном только при взлете и посадке.
Вам не обязательно нужен датчик MindWave / EEG, вы можете использовать любой вход, который хотите. Но управлять дроном мысленно - это круто!
Видеоурок
Необходимые навыки
В этом руководстве предполагается, что у вас есть некоторый опыт пайки и демонтажа.
Список запчастей
- Дрон + контроллер
- Паяльная станция + аксессуары (медная оплетка, насос для удаления припоя, рука помощи, сплошные провода, олово).
- Мультиметр
- Датчик MindWave
- Arduino MKR1000
- Макет
- 4 конденсатора по 100 мкФ.
- 4 резистора 220 Ом.
- 12 перемычек
- 6 проводов с зажимом типа "крокодил" (необязательно)
Также вам понадобятся 4 резистора с неизвестным значением сопротивления.
Этап 1. Плата для дрона
Вы можете использовать практически любой дрон, какой захотите. Большинство контроллеров работают с двухкоординатными джойстиками. Эти джойстики мы собираемся обойти.
Сначала откройте корпус вашего контроллера. В этом контроллере используются две батареи 1,5 В, которые приблизительно равны 3,3 В. Это значение совпадает с выводом Arduino MKR1000.
Можно использовать другой Arduino по своему вкусу, но имейте в виду, что вы можете сломать печатную плату, если подадите на нее большее напряжение, с которым может справиться печатная плата. (Я говорю по собственному опыту.)

Определите с помощью мультиметра, какое среднее, высокое и низкое напряжение на джойстиках после включения. Запишите их для дальнейшего использования.

Извлеките компоненты джойстика из печатной платы.


На самом деле эти компоненты джойстика - всего лишь потенциометры. Потенциометр - это аналоговый переменный резистор. Вы можете измерить максимальное сопротивление с помощью мультиметра. Подключите мультиметр к + и -, чтобы определить сопротивление.

Припаяйте (в данном случае резисторы 10 Ом) 4 резистора к отверстиям + и - джойстиков, чтобы замкнуть цепь.

Кроме того, припаяйте одножильные провода к портам + (B + на этой плате) и - (B- на этой плате) на печатной плате. И припаяйте одножильные провода к сигнальным портам джойстиков.
Теперь вы подготовили свой контроллер к следующему шагу.

Этап 2. Цифра в аналоговый
Когда вы используете AnalogWrite с вашим Arduino, на выходе будет сигнал PWM (широтно-импульсная модуляция). Выигрыш будет превращать свое собственное значение в ВЫСОКОЕ и НИЗКОЕ с определенной частотой.
Наша подготовленная печатная плата не любит ШИМ, она ожидает стабильного напряжения.

Чтобы создать аналоговое значение, мы можем использовать различные цифро-аналоговые преобразователи, такие как микросхема ЦАП или лестничный фильтр RF.
По этой причине я хочу, чтобы этот проект был настолько простым, насколько это возможно. Я научу вас использовать фильтр нижних частот, который даст нам желаемый результат.
Чтобы создать фильтр нижних частот, вам понадобится конденсатор и резистор.

Одной из характеристик фильтра нижних частот является то, что аналоговое напряжение будет постепенно изменяться (это занимает некоторое время). Эта схема подходит мне лучше всего, потому что она дает желаемый результат и использует небольшое количество деталей.

Фаза 3:Схема Arduino
Основная часть нашей схемы - это фильтр нижних частот, который мы создали недавно. Сделайте четыре из них в ряд, и у нас будет аналоговое напряжение для всех четырех входов контроллера.


Подключите правильные выходы к правильным входам на плате контроллера. Перед загрузкой скетча Arduino убедитесь, что все правильно поняли.

Стандартная компоновка дрона следующая:
- Throttle => вверх / вниз на левой стороне контроллера
- Yaw => влево / вправо с левой стороны контроллера.
- Pitch => вверх / вниз с правой стороны контроллера.
- Roll => влево / вправо с правой стороны контроллера
Как только все будет подключено, вы можете загрузить свой скетч в Arduino MKR1000. Вы можете найти эскиз внизу этого урока.
Arduino заменит батареи и может посылать сигналы (в виде напряжения) на обойденные джойстики. На данный момент вы можете создавать свои собственные программы и эксперименты по управлению дроном с помощью ШИМ.

Теперь я покажу вам, как использовать Обработку и датчик MindWave для запуска дрона.
Этап 4:контроль над разумом
Установите все драйверы на свой компьютер. Этот датчик MindWave поставляется с компакт-диском.

Подключите датчик MindWave к компьютеру с помощью Bluetooth. Удерживайте кнопку вверх в течение 3 секунд, синий светодиод мигнет дважды, теперь его можно обнаружить.

После подключения вы начинаете обработку.
Установите библиотеку MindSet, созданную Хорхе С. С. Кардосо, для обработки с http://jorgecardoso.eu/processing/MindSetProcessing/#download
Разархивируйте библиотеку в папку с библиотеками. Вы можете найти папку с библиотеками в папке обработки.
Убедитесь, что ваши com-порты указаны правильно, иначе вы получите ошибку. Вы можете найти com-порты в диспетчере устройств.
Вы также можете найти com-порт Arduino в разделе «Инструменты» в среде разработки Arduino в разделе «Порт»
Вы также можете найти com-порт датчика MindWave в настройках ThinkGear Connector (вы получите эту программу при установке драйверов) в разделе «Параметры»
Receiver =new Serial (this, "COM10", 115200); mindSet =new MindSet (это, «COM5»);
Обработка связывается с вашим Arduino через последовательный порт. Вы можете изменить код обработки по своему вкусу, прочтите комментарии в скетче, чтобы понять, что происходит.
Запустите свой скетч обработки и сконцентрируйтесь на своем дроне. Когда ваш уровень концентрации поднимется выше 40%, дрон взлетит. Чем сложнее вы сконцентрируетесь, тем агрессивнее будет дрон. Вы можете посадить дрон, позволив своему разуму отвлечься и перестать концентрироваться.

Заключение
Я надеюсь, что этот урок дал вам некоторое представление о том, насколько просто можно взломать контроллер дрона (или любую печатную плату) и дать ему еще один ввод. Экспериментируя, вы можете выяснить, как управлять другими входами и как выполнять другие движения, помимо отталкивания и приземления.
Я очень рад видеть, какие крутые штуки вы сделаете!
Код
- Мастер обработки
- Управление дроном
Мастер обработки Обработка
Подключается к датчику MindWave через последовательный интерфейс Bluetooth и отправляет значение внимания в виде 8-битного целого числа на контроллер/ * * Drone mind control * * Этот скетч отправляет серийные значения на приемник-приемник * * Входные данные генерируются через Мобильная гарнитура Neurosky MindSet * * Создано 21 марта 2018 г. * Автор:Уэсли Хартогс * Коммуникационный и мультимедийный дизайн * Университет прикладных наук Аванса * * * /// import Serial libaryimport processing.serial. *; // Определить приемник SerialSerial Receiver; // Импорт MindSet libaryimport pt.citar.diablu.processing.mindset. *; MindSet mindSet; // Устанавливаем начальные значения int throttle =0; int yaw =127; int pitch =127; int roll =127; void setup () {size (150, 500); // Инициируем последовательную связь на приемнике COM10 =новый последовательный порт (this, "COM10", 115200); // Инициируйте связь MindSet // MindSet использует последовательную связь Bluetooth, // Проверьте COM-порт в ThinkGear Connector в диспетчере устройств mindSet =new MindSet (this, «COM5»); // Включить сглаживание smooth (); // Устанавливаем свойства обводки strokeWeight (5); ход (255); strokeCap (КВАДРАТ); // Устанавливаем цвет линии fill (255); } // setup () void draw () {// Начинаем с черным фоном background (0); // Рисуем горизонтальную линию до 40% снизу // Эта линия указывает минимальную (40%) линию, необходимую для внимания (0, высота * 0,60, ширина, высота * .60); // Нарисуйте линию от центра по горизонтали вверх // Эта линия указывает на ваше внимание // Высота отображается в обратном порядке, чтобы получить процент от вершины // Пример:при 40% (0,4) внимании значение высоты равно ( 100-40) 60% (0,6) от верхней линии (ширина * .5, высота, ширина * .5, высота * map (float (ВниманиеLevel) / 100, 0, 1, 1, 0)); // Перемещение уровня внимания на переменную газа // 40 =минимальное внимание, необходимое для выполнения каких-либо действий // 100 =максимальное внимание // 30 =8-битное минимальное значение для Arduino // 255 =8-битное максимальное значение для Arduino throttle =int (карта (уровень внимания, 40, 100, 30, 255)); // Ограничьте значения 8-битными значениями, чтобы предотвратить ошибки throttle =constrain (throttle, 0, 255); высота тона =ограничение (высота звука, 0, 255); roll =ограничение (roll, 0, 255); рыскание =ограничение (рыскание, 0, 255); // Когда возможна связь, отправляем значения в приемник Arduino if (Receiver .available ()> 0) {println ("ВниманиеLevel:" + ВниманиеLevel + "throttle:" + throttle + "yaw:" + yaw + "pitch:" + шаг + «крен:» + крен); приемник .write ("throttle:" + throttle + "yaw:" + yaw + "pitch:" + pitch + "roll:" + roll); }} // draw () // Killswitch, нажмите K для сброса и закрытия программы .void keyPressed () {if (key =='k' || key ==ESC) {if (Receiver .available ()> 0) { приемник .write ("throttle:" +0+ "yaw:" +127+ "pitch:" +127+ "roll:" +127); выход(); }}} // Переменные и функции MindSet int signalStrenght =0; int ВниманиеLevel =0; public void ВниманиеEvent (int ВниманиеLevel_val) {ВниманиеLevel =ВниманиеLevel_val;} // Эта функция активируется, когда соединение с MindSet не оптимальноpublic void badSignalEvent (int signalNoise) {// MindSet настраивается if (signalNoise ==200) {println («MindSet не касается вашей кожи!»); } // Сопоставляем мощность сигнала с процентом signalStrenght =int (map ((200-signalNoise), 200, 0, 100, 0)); println ("Уровень сигнала:" + signalStrenght + "%");}
Управление дроном Arduino
его скетч получает последовательные входные значения (от обработки) и отправляет эти значения на взломанный контроллер./ * * Drone control * * Этот скетч получает последовательные входные значения (от обработки) и отправляет эти значения на взломанный контроллер. * Используйте эту программу только с Arduino MKR1000 (или с другим выходом 3,3 В на базе Arduino) * * Схема:* - 4 фильтра нижних частот с конденсаторами 100 мкФ и резисторами 220 Ом * - Взломанный контроллер дрона * * Создано 21 марта 2018 г. * Автор:Wesley Хартогс * Коммуникация и мультимедийный дизайн * Университет прикладных наук Аванс * * Используйте этот эскиз на свой страх и риск. * * /// Устанавливаем начальные значения int throttle =0; int yaw =255/2; // 3.3v / 2int pitch =255/2; // 3.3v / 2int roll =255/2; // 3.3v / 2int throttlePin =2; // PWMint yawPin =3; // PWMint pitchPin =4; // PWMint rollPin =5; // PWMvoid setup () {// Начинаем последовательную связь со скоростью 115200 бод Serial.begin (115200); // Устанавливаем pinModes pinMode (throttlePin, OUTPUT); pinMode (yawPin, ВЫХОД); pinMode (pitchPin, ВЫХОД); pinMode (rollPin, OUTPUT);} void loop () {// Когда доступно последовательное соединение, получаем значения if (Serial.available ()> 0) {throttle =Serial.parseInt (); // Сохраняем первое целое значение из последовательного буфера yaw =Serial.parseInt (); // Сохранение второго целочисленного значения из последовательного буфера pitch =Serial.parseInt (); // Сохранение третьего целочисленного значения из последовательного буфера roll =Serial.parseInt (); // Сохранение четвертого целочисленного значения из последовательного буфера} // Запись значений в контроллер дрона // Используйте фильтр нижних частот или ЦАП (цифро-аналоговый преобразователь) для преобразования ШИМ в аналоговое напряжение analogWrite (throttlePin, throttle); analogWrite (yawPin, рыскание); analogWrite (pitchPin, pitch); analogWrite (rollPin, roll);}
Схема
Преобразование сигнала ШИМ в аналоговое напряжение

Производственный процесс
- Детектор языка TinyML на основе Edge Impulse и Arduino
- Игра с гироскопом Arduino с MPU-6050
- Цифровые игральные кости Arduino
- Рулетка DIY 37 LED
- Мини-аркада ATtiny85:Змейка
- Переносимый детектор дальности
- Управление увлажнителем Arduino
- Бот для захвата удаленного управления
- Гальваника медью
- NeoMatrix Arduino Pong