Sådan styres robotter med en spilkontroller og Arduino

Har du altid ønsket at styre en Arduino med en videospil controller? Nå nu kan du med intet mere end denne artikel og en Xbox 360 controller!

Har du altid ønsket at styre en Arduino med en videospil controller?  Nå nu kan du med intet mere end denne artikel og en Xbox 360 controller!
Reklame

Arduinos og lignende kompatible boards er et af de bedste til enheder til DIY tinkerers overalt. Uanset om du er en nybegynder, der lige er begyndt med Arduino eller en person, der allerede har sat dem til brug i dit liv, er de en platform for utallige fantastiske projekter.

I dag vil vi udforske en kreativ måde at styre en servo ved hjælp af Processing, og en Xbox360 controller. Hvis du allerede er smuk spiludvikling savner, kan du være interesseret i vores Custom Game Controller tutorial, som bruger Unity.

Denne vejledning tager lidt forudgående viden, hvis dette er din første foray i Arduino fiddling, kan du finde vores Arduino guide nyttig her. På samme måde, hvis dette er din første gang at bruge Java, kan det være lidt forvirrende. Mens Processing bruger en forenklet version af platformen, kan disse Java-koncepter og tip stadig hjælpe.

Hvad du har brug for

kontrol robotter med game controller og arduino

  • 1 x Arduino. Vi bruger en UNO i dag.
  • 1 x hobby servo. Alt der vil fungere med Arduino-stifterne.
  • 1 x kablet Xbox360 controller. Selv om dette vil fungere teknisk med næsten enhver controller.
  • Flere hookup ledninger.

Ud over disse ting skal du også downloade Processing og Arduino IDE fra deres respektive hjemmesider.

Forbereder Arduino

kontrol robotter med game controller og arduino

Først skal vi vedhæfte vores servo. Kabelfarverne kan variere her, men som regel fastgøres rødt til 5v- stiften, og brun eller sort fastgøres til GND- stiften. Datalinjen, som normalt er gul eller orange, fastgøres til pin 10 .

Tjek dine ledninger og tilslut Arduino til computeren. Åbn Arduino IDE.

kontrol robotter med game controller og arduino

Åbn StandardFirmata-skitsen, der findes i Filer> Eksempler> Firmata> StandardFirmata . Denne skitse opretter bestyrelsen for ekstern kontrol over seriel porten og er den samme som vi brugte i vores artikel om styring af Arduino med Python Sådan programmeres og styres en Arduino med Python Sådan programmeres og styres en Arduino med Python Desværre er det Det er umuligt at programmere en Arduino i Python direkte, men du kan styre den over USB ved hjælp af et Python-program. Sådan er det. Læs mere . Upload skitsen til tavlen.

Hvis uploaden fejler, skal du kontrollere, at du har valgt dine korrekte kort- og portoplysninger i menuen Værktøjer .

Vores Arduino er klar til at gå!

Opsætning af behandling

Åbn forarbejdning, du bliver mødt med en blank skitse. Før vi gør noget her skal vi installere et par biblioteker. Gå til Sketch- menuen, og vælg Importer bibliotek> Tilføj bibliotek . Dette vil medføre bidragsforvalteren, som vil blive kendt for enhver Arduino-bruger derude.

kontrol robotter med game controller og arduino

Vi skal installere tre biblioteker for at gøre dette arbejde. For det første er Game Control Plus- biblioteket. Dette gør det muligt for os at bruge vores spilcontroller med Processing. Brug søgevinduet til at finde det, og klik på installationen i nederste højre hjørne. Game Control Plus har brug for et andet bibliotek installeret til dets konfigurationsværktøj, så lad os få det nu. Søg efter G4P biblioteket og installer det også.

Endelig har vi brug for Arduino (firmata) biblioteket. Du gættede det, søg efter det, og klik på installer. Med disse ting installeret er vi klar til at fortsætte med at teste, at alt vil virke. Vi arbejder med Windows 10 i dag, men behandling er tilgængelig for de fleste platforme, herunder Raspberry Pi. Forestil dig mulighederne!

Testning af Arduino

Før vi dykker ind i at lave en brugerdefineret skitse, lad os teste Arduino og Servo med Processing. Åbn Filer> Eksempler, og vælg ArduinoServo fra mappen Bidragede biblioteker / Arduino (firmata) . Vi bruger dette til at teste vores servo, men først må vi måske ændre et par ting.

