Slik kontrollerer du robotter med en spillkontroller og Arduino

Slik kontrollerer du robotter med en spillkontroller og Arduino / DIY

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

  • 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

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

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

Åpne StandardFirmata-skissen plassert på 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 i Verktøy Meny.

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. Hodet til Skisse menyen og velg Importer bibliotek> Legg til bibliotek. Dette vil hente opp Bidragssjef som vil se kjent for alle Arduino-brukere der ute.

Vi må installere tre biblioteker for å gjøre dette arbeidet. Først opp er Game Control Plus bibliotek. 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 bibliotek og installer det også.

Til slutt trenger vi Arduino (firma) bibliotek. 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. Åpen Fil> Eksempler, og velg ArduinoServo fra Bidragende biblioteker / Arduino (firmata) mappe. 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 skråstrekkene før println (Arduino.list ());, og lagre skissen. Kjør det ved å klikke på spillikonet, og hold øye med konsollen nederst. Dette vil liste alt som er knyttet til din COM porter.

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.

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

arduino = ny Arduino (dette, 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 Tegne() metode:

arduino.servoWrite (10, begrense (mouseX / 2, 0, 180)); // arduino.servoWrite (4, begrense (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 er koblet til, åpne Configurator eksempel prosjekt, og kjør det. Du får en meny som dette:

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

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 ringe den 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 variabel og denne boksen.

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

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

Klargjøre skikartmappen

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 / Processing / bibliotek / GameControlPlus / eksempler / Configurator og kopier mappen som er merket data. Denne mappen inneholder konfigurasjonsfilen vi nettopp har opprettet. Naviger til katalogen til den nylig lagrede tomme skissen, og lim inn datafappen.

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. *; importere net.java.games.input. *; importer org.gamecontrolplus. *; importer org.gamecontrolplus.gui. *; importer cc.arduino. *; importer org.firmata. *;

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

ControlDevice cont; ControlIO kontroll; Arduino Arduino; flyte tommel;

Våre setup () Metoden skaper 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:

tomromoppsett () størrelse (360, 200); control = ControlIO.getInstance (dette); cont = control.getMatchedDevice ("xbs"); hvis (forts == null) println ("ikke i dag chump"); // Skriv bedre utgangsstatus enn meg System.exit (-1);  // println (Arduino.list ()); arduino = ny Arduino (dette, 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 ble opprettet med størrelse() er ikke nødvendig, det vil 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:

offentlig tomgang getUserInput () thumb = map (cont.getSlider ("servoPos"). getValue (), -1, 1, 0, 180); 

Denne ene linjen med kode bruker vår datafil for å få vår navngitte kontroll servoPos, som er knyttet til høyre tommelstikk på kontrolleren, og leser verdier fra den. Det kartlegger deretter verdiene og lagrer verdien i vår tommel flyt variabel.

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

void draw () getUserInput (); bakgrunn (tommel, 100,255); arduino.servoWrite (10, (int) tommel); 

De tegne() ligner på løkke () metode i Arduino IDE. Hver ramme kalles den getUserInput () metode og oppdaterer tommel verdi. Den bruker denne verdien til å endre den røde verdien av bakgrunn() gir oss en visuell indikator på verdiendringen. Den skriver deretter denne verdien til servoen ved hjelp av arduino.servoWrite () funksjon. Legg merke til at vi må kaste tommel som en heltall som servoWrite-funksjonen tar to heltall (pin nummer 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 opplæring 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!

Utforsk mer om: Arduino, Game Controller, Robotics.