Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Mind Control Drone

Componenten en benodigdheden

Arduino MKR1000
× 1
Micro Racing Drone
× 1
Condensator 100 µF
× 4
Weerstand 221 ohm
× 4
Jumperdraden (algemeen)
× 12
Broodplank (algemeen)
× 1
Mindwave Neurosky
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)
Digilent Schroevendraaier

Apps en online services

Verwerking 3
Arduino IDE

Over dit project

Achtergrond

Ik vind drones fascinerend, die kleine vliegmachines die bijna alles kunnen. Toen ik de kans kreeg om een ​​project met coole technologie te doen, besloot ik een jongensdroom waar te maken, een drone besturen met je geest.

In het onderzoek dat ik voor dit project heb gedaan, heb ik geen tutorials gevonden die beschrijft hoe je gemakkelijk een drone-controller kunt hacken. De meeste beschikbare tutorials gaan over hoe je je eigen drone kunt maken met behulp van een Arduino of hoe je het transmissieprotocol kunt hacken.

Deze tutorial behandelt het meest elementaire concept van het hacken van een PCB om deze digitaal te besturen. Het doel van deze tutorial is om je de basisconcepten te leren waarmee je zelf kunt experimenteren met een drone en iets leuks kunt creëren.

Kennisgevingen

Je kunt je drone of de controller mogelijk doden en onbruikbaar maken.

Dit project behandelt niet het besturen van uw drone, alleen opstijgen en landen.

Je hebt niet per se een MindWave / EEG sensor nodig, je kunt elke input gebruiken die je wilt. Maar een drone besturen met je geest is pure awesomeness!

Video-tutorial

Vaardigheden die je nodig hebt

Deze tutorial gaat ervan uit dat je enige ervaring hebt met solderen en desolderen.

Onderdelenlijst

  • Drone + controller
  • Soldeerstation + toebehoren (gevlochten koperdraad, desoldeerpomp, helpende hand, massieve kerndraden, tin)
  • Multimeter
  • MindWave-sensor
  • Arduino MKR1000
  • Broodplank
  • 4x 100uF condensatoren
  • 4x 220Ω weerstanden
  • 12x jumperdraden
  • 6 krokodillenklemdraden (optioneel)

Je hebt ook 4 weerstanden nodig met een nog niet bekende weerstandswaarde.

Fase 1:Drone-printplaat

Je kunt bijna elke drone gebruiken die je wilt. De meeste controllers werken met joysticks met twee assen. Die joysticks gaan we omzeilen.

Open eerst de behuizing van uw controller. Deze controller gebruikt twee batterijen van 1,5 V die ongeveer 3,3 V zijn. Deze waarde is hetzelfde als de output van de Arduino MKR1000.

Het is mogelijk om een ​​andere Arduino naar keuze te gebruiken, maar houd er rekening mee dat je de printplaat kunt breken als je hem meer spanning geeft dan de print aankan. ( Ik spreek uit ervaring. )

Meet met een multimeter wat de midden, hoge en lage spanningen zijn van de joysticks eenmaal gevoed. Schrijf ze op voor later gebruik.

Desoldeer de joystickcomponenten van de print.

In werkelijkheid zijn deze joystickcomponenten slechts potentiometers. Een potentiometer is een analoge variabele weerstand. De maximale weerstand meet je met een multimeter. Sluit de multimeter aan op de + en - om de weerstand af te lezen.

Soldeer (in dit geval 10Ω weerstanden) 4 weerstanden op de gaten van de + en - van de joysticks om het circuit te voltooien.

Soldeer ook massieve kerndraden aan de + (B+ op dit bord) en - (B- op dit bord) poorten op de printplaat. En soldeer vaste kerndraden aan de signaalpoorten van de joysticks.

Nu heb je je controller voorbereid op de volgende stap.

Fase 2:Digitaal naar analoog

Wanneer u AnalogWrite aan gebruikt met uw Arduino, is de uitvoer een PWM-signaal (Pulse Width Modulation). De winst zal zijn eigen waarde HOOG en LAAG maken in een bepaalde frequentie.

Onze voorbereide PCB houdt niet van PWM, het verwacht een constante spanning.

Om een ​​analoge waarde te creëren, kunnen we verschillende digitaal naar analoog converters gebruiken, zoals een DAC-chip of een RF-ladderfilter.

Daarom wil ik dit project zo eenvoudig mogelijk houden. Ik zal je leren hoe je een laagdoorlaatfilter gebruikt, dat geeft ons de gewenste output.

Om een ​​laagdoorlaatfilter te maken heb je een condensator en een weerstand nodig.

Een van de kenmerken van een laagdoorlaatfilter is dat de analoge spanning geleidelijk verandert (dit duurt even). Dit circuit werkt het beste voor mij omdat het me het gewenste resultaat geeft en een laag aantal onderdelen gebruikt.

Fase 3:Het Arduino-circuit

Het belangrijkste onderdeel van ons circuit is het laagdoorlaatfilter dat we onlangs hebben gemaakt. Maak er vier op een rij en we hebben een analoge spanning voor alle vier de controller-ingangen.

Sluit de juiste uitgangen aan op de juiste ingangen op de controllerprint. Zorg ervoor dat je het goed hebt voordat je de Arduino Sketch uploadt.

De standaard drone-indeling is als volgt:

  • Throttle => omhoog / omlaag aan de linkerkant van de controller
  • Yaw => links / rechts aan de linkerkant van de controller
  • Pitch => omhoog / omlaag aan de rechterkant van de controller
  • Roll => links / rechts aan de rechterkant van de controller

Zodra alles is aangesloten, kun je je schets uploaden naar je Arduino MKR1000. Je vindt de schets onderaan deze tutorial.

De Arduino vervangt de batterijen en kan signalen (als spanningen) naar de overbrugde joysticks sturen. Op dit moment kun je je eigen programma's en experimenten bouwen om de drone met PWM te besturen.

Ik zal je nu laten zien hoe je Processing en een MindWave-sensor gebruikt om de drone op te tillen.

Fase 4:Mindcontrol

Installeer alle stuurprogramma's op uw computer. Deze MindWave-sensor wordt geleverd met een cd.

Koppel de MindWave-sensor met uw computer via Bluetooth. Houd de knop 3 seconden ingedrukt en de blauwe led knippert twee keer, hij is nu detecteerbaar.

Eenmaal verbonden begin je met verwerken.

Installeer de MindSet-bibliotheek gemaakt door Jorge C. S Cardoso voor verwerking vanaf http://jorgecardoso.eu/processing/MindSetProcessing/#download

Pak de bibliotheek uit in uw bibliothekenmap. U vindt de bibliothekenmap in uw verwerkingsmap.

Zorg ervoor dat je com-poorten correct zijn in de setup, anders krijg je een foutmelding. Je vindt de com-poorten in je apparaatbeheer.

Je kunt de com-poort van de Arduino ook vinden onder "Tools" in de Arduino IDE bij "Port"

Je kunt de com-poort van de MindWave-sensor ook vinden in de ThinkGear Connector Preferences (je krijgt dit programma als je de drivers installeert) onder "Opties"

ontvanger =nieuw serieel (dit, "COM10", 115200); mindSet =nieuwe MindSet(this, "COM5"); 

Processing communiceert met je Arduino via Serial. U kunt de verwerkingscode naar wens wijzigen, lees de opmerkingen in de schets om te begrijpen wat er aan de hand is.

Voer je Processing-schets uit en concentreer je op je drone. Wanneer je concentratieniveau boven de 40% komt, zal de drone opstijgen. Hoe harder je je concentreert, hoe agressiever de drone zal zijn. Je kunt de drone laten landen door je gedachten te laten afdwalen en te stoppen met concentreren.

Conclusie

Ik hoop dat deze tutorial je enig inzicht heeft gegeven in hoe eenvoudig het kan zijn om een ​​drone-controller (of een willekeurige PCB) te hacken en hem een ​​andere input te geven. Door te experimenteren kun je ontdekken hoe je andere input kunt krijgen en hoe je andere bewegingen kunt maken naast het opstijgen en landen.

Ik ben opgewonden om te zien wat voor coole dingen jullie gaan maken!

Code

  • Verwerkingsmaster
  • Dronebesturing
VerwerkingsmasterVerwerking
Verbindt met de MindWave-sensor via Bluetooth Serial en stuurt de attentiewaarde als een 8-bits geheel getal naar de controller
/* * Drone mind control * * Deze schets stuurt Seriële waarden naar een ontvanger-ontvanger * * De invoer wordt gegenereerd via een Neurosky MindSet Mobiele headset * * Gemaakt 21 maart 2018 * Door Wesley Hartogs * Communicatie en Multimedia Design * Avans Hogeschool * * */// import Serial libaryimport processing.serial.*;// Definieer ontvanger SerialSerial ontvanger;// Importeren MindSet libaryimport pt.citar.diablu.processing.mindset.*;MindSet mindSet;// Stel initiële waarden inint throttle =0;int yaw =127;int pitch =127;int roll =127;void setup() { size(150, 500); // Start seriële communicatie op COM10-ontvanger =nieuw serieel (this, "COM10", 115200); // Start MindSet-communicatie // De MindSet maakt gebruik van Bluetooth seriële communicatie, // Controleer de COM-pot in de ThinkGear Connector in uw Device Manager mindSet =new MindSet(this, "COM5"); // Schakel anti-aliassing smooth(); // Stel slageigenschappen strokeWeight(5) in; slag (255); strokeCap ​​(VIERKANT); // Stel lijnkleurvulling in (255); } // setup()void draw(){ // Begin met een zwarte achtergrond als achtergrond (0); // Trek een horizontale lijn naar 40% vanaf de onderkant // Deze lijn geeft de lijn aan die minimaal (40%) nodig is (0, hoogte*0.60, breedte, hoogte*.60); // Trek een lijn vanuit het horizontale midden naar boven // Deze lijn geeft een indicatie van je aandacht // De hoogte wordt omgekeerd in kaart gebracht om een ​​percentage van boven te krijgen // Voorbeeld:bij 40% (0,4) attentie is de hoogtewaarde ( 100 - 40) 60% (0,6) vanaf de bovenste regel (breedte*.5, hoogte, breedte*.5, hoogte*map( float(attentieLevel) / 100, 0, 1, 1, 0)); // Duw het aandachtsniveau naar de gasvariabele // 40 =minimale aandacht die nodig is om iets te doen // 100 =maximale aandacht // 30 =8-bit minwaarde voor Arduino // 255 =8-bits maximale waarde voor Arduino-gasklep =int( map( attentionLevel, 40, 100, 30, 255) ); // Beperk waarden tot 8 bit-waarden om fouten te voorkomen throttle =constrain (throttle, 0, 255); toonhoogte =beperking( toonhoogte, 0, 255); roll =beperken( roll, 0, 255); yaw =beperken ( yaw, 0, 255); // Als er communicatie mogelijk is, stuur de waarden naar de Arduino-ontvanger if ( receiver .available ()> 0) { println( "attentionLevel:"+attentionLevel+" throttle:"+throttle+" yaw:"+yaw+" pitch:"+ toonhoogte+" rol:"+rol); ontvanger .write( "throttle:"+throttle+" yaw:"+yaw+" pitch:"+pitch+" roll:"+roll); } } // draw()// Killswitch, druk op K om de programvoid keyPressed() { if (key =='k' || key ==ESC) { if ( receiver .available ()> 0) { ontvanger .write("throttle:"+0+" yaw:"+127+" pitch:"+127+" roll:"+127); Uitgang(); } }}// MindSet variabelen en functiesint signalStrenght =0;int attentionLevel =0;public void attentionEvent(int attentionLevel_val ) { attentionLevel =attentionLevel_val;}// Deze functie wordt geactiveerd wanneer de verbinding met de MindSet niet optimaal ispublic void poorSignalEvent( int signalNoise) { // MindSet past zich aan if (signalNoise ==200) { println ("Mindset raakt je huid niet aan!"); } // Wijs de signaalsterkte toe aan een percentage signaalsterkte =int( map (( 200-signalNoise), 200, 0, 100, 0 )); println("Signaalsterkte:" + signaalsterkte + "%" );}
DronebesturingArduino
zijn schets ontvangt seriële invoerwaarden (van verwerking) en stuurt deze waarden naar de gehackte controller.
/* * Dronebesturing * * Deze schets ontvangt seriële invoerwaarden (van verwerking) en stuurt deze waarden naar de gehackte controller. * Gebruik dit programma alleen met de Arduino MKR1000 (of een andere Arduino op basis van 3,3 volt output) * * Het circuit:* - 4 laagdoorlaatfilters met 100 µF condensatoren en 220Ω weerstanden * - Gehackte drone-controller * * Gemaakt op 21 maart 2018 * Door Wesley Hartogs * Communicatie en Multimedia Design * Avans Hogeschool * * Gebruik van deze schets is op eigen risico. * */// Initiële waarden instellenint throttle =0;int yaw =255/2; // 3.3v / 2int toonhoogte =255/2; // 3.3v / 2int rol =255/2; // 3.3v / 2int gaspedaalPin =2; // PWMint yawPin =3; // PWMint pitchPin =4; // PWMint rollPin =5; // PWMvoid setup() {// Begin seriële communicatie op 115200 baud Serial.begin( 115200); // Stel pinModes in pinMode (throttlePin, OUTPUT); pinMode (yawPin, OUTPUT); pinMode (pitchPin, OUTPUT); pinMode(rollPin, OUTPUT);}void loop() { // Als er een seriële verbinding beschikbaar is, haal dan de waarden op als (Serial.available()> 0) {throttle =Serial.parseInt(); // Bewaar de eerste interger-waarde van seriële buffer yaw =Serial.parseInt (); // Bewaar tweede intergerwaarde van Serial buffer pitch =Serial.parseInt (); // Bewaar derde intergerwaarde van Serial buffer roll =Serial.parseInt(); // Bewaar vierde interger-waarde van seriële buffer} // Schrijf waarden naar de drone-controller // Gebruik een laagdoorlaatfilter of DAC (digitaal naar analoog converter) om PWM om te zetten naar een analoge spanning analogWrite (throttlePin, throttle); analogWrite( yawPin, yaw ); analogWrite (pitchPin, toonhoogte); analoogWrite(rollPin, roll);}

Schema's

Converteer PWM-signaal naar analoge spanning Circuit om Arduino MK1000 aan te sluiten op de gehackte controller

Productieproces

  1. TinyML-taaldetector-gebaseerd op Edge Impulse &Arduino
  2. Arduino-gyroscoopspel met MPU-6050
  3. Arduino digitale dobbelstenen
  4. DIY 37 LED Roulette Game
  5. ATtiny85 Mini Arcade:Snake
  6. Draagbare afstandsdetector
  7. Arduino-luchtbevochtigerbediening
  8. Grijperbot met afstandsbediening
  9. galvaniseren met koper
  10. NeoMatrix Arduino Pong
  11. Light Sequence Creator