Slik kontrollerer du robotter med en spillkontroller og Arduino

Har du alltid ønsket å kontrollere en Arduino med en videospillkontroll? Vel nå kan du med ingenting mer enn denne artikkelen og en Xbox 360-kontroller!

Har du alltid ønsket å kontrollere en Arduino med en videospillkontroll?  Vel nå kan du med ingenting mer enn denne artikkelen og en Xbox 360-kontroller!
Annonse

Arduinos og lignende kompatible brett er en av de beste til enheter for DIY tinkerers overalt. Enten du er en nybegynner som nettopp har startet med Arduino eller noen som allerede har satt dem til bruk i livet ditt, gir de en plattform for utallige flotte prosjekter.

I dag skal vi utforske en kreativ måte å kontrollere en servo ved hjelp av behandling, og en Xbox360-kontroller. Hvis du allerede er pen spillutvikling savner, kan du være interessert i vår Custom Game Controller opplæring, som bruker Unity.

Denne opplæringen vil anta litt forkunnskap, hvis dette er din første forgang til Arduino fiddling, kan du finne vår Arduino guide nyttig her. På samme måte, hvis dette er første gang du bruker Java, kan det være litt forvirrende. Mens behandling bruker en forenklet versjon av plattformen, kan disse Java-konseptene og tipsene fortsatt hjelpe.

Hva trenger du

kontrollroboter med spillkontrolleren og arduino

  • 1 x Arduino. Vi bruker en UNO i dag.
  • 1 x hobby servo. Alt som vil fungere med Arduino-pinnene.
  • 1 x kablet Xbox360-kontroller. Selv om dette vil fungere teknisk med nesten hvilken som helst kontroller.
  • Flere hookup ledninger.

I tillegg til disse tingene må du også laste ned behandling og Arduino IDE fra deres respektive nettsteder.

Forbereder Arduino

kontrollroboter med spillkontrolleren og arduino

Først må vi feste vår servo. Ledningsfargene kan variere her, men som hovedregel festes rødt til 5v- pin, og brunt eller svart festes til GND- pin. Datalinjen, som vanligvis er gul eller oransje, festes til pin 10 .

Sjekk ledningen og koble Arduino til datamaskinen. Åpne Arduino IDE.

kontrollroboter med spillkontrolleren og arduino

Åpne StandardFirmata-skissen som ligger i Fil> Eksempler> Firmata> StandardFirmata . Denne skissen setter opp styret for ekstern kontroll over seriell port og er den samme som vi brukte i vår artikkel om styring av Arduino med Python. Slik programmerer og styrer du en Arduino med Python. Slik programmerer og styrer du en Arduino med Python. Dessverre er det Det er umulig å programmere en Arduino i Python direkte, men du kan styre den over USB ved hjelp av et Python-program. Dette er hvordan. Les mer . Last opp skissen til brettet.

Hvis opplastingen mislykkes, må du kontrollere at du har valgt riktig informasjon om bord og port på Verktøy- menyen.

Vår Arduino er klar til å gå!

Sette opp behandling

Åpne prosessering, du blir møtt med en blank skisse. Før vi gjør noe her, må vi installere noen få biblioteker. Gå til Sketch- menyen og velg Importer bibliotek> Legg til bibliotek . Dette vil ta opp bidragsbehandleren som vil se kjent for alle Arduino-brukere der ute.

kontrollroboter med spillkontrolleren og arduino

Vi må installere tre biblioteker for å gjøre dette arbeidet. Først opp er Game Control Plus- biblioteket. Dette gjør det mulig for oss å bruke vår spillkontroller med prosessering. Bruk søkevinduet til å finne det, og klikk på installasjonen nederst i høyre hjørne. Game Control Plus trenger et annet bibliotek installert for sitt konfigurasjonsverktøy, så la oss få det nå. Søk etter G4P- biblioteket og installer det også.

Til slutt trenger vi Arduino (firmata) biblioteket. Du gjettet det, søker etter det, og klikker på installering. Med disse tingene installert er vi klare til å fortsette å teste at alt vil fungere. Vi jobber med Windows 10 i dag, men behandling er tilgjengelig for de fleste plattformer, inkludert Raspberry Pi. Tenk på mulighetene!

