ich war hier: MPTSS2017Controller

Version [87184]

Dies ist eine alte Version von MPTSS2017Controller erstellt von MartinPauli am 2018-03-12 17:55:19.

 

Projekt 2: Arduino als Controller


Ziel dieses Projektes ist es, einen Controller mithilfe des Arduinos zu bauen. Der Arduino wird dann in der Lage sein, mithilfe von DirectInput mit dem Computer zu kommunizieren. Dabei wird die Firmware des USB-Controllers mit einer modifizierten Version überschrieben, weshalb diese Anleitung nur mit Arduinos kompatibel ist, welche den ATmega328 verwenden.

Original Arduino (ATmega328):
Abb. 1: Original Arduino - Quelle: Hochschule Schmalkalden/FK Informatik
Abb. 1: Original Arduino
fn_start
Quelle: Hochschule Schmalkalden/FK Informatik
fn_stop
Dritthersteller Arduino (CH340G/CH341G):
Abb. 2: Dritthersteller Arduino - Quelle: Hochschule Schmalkalden/FK Informatik
Abb. 2: Dritthersteller Arduino
fn_start
Quelle: Hochschule Schmalkalden/FK Informatik
fn_stop

Falls Sie einen Dritthersteller-Arduino verwenden, welcher einen kleinen quadratischen Chip besitzt, ist dieser mit großer Wahrscheinlichkeit inkompatibel.

A. Komponentenliste
1x Arduino Uno
2x Analog Sticks
11x Taster

B. Installation der benötigten Software und Treiber

1. Atmel Flip Installieren

Mithilfe von Atmel Flip wird die Firmware des USB-Controller überspielt.
Flip herunterladen:
http://www.microchip.com/developmenttools/ProductDetails.aspx?PartNO=FLIP
Abb. 3: Download von Atmel Flip auf microchip.com - Quelle: Hochschule Schmalkalden/FK Informatik
Abb. 3: Download von Atmel Flip auf microchip.com
fn_start
Quelle: Hochschule Schmalkalden/FK Informatik
fn_stop
Auf der Seite finden Sie den Download für Flip, es wird empfohlen das Installationsprogramm mit der integrierten Java Runtime herunterzuladen, da Flip hierbei wählerisch ist und den Start sonst verweigert. Bei der Installation selbst ist hierbei nichts weiter zu beachten.

2. UnoJoy

Damit der Arduino auch als Controller verwendet werden kann, kommt UnoJoy zum Einsatz. Hierbei handelt es sich um eine schon vorgefertigte Firmware für den USB-Controller und eine Arduino Bibliothek. UnoJoy ist auf GitHub zu finden:
https://github.com/AlanChatham/UnoJoy
Die benötigten Dateien bekommen Sie, wenn die auf „Clone or download“ drücken und hier „Download ZIP“ wählen.
Abb. 4: Download von UnoJoy auf GitHub.com - Quelle: Hochschule Schmalkalden/FK Informatik
Abb. 4: Download von UnoJoy auf GitHub.com
fn_start
Quelle: Hochschule Schmalkalden/FK Informatik
fn_stop
Entpacken Sie das Archiv nach dem Herunterladen an einen beliebigen Ort. Gehen Sie dann in den Ordner Drivers und dort den Unterordner Windows. Starten Sie hier dpinst-amd64.exe wenn sie ein 64-Bit Windows verwenden und dpinst-x86.exe wenn Sie ein 32-Bit Windows verwenden.
Abb. 5: Installation des Treibers - Quelle: Hochschule Schmalkalden/FK Informatik
Abb. 5: Installation des Treibers
fn_start
Quelle: Hochschule Schmalkalden/FK Informatik
fn_stop
Es kann sein das die Installation des Atmel Corporation Treibers fehlschlägt, das ist allerdings kein Problem solange der libusb Treiber betriebsbereit ist.

C. Arduino vorbereiten

Erstellen Sie einen neuen Arduino Sketch und speichern Sie diesen als Controller.ino ab. In den eben entpackten Ordner gehen Sie in den UnoJoy Unterordner und kopieren Sie die „UnoJoy.h“ Datei. Fügen Sie diese bei den eben gespeicherten Arduino Sketch ein.
Öffnen Sie die Controller.ino und fügen Sie folgenden Beispiel-Quelltext ein:

#include "UnoJoy.h"

byte DPadUp = 10;
byte DPadDown = 12;
byte DPadLeft = 11;
byte DPadRight = 9;

byte ButtonA = 5;
byte ButtonB = 4;
byte ButtonX = 3;
byte ButtonY = 2;

byte ButtonStart = 6;
byte ButtonSelect = 8;
byte ButtonHome = 7;

byte lAnalogHorizontal = A0;
byte lAnalogVertical = A1;
byte lAnalogClick = A2;

byte rAnalogHorizontal = A3;
byte rAnalogVertical = A4;
byte rAnalogClick = A5;

byte buttonArray[] = {	DPadUp, DPadDown, DPadLeft, DPadRight, ButtonA, ButtonB,
						ButtonX, ButtonY, ButtonStart, ButtonSelect, ButtonHome,
						lAnalogClick, rAnalogClick,
						lAnalogHorizontal, lAnalogVertical, rAnalogHorizontal, rAnalogVertical};

void setup(){
  setupPins();
  setupUnoJoy();
}

void loop(){
  dataForController_t controllerData = getControllerData();
  setControllerData(controllerData);
}

