So steuern Sie Roboter mit einem Gamecontroller und Arduino
Arduinos und ähnliche kompatible Boards sind überall auf der Welt der Bastler. Egal, ob Sie ein Anfänger sind, der gerade erst mit Arduino beginnt oder jemandem, der sie bereits in Ihrem Leben einsetzen möchte, er bietet eine Plattform für unzählige großartige Projekte.
Heute werden wir eine kreative Möglichkeit zur Steuerung eines Servos mithilfe von Processing und eines Xbox360-Controllers erkunden. Wenn Sie bereits mit der Entwicklung von Spielen vertraut sind, könnten Sie an unserem Custom Game Controller-Tutorial interessiert sein, das Unity verwendet.
Dieses Tutorial setzt etwas Vorkenntnisse voraus. Wenn dies der erste Vorstoß in das Arduino-Fummeln ist, könnte unser Arduino-Führer hier hilfreich sein. Wenn Sie Java zum ersten Mal verwenden, kann dies etwas verwirrend sein. Während Processing eine vereinfachte Version der Plattform verwendet, können diese Java-Konzepte und -Tipps dennoch hilfreich sein.
Was du brauchst
- 1 x Arduino. Wir benutzen heute eine UNO.
- 1 x Hobby-Servo. Alles, was mit den Arduino-Pins funktioniert.
- 1 x verdrahtete Xbox360-Steuerung. Dies funktioniert zwar technisch mit fast jedem Controller.
- Mehrere Anschlussdrähte.
Zusätzlich zu diesen Dingen müssen Sie Processing und die Arduino IDE von den jeweiligen Websites herunterladen.
Arduino vorbereiten
Zuerst müssen wir unser Servo anbringen. Die Verdrahtungsfarben können hier variieren, aber in der Regel rot hängt an der 5 v pin und braun oder schwarz an die anhängen GND Stift. Die Datenleitung, die normalerweise ist Gelb oder Orange, hängt an Pin 10.
Überprüfen Sie Ihre Verkabelung und schließen Sie den Arduino an den Computer an. Öffnen Sie die Arduino IDE.
Öffnen Sie die StandardFirmata-Skizze unter Datei> Beispiele> Firmata> StandardFirmata. Mit dieser Skizze wird die Platine für die externe Steuerung der seriellen Schnittstelle eingerichtet. Sie ist dieselbe, die wir in unserem Artikel zur Steuerung von Arduino mit Python verwendet haben. So programmieren und steuern Sie einen Arduino mit Python. So programmieren und steuern Sie einen Arduino mit Python Es ist nicht möglich, ein Arduino direkt in Python zu programmieren, aber Sie können es über USB mit einem Python-Programm steuern. Hier ist wie. Weiterlesen . Laden Sie die Skizze auf die Tafel hoch.
Wenn das Hochladen fehlschlägt, überprüfen Sie, ob Sie die richtigen Board- und Port-Details ausgewählt haben Werkzeuge Speisekarte.
Unser Arduino ist bereit zu gehen!
Verarbeitung einrichten
Wenn Sie die Verarbeitung öffnen, werden Sie mit einer leeren Skizze begrüßt. Bevor wir hier etwas tun, müssen wir einige Bibliotheken installieren. Gehe zum Skizzieren Menü und wählen Sie Bibliothek importieren> Bibliothek hinzufügen. Dies wird die Beitrags-Manager Dies wird jedem Arduino-Benutzer dort bekannt vorkommen.
Wir müssen drei Bibliotheken installieren, damit dies funktioniert. An erster Stelle steht der Game Control Plus Bibliothek. Dies ermöglicht es uns, unseren Gamecontroller mit Processing zu verwenden. Verwenden Sie das Suchfenster, um es zu finden, und klicken Sie in der rechten unteren Ecke auf Installieren. Game Control Plus benötigt eine andere Bibliothek für sein Konfigurationstool, also lassen Sie uns es jetzt holen. Suche nach dem G4P Bibliothek und installieren Sie es auch.
Schließlich brauchen wir die Arduino (Firmata) Bibliothek. Sie haben es erraten, suchen Sie danach und klicken Sie auf Installieren. Wenn diese Dinge installiert sind, können wir mit dem Testen fortfahren, dass alles funktioniert. Wir arbeiten heute mit Windows 10, die Verarbeitung ist jedoch für die meisten Plattformen verfügbar, einschließlich Raspberry Pi. Stellen Sie sich die Möglichkeiten vor!
Testen des Arduino
Bevor wir uns mit dem Erstellen einer benutzerdefinierten Skizze beschäftigen, testen wir Arduino und Servo mit der Verarbeitung. Öffnen Datei> Beispiele, und wählen Sie ArduinoServo von dem Mitwirkende Bibliotheken / Arduino (Firmata) Mappe. Wir werden dies verwenden, um unser Servo zu testen, aber zuerst müssen wir ein paar Dinge ändern.
Scrollen Sie durch die Skizze und suchen Sie nach dieser Zeile:
println (Arduino.list ());
Wenn es auskommentiert ist, entfernen Sie vorher die beiden Schrägstriche println (Arduino.list ());, und speichern Sie die Skizze. Führen Sie es aus, indem Sie auf das Abspielsymbol klicken, und behalten Sie die Konsole unten im Auge. Dies listet alles auf, das an Ihr angehängt ist COM Häfen.
In meinem Fall war mein Arduino auf COM 8, der dritten hier aufgeführten Port. Dies ist wichtig, da der Code in der Zeile darunter ein Array deren Wert bestimmt, welcher COM-Port verwendet werden soll.
Wir müssen dies ändern, um unseren COM-Port wiederzugeben. Für mich war es die dritte Position oder Indexnummer 2:
Arduino = neues Arduino (dieses Arduino.list () [2], 57600);
Wir müssen noch einige kleine Änderungen an diesem Code vornehmen, um ihn zu testen. Scrollen Sie nach unten, wo die Arduino-Pins eingerichtet sind, und kommentieren Sie eine der Zeilen hier aus. Ändern Sie den anderen in Pin 10.
//arduino.pinMode(4, Arduino.SERVO); arduino.pinMode (10, Arduino.SERVO);
Wir müssen das Gleiche im tun Zeichnen() Methode:
arduino.servoWrite (10, Constrain (mouseX / 2, 0, 180)); // arduino.servoWrite (4, constrain (180 - mouseX / 2, 0, 180));
Speichern Sie die Skizze und führen Sie sie aus. Sie sollten in der Lage sein, Ihr Servo zu bewegen, indem Sie die Maus über das von dem Programm generierte Fenster hin und her bewegen.
Wenn es für Sie nicht funktioniert, überprüfen Sie die Servoverdrahtung und prüfen Sie, ob Sie die richtige Array-Position für Ihren COM-Port haben. Sobald Sie wissen, dass der Arduino gut mit Processing spricht, ist es Zeit, weiterzumachen.
Controller konfigurieren
Die von uns verwendete Game Control Plus-Bibliothek verfügt auch über eine leistungsstarke Konfiguration. Stellen Sie sicher, dass Ihr Controller angeschlossen ist, und öffnen Sie die Konfigurator Beispielprojekt, und führen Sie es aus. Sie erhalten ein Menü wie dieses:
Klicken Sie auf den Namen Ihres Controllers. Ein viel größeres Konfigurationsfenster wird geöffnet.
Das mag ziemlich entmutigend aussehen, aber es soll so einfach wie möglich sein. Füllen Sie auf der linken Seite den ersten Schlüssel mit dem gewünschten Namen als Variable aus. Diese Variable steuert die Position des Servos, ich werde es also nennen ServoPos.
In der Box daneben können Sie kurz beschreiben, was es macht. Nehmen Sie jetzt Ihren Controller und bewegen Sie den Stick, den Sie mit Ihrem Servo verwenden möchten. Ein kleines Experiment zeigt, dass der rechte Dreieck mit der X-Rotationsbox übereinstimmt. Ziehen Sie eine Linie zwischen ServoPos Variable und diese Box.
Nun müssen wir unsere Konfiguration als Datendatei speichern. Füllen Sie oben rechts im Fenster das Geräterolle Feld und die Dateiname Feld.
Der Dateiname ist wichtig, da Sie ihn in Ihrem Code verwenden. Ich halte es einfach, indem ich es anrufe xbs. Klicken Überprüfen dann sparen. Dies schreibt eine Datei mit Anweisungen für unseren Controller, die wir später verwenden können.
Vorbereiten des benutzerdefinierten Skizzenordners
Lassen Sie uns unseren Arbeitsordner einrichten. Öffnen Sie eine leere Verarbeitungsskizze und speichern Sie sie unter einem beliebigen Namen. Dadurch wird am Speicherort ein Verzeichnis dafür erstellt.
Navigiere jetzt zu Dokumente / Bearbeitung / Bibliotheken / GameControlPlus / Beispiele / Konfigurator und kopieren Sie den Ordner mit der Bezeichnung Daten. Dieser Ordner enthält die gerade erstellte Konfigurationsdatei. Navigieren Sie zu dem Verzeichnis Ihrer neu gespeicherten leeren Skizze und fügen Sie den Datenordner ein.
Benutzerdefinierte Skizze erstellen
Jetzt ist alles vorhanden und wir können mit unseren beiden Bibliotheken eine Skizze erstellen. Wir werden dies Schritt für Schritt durchgehen, aber Sie können den vollständigen Skizzen- und Datenordner herunterladen, wenn Sie einen Sprung nach vorne machen möchten. Beachten Sie, dass Sie den Code möglicherweise immer noch an Ihre Arduino COM-Ports anpassen müssen.
Beginnen Sie mit dem Importieren aller Bibliotheken, die wir benötigen:
Import Processing.Serial. *; import net.java.games.input. *; import org.gamecontrolplus. *; import org.gamecontrolplus.gui. *; import cc.arduino. *; import org.firmata. *;
Wir müssen auch unser erklären Kontrollgerät, I / O, und Arduino, zusammen mit einem schweben Werte von unserem Schläger halten:
ControlDevice cont; ControlIO-Steuerung; Arduino Arduino; schweben Daumen;
Unsere Konfiguration() method erstellt ein kleines Fenster, eine Instanz des Controllers, und ordnet das Gerät unserer Konfigurationsdatei zu. Hier ist es wichtig, dass der Dateiname unserer Konfigurationsdatei korrekt ist:
void setup () size (360, 200); control = ControlIO.getInstance (this); cont = control.getMatchedDevice ("xbs"); if (cont == null) println ("kein heutiger Mist"); // bessere Exit-Anweisungen schreiben als ich System.exit (-1); // println (Arduino.list ()); Arduino = neues Arduino (dieses Arduino.list () [2], 57600); arduino.pinMode (10, Arduino.SERVO);
Wir prüfen auch, ob es zu diesem Zeitpunkt keinen geeigneten Controller gibt, und beenden das Programm gegebenenfalls. Während das Fenster mit erstellt wird Größe() Wird nicht benötigt, so erhalten wir später ein Feedback darüber, ob wir nützliche Werte von unserer Steuerung erhalten. Wir initialisieren auch unser Arduino und stecken hier genau so ab wie beim Testen.
Jetzt erstellen wir eine kleine Methode, um den Eingangswert von unserer Steuerung zu übernehmen, und ordnen Sie ihn den Werten zu, die unser Servo verwenden kann:
public void getUserInput () thumb = map (cont.getSlider ("servoPos"). getValue (), -1, 1, 0, 180);
Diese eine Codezeile verwendet unsere Datendatei, um unser benanntes Steuerelement zu erhalten ServoPos, die mit dem rechten Daumen des Controllers verbunden ist und Werte daraus liest. Dann werden die Werte zugeordnet und in unserem gespeichert Daumen Float-Variable.
Im Moment wird dieser Code nie aufgerufen, wir werden das jetzt beheben.
void draw () getUserInput (); Hintergrund (Daumen, 100, 255); arduino.servoWrite (10, (int) Daumen);
Das zeichnen() ist dem ähnlich Schleife() Methode in der Arduino IDE. Jeder Frame nennt das getUserInput () Methode und aktualisiert die Daumen Wert. Mit diesem Wert wird der rote Wert von geändert Hintergrund() uns einen visuellen Indikator für die Wertveränderung geben. Dann schreibt er diesen Wert mit der Taste in das Servo arduino.servoWrite () Funktion. Beachten Sie, dass wir werfen müssen Daumen als ganzzahliger Wert als ServoWrite-Funktion verwendet zwei Ganzzahlen (Pin-Nummer und Winkel) als Argumente.
Überprüfen Sie Ihren Code auf Fehler, speichern Sie ihn und klicken Sie auf Ausführen. Nach einer kurzen Verzögerung beim Initialisieren des Arduino sollte es so aussehen:
Steuerung mit Game Controller und Arduino: Fertig!
Dieses Projekt war für den unerfahrenen Programmierer in vielerlei Hinsicht sehr tiefgreifend. Learn With Coding Projects: 9 Udemy-Kurse für Anfänger Programmierer Learn With Coding-Projekte: 9 Udemy-Kurse für Anfänger Programmierer Die eigentliche Schwierigkeit besteht darin, gute Programmier-Tutorials und Kurse zu finden, die nicht nur geeignet sind vermitteln Ihnen die notwendigen Fähigkeiten, tun dies aber mit praktischen Projekten. Hier tritt Udemy ein. Lesen Sie mehr, trotz der fantastischen Bibliotheken, die uns zur Verfügung stehen. Es stellt eine neue Art dar, über die Steuerung von Robotern und anderen von Ihnen erstellten Geräten nachzudenken.
Dieses Projekt würde perfekt mit unserem Leitfaden für den Bau einer Pew-Pew-Pew-Pew von Purr zusammenarbeiten! Wie baut man einen Laser Turret mit einer Arduino Pew Pew! Wie man einen Laser Turret mit einem Arduino baut Sind Sie gelangweilt? Könnte auch einen Laserrevolver bauen. Lesen Sie mehr, damit Sie die volle Kontrolle darüber haben. Sie können einen Piezo-Summer wie in unserem einfachen Arduino-Alarm einrichten. So erstellen Sie ein einfaches Arduino-Alarmsystem. Klingt das nach Spaß? Natürlich tut es das. Dies ist das Ziel des heutigen Arduino-Projekts, geeignet für… Lesen Sie mehr und verwenden Sie Ihren Controller, um die Tonhöhe des Summers oder die Farbe der Lichter zu ändern.
Oder Sie könnten einen massiven Roboter bauen und die Erde übernehmen. Solange Sie ein USB-Kabel lange genug hatten!
Erfahren Sie mehr über: Arduino, Gamecontroller, Robotik.