Testing av Arduino

Før vi dykker inn i å skape en tilpasset skisse, la oss teste Arduino og Servo med bearbeiding. Åpne Fil> Eksempler, og velg ArduinoServo fra mappen Bidragede biblioteker / Arduino (firmata) . Vi bruker dette til å teste vår servo, men først må vi kanskje endre et par ting.

Rull ned gjennom skissen og finn denne linjen:

println(Arduino.list()); 

Hvis det er kommentert, fjern de to snittene før println (Arduino.list ());, og lagre skissen. Kjør det ved å klikke på spillikonet, og hold øye med konsollen nederst. Dette vil liste opp alt som er knyttet til COM- portene dine.

kontrollroboter med spillkontrolleren og arduino

I mitt tilfelle var min Arduino på COM 8, som var den tredje porten som er oppført her. Dette er viktig da koden i linjen under har en Array hvis verdi bestemmer hvilken COM-port som skal brukes.

kontrollroboter med spillkontrolleren og arduino

Vi må endre dette for å gjenspeile vår COM-port. For meg var det den tredje posisjonen, eller indeksnummer 2:

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

Vi må gjøre noen andre små endringer i denne koden for å teste den. Rull ned til der Arduino-pinnene er satt opp og kommentere en av linjene her. Bytt den andre til Pin 10 .

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

Vi må gjøre det samme i Draw () metoden:

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

Lagre skissen, og kjør den. Du bør kunne flytte din servo ved å flytte musen frem og tilbake over vinduet programmet genererer.

Hvis det ikke virker for deg, må du sjekke Servo-ledningen, og kontroller at du har riktig array-posisjon for COM-porten din. Når du vet at Arduino snakker pent med Behandling, er det på tide å gå videre.

Konfigurere kontrolleren

Game Control Plus-biblioteket vi bruker, kommer med en kraftig konfigurasjon også. Kontroller at kontrolleren din er plugget inn, åpne Konfiguratoreksempelprosjektet, og kjør det. Du får en meny som dette:

kontrollroboter med spillkontrolleren og arduino

Klikk på kontrollerenavnet ditt, og et mye større konfigurasjonsvindu vil dukke opp.

kontrollroboter med spillkontrolleren og arduino

Dette kan se ganske skremmende ut, men det er designet for å være så enkelt som mulig. På venstre side fyll ut den første nøkkelen med navnet du vil ha som en variabel. Denne variabelen vil kontrollere posisjonen til servoen, så jeg skal kalle det servoPos .

I boksen ved siden av det kan du gi en kort beskrivelse av hva den gjør. Nå plukk opp kontrolleren din og flytt staven du ønsker å bruke med din servo. Et lite eksperiment viser at riktig tommelstikk samsvarer med X Rotation-boksen. Dra en linje mellom servoPos- variabelen, og denne boksen.

Nå må vi lagre konfigurasjonen som en datafil. I øverste høyre hjørne av vinduet fyller du ut Enhetsrollefeltet og Filnavn- feltet.

Filnavnet er viktig, ettersom du bruker det i koden din. Jeg holder det enkelt ved å kalle det xbs . Klikk på Verifiser deretter Lagre . Dette skriver en fil med instruksjoner for vår kontroller som vi kan bruke senere.

kontrollroboter med spillkontrolleren og arduino

Klargjør skikkemappen

La oss sette opp vår arbeidsmappe. Åpne en blank behandlingsskisse, og lagre den under hvilket som helst navn du liker. Dette vil opprette en katalog for det i lagringsstedet.

Gå nå til Dokumenter / Behandling / Biblioteker / GameControlPlus / Examples / Configurator og kopier mappen merket data . Denne mappen inneholder konfigurasjonsfilen vi nettopp har opprettet. Naviger til katalogen til den nylig lagrede tomme skissen, og lim inn datafappen.

kontrollroboter med spillkontrolleren og arduino