Rul ned gennem skissen og find denne linje:

println(Arduino.list()); 

Hvis det kommenteres, skal du fjerne de to skråstreger før println (Arduino.list ());, og gem skissen. Kør det ved at klikke på afspilningsikonet og holde øje med konsollen nederst. Dette vil liste alt, der er knyttet til dine COM- porte.

kontrol robotter med game controller og arduino

I mit tilfælde var min Arduino på COM 8, som var den tredje havn, der er angivet her. Dette er vigtigt, da koden i linjen herunder har et array, hvis værdi bestemmer hvilken COM-port der skal bruges.

kontrol robotter med game controller og arduino

Vi skal ændre dette for at afspejle vores COM-port. For mig var det den tredje position eller indeks nummer 2:

 arduino = new Arduino(this, Arduino.list()[2], 57600); 

Vi skal lave et par andre små ændringer til denne kode for at teste den. Rul ned til, hvor Arduino-stifterne er konfigureret og kommentere en af ​​linjerne her. Skift den anden til Pin 10 .

 //arduino.pinMode(4, Arduino.SERVO); arduino.pinMode(10, Arduino.SERVO); 

Vi skal gøre det samme i Draw () -metoden:

 arduino.servoWrite(10, constrain(mouseX / 2, 0, 180)); // arduino.servoWrite(4, constrain(180 - mouseX / 2, 0, 180)); 

Gem skissen og kør den. Du skal kunne flytte din servo ved at flytte musen frem og tilbage over vinduet, programmet genererer.

Hvis det ikke virker for dig, skal du kontrollere din Servo-ledninger og kontrollere, at du har den rigtige array-position for din COM-port. Når du ved, at Arduino taler godt med Processing, er det tid til at gå videre.

Konfiguration af controlleren

Det Game Control Plus-bibliotek, vi bruger, leveres også med en kraftfuld konfiguration. Sørg for, at din controller er tilsluttet, åbn Konfiguratoreksempelprojektet, og kør det. Du får en menu som denne:

kontrol robotter med game controller og arduino

Klik på dit controller navn, og et meget større konfigurationsvindue vil dukke op.

kontrol robotter med game controller og arduino

Dette kan se ret skræmmende ud, men det er designet til at være så enkelt som muligt. På venstre side udfyld den første nøgle med det navn, du vil have som variabel. Denne variabel vil styre servoens position, så jeg skal kalde det servoPos .

I boksen ved siden af ​​kan du give en kort beskrivelse af, hvad det gør. Hent nu din controller og flyt den pind, du vil bruge med din servo. Et lille eksperiment viser, at den rigtige tommelfinger svarer til X-rotationsboksen. Træk en linje mellem servoPos- variablen, og denne boks.

Nu skal vi gemme vores konfiguration som en datafil. I øverste højre hjørne af vinduet udfyldes feltet Enhedsrolle og Filnavn .

Filnavnet er vigtigt, da du bruger det i din kode. Jeg holder det simpelt ved at kalde det xbs . Klik på Bekræft derefter Gem . Dette skriver en fil med instruktioner til vores controller, som vi senere kan bruge.

kontrol robotter med game controller og arduino

Forbereder skræddersyningsmappen

Lad os oprette vores arbejdsmappe. Åbn en tom behandlingsskitse, og gem den under det navn du vil. Dette vil oprette en mappe til den i gemstedet.

Gå nu til Dokumenter / Behandling / Biblioteker / GameControlPlus / Examples / Configurator og kopier mappen mærket data . Denne mappe indeholder den konfigurationsfil, vi netop har oprettet. Naviger til mappen til din nyligt gemte blank skitse, og indsæt datapappen.

kontrol robotter med game controller og arduino

Oprettelse af den tilpassede skitse

Nu er alt på plads, og vi kan begynde at lave en skitse ved hjælp af vores to biblioteker. Vi gennemgår dette trin for trin, men du kan downloade den fulde skitse og data mappe, hvis du vil springe videre. Bemærk, at du muligvis stadig skal ændre koden for at afspejle dine Arduino COM-porte.

Begynd ved at importere alle de biblioteker, vi skal bruge:

 import processing.serial.*; import net.java.games.input.*; import org.gamecontrolplus.*; import org.gamecontrolplus.gui.*; import cc.arduino.*; import org.firmata.*; 

