Hur man kontrollerar robotar med en spelkontroller och Arduino

Hur man kontrollerar robotar med en spelkontroller och Arduino / DIY

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

  • 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

Först måste vi fästa vår servo. Ledningsfärgerna kan variera här, men som en allmän regel röd fäster vid 5v stift och brun eller svart fäst vid GND stift. Datalinjen, som vanligtvis är gul eller orange, bifogas stift 10.

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

Öppna den StandardFirmata skiss som finns på 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 kartor och portdetaljer i Verktyg meny.

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 Skiss menyn och välj Importera bibliotek> Lägg till bibliotek. Detta kommer att föra upp Bidragsansvarig som kommer att bli bekant för alla Arduino-användare där ute.

Vi måste installera tre bibliotek för att göra detta arbete. Först upp är Game Control Plus bibliotek. 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 bibliotek och installera det också.

Slutligen behöver vi Arduino (firmata) bibliotek. 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 Bidragande bibliotek / Arduino (firmata) mapp. 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 din COM hamnar.

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.

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 = ny Arduino (detta, 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 Dra() metod:

arduino.servoWrite (10, begränsa (mouseX / 2, 0, 180)); // arduino.servoWrite (4, begränsa (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 Configurator exempel projekt och kör det. Du får en meny så här:

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

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 ska ringa den 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 variabel och den här rutan.

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

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

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 mappen märkt 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.

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

Vi måste också förklara vår Kontrollenhet, I / O, och Arduino, tillsammans med a flyta för att hålla värden från tummen:

ControlDevice cont; ControlIO kontroll Arduino arduino; flyta tummen;

Vår inrätta() Metoden skapar ett litet fönster, en instans av regulatorn, och matchar enheten med vår config-fil. Det är här det är viktigt att få filnamnet i vår konfigurationsdatafil korrekt:

tomrumsinställning () storlek (360, 200); control = ControlIO.getInstance (this); cont = control.getMatchedDevice ("xbs"); om (forts == null) println ("inte idag chump"); // skriv bättre avsluta uttalanden än mig System.exit (-1);  // println (Arduino.list ()); arduino = ny Arduino (detta, 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 skapades med storlek() behövs inte, det ger 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år namngivna kontroll servoPos, som är kopplad till regulatorns högra tumpel och läser värden från den. Den kartlägger sedan värdena och lagrar värdet i vårt tumme float variabel.

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

void draw () getUserInput (); bakgrund (tumme, 100.255); arduino.servoWrite (10, (int) tumme); 

De dra() liknar slinga() metod i Arduino IDE. Varje ram kallar den getUserInput () metod och uppdaterar tumme värde. Den använder det här värdet för att ändra det röda värdet av bakgrund() vilket ger oss en visuell indikator på värdeförändringen. Det skriver sedan detta värde till servo med hjälp av arduino.servoWrite () fungera. Observera att vi måste kasta tumme 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 med dagens Arduino-projekt, lämpligt ... Läs mer handledning och använd din regulator för att ändra tonhöjden på ljuset eller ljusets ljus.

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

Utforska mer om: Arduino, Game Controller, Robotics.