Hur man kontrollerar robotar med en spelkontroller och Arduino

Har du alltid velat kontrollera en Arduino med en videospelkontroll? Tja nu kan du med ingenting mer än den här artikeln och en Xbox 360-kontroller!

Har du alltid velat kontrollera en Arduino med en videospelkontroll?  Tja nu kan du med ingenting mer än den här artikeln och en Xbox 360-kontroller!
Annons

Arduinos och liknande kompatibla brädor är en av de bästa enheterna för DIY tinkerers överallt. Oavsett om du är en nybörjare som precis börjat med Arduino eller någon som redan har satt dem att använda i ditt liv, ger de en plattform för otaliga fantastiska projekt.

Idag utforskar vi ett kreativt sätt att styra en servo med Processing och en Xbox360-kontroller. Om du redan är vacker spelutveckling kunnig, kan du vara intresserad av vår Custom Game Controller handledning, som använder Unity.

Denna handledning tar lite förkunnande om det här är din första fördjupning i Arduino fiddling, kan du hitta vår Arduino guide här. På samma sätt, om det här är första gången du använder Java kan det vara lite förvirrande. Medan Processing använder en förenklad version av plattformen kan dessa Java-koncept och tips fortfarande hjälpa till.

Vad du behöver

kontrollrobotar med spelkontroll och arduino

  • 1 x Arduino. Vi använder en UNO idag.
  • 1 x hobby servo. Något som kommer att fungera med Arduino stiften.
  • 1 x trådbunden Xbox360-kontroller. Även om detta kommer att fungera tekniskt med nästan vilken som helst kontroller.
  • Flera kopplingstrådar.

Utöver dessa saker måste du också ladda ner Processing och Arduino IDE från deras respektive webbplatser.

Förbereda Arduino

kontrollrobotar med spelkontroll och arduino

Först måste vi fästa vår servo. Kabelfärgorna kan variera här, men i allmänhet fäster det röda5v- stiftet, och brunt eller svart fästs till GND- stiftet. Datalinjen, som vanligtvis är gul eller orange, fäster till stift 10 .

Kontrollera kablarna och anslut Arduino till datorn. Öppna upp Arduino IDE.

kontrollrobotar med spelkontroll och arduino

Öppna skannern StandardFirmata som finns i Arkiv> Exempel> Firmata> StandardFirmata . Den här skissen sätter upp styrelsen för extern kontroll över seriell port och är samma som vi använde i vår artikel om att styra Arduino med Python Hur man programmerar och styr en Arduino med Python Hur man programmerar och styr en Arduino med Python Det är tyvärr det Det är omöjligt att direkt programmera en Arduino i Python, men du kan styra den över USB med ett Python-program. Här är hur. Läs mer . Ladda upp skissen till styrelsen.

Om uppladdningen misslyckas kontrollerar du att du har valt dina korrekta ombord- och portdetaljer i Verktyg- menyn.

Vår Arduino är redo att gå!

Ställa in bearbetning

Öppna processen, du kommer att hälsas med en blank skiss. Innan vi gör någonting här behöver vi installera några bibliotek. Gå till Sketch- menyn och välj Importera bibliotek> Lägg till bibliotek . Detta kommer att ge upp bidragsansvarig som kommer att bli bekant för alla Arduino-användare där ute.

kontrollrobotar med spelkontroll och arduino

Vi måste installera tre bibliotek för att göra detta arbete. Först upp är Game Control Plus- biblioteket. Så här kan vi använda vår spelkontroll med Processing. Använd sökfönstret för att hitta den och klicka på installationen i nedre högra hörnet. Game Control Plus behöver ett annat bibliotek installerat för sitt konfigurationsverktyg, så låt oss få det nu. Sök efter G4P- biblioteket och installera det också.

Slutligen behöver vi Arduino (firmata) biblioteket. Du gissade det, leta efter det och klicka på Installera. Med dessa saker installerade är vi redo att fortsätta med att testa att allt kommer att fungera. Vi arbetar idag med Windows 10, men bearbetning är tillgänglig för de flesta plattformar, inklusive Raspberry Pi. Föreställ dig möjligheterna!

Testa Arduino

Innan vi dyker in för att skapa en anpassad skiss, låt oss testa Arduino och Servo med bearbetning. Öppna Arkiv> Exempel och välj ArduinoServo från mappen Bidragande bibliotek / Arduino (firmata) . Vi använder detta för att testa vår servo, men först kan vi behöva byta ett par saker.

Bläddra ner genom skissen och hitta den här raden:

println(Arduino.list()); 

Om det kommenteras, ta bort de två snedstreckningarna före println (Arduino.list ());, och spara skissen. Kör det genom att klicka på ikonen för spel och hålla koll på konsolen längst ner. Här listas allt som är kopplat till dina COM- portar.

kontrollrobotar med spelkontroll och arduino

I mitt fall var min Arduino på COM 8, som var den tredje hamnen som anges här. Detta är viktigt eftersom koden i raden nedan har en Array vars värde bestämmer vilken COM-port som ska användas.

kontrollrobotar med spelkontroll och arduino

Vi behöver ändra detta för att återspegla vår COM-port. För mig var det den tredje positionen, eller index nummer 2:

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

Vi måste göra några andra små ändringar i den här koden för att testa den. Bläddra ner till var Arduino-stiften är inställda och kommentera en av raderna här. Ändra den andra till Pin 10 .

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

Vi behöver göra samma sak i Draw () -metoden:

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

Spara skissen och kör den. Du borde kunna flytta din servo genom att flytta musen fram och tillbaka över det fönster som programmet genererar.

Om det inte fungerar för dig, kontrollera din servo-ledningar och kontrollera att du har rätt matrisposition för din COM-port. När du väl vet att Arduino pratar snyggt med Bearbetning, är det dags att gå vidare.

Konfigurera kontrollenheten

Game Control Plus-biblioteket vi använder kommer också med en kraftfull konfiguration. Se till att din styrenhet är inkopplad, öppna konfigurationsprojektet Konfigurator och kör det. Du får en meny så här:

kontrollrobotar med spelkontroll och arduino

Klicka på ditt kontrollernamn, och ett mycket större konfigurationsfönster kommer dyka upp.

kontrollrobotar med spelkontroll och arduino

Det kan se ganska skrämmande ut, men det är utformat för att vara så enkelt som möjligt. På vänster sida fyll i den första nyckeln med namnet du vill ha som variabel. Denna variabel kontrollerar servos position, så jag kommer att kalla det servoPos .

I rutan bredvid det kan du ge en kort beskrivning av vad den gör. Hämta nu din styrenhet och flytta den pinne du vill använda med din servo. Ett litet experiment visar att den högra tummen motsvarar X-rutan. Dra en linje mellan servoPos- variabeln och den här rutan.

Nu måste vi spara vår konfiguration som en datafil. Fyll i fältet Enhetsroll och fältet Filnamn längst upp till höger i fönstret.

Filnamnet är viktigt, eftersom du använder det i din kod. Jag håller det enkelt genom att kalla det xbs . Klicka på Verifiera sedan Spara . Detta skriver en fil med instruktioner för vår controller som vi kan använda senare.

kontrollrobotar med spelkontroll och arduino

Förbereder anpassad skissmapp

Låt oss ställa in vår arbetsmapp. Öppna en tom bearbetningsskissa och spara den under vilket namn du vill. Detta skapar en katalog för den i spara platsen.

Navigera nu till Dokument / Bearbetning / Bibliotek / GameControlPlus / Examples / Configurator och kopiera mappens märkta data . Den här mappen innehåller konfigurationsfilen som vi just skapat. Navigera till katalogen i din nyligen sparade blank skiss och klistra in datapappen.

kontrollrobotar med spelkontroll och arduino

Skapa den anpassade skissen

Nu är allt på plats och vi kan börja göra en skiss med våra två bibliotek. Vi går igenom det här steg för steg, men du kan hämta den fullständiga skiss- och datapappen om du vill hoppa framåt. Observera att du kan behöva ändra koden för att återspegla dina Arduino COM-portar.

Börja med att importera alla bibliotek vi behöver:

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

Vi måste också deklarera vår ControlDevice, I / O, och Arduino, tillsammans med en float för att hålla värden från vår tummenhet:

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

Metoden setup () skapar ett litet fönster, en instans av kontrollenheten och matchar enheten med vår config-fil. Det är här det är viktigt att få filnamnet i vår 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 kontrollerar också om det inte finns någon tillämplig kontroller vid detta tillfälle och avslutar programmet om det behövs. Medan fönstret skapat med storlek () inte behövs, ger det oss lite feedback senare om vi får användbara värden från vår controller. Vi initierar också vår Arduino och stiftar här precis som vi gjorde medan vi testade.

Nu skapar vi en liten metod för att fånga ingångsvärdet från vår controller och kartlägga det till värden vår servo kommer att kunna använda:

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

Den här kodlinjen använder vår datafil för att få våra namngivna kontrollservoPos, som är länkad till den högra tummen på kontrollenheten och läser värden från den. Det kartlägger sedan värdena och lagrar värdet i vår tummeflödesvariabel .

Just nu kodes denna kod aldrig, vi fixar det nu.

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

Rita () liknar slingan () -metoden i Arduino IDE. Varje ram kallar den metoden getUserInput () och uppdaterar tumvärdet . Den använder det här värdet för att ändra bakgrundens röda värde () vilket ger oss en visuell indikator på värdeförändringen. Det skriver sedan detta värde till servo med funktionen arduino.servoWrite () . Observera att vi måste kasta tummen som ett heltal eftersom servoWrite-funktionen tar två heltal (stiftnummer och vinkel) som dess argument.

Kontrollera din kod för fel, spara den och klicka på kör. Efter en liten fördröjning för att initiera Arduino ska det se ut så här:

Kontroll med spelkontrollen och Arduino: Färdig!

Projektet var på många sätt ganska djupt för den oerfarna kodaren Lär dig med kodningsprojekt: 9 Udemy-kurser för nybörjare Programmer Lär dig med kodprojekt: 9 Udemy-kurser för nybörjare Programmerare Den verkliga svårigheten är att hitta bra programmeringsövningar och kurser som inte bara lär dig nödvändiga färdigheter, men gör det med praktiska projekt. Det är där Udemy går in. Läs mer, trots de fantastiska bibliotek som är tillgängliga för att hjälpa oss. Vad det representerar är ett nytt sätt att tänka på att styra robotar och andra enheter du bygger.

Detta projekt skulle följa perfekt med vår guide om att bygga en Laser Turret Pew Pew! Hur man bygger en laserturret med en Arduino Pew Pew! Hur man bygger en laserturret med en Arduino Är du uttråkad? Kan också bygga en lasertorn. Läs mer, vilket ger dig full kontroll över det. Du kan ställa in en Piezo-summer som i vårt enkla Arduino-larm Så här gör du ett enkelt Arduino-larmsystem Så här gör du ett enkelt Arduino larmsystem Upptäck rörelsen, skräck då av en inkräktare med högljudda larmljud och blinkande lampor. Låter det roligt? Det gör det självklart. Det är målet för dagens Arduino-projekt, lämpligt ... Läs mer handledning och använd din regulator för att ändra tonhöjdens tonhöjd eller färg.

Eller du kan, bygga en massiv robot och ta över jorden. Så länge du hade en USB-ledning tillräckligt länge!

In this article