Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000

Компоненты и материалы

Arduino MKR1000×1
Микро-гоночный дрон (с пультом)×1
Конденсатор 100 мкФ×4
Резистор 220 Ом×4
Перемычки (набор)×12
Макетная плата×1
NeuroSky MindWave Mobile (EEG)×1

Инструменты

Приложения и сервисы

О проекте

Предыстория

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

В поисках туториалов не нашел ни одного, как просто взломать пульт дрона. Большинство руководств — как собрать дрон на Arduino или как взломать протокол передачи. Этот туториал покрывает базовую концепцию цифрового взлома печатной платы для управления ею. Цель — дать базу для собственных экспериментов.

Важные замечания

Видео-туториал

(Ссылка на видео в оригинале)

Необходимые навыки

Опыт пайки и распайки компонентов.

Список деталей

Этап 1: Плата пульта дрона

Подойдет почти любой дрон с двумя осевыми джойстиками. Мы их обойдем.

  1. Разберите корпус пульта. Этот пульт питется от двух элементов 1,5 В (≈3,3 В) — совпадает с логикой Arduino MKR1000. Важно: другой Arduino с 5 В логикой может сжечь плату пульта (говорию по опыту).
  2. Подайте питание на пульт, измерьте мультиметром среднее, максимальное и минимальное напряжения на выходе каждого джойстика. Запишите значения.
  3. Распаяйте оба джойстика с платы.
  4. Джойстики — это по сути потенциометры. Измерьте максимальное сопротивление между внешними выводами (+ и -) мультиметром.
  5. Припаяйте 4 резистора (в примере 10 Ом) на места внешних выводов джойстиков, замыкая цепь питания.
  6. Припаяйте монтажные провода к питанию платы (B+ и B-) и к сигнальным выводам джойстиков (4 провода). Пульт готов к следующему этапу.
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000

Этап 2: ЦАП — преобразование PWM в аналог

analogWrite() на Arduino выдает ШИМ (PWM). Плата пульта ждет стабильное аналоговое напряжение. Нужно преобразовать ШИМ в постоянное напряжение.

Вместо специализированных ЦАП или R-2R лестниц используем простой ФНЧ (фильтр низких частот) из резистора и конденсатора. Он плавно сглаживает ШИМ в аналоговое значение — идеально для нашей задачи и требует минимум деталей.

Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000

Этап 3: Схема с Arduino

Собираем 4 ФНЧ в ряд — по одному на каждый вход пульта (газ, рысканье, тангаж, крен).

Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000

Подключаем выходы ФНЧ к соответствующим входам платы пульта. Тщательно проверьте соответствие перед загрузкой скетча.

Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000

Стандартная раскладка каналов пульта:

Загружаем скетч в Arduino MKR1000 (код ниже). Теперь Arduino заменяет батарейки пульта и посылает напряжения на обойденные джойстики. Можно писать свои программы управления дроном через ШИМ.

Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000

Этап 4: Ментальное управление

  1. Установите драйверы MindWave (идут на диске).
  2. Сопрягите MindWave с компьютером по Bluetooth: держите кнопку 3 сек — синий индикатор мигнет дважды, устройство доступно для связывания.
  3. Запустите Processing.
  4. Установите библиотеку MindSet для Processing от Jorge C. S Cardoso: скачать. Распакуйте в папку libraries внутри папки Processing.
  5. Проверьте COM-порты в диспетчере устройств:
    • Arduino — в Arduino IDE: Tools → Port
    • MindWave — в ThinkGear Connector Preferences → Options
  6. В скетче Processing укажите правильные порты:
    receiver = new Serial(this, "COM10", 115200); // Arduino
    mindSet = new MindSet(this, "COM5");          // MindWave
    
  7. Запустите скетч Processing. Сосредоточьтесь на дроне. При уровне концентрации (attention) выше 40% дрон взлетит. Чем сильнее концентрация — тем агрессивнее полет. Расслабьте ум — дрон посадится.
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000

Заключение

