Arduinos und ähnliche kompatible Boards sind eine der Geräte für DIY-Tüftler überall. Egal, ob Sie ein Anfänger sind, der gerade mit Arduino beginnt oder jemand, der sie bereits in Ihrem Leben eingesetzt hat, sie bieten eine Plattform für unzählige großartige Projekte.
Heute werden wir einen kreativen Weg zur Steuerung eines Servos mit Processing und einem Xbox360-Controller erkunden. Wenn Sie schon sehr schlau sind, könnten Sie sich für unser Custom Game Controller-Tutorial interessieren, das Unity verwendet.
Dieses Tutorial wird ein wenig Vorwissen voraussetzen. Wenn dies Ihr erster Ausflug in Arduino ist, können Sie unseren Arduino Guide hier nützlich finden. Wenn Sie Java zum ersten Mal verwenden, kann dies etwas verwirrend sein. Während die Verarbeitung 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 verdrahteter Xbox360-Controller. Obwohl dies technisch mit fast jedem Controller funktioniert.
- Mehrere Anschlussdrähte.
Zusätzlich zu diesen Dingen müssen Sie auch Processing und die Arduino IDE von ihren jeweiligen Websites herunterladen.
Vorbereiten des Arduino
Zuerst müssen wir unser Servo anbringen. Die Verdrahtungsfarben können hier variieren, aber in der Regel wird rot an den 5V- Pin und braun oder schwarz an den GND- Pin angeschlossen. Die Datenleitung, die normalerweise gelb oder orange ist, wird an Pin 10 angeschlossen .
Ü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, die sich unter Datei> Beispiele> Firmata> StandardFirmata befindet . Diese Skizze richtet die Platine für die externe Steuerung über den seriellen Port ein und ist die gleiche, die wir in unserem Artikel zur Steuerung von Arduino mit Python verwendet haben. Wie man ein Arduino mit Python programmiert und steuert Wie man ein Arduino mit Python programmiert und steuert Es ist unmö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 der Upload fehlschlägt, überprüfen Sie, ob Sie die richtigen Board- und Port-Details im Menü " Extras" ausgewählt haben.
Unser Arduino ist bereit zu gehen!
Verarbeitung einrichten
Öffnen Sie die Verarbeitung, Sie werden mit einer leeren Skizze begrüßt. Bevor wir irgendetwas hier machen, müssen wir ein paar Bibliotheken installieren. Wechseln Sie zum Menü Skizze, und wählen Sie Bibliothek importieren> Bibliothek hinzufügen aus . Dadurch wird der Contribution Manager angezeigt, der jedem Arduino-Benutzer bekannt vorkommt.
Wir müssen drei Bibliotheken installieren, damit dies funktioniert. Zuerst ist die Game Control Plus- Bibliothek. Dies ermöglicht uns, unseren Gamecontroller mit Processing zu verwenden. Verwenden Sie das Suchfenster, um es zu finden, und klicken Sie in der unteren rechten Ecke auf Installieren. Game Control Plus benötigt eine andere Bibliothek, die für das Konfigurationstool installiert wurde. Suchen Sie nach der G4P- Bibliothek und installieren Sie sie ebenfalls.
Schließlich benötigen wir die Arduino (Firmata) -Bibliothek. Sie haben es erraten, suchen danach und klicken auf Installieren. Wenn diese Dinge installiert sind, sind wir bereit, mit dem Testen zu beginnen, dass alles funktioniert. Wir arbeiten heute mit Windows 10, aber die Verarbeitung ist für die meisten Plattformen verfügbar, einschließlich Raspberry Pi. Stellen Sie sich die Möglichkeiten vor!
Testen des Arduino
Bevor wir mit der Erstellung einer benutzerdefinierten Skizze beginnen, testen wir Arduino und Servo mit Processing. Öffnen Sie Datei> Beispiele und wählen Sie ArduinoServo aus dem Ordner Contributed Libraries / Arduino (Firmata) . Wir werden das verwenden, um unser Servo zu testen, aber zuerst müssen wir vielleicht ein paar Dinge ändern.
Scrollen Sie durch die Skizze und finden Sie diese Zeile:
println(Arduino.list());
Wenn es auskommentiert ist, entfernen Sie die zwei Schrägstriche vor println (Arduino.list ());, und speichern Sie die Skizze. Führe es aus, indem du auf das Play-Symbol klickst, und behalte die Konsole unten im Auge. Dies listet alles auf, was mit Ihren COM- Ports verbunden ist.
In meinem Fall war mein Arduino auf COM 8, dem dritten hier aufgeführten Port. Dies ist wichtig, da der Code in der Zeile darunter ein Array hat, dessen Wert bestimmt, welcher COM-Port verwendet werden soll.
Wir müssen dies ändern, um unseren COM-Port widerzuspiegeln. Für mich war es die dritte Position oder die Indexnummer 2:
arduino = new Arduino(this, 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. Ändern Sie den anderen zu Pin 10 .
//arduino.pinMode(4, Arduino.SERVO); arduino.pinMode(10, Arduino.SERVO);
In der Draw () - Methode müssen wir dasselbe tun:
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 Ihre Maus über das Fenster, das das Programm erzeugt, hin und her bewegen.
Wenn es für Sie nicht funktioniert, überprüfen Sie Ihre Servoverkabelung und überprüfen Sie, ob Sie die richtige Array-Position für Ihren COM-Port haben. Sobald Sie wissen, dass der Arduino gut mit Processing kommuniziert, ist es Zeit, weiterzumachen.
Konfigurieren des Controllers
Die Game Control Plus-Bibliothek, die wir verwenden, verfügt auch über eine leistungsstarke Konfiguration. Stellen Sie sicher, dass Ihr Controller angeschlossen ist, öffnen Sie das Beispielprojekt Configurator, und führen Sie es aus. Sie werden ein Menü wie folgt erhalten:
Klicken Sie auf den Namen Ihres Controllers und ein viel größeres Konfigurationsfenster erscheint.
Das mag ziemlich entmutigend aussehen, aber es ist so einfach wie möglich gestaltet. Auf der linken Seite füllen Sie die erste Taste mit dem gewünschten Namen als Variable. Diese Variable steuert die Position des Servos, daher werde ich es als ServoPos bezeichnen .
In der nebenstehenden Box können Sie kurz beschreiben, was es macht. Jetzt nehmen Sie Ihren Controller und bewegen Sie den Stick, den Sie mit Ihrem Servo verwenden möchten. Ein kleines Experiment zeigt, dass der rechte Stick mit der X-Rotationsbox übereinstimmt. Ziehen Sie eine Linie zwischen der Variable servoPos und diesem Feld.
Jetzt müssen wir unsere Konfiguration als Datendatei speichern. Füllen Sie oben rechts im Fenster das Feld Gerätefunktion und das Feld Dateiname aus.
Der Dateiname ist wichtig, da Sie ihn in Ihrem Code verwenden werden. Ich behalte es einfach, indem ich es xbs nenne . Klicken Sie auf Bestätigen und dann auf Speichern . Dies schreibt eine Datei mit Anweisungen für unseren Controller, die wir später verwenden können.
Vorbereiten des benutzerdefinierten Skizzenordners
Lass uns unseren Arbeitsordner einrichten. Öffnen Sie eine leere Verarbeitungsskizze und speichern Sie sie unter dem von Ihnen gewünschten Namen. Dies wird ein Verzeichnis dafür am Speicherort erstellen.
Navigiere nun zu Documents / Processing / libraries / GameControlPlus / examples / Configurator und kopiere den Ordner mit den Daten . Dieser Ordner enthält die Konfigurationsdatei, die wir gerade erstellt haben. Navigieren Sie zu dem Verzeichnis Ihrer neu gespeicherten leeren Skizze und fügen Sie den Datenordner ein.
Erstellen der benutzerdefinierten Skizze
Jetzt ist alles vorhanden und wir können mit unseren beiden Bibliotheken eine Skizze erstellen. Wir werden das Schritt für Schritt durchgehen, aber Sie können den vollständigen Skizzen- und Datenordner herunterladen, wenn Sie vorwärts springen möchten. Beachten Sie, dass Sie den Code möglicherweise ändern müssen, um Ihre Arduino COM-Anschlüsse wiederzugeben.
Beginnen Sie mit dem Import 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 ControlDevice, I / O und Arduino deklarieren, zusammen mit einem Float, um Werte von unserem Daumen halten:
ControlDevice cont; ControlIO control; Arduino arduino; float thumb;
Unsere Methode setup () erstellt ein kleines Fenster, eine Instanz des Controllers, und vergleicht das Gerät mit unserer Konfigurationsdatei. 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("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); }
Wir überprüfen auch, ob es zu diesem Zeitpunkt keinen anwendbaren Controller gibt und beenden das Programm gegebenenfalls. Obwohl das mit size () erstellte Fenster nicht benötigt wird, gibt es später ein Feedback darüber, ob wir nützliche Werte von unserem Controller erhalten. Wir initialisieren auch unseren Arduino und Pin hier genau wie wir es beim Testen getan haben.
Jetzt erstellen wir eine kleine Methode, um den Eingabewert von unserem Controller zu erfassen und ihn auf Werte zu setzen, die unser Servo verwenden kann:
public void getUserInput() { thumb = map(cont.getSlider("servoPos").getValue(), -1, 1, 0, 180); }
Diese Codezeile verwendet unsere Datendatei, um unser benanntes Steuerelement servoPos zu erhalten, das mit dem rechten Stick des Controllers verbunden ist und Werte daraus liest. Es bildet dann die Werte ab und speichert den Wert in unserer thumb float-Variablen.
Im Moment wird dieser Code nie aufgerufen, wir werden das jetzt beheben.
void draw() { getUserInput(); background(thumb, 100, 255); arduino.servoWrite(10, (int)thumb); }
Das Zeichen draw () ähnelt der Methode loop () in der Arduino IDE. Jedes Frame ruft die getUserInput () -Methode auf und aktualisiert den Daumenwert . Es verwendet diesen Wert, um den roten Wert des Hintergrunds () zu ändern, was uns einen visuellen Indikator der Wertänderung gibt. Anschließend schreibt er diesen Wert mit der Funktion arduino.servoWrite () in das Servo. Beachten Sie, dass wir thumb als Integer-Wert übergeben müssen, da die servoWrite-Funktion zwei Ganzzahlen (Pin-Nummer und Winkel) als Argumente benötigt.
Überprüfen Sie Ihren Code auf Fehler, speichern Sie ihn und klicken Sie auf Ausführen. Nach einer kurzen Verzögerung, um das Arduino zu initialisieren, sollte es wie folgt aussehen:
Steuerung mit Game Controller und Arduino: Fertig!
Dieses Projekt war für den unerfahrenen Programmierer in vielerlei Hinsicht ziemlich tiefgreifend. Lernen mit Coding-Projekten: 9 Udemy-Kurse für den Anfänger-Programmierer Lernen mit Coding-Projekten: 9 Udemy-Kurse für den Anfänger-Programmierer Die eigentliche Schwierigkeit besteht darin, gute Programmier-Tutorials und Kurse zu finden Bringen Sie die notwendigen Fähigkeiten mit, aber tun Sie dies mit praktischen Projekten. Hier kommt Udemy ins Spiel. Lesen Sie mehr, trotz der fantastischen Bibliotheken, die uns helfen. Was es darstellt, ist eine neue Art, über das Steuern von Robotern und anderen Geräten, die Sie bauen, nachzudenken.
Dieses Projekt würde perfekt mit unserer Anleitung zum Bau einer Laserturm-Erdbank zusammenpassen! Wie man einen Laserturm mit einer Arduino Pew Pew! Wie man einen Laser-Revolver mit einem Arduino baut Sind Sie gelangweilt? Könnte auch einen Laserturm bauen. Lesen Sie mehr und geben Sie die volle Kontrolle darüber. Sie können einen Piezo-Summer wie in unserem Simple Arduino Alarm einrichten. Wie man ein einfaches Arduino Alarm System macht. Wie man ein einfaches Arduino Alarm System erkennt Bewegung erkennen, dann erschrecken Sie einen Eindringling mit einem hohen Alarmton und blinkenden Lichtern. Klingt das lustig? Natürlich tut es das. Das ist das Ziel des heutigen Arduino-Projekts, geeignet ... Lesen Sie mehr Tutorial und verwenden Sie Ihren Controller, um die Tonhöhe des Summers oder die Farbe der Lichter zu ändern.
Oder du könntest einen massiven Roboter bauen und die Erde übernehmen. Solange du ein USB-Kabel lang genug hattest!