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
- Vous pouvez potentiellement détruire votre drone ou sa radiocommande.
- Ce projet ne couvre que le décollage et l'atterrissage, pas le pilotage complet.
- Un capteur EEG MindWave n'est pas obligatoire ; toute entrée peut être utilisée. Mais piloter un drone par la pensée, c'est génial !
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
- Drone + radiocommande
- Station de soudure + accessoires (tresse à dessouder, pompe à dessouder, troisième main, fils rigides, étain)
- Multimètre
- Capteur MindWave
- Arduino MKR1000
- Plaque d'essai
- 4 × condensateurs 100 µF
- 4 × résistances 220 Ω
- 12 × fils de connexion
- 6 × pinces crocodile (optionnel)
- 4 résistances de valeur à déterminer (selon les joysticks)
Phase 1 : Circuit imprimé du drone
Presque toutes les radiocommandes utilisent des joysticks à deux axes. Nous allons les court-circuiter.
- 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.
- Mesurez au multimètre les tensions milieu, haut et bas des joysticks sous tension. Notez-les.
- Dessoudez les composants des joysticks du circuit imprimé.
- Ces joysticks sont en fait des potentiomètres. Mesurez leur résistance maximale entre les bornes + et –.
- Soudez 4 résistances (10 Ω dans l'exemple) sur les trous + et – des joysticks pour boucler le circuit.
- Soudez des fils rigides sur les bornes + (B+) et – (B–) du circuit, ainsi que sur les bornes de signal des joysticks.







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.



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).


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 :
- Gaz (Throttle) → haut/bas côté gauche
- Lacet (Yaw) → gauche/droite côté gauche
- Tangage (Pitch) → haut/bas côté droit
- Roulis (Roll) → gauche/droite côté droit
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.

Phase 4 : Contrôle mental
- Installez les pilotes du MindWave (CD fourni).
- Appairez le capteur en Bluetooth : maintenez le bouton 3 s, la LED bleue clignote deux fois.
- Lancez Processing.
- Installez la bibliothèque MindSet de Jorge C. S Cardoso pour Processing : lien. Décompressez dans le dossier
librariesde Processing. - 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).
- 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.

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