Надеюсь, туториал показал, как просто можно взломать пульт дрона (или любую плату) и подать альтернативный вход. Экспериментируйте с другими входами и движениями!

С нетерпением жду ваших крутых проектов!

Код

Processing master (Processing)

Подключается к MindWave по Bluetooth Serial, отправляет значение attention как 8-битное целое в Arduino.

/* Drone mind control
 * Отправляет Serial-значения в Arduino
 * Вход: Neurosky MindSet Mobile headset
 * Created 21 March 2018 by Wesley Hartogs
 * Communication and Multimedia Design, Avans University of Applied Sciences */
import processing.serial.*;
import pt.citar.diablu.processing.mindset.*;

Serial receiver;
MindSet mindSet;

int throttle = 0, yaw = 127, pitch = 127, roll = 127;

void setup() {
  size(150, 500);
  receiver = new Serial(this, "COM10", 115200);
  mindSet = new MindSet(this, "COM5");
  smooth();
  strokeWeight(5); stroke(255); strokeCap(SQUARE); fill(255);
}

void draw() {
  background(0);
  line(0, height*0.60, width, height*0.60); // линия 40% от низа
  line(width*0.5, height, width*0.5, height*map(float(attentionLevel)/100, 0, 1, 1, 0));

  throttle = int(map(attentionLevel, 40, 100, 30, 255));
  throttle = constrain(throttle, 0, 255);
  pitch = constrain(pitch, 0, 255);
  roll = constrain(roll, 0, 255);
  yaw = constrain(yaw, 0, 255);

  if (receiver.available() > 0) {
    println("attentionLevel: "+attentionLevel+" throttle: "+throttle+" yaw: "+yaw+" pitch: "+pitch+" roll: "+roll);
    receiver.write("throttle: "+throttle+" yaw: "+yaw+" pitch: "+pitch+" roll: "+roll);
  }
}

void keyPressed() {
  if (key == 'k' || key == ESC) {
    if (receiver.available() > 0) {
      receiver.write("throttle: 0 yaw: 127 pitch: 127 roll: 127");
      exit();
    }
  }
}

int signalStrenght = 0, attentionLevel = 0;

public void attentionEvent(int attentionLevel_val) { attentionLevel = attentionLevel_val; }

public void poorSignalEvent(int signalNoise) {
  if (signalNoise == 200) println("Mindset is not touching your skin!");
  signalStrenght = int(map((200-signalNoise), 200, 0, 100, 0));
  println("Signal strength: " + signalStrenght + "%");
}

Drone Control (Arduino)

Принимает Serial-значения от Processing и выдает их на взломанный пульт через 4 ФНЧ.

/* Drone control
 * Принимает Serial от Processing, выводит на пульт через 4 ФНЧ (100 мкФ + 220 Ом)
 * Только для Arduino MKR1000 (или другой 3,3 В Arduino)
 * Created 21 March 2018 by Wesley Hartogs */
int throttle = 0, yaw = 127, pitch = 127, roll = 127;
int throttlePin = 2, yawPin = 3, pitchPin = 4, rollPin = 5;

void setup() {
  Serial.begin(115200);
  pinMode(throttlePin, OUTPUT);
  pinMode(yawPin, OUTPUT);
  pinMode(pitchPin, OUTPUT);
  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, yaw);
  analogWrite(pitchPin, pitch);
  analogWrite(rollPin, roll);
}

Схемы

Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000
Управление дроном силой мысли: EEG (MindWave) и Arduino MKR1000

Производственный процесс

  1. TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
  2. Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
  3. Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
  4. Создание рулетки на 37 светодиодов с Arduino Nano
  5. Мини-аркада на ATtiny85: Snake — ручная OLED-консоль своими руками
  6. Портативный дальномер на Arduino Nano: HC-SR04, питание 18650, 3D-корпус
  7. DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
  8. Продвинутый дистанционно управляемый манипулятор-робот для точной работы
  9. Медное гальваническое покрытие: умная система на Arduino UNO
  10. NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10