🧙‍♂️ Dron con Control Mental👈

dron de control mental

dron de control mental © GPL3+

Aprende a lanzar un dron con tu mente y un controlador pirateado usando un sensor MindWave, Arduino MKR1000 y Processing.

Componentes y suministros

Abx00004 iso ambos
Arduino MKR1000
×1
micro drone de carreras
×1
panasonic eca2am101
Condensador de 100 µF
×4
Fabricante 25fbf52 221r ​​​​pequeño
Resistencia 221 ohmios
×4
11026 02
Alambres de unión (genérico)
×12
12002 04
Protoboard (genérico)
×1
Neurosky de ondas mentales
×1

Herramientas y máquinas necesarias.

09507 01
Soldador (genérico)
A4kb1xynkid5ebvjyil7
destornillador digilent

Aplicaciones y servicios en línea

Acerca de este proyecto

Fondo

Los drones me parecen fascinantes, estas pequeñas máquinas voladoras que pueden hacerlo todo. Cuando tuve la oportunidad de hacer un proyecto con tecnología genial, decidí hacer realidad el sueño de un niño, controlar un dron con la mente.

En la investigación que hice para este proyecto, no pude encontrar ningún tutorial sobre cómo hackear fácilmente un controlador de dron. La mayoría de los tutoriales disponibles explican cómo crear tu propio dron usando un Arduino o cómo hackear el protocolo de transmisión.

Este tutorial cubre el concepto más básico de piratear una PCB para controlarla digitalmente. El objetivo de este tutorial es enseñarte los conceptos básicos que te permitirán experimentar por tu cuenta con un dron y crear algo divertido.

Aviso

Potencialmente, puede matar su dron o el controlador y dejarlo inoperable.

Este proyecto no cubrirá cómo dirigir su dron durante el despegue y el aterrizaje únicamente.

No necesariamente necesita un sensor MindWave / EEG, puede usar cualquier entrada que desee. ¡Pero controlar un dron con la mente es pura maravilla!

Videotutorial

Las habilidades que necesitas

Este tutorial asume que tiene alguna experiencia con soldadura y desoldar.

Lista de piezas

  • dron + controlador
  • Estación de soldadura + accesorios (alambre de cobre trenzado, bomba desoldadora, mano amiga, alambres de núcleo sólido, estaño)
  • multímetro
  • Sensor MindWave
  • Arduino MKR1000
  • tabla para cortar pan
  • Condensadores 4x 100uF
  • 4 resistencias de 220 Ω
  • 12 cables de puente
  • 6 cables con pinzas de cocodrilo (opcional)

También necesita 4 resistencias cuyo valor de resistencia aún no se conoce.

Fase 1: PCB de drones

Puedes usar casi cualquier dron que quieras. La mayoría de los controladores funcionan con joysticks de dos ejes. Estos controladores que vamos a pasar por alto.

Primero, abra la caja del controlador. Este controlador utiliza dos baterías de 1,5 V que son aproximadamente 3,3 V. Este valor es el mismo que el de la salida del Arduino MKR1000.

Es posible usar otro Arduino de su elección, pero tenga en cuenta que puede romper la PCB si le da más voltaje del que puede manejar. (Hablo por experiencia.)

Mide con un multímetro cuales son los voltajes medio, alto y bajo de los joysticks una vez alimentados. Anótelos para su uso posterior.

Desoldar los componentes del joystick de la PCB.

En realidad, estos componentes del joystick son solo potenciómetros. Un potenciómetro es una resistencia variable analógica. Puedes medir la resistencia máxima con un multímetro. Conecta el multímetro a + y – para leer la resistencia.

Suelde (en este caso resistencias de 10Ω) 4 resistencias en los orificios + y – de las palancas para completar el circuito.

Además, suelde los cables de núcleo sólido a los puertos + (B+ en esta placa) y – (B- en esta placa) en la PCB. Y suelde los cables de núcleo sólido a los puertos de señal de los joysticks.

Ya ha preparado su controlador para el siguiente paso.

Fase 2: digital a analógico

Cuando use AnalogWrite con su Arduino, la salida será una señal PWM (modulación de ancho de pulso). La ganancia transformará su propio valor ARRIBA y ABAJO a una frecuencia determinada.

A nuestra PCB preparada no le gusta el PWM, espera un voltaje constante.

Para crear un valor analógico, podemos usar una variedad de convertidores de digital a analógico, como un chip DAC o un filtro de escalera de RF.

Por esta razón, quiero mantener este proyecto lo más simple posible. Te enseñaré a usar un filtro de paso bajo, que nos dará la salida deseada.

Para crear un filtro de paso bajo, necesita un condensador y una resistencia.

Una de las características de un filtro de paso bajo es que el voltaje analógico cambia gradualmente (lleva un tiempo). Este circuito funciona mejor para mí porque me da el resultado deseado y usa una cantidad baja de partes.

Fase 3: El circuito Arduino

La parte principal de nuestro circuito es el filtro de paso bajo que creamos recientemente. Haga cuatro seguidos y tendremos voltaje analógico para las cuatro entradas del controlador.

Conecte las salidas correctas a las entradas correctas en el PCB del controlador. Asegúrese de tenerlo correctamente antes de descargar Arduino Sketch.

El diseño estándar del dron es el siguiente:

  • Gas => arriba/abajo en el lado izquierdo del controlador
  • Guiñada => izquierda/derecha en el lado izquierdo del controlador
  • Pitch => arriba/abajo en el lado derecho del controlador
  • Gire => izquierda/derecha en el lado derecho del joystick

Una vez que todo esté conectado, puede cargar su boceto en su Arduino MKR1000. Puedes encontrar el boceto al final de este tutorial.

El Arduino reemplazará las baterías y puede enviar señales (en forma de voltajes) a los joysticks puenteados. En este momento, puedes crear tus propios programas y experimentos para controlar el dron con PWM.

Ahora le mostraré cómo usar Processing y un sensor MindWave para hacer volar el dron.

Etapa 4: Control Mental

Instale todos los controladores en su computadora. Este sensor MindWave viene con un CD.

Empareje el sensor MindWave a su computadora con Bluetooth. Mantenga presionado el botón durante 3 segundos y el LED azul parpadeará dos veces, ahora es detectable.

Una vez conectado, se inicia el tratamiento.

Instale la librería MindSet creada por Jorge C.S Cardoso para procesar desde http://jorgecardoso.eu/processing/MindSetProcessing/#download

Descomprima la biblioteca en su carpeta de bibliotecas. Puede encontrar la carpeta de bibliotecas en su carpeta de proceso.

Asegúrese de que sus puertos COM sean correctos en la configuración, de lo contrario terminará con un error. Puede encontrar los puertos com en su administrador de dispositivos.

También puede encontrar el puerto com de Arduino en «Herramientas» en el IDE de Arduino en «Puerto»

También puede encontrar el puerto de comunicación del sensor MindWave en las preferencias del conector ThinkGear (obtiene este programa cuando instala los controladores) en «Opciones»

receiver = new Serial(this, "COM10", 115200);  
mindSet = new MindSet(this, "COM5");

El procesamiento se comunica con su Arduino a través de serie. Puede modificar el código de procesamiento a su gusto, lea los comentarios en el boceto para comprender lo que está sucediendo.

Ejecute su boceto de procesamiento y concéntrese en su dron. Cuando tu nivel de concentración supere el 40%, el dron despegará. Cuanto más te concentres, más agresivo será el dron. Puedes aterrizar el dron dejando que tu mente divague y dejes de concentrarte.

Conclusión

Espero que este tutorial te haya dado una idea de lo simple que es piratear un controlador de dron (o cualquier PCB) y darle otra entrada. Puede descubrir a través de la experimentación cómo obtener otras entradas para controlar y cómo realizar otros movimientos además del despegue y el aterrizaje.

¡No puedo esperar a ver las cosas geniales que harás!

codificado

maestro de procesamientoTratamiento
Se conecta al sensor MindWave a través de Bluetooth serie y envía el valor de atención como un número entero de 8 bits al controlador
/*
 * Drone mind control
 * 
 * This sketch sends Serial values to an receiver  receiver 
 * 
 * The input is generated via a Neurosky MindSet Mobile headset
 * 
 * Created 21 March 2018
 * By Wesley Hartogs 
 * Communication and Multimedia Design
 * Avans University of Applied Sciences
 * 
 * 
 */

// import Serial libary
import processing.serial.*;

// Define receiver  Serial
Serial receiver ;


// Import MindSet libary
import pt.citar.diablu.processing.mindset.*;
MindSet mindSet;

// Set inital values
int throttle   = 0;
int yaw        = 127;
int pitch      = 127;
int roll       = 127;


void setup() {

  size(150, 500);

  // Initiate Serial communication at COM10 
  receiver  = new Serial(this, "COM10", 115200);

  // Initiate MindSet communication
  // The MindSet uses Bluetooth Serial communication, 
  // Check the COM-pot in the ThinkGear Connector in your Device Manager
  mindSet = new MindSet(this, "COM5");

  // Enable anti-aliassing
  smooth();

  // Set stroke properties
  strokeWeight(5);
  stroke(255);
  strokeCap(SQUARE);

  // Set line colour
  fill(255);
  
} // setup()


void draw()
{
  // Start with a black background
  background(0);

  // Draw horizontal line to at 40% from bottom
  // This line indicates the minimum (40%) attention needed
  line( 0, height*0.60, width, height*.60);

  // Draw a line from the horizontal center upwards
  // This line gives an indication of your attention
  // The height is mapped in reverse to get a percentage from top
  // Example: by 40% (0.4) attention the height value is (100 - 40) 60% (0.6) from top
  line( width*.5, height, width*.5, height*map( float( attentionLevel ) / 100, 0, 1, 1, 0 ) );

  // Push the attention level to the throttle variable
  // 40 = minimum attention needed to do something
  // 100 = maximum attention
  // 30 = 8-bit min value for Arduino
  // 255 = 8-bit max value for Arduino
  throttle = int( map( attentionLevel, 40, 100, 30, 255 ) );

  // Constrain values to 8 bit values to prevent errors
  throttle    = constrain( throttle,  0, 255);
  pitch       = constrain( pitch,     0, 255);
  roll        = constrain( roll,      0, 255);
  yaw         = constrain( yaw,       0, 255);

  // When there is communication possible send the values to the Arduino receiver 
  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 );
  }
  
} // draw()

// Killswitch, press K to reset and close the program
void keyPressed() {
  if (key == 'k' || key == ESC) { 
    if ( receiver .available() > 0) 
    {  
      receiver .write("throttle: "+0+" yaw: "+127+" pitch: "+127+" roll: "+127);
      exit();
    }
  }
}


// MindSet variables and functions
int signalStrenght = 0;
int attentionLevel = 0;

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

// This function is activated when the connection with the MindSet is not optimal
public void poorSignalEvent( int signalNoise ) 
{
  // MindSet is adjusting
  if ( signalNoise == 200 ) {
    println( "Mindset is not touching your skin!" );
  }

  // Map the signal strenght to a percentage
  signalStrenght = int( map( ( 200-signalNoise ), 200, 0, 100, 0 ) );
  println( "Signal strength: " + signalStrenght + "%" );
}
control de dronesarduino
su boceto recibe valores de entrada en serie (del procesamiento) y envía esos valores al controlador pirateado.
/*
 * Drone control
 * 
 * This sketch receives Serial input values (from processing) and sends these values to the hacked controller.
 * Use this program only with the Arduino MKR1000 (or another 3.3 volt output based Arduino)
 * 
 * The circuit:
 * - 4 Low Pass filters with 100 µF capacitors and 220Ω resistors
 * - Hacked drone controller
 * 
 * Created 21 March 2018
 * By Wesley Hartogs 
 * Communication and Multimedia Design
 * Avans University of Applied Sciences
 * 
 * Use this sketch at your own risk.
 * 
 */

// Set initial values
int throttle  = 0;
int yaw       = 255/2; // 3.3v / 2
int pitch     = 255/2; // 3.3v / 2
int roll      = 255/2; // 3.3v / 2

int throttlePin   = 2; // PWM
int yawPin        = 3; // PWM
int pitchPin      = 4; // PWM
int rollPin       = 5; // PWM


void setup() {

  // Begin Serial communication at 115200 baud
  Serial.begin( 115200 );

  // Set pinModes
  pinMode( throttlePin,  OUTPUT );
  pinMode( yawPin,       OUTPUT );
  pinMode( pitchPin,     OUTPUT );
  pinMode( rollPin,      OUTPUT );
}

void loop() {
  // When there is an Serial connection available, get the values
  if ( Serial.available() > 0 ) {
    throttle    = Serial.parseInt();    // Store first interger value from Serial buffer
    yaw         = Serial.parseInt();    // Store second interger value from Serial buffer
    pitch       = Serial.parseInt();    // Store third interger value from Serial buffer
    roll        = Serial.parseInt();    // Store fourth interger value from Serial buffer
  }

  // Write values to the drone controller
  // Use a low pass filter or DAC (digital to analog converter) to convert PWM to an analog voltage
  analogWrite( throttlePin,  throttle );
  analogWrite( yawPin,       yaw      );
  analogWrite( pitchPin,     pitch    );
  analogWrite( rollPin,      roll     );
}

diagramas

Filtro de paso bajo único
Convierta la señal PWM en voltaje analógico
Paso bajo xwscbxfgsy
controlador de circuito
Circuito para cablear Arduino MK1000 a controlador pirateado
circuito cqz918wrzp

 

Fuente Arduino.cc