void setupPins(void){
	for (int i = 0; i < sizeof(buttonArray)-4; i++){
		pinMode(buttonArray[i], INPUT);
		digitalWrite(buttonArray[i], HIGH);
	}
}

dataForController_t getControllerData() {
	dataForController_t controllerData = getBlankDataForController();

	controllerData.crossOn = !digitalRead(ButtonA);
	controllerData.circleOn = !digitalRead(ButtonB);
	controllerData.triangleOn = !digitalRead(ButtonY);
	controllerData.squareOn = !digitalRead(ButtonX);
	
	controllerData.dpadUpOn = !digitalRead(DPadUp);
	controllerData.dpadDownOn = !digitalRead(DPadDown);
	controllerData.dpadLeftOn = !digitalRead(DPadLeft);
	controllerData.dpadRightOn = !digitalRead(DPadRight);

	controllerData.startOn = !digitalRead(ButtonStart);
	controllerData.selectOn = !digitalRead(ButtonSelect);
	controllerData.homeOn = !digitalRead(ButtonHome);
	
	controllerData.r1On = !digitalRead(rAnalogClick);
	controllerData.l1On = !digitalRead(lAnalogClick);
	
	(void) analogRead(lAnalogHorizontal);
	controllerData.leftStickX = analogRead(lAnalogHorizontal) >> 2;
	(void) analogRead(lAnalogVertical);
	controllerData.leftStickY = analogRead(lAnalogVertical) >> 2;
	
	(void) analogRead(rAnalogHorizontal);
	controllerData.rightStickX = analogRead(rAnalogHorizontal) >> 2;
	(void) analogRead(rAnalogVertical);
	controllerData.rightStickY = analogRead(rAnalogVertical) >> 2;

	return controllerData;
}


Mithilfe der UnoJoy.h haben Sie Zugriff auf die Funktion setControllerData(), diese gibt den Status der Taster an den Computer weiter. In der Funktion getControllerData() werden die Pins ausgewertet und den entsprechenden Tastendrücken zugewiesen. Schließen Sie den Arduino an den Computer und Laden das Programm auf ihn.

1. DFU-Modus

Damit Sie die Firmware des USB-Controllers überspielen können, müssen Sie den Arduino in den DFU-Modus (Device Firmware Upgrade) versetzen.
Abb. 6: Arduino in DFU-Modus versetzen - Quelle: Hochschule Schmalkalden/FK Informatik erstellt mit fritzing
Abb. 6: Arduino in DFU-Modus versetzen
fn_start
Quelle: Hochschule Schmalkalden/FK Informatik erstellt mit fritzing
fn_stop

Um in den DFU-Modus zu wechseln, müssen Sie die beiden rot markierten Pins überbrücken, dazu können Sie z.B. ein Kabelende verwenden. Nach dem Überbrücken sollten Sie ein Ton von Windows hören, dass ein Gerät abgeschlossen und wieder angeschlossen wurde. Wechseln Sie erneut in das UnoJoy Verzeichnis und in den UnoJoy Unterordner, starten Sie TurnIntoAJoystick.bat um die neue Firmware aufzuspielen. Die Ausgabe sollte wie folgt aussehen:
Abb. 7: Ausgabe TurnIntoAJoystick.bat - Quelle: Hochschule Schmalkalden/FK Informatik
Abb. 7: Ausgabe TurnIntoAJoystick.bat
fn_start
Quelle: Hochschule Schmalkalden/FK Informatik
fn_stop

Der DFU-Modus ist immer nur so lange aktiv wie der Arduino eingeschaltet ist. Um den DFU-Modus zu beenden, trennen Sie das USB-Kabel vom Computer und schließen es wieder an, Windows erkennt den Arduino jetzt als Controller. Es ist jetzt nicht mehr möglich, Programme auf den Arduino hochzuladen, dazu müssen Sie erst wieder die Firmware wechseln. Dies ist mithilfe der TurnIntoAnArduino.bat möglich.

D. Aufbau

Das folgende Bild zeigt einen Beispielaufbau eines Controllers. Die Pinbelegung entspricht der aus dem Beispiel Quelltext.
Abb. 8: Beispielaufbau eines Controllers - Quelle: Hochschule Schmalkalden/FK Informatik erstellt mit fritzing
Abb. 8: Beispielaufbau eines Controllers
fn_start
Quelle: Hochschule Schmalkalden/FK Informatik erstellt mit fritzing
fn_stop

E. Funktionstest

Der Controller ist somit fertiggestellt und einsatzbereit. Den Controller können Sie unter http://html5gamepad.com/ testen. Hierbei meldet sich dieser direkt als „UnoJoy Joystick“.
Abb. 9: Controller Test von html5gamepad.com - Quelle: Hochschule Schmalkalden/FK Informatik
Abb. 9: Controller Test von html5gamepad.com
fn_start
Quelle: Hochschule Schmalkalden/FK Informatik
fn_stop

Auch können Sie den Controller am Raspberry Pi verwenden. Er wird von den gängigen Spielesystemen wie RetroPie sowie Recalbox OS erkannt.

Sie können jetzt dank des Arduinos verschiedene Kombinationen aus Bauteilen zu einem Controller umfunktionieren, so wäre eine Steuerung durch Gyroskop, Mikrofon oder Lichtsensor denkbar.
Diese Seite wurde noch nicht kommentiert.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki