Hoe je robots bestuurt met een gamecontroller en Arduino

Heb je altijd al een Arduino willen besturen met een videogamecontroller? Goed nu kun je met niets meer dan dit artikel en een Xbox 360-controller!

Heb je altijd al een Arduino willen besturen met een videogamecontroller?  Goed nu kun je met niets meer dan dit artikel en een Xbox 360-controller!
Advertentie

Arduinos en vergelijkbare compatibele kaarten zijn overal een van de apparaten voor doe-het-zelf-knutselaars. Of je nu een beginner bent die net begint met Arduino of iemand die ze al in je leven heeft gebruikt, ze bieden een platform voor talloze geweldige projecten.

Vandaag zullen we een creatieve manier onderzoeken om een ​​servo te besturen met behulp van Processing en een Xbox360-controller. Als je al behoorlijk slim bent in het ontwikkelen van games, ben je misschien geïnteresseerd in onze zelfstudie over de aangepaste gamecontroller, die Unity gebruikt.

Deze tutorial veronderstelt een beetje voorkennis, als dit je eerste poging is om in Arduino te spelen, zou je onze Arduino-gids hier handig kunnen vinden. Evenzo, als dit de eerste keer is dat u Java gebruikt, kan het een beetje verwarrend zijn. Hoewel Processing een vereenvoudigde versie van het platform gebruikt, kunnen deze Java-concepten en -tips nog steeds helpen.

Wat je nodig hebt

besturingsrobots met gamecontroller en arduino

  • 1 x Arduino. We gebruiken vandaag een UNO.
  • 1 x hobby-servo. Alles dat met de Arduino-pinnen werkt.
  • 1 x bedrade Xbox360-controller. Hoewel dit technisch zal werken met bijna elke controller.
  • Verschillende aansluitdraden.

Naast deze dingen, moet je ook Processing en de Arduino IDE downloaden van hun respectieve websites.

De Arduino voorbereiden

besturingsrobots met gamecontroller en arduino

Eerst moeten we onze servo bevestigen. De bedradingskleuren kunnen hier variëren, maar als een algemene regel wordt rood bevestigd aan de 5v pin en bruin of zwart aan de GND- pin. De datalijn, die meestal geel of oranje is, hecht aan pin 10 .

Controleer uw bedrading en sluit de Arduino aan op de computer. Open de Arduino IDE.

besturingsrobots met gamecontroller en arduino

Open de StandardFirmata-schets in Bestand> Voorbeelden> Firmata> StandardFirmata . Deze schets stelt het bord in voor externe controle over de seriële poort, en is dezelfde die we in ons artikel over het beheersen van Arduino met Python hebben gebruikt. Programmeren en besturen van een Arduino met Python. Een Arduino programmeren en besturen met Python Helaas, het is het onmogelijk om een ​​Arduino rechtstreeks in Python te programmeren, maar je kunt het via USB besturen met behulp van een Python-programma. Hier is hoe. Lees verder . Upload de schets naar het bord.

Als de upload mislukt, controleer dan of je de juiste board- en poortgegevens hebt geselecteerd in het menu Tools .

Onze Arduino is klaar voor gebruik!

Verwerking instellen

Open de verwerking, je wordt begroet met een lege schets. Voordat we hier iets doen, moeten we een paar bibliotheken installeren. Ga naar het menu Sketch en selecteer Library importeren> Library toevoegen . Dit zal de Contribution Manager naar voren brengen, die er voor elke Arduino-gebruiker bekend uitziet.

besturingsrobots met gamecontroller en arduino

We moeten drie bibliotheken installeren om dit te laten werken. De eerste is de Game Control Plus- bibliotheek. Dit is wat ons in staat zal stellen om onze game controller te gebruiken met Processing. Gebruik het zoekvenster om het te vinden en klik op installeren in de rechterbenedenhoek. Game Control Plus heeft een andere bibliotheek nodig voor zijn configuratietool, dus laten we het nu krijgen. Zoek naar de G4P- bibliotheek en installeer deze ook.

Eindelijk hebben we de Arduino (firmata) -bibliotheek nodig. U raadt het al, zoek ernaar en klik op installeren. Met deze dingen geïnstalleerd zijn we klaar om verder te gaan met het testen dat alles zal werken. We werken vandaag met Windows 10, maar de verwerking is beschikbaar voor de meeste platforms, waaronder Raspberry Pi. Stel je de mogelijkheden eens voor!

De Arduino testen

Voordat we beginnen met het maken van een aangepaste schets, laten we de Arduino en Servo testen met Processing. Open Bestand> Voorbeelden en selecteer ArduinoServo in de map Contributed Libraries / Arduino (firmata) . We zullen dit gebruiken om onze servo te testen, maar eerst moeten we misschien een paar dingen veranderen.

Blader door de schets en vind deze regel:

println(Arduino.list()); 

Als deze is becommentarieerd, verwijder dan de twee schuine strepen vóór println (Arduino.list ()); en bewaar de schets. Voer het uit door op het afspeelpictogram te klikken en houd de console aan de onderkant in de gaten. Hiermee wordt een lijst weergegeven met alles dat met uw COM- poorten is verbonden.

besturingsrobots met gamecontroller en arduino

In mijn geval stond mijn Arduino op COM 8, de derde poort die hier wordt vermeld. Dit is belangrijk omdat de code in de onderstaande regel een array heeft waarvan de waarde bepaalt welke COM-poort moet worden gebruikt.

besturingsrobots met gamecontroller en arduino

We moeten dit wijzigen om onze COM-poort te weerspiegelen. Voor mij was het de derde positie of indexnummer 2:

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

We moeten een aantal andere kleine wijzigingen aanbrengen in deze code om deze te testen. Blader naar beneden waar de Arduino-pinnen zijn opgesteld en becommentarieer een van de regels hier. Verander de andere in Pin 10 .

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

We moeten hetzelfde doen in de methode Draw () :

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

Sla de schets op en voer deze uit. Je zou je servo moeten kunnen verplaatsen door je muis heen en weer te bewegen over het venster dat het programma genereert.

Als het niet voor u werkt, controleert u uw Servo-bedrading en controleert u of u de juiste arraypositie voor uw COM-poort hebt. Als je eenmaal weet dat de Arduino goed met Processing praat, is het tijd om verder te gaan.

Configureren van de controller

De Game Control Plus-bibliotheek die we gebruiken, heeft ook een krachtige configuratie. Zorg ervoor dat uw controller is aangesloten, open het voorbeeldproject Configurator en voer het uit. Je krijgt een menu zoals dit:

besturingsrobots met gamecontroller en arduino

Klik op de naam van uw controller en er verschijnt een veel groter configuratievenster.

besturingsrobots met gamecontroller en arduino

Dit ziet er misschien nogal ontmoedigend uit, maar het is ontworpen om zo eenvoudig mogelijk te zijn. Vul aan de linkerkant de eerste sleutel in met de gewenste naam als variabele. Deze variabele regelt de positie van de servo, dus ik noem het servoPos .

In het vak ernaast kunt u een korte beschrijving geven van wat het doet. Pak nu je controller op en verplaats de stick die je wilt gebruiken met je servo. Een beetje experimenteren laat zien dat de rechter thumbstick overeenkomt met de X-rotatiebox. Sleep een lijn tussen de servoPos- variabele en dit vak.

Nu moeten we onze configuratie opslaan als een gegevensbestand. In de rechterbovenhoek van het venster vult u het veld Apparaatrol en het veld Bestandsnaam in.

De bestandsnaam is belangrijk, omdat je deze in je code zult gebruiken. Ik houd het simpel door het Xbs te noemen . Klik op Verifiëren en vervolgens op Opslaan . Dit schrijft een bestand met instructies voor onze controller die we later kunnen gebruiken.

besturingsrobots met gamecontroller en arduino

De aangepaste schetsmap voorbereiden

Laten we onze werkmap instellen. Open een lege verwerkingsschets en sla deze op onder elke gewenste naam. Hiermee wordt er een map voor gemaakt in de opslaglocatie.

Navigeer nu naar Documents / Processing / libraries / GameControlPlus / examples / Configurator en kopieer de map met de gelabelde data . Deze map bevat het configuratiebestand dat we zojuist hebben gemaakt. Navigeer naar de map van je nieuw opgeslagen lege schets en plak de datamap.

besturingsrobots met gamecontroller en arduino

De aangepaste schets maken

Nu is alles op zijn plaats en kunnen we beginnen met het maken van een schets met behulp van onze twee bibliotheken. We gaan dit stap voor stap door, maar u kunt de volledige schets en gegevensmap downloaden als u verder wilt gaan. Merk op dat je de code misschien nog moet aanpassen om je Arduino COM-poorten te weerspiegelen.

Begin met het importeren van alle bibliotheken die we nodig hebben:

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

We moeten ook onze ControlDevice, I / O en Arduino declareren, samen met een float om waarden van onze thumbstick vast te houden:

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

Onze methode setup () maakt een klein venster, een instantie van de controller, en komt overeen met het apparaat met ons configuratiebestand. Dit is waar het belangrijk is om de bestandsnaam van ons configuratiegegevensbestand correct te krijgen:

 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); } 

We controleren ook of er in dit stadium geen toepasselijke controller is en stoppen indien nodig het programma. Hoewel het venster gemaakt met size () niet nodig is, geeft het ons later enige feedback over de vraag of we bruikbare waarden van onze controller krijgen. We initialiseren ook onze Arduino en pinnen hier, net zoals we deden tijdens het testen.

Nu maken we een kleine methode om de invoerwaarde van onze controller te grijpen en in kaart te brengen naar waarden die onze servo kan gebruiken:

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

Deze ene regel code gebruikt ons databestand om onze named control servoPos te krijgen, die is gekoppeld aan de rechter thumbstick van de controller, en er waarden uit te lezen. Het brengt vervolgens de waarden in kaart en slaat de waarde op in onze thumb float-variabele.

Op dit moment wordt deze code nooit gebeld, we zullen dat nu oplossen.

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

De draw () is vergelijkbaar met de methode loop () in de Arduino IDE. Elk frame roept de methode getUserInput () aan en werkt de duimwaarde bij . Het gebruikt deze waarde om de rode waarde van de achtergrond () te wijzigen die ons een visuele indicator geeft van de waardewijziging. Vervolgens schrijft het deze waarde naar de servo met behulp van de functie arduino.servoWrite () . Merk op dat we duim als een geheel getal moeten uitwerpen, omdat de servoWrite-functie twee gehele getallen (pincode en hoek) als argumenten gebruikt.

Controleer uw code op fouten, sla deze op en klik op uitvoeren. Na een kleine vertraging om de Arduino te initialiseren, zou het er zo uit moeten zien:

Controle met Game Controller en Arduino: klaar!

Dit project was in veel opzichten behoorlijk diepgaand voor de onervaren programmeur Learn With Coding Projects: 9 Udemy Courses voor de beginners programmeur Learn with Coding Projects: 9 Udemy Courses voor de beginners programmeur De echte moeilijkheid is het vinden van goede programmeerinstructies en cursussen die niet alleen leer je de nodige vaardigheden, maar doe dit met praktische projecten. Dat is waar Udemy instapt. Lees meer, ondanks de fantastische beschikbare bibliotheken om ons te helpen. Wat het vertegenwoordigt, is een nieuwe manier om na te denken over het besturen van robots en andere apparaten die u bouwt.

Dit project zou perfect samengaan met onze gids over het bouwen van een Laser Turret Pew Pew! Hoe een laser torentje te bouwen met een Arduino Pew Pew! Hoe maak je een laser torentje met een Arduino te bouwen Ben je verveeld? Kan net zo goed een lasertoren bouwen. Meer lezen, zodat u er volledige controle over hebt. Je zou een Piezo-zoemer kunnen instellen zoals in onze Simple Arduino Alarm. Hoe maak je een eenvoudig Arduino-alarmsysteem Hoe maak je een eenvoudig Arduino-alarmsysteem Detecteer beweging en maak de indringer bang met hoge, hoge alarmgeluiden en knipperende lichten. Klinkt dat leuk? Natuurlijk doet het. Dat is het doel van het Arduino-project van vandaag, geschikt ... Lees meer tutorial en gebruik je controller om de toonhoogte van de zoemer of kleur van de lichten te veranderen.

Of je kunt, nou ja, een enorme robot bouwen en de aarde overnemen. Zolang je maar lang genoeg een USB-kabel had!

In this article