Opprette egendefinert skisse

Nå er alt på plass, og vi kan begynne å lage en skisse ved hjelp av våre to biblioteker. Vi går gjennom dette trinnvis, men du kan laste ned hele skisse- og datafilen hvis du vil hoppe videre. Merk at du kanskje må endre koden for å gjenspeile Arduino COM-porter.

Begynn med å importere alle bibliotekene vi trenger:

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

Vi må også erklære vår ControlDevice, I / O, og Arduino, sammen med en float for å holde verdier fra våre tommelstikk:

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

Metoden setup () lager et lite vindu, en forekomst av kontrolleren, og samsvarer med enheten med vår config-fil. Her er det viktig å få filnavnet til vår konfigurasjonsdatafil riktig:

 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 det ikke er noen aktuell kontroller på dette stadiet, og avslutter programmet hvis det er nødvendig. Mens vinduet som er opprettet med størrelse () ikke er nødvendig, vil det gi oss noen tilbakemelding senere om vi får nyttige verdier fra vår kontroller. Vi initialiserer også vår Arduino og pin her, akkurat som vi gjorde mens du testet.

Nå lager vi en liten metode for å ta tak i inngangsverdien fra vår kontroller, og kartlegge den til verdier vår servo vil kunne bruke:

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

Denne ene linjen med kode bruker vår datafil for å få våre navngitte kontrollservoPos, som er koblet til høyre tommel på kontrolleren, og leser verdier fra den. Det kartlegger deretter verdiene og lagrer verdien i vår tommelflottningsvariabel .

Akkurat nå blir denne koden aldri kalt, vi skal fikse det nå.

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

Tegningen () ligner sløyfen () -metoden i Arduino IDE. Hver ramme kalles det metoden getUserInput () og oppdaterer tommelverdien . Den bruker denne verdien til å endre den røde verdien av bakgrunnen () som gir oss en visuell indikator på verdiendringen. Den skriver deretter denne verdien til servoen ved hjelp av arduino.servoWrite () -funksjonen. Legg merke til at vi må kaste tommel som en heltallverdi, da servoWrite-funksjonen tar to heltall (stiftnummer og vinkel) som sine argumenter.

Sjekk koden din for feil, lagre den, og klikk på kjør. Etter en liten forsinkelse for å initialisere Arduino, bør det se slik ut:

Kontroll med spillkontrolleren og Arduino: Ferdig!

Dette prosjektet var på mange måter ganske grundig for den uerfarne koderen. Lær med kodingsprosjekter: 9 utemy-kurs for nybegynnerprogrammer. Lær med kodingsprosjekter: 9 utemy-kurs for nybegynnerprogrammer. Den virkelige vanskeligheten er å finne gode programmeringsøvelser og kurs som ikke bare lære deg de nødvendige ferdighetene, men gjør det med praktiske prosjekter. Det er der Udemy går inn. Les mer, til tross for de fantastiske bibliotekene som er tilgjengelige for å hjelpe oss. Hva det representerer, er en ny måte å tenke på å kontrollere roboter og andre enheter du bygger.

Dette prosjektet ville følge perfekt med vår guide om å bygge en Laser Turret Pew Pew! Hvordan bygge en laserturret med en Arduino Pew Pew! Hvordan bygge en laserturret med en arduino kjeder du deg? Kan også bygge et lasertårn. Les mer, slik at du får full kontroll over det. Du kan sette opp en Piezo-summer som i vår enkle Arduino-alarm. Hvordan lage et enkelt Arduino-alarmsystem. Hvordan lage et enkelt Arduino-alarmsystem. Oppdag bevegelse, og skrem deg så høyt av en inntrenger med høylydende alarmlyder og blinkende lys. Lyder det morsomt? Selvfølgelig gjør det det. Det er målet med dagens Arduino-prosjekt, egnet ... Les mer veiledning og bruk kontrolleren din til å endre tonehøyde på lyseren eller fargen på lysene.

Eller du kan vel bygge en massiv robot og ta over jorden. Så lenge du hadde en USB-ledning lenge nok!

In this article