Vi skal også erklære vores ControlDevice, I / O og Arduino, sammen med en float for at holde værdier fra vores tommelfingre:

 ControlDevice cont; ControlIO control; Arduino arduino; float thumb; 

Vores setup () -metode opretter et lille vindue, en instans af controlleren, og matcher enheden med vores config-fil. Her er det vigtigt at få filnavnet til vores konfigurationsdatafil korrekt:

 void setup() { size(360, 200); control = ControlIO.getInstance(this); cont = control.getMatchedDevice("xbs"); if (cont == null) { println("not today chump"); // write better exit statements than me System.exit(-1); } // println(Arduino.list()); arduino = new Arduino(this, Arduino.list()[2], 57600); arduino.pinMode(10, Arduino.SERVO); } 

Vi kontrollerer også, om der ikke er nogen relevant controller på dette tidspunkt, og afslutter programmet, hvis det er nødvendigt. Mens vinduet oprettet med størrelse () ikke er nødvendigt, vil det give os en tilbagemelding senere om, hvorvidt vi får nyttige værdier fra vores controller. Vi initialiserer også vores Arduino og pin her ligesom vi gjorde mens du tester.

Nu skaber vi en lille metode til at hente inputværdien fra vores controller og kortlægge den til værdier vores servo vil kunne bruge:

 public void getUserInput() { thumb = map(cont.getSlider("servoPos").getValue(), -1, 1, 0, 180); } 

Denne ene linie kode bruger vores datafil til at få vores navngivne kontrol servoPos, som er knyttet til højre tommelfingerkontrol på controlleren og læser værdier fra den. Det kortlægger derefter værdierne og gemmer værdien i vores tommelflotter- variabel.

Lige nu bliver denne kode aldrig kaldt, vi retter det nu.

 void draw() { getUserInput(); background(thumb, 100, 255); arduino.servoWrite(10, (int)thumb); } 

Tegningen () svarer til loop () -metoden i Arduino IDE. Hver ramme kalder det metoden getUserInput () og opdaterer tommelfingsværdien . Det bruger denne værdi til at ændre den røde værdi af baggrunden (), der giver os en visuel indikator for værdiændringen. Det skriver så denne værdi til servoen ved hjælp af arduino.servoWrite () -funktionen. Bemærk at vi skal kaste tommelfinger som en heltalværdi, da servoWrite-funktionen tager to heltal (stregnummer og vinkel) som sine argumenter.

Tjek din kode for fejl, gem den, og klik på Kør. Efter en let forsinkelse for at initialisere Arduino, skal det se sådan ud:

Kontrol med Game Controller og Arduino: Færdig!

Dette projekt var på mange måder ret i dybden for den uerfarne koderen Lær med kodningsprojekter: 9 Udemy-kurser for begynderprogrammeren Lær med kodningsprojekter: 9 Udemy-kurser til begynderprogrammeren Det reelle problem er at finde gode programmeringstutorials og kurser, der ikke kun lære dig de nødvendige færdigheder, men gør det med praktiske projekter. Det er her Udemy træder ind. Læs mere, på trods af de fantastiske biblioteker, der er tilgængelige for at hjælpe os. Hvad det repræsenterer, er en ny måde at tænke på at kontrollere robotter og andre enheder, du opbygger.

Dette projekt ville gå perfekt sammen med vores vejledning om at opbygge en Laser Turret Pew Pew! Sådan bygger du en laserturret med en Arduino Pew Pew! Hvordan man opbygger en laserturret med en Arduino Er du keder dig? Kan lige så godt bygge et lasertårn. Læs mere, så du får fuld kontrol over det. Du kan oprette en Piezo-summer som i vores Simple Arduino Alarm Sådan laver du et simpelt Arduino Alarmsystem Sådan laver du et simpelt Arduino Alarmsystem Detekterer bevægelse, så skræm i hælen ud af en indtrenger med højlydede alarmlyde og blinkende lys. Lyder det sjovt? Det gør det selvfølgelig. Det er målet med dagens Arduino-projekt, egnet ... Læs mere vejledning og brug din controller til at ændre tonehøjde eller lysets lysstyrke.

Eller du kan godt bygge en massiv robot og tage over jorden. Så længe du havde en USB-ledning længe nok!

In this article