Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Drone piloté par la pensée : utiliser l'EEG pour faire voler un micro drone de course

Composants et fournitures

Arduino MKR1000 × 1
Micro drone de course × 1
Condensateur 100 µF × 4
Résistance 220 Ω × 4
Fils de connexion (génériques) × 12
Plaque d'essai (générique) × 1
MindWave NeuroSky × 1

Outils et machines nécessaires

Fer à souder (générique)
Tournevis Digilent

Applications et services en ligne

Processing 3
Arduino IDE

À propos du projet

Contexte

Les drones me fascinent, ces petites machines volantes capables de tout. Quand j'ai eu l'occasion de faire un projet avec une technologie cool, j'ai décidé de réaliser un rêve d'enfant : contrôler un drone par la pensée.

Dans mes recherches, je n'ai trouvé aucun tutoriel expliquant comment pirater facilement une radiocommande de drone. La plupart portent sur la construction d'un drone avec Arduino ou le piratage du protocole de transmission.

Ce tutoriel couvre le concept de base du piratage d'un circuit imprimé pour le contrôler numériquement. Le but est d'apprendre les bases pour expérimenter par vous-même.

Avertissements

Tutoriel vidéo

(Vidéo intégrée dans le projet original.)

Compétences requises

Expérience en soudure et dessoudage nécessaire.

Liste des pièces

Phase 1 : Circuit imprimé du drone

Presque toutes les radiocommandes utilisent des joysticks à deux axes. Nous allons les court-circuiter.

  1. Ouvrez le boîtier de la radiocommande. Celle-ci utilise deux piles 1,5 V (≈ 3,3 V), tension compatible avec la sortie de l'Arduino MKR1000. Attention : un Arduino 5 V pourrait endommager le circuit.
  2. Mesurez au multimètre les tensions milieu, haut et bas des joysticks sous tension. Notez-les.
  3. Dessoudez les composants des joysticks du circuit imprimé.
  4. Ces joysticks sont en fait des potentiomètres. Mesurez leur résistance maximale entre les bornes + et –.
  5. Soudez 4 résistances (10 Ω dans l'exemple) sur les trous + et – des joysticks pour boucler le circuit.
  6. Soudez des fils rigides sur les bornes + (B+) et – (B–) du circuit, ainsi que sur les bornes de signal des joysticks.
Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course
Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course
Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course
Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course
Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course
Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course
Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course

Phase 2 : Numérique vers analogique

La fonction analogWrite() de l'Arduino génère un signal PWM (modulation de largeur d'impulsion). Le circuit imprimé attend une tension continue stable.

Pour convertir le PWM en tension analogique, on utilise un filtre passe-bas (résistance + condensateur). C'est simple, peu de composants, et la tension de sortie varie progressivement, ce qui convient bien.

Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course
Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course
Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course

Phase 3 : Circuit Arduino

On réalise quatre filtres passe-bas en série, un pour chaque entrée de la radiocommande (gaz, lacet, tangage, roulis).

Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course
Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course

Connectez les sorties des filtres aux bonnes entrées sur le circuit de la radiocommande. Vérifiez bien avant de téléverser le sketch.

Disposition standard des commandes :

Une fois tout connecté, téléversez le sketch sur l'Arduino MKR1000 (disponible en bas du tutoriel). L'Arduino remplace les piles et envoie des signaux de tension aux joysticks court-circuités. Vous pouvez maintenant créer vos propres programmes pour contrôler le drone en PWM.

Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course

Phase 4 : Contrôle mental

  1. Installez les pilotes du MindWave (CD fourni).
  2. Appairez le capteur en Bluetooth : maintenez le bouton 3 s, la LED bleue clignote deux fois.
  3. Lancez Processing.
  4. Installez la bibliothèque MindSet de Jorge C. S Cardoso pour Processing : lien. Décompressez dans le dossier libraries de Processing.
  5. Vérifiez les ports COM dans le gestionnaire de périphériques : Arduino (sous « Outils » > « Port » dans l'IDE Arduino), MindWave (dans ThinkGear Connector Preferences > Options).
  6. Adaptez les ports COM dans le code Processing :
receiver = new Serial(this, "COM10", 115200); 
mindSet = new MindSet(this, "COM5");

Processing communique avec l'Arduino via série. Modifiez le code à votre guise (commentaires explicatifs inclus).

Lancez le sketch Processing et concentrez-vous sur le drone. Au-dessus de 40 % d'attention, le drone décolle. Plus vous vous concentrez, plus il monte. Pour l'atterrir, laissez votre esprit divaguer.

Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course

Conclusion

J'espère que ce tutoriel vous donne un aperçu de la simplicité de pirater une radiocommande de drone (ou tout circuit imprimé) pour y injecter une autre entrée. Expérimentez pour ajouter d'autres mouvements au-delà du décollage/atterrissage. Hâte de voir vos créations !

Code

Processing master (Processing)

Se connecte au capteur MindWave via Bluetooth Série et envoie la valeur d'attention comme un entier 8 bits au contrôleur.

/* Drone mind control ... */ 
import processing.serial.*; 
Serial receiver; 
import pt.citar.diablu.processing.mindset.*; 
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); 
  line(width*.5, height, width*.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)

Reçoit les valeurs série (depuis Processing) et les envoie au contrôleur piraté. À utiliser uniquement avec Arduino MKR1000 (ou autre Arduino 3,3 V).

/* Drone control ... */ 
int throttle = 0, yaw = 255/2, pitch = 255/2, roll = 255/2; 
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); 
} 

Schémas

Conversion signal PWM en tension analogique :

Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course

Circuit de câblage Arduino MKR1000 vers contrôleur piraté :

Drone piloté par la pensée : utiliser l EEG pour faire voler un micro drone de course

Processus de fabrication

  1. Détecteur de langue TinyML avec Edge Impulse sur Arduino Nano 33 BLE Sense
  2. Construire un jeu gyroscopique temps réel avec Arduino Nano et capteur MPU-6050
  3. Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
  4. Créer votre propre jeu de roulette à 37 LED avec Arduino Nano
  5. ATtiny85 Mini Arcade : Snake – Construire une console de jeu portable OLED
  6. Détecteur de distance portable – Kit DIY Arduino Nano avec HC-SR04, alimentation 18650 et boîtier imprimé 3D
  7. Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
  8. Robot préhenseur télécommandé avancé pour manipulation de précision
  9. Projet de galvanoplastie au cuivre : Construisez un système intelligent avec Arduino UNO