English / Deutsch | Druckversion
Twitter
twitter

RC Viewer, RC Gamepad, Rennspiele am Computer mit einer Modellbaufernsteuerung spielen


Mit RC Gamepad kann man Rennspiele am Computer mit einer Modellbaufernsteuerung für ferngesteuerte Autos (und ähnliches) spielen. Ich verwende einen Teensy 3 und eine 6 Kanal Fernsteuerung mit Empfänger.

RC Gamepad kann Menschen mit Behinderung helfen Rennspiele am Computer zu spielen.

Ich habe zwei Programme veröffentlicht:

  • RC Viewer, anzeigen der Impulslängen.
  • RC Gamepad, ein USB Gamepad mit unterschiedlichen Modi und Features.

RC Gamepad kann als Gamepad verwendet werden und es kann auch den Xbox 360 Controller, sowie einen PlayStation 3 Controller emulieren (siehe Beschreibung bzgl. Einschränkungen).


Hardware
Quellcodes
Videos
RC Gamepad/Controller Mapping
Modus Information
Funktionsbeschreibung, Schaltplan
Ausgabe vom Teensy als serielles USB-Gerät (Programm RC Viewer) und Minicom
Kanalbeispiel
Pulsdiagramm
RC Viewer
RC Gamepad - Game Controller
Photos

Hardware


  • Teensy 3.2 mit gelöteten Pins
  • Absima CR6S RC Fernsteuerung + Empfänger 2.4Ghz 6 Kanäle
  • USB Kabel - USB 2.0 Kabel A zu Micro M/M
  • Farbiges Flachbandkabel 10cm
  • USB Serial Cable COM-FOUR PL2303HX USB zu TTL RS232 COM zum Debuggen

Quellcodes


RC Viewer: rcviewer-20220821.zip, Lizenz: MIT

RC Gamepad: rcgamepad-20221004.zip, Lizenz: GPLv2


Videos


Datenschutz - Youtube Inhalte einbetten

   
Externer Inhalt blockiert. Ansehen auf YouTube

Externer Inhalt blockiert. Ansehen auf YouTube


RC Gamepad/Controller Mapping



Modus Information


Verschiedene Blinkmodi, wenn die Fernsteuerung beim Einschalten vom Teensy nicht mit Strom versorgt wird, und für den Modus 1 - 'Spielmodus', den Modus 2 - 'Menümodus' und den Modus 3 - 'alternativen Tastenmodus'.


Funktionsbeschreibung, Schaltplan


Der RC-Empfänger übermittelt die Informationen mittels Impulslängen. Die Impulslänge liegt zwischen einer minimalen und einer maximalen Länge. Die Länge des Impulses entspricht dem Winkel des Servos oder der Drehgeschwindigkeit des Motors. Die Impulse von Kanal 1 entsprechen dem Lenkrad, die Impulse von Kanal 2 entsprechen dem Beschleunigen/Bremsen usw. Die Impulse werden am Teensy über digitale Eingangspins ausgelesen. Die Zustandsänderungen Low/High werden mittels Interrupts registriert. Der RC-Empfänger kann mit 4,8 V-12 V arbeiten und wird über die 5 V der Teensy USB-Verbindung versorgt.

Schaltplan


Ausgabe vom Teensy als serielles USB-Gerät (Programm RC Viewer) und Minicom


Kanalbeispiel

Kanal 1, Lenkrad der Fernsteuerung.
Beachten Sie, dass Ihr Empfänger möglicherweise unterschiedliche Impulsraten hat. Bei meiner Fernsteuerung beginnt der Impuls etwa alle 14700 µs. Die minimale Länge eines Impulses beträgt ungefähr 936 µs, das Maximum beträgt ungefähr 2000 µs.

  • Lenkrad in neutraler Position: Pulslänge ca. 1480 µs.
  • Lenkrad nach links drehen: Je nach Winkel zwischen 963 µs und 1480 µs.
  • Drehen des Lenkrads maximal nach links: Pulslänge ca. 936 µs.
  • Drehen des Lenkrads nach rechts: Je nach Winkel zwischen 1480 µs und 2000 µs.
  • Drehen Sie das Lenkrad maximal nach rechts: Pulslänge ca. 2000 µs.


Pulsdiagramm

Diese Werte stammen von meinem Empfänger. Sie können die Werte Ihres Empfängers mit RC Viewer auslesen.


RC Viewer


1. RC Viewer Programmbeschreibung
2. Hardware
3. Programmdetails
      3.1. Serielle Ausgabe
      3.2. Ausgabe Device Nodes
      3.3. Beispiele mit Minicom
      3.4. RC-Empfänger
      3.5. Kanäle konfigurieren
4. Programm kompilieren
      4.1. Compiler installieren
      4.2. Makefile konfigurieren
      4.3. Kompilieren
5. Teensy flashen
      5.1. Tool
      5.2. Befehl zum Flashen

1. RC Viewer Programmbeschreibung

Das Programm liest die Impulslängen von einem RC-Empfänger aus. Die Werte werden auf einem seriellen Terminal angezeigt. Die serielle Übertragung kann entweder mit dem Teensy als USB Serial-Gerät oder über die seriellen Pins des Teenys stattfinden. Sie können das Programm 'minicom' verwenden, um die Ausgabe anzuzeigen.

Lizenz: MIT, siehe LICENSE.txt

Download: rcviewer-20220821.zip


2. Hardware

  • Teensy 3.2 mit gelöteten Pins
  • Absima CR6S RC Fernsteuerung + Empfänger 2.4Ghz 6 Kanäle
  • USB Kabel - USB 2.0 Kabel A zu Micro M/M
  • Farbiges Flachbandkabel 10cm
  • USB Serial Cable COM-FOUR PL2303HX USB zu TTL RS232 COM zum Debuggen

3. Programmdetails

Hauptprogramm: rcviewer.cpp

3.1. Serielle Ausgabe

Setup im Bereich: Terminal connection

Teensy als USB Serial-Gerät: #define serial Serial
Teensy RS232 Serielle Pins: #define serial Serial1

Aktualisierungsrate in Millisekunden: #define TERMINAL_REFRESH_MS 200

3.2. Ausgabe Device Nodes

Teensy als USB Serial-Gerät: /dev/ttyACM0
Teensy RS232 Serielle Pins zu USB: /dev/ttyUSB0

3.3. Beispiele mit Minicom

minicom -b 115200 -D /dev/ttyACM0 -o
minicom -b 115200 -D /dev/ttyUSB0 -o

Minikom verlassen: Drücken Sie STRG-A und dann 'q'.
Siehe auch das Skript 'minicom.sh'.

3.4. RC-Empfänger

Setup im Bereich: Remote control

Anzahl der Kanäle: #define RC_NUM_CHANNELS 6
Es können sechs Kanäle eingetragen bleiben, auch wenn die Fernsteuerung nur zwei Kanäle hat.

Teensy Pins:

rc_interrupt_pin[RC_NUM_CHANNELS] = {18, 19, 20, 21, 22, 23};

3.5. Kanäle konfigurieren

Kanal 1, üblicherweise das Lenkrad:

  RC_InitChannel (1, Isr1);

Kanal 2, üblicherweise Beschleunigen/Bremsen:

  RC_InitChannel (2, Isr2);

4. Programm kompilieren

4.1. Compiler installieren

Laden Sie Arduino IDE herunter und installieren Sie das Programm
https://www.arduino.cc/en/software

Laden Sie Teensyduino herunter und installieren Sie das Programm in das Arduino IDE-Verzeichnis
https://www.pjrc.com/teensy/td_download.html

4.2. Makefile konfigurieren

Öffnen Sie das Makefile von RC Viewer und konfigurieren Sie folgende Variablen:

• die Variable ARDUINO_HOME auf das Arduino IDE Installationsverzeichnis.

• die Variable M_ARDUINO_VERSION auf die Arduino IDE Version.

• die Variable M_TEENSYDUINO_VERSION auf die Teensyduino Version.

• die Variable M_TEENSY_VERSION, falls Sie ein anderes Teensy 3 Modell verwenden als 3.2.

4.3. Kompilieren

Führen Sie 'make' aus um das Programm zu kompilieren.

Das kompilierte Programm (rcviewer.hex) finden Sie im Verzeichnis 'bin'.


5. Teensy flashen

5.1. Tool

Verwenden Sie das Programm 'teensy_loader_cli' um das Teensy zu flashen.
Download: https://www.pjrc.com/teensy/loader_cli.html

5.2. Befehl zum Flashen

Drücken Sie die weiße Taste des Teensy um in den Flash-Modus zu wechseln.

Zum Flashen starten Sie: teensy_loader_cli -mmcu=mk20dx256 -v -w bin/rcviewer.hex

Sie können auch das Skript 'flash' verwenden: ./flash


RC Gamepad - Game Controller


1. RC Gamepad Programmbeschreibung
2. Hardware
3. Programmdetails
      3.1. Controller-Typ
      3.2. Debug-Ausgabe
      3.3. RC-Werte anzeigen
      3.4. Kanalnummern des RC Empfängers
      3.5. Kalibrierung oder nicht
      3.6. Taster Haltezeit
      3.7. Taster Spezialfunktion
      3.8. Terminalverbindung
      3.9. RC-Empfänger
4. Serieller Terminal
5. Programm kompilieren
      5.1. Compiler installieren
      5.2. Makefile konfigurieren
      5.3. Kompilieren
6. Teensy flashen
      6.1. Tool
      6.2. Befehl zum Flashen
7. Kalibrierung
      7.1. Fehlerbehebung - Kein Kalibrierungsmodus
8. RC Taster - Taster emulieren
9. Konsolen Controller
10. Gamepad USB Vendor und Product ID
11. Testen
12. Probleme
13. Debug-Ausgabe
14. Modus Information

1. RC Gamepad Programmbeschreibung

RC Gamepad ist gedacht um mit einer Modellbaufernsteuerung Computer Rennspiele zu spielen. RC Gamepad kann als USB-Gamepad verwendet werden, einen Xbox 360-Controller oder einen PlayStation 3-Controller emulieren. Die emulierten Konsolencontroller funktionieren NICHT auf ihren Konsolen, da der erforderliche Sicherheitsmechanismus nicht implementiert ist. Die USB-Deskriptoren werden mit diesem Quellcode nicht ausgeliefert. Sie können die USB-Deskriptoren mit dem Tool 'getdescriptors' erhalten, wenn Sie den original Controller besitzen. Siehe '9. Konsolencontroller' für weitere Informationen.

Lizenz: GPLv2, siehe LICENSE.txt

Download: rcgamepad-20221004.zip


2. Hardware

  • Teensy 3.2 mit gelöteten Pins
  • Absima CR6S RC Fernsteuerung + Empfänger 2.4Ghz 6 Kanäle
  • USB Kabel - USB 2.0 Kabel A zu Micro M/M
  • Farbiges Flachbandkabel 10cm
  • USB Serial Cable COM-FOUR PL2303HX USB zu TTL RS232 COM zum Debuggen

3. Programmdetails

Hauptprogramm: rcgamepad.cpp

3.1. Controller-Typ

Setzen Sie CONTROLLER_TYPE Variable. Mögliche Werte sind

 CONTROLLER_GAMEPAD
 CONTROLLER_XBOX360
 CONTROLLER_PS3

Beispiel:

#define CONTROLLER_TYPE CONTROLLER_GAMEPAD

Weitere Informationen finden Sie unter '9. Konsolencontroller'.

3.2. Debug-Ausgabe

Das Debuggen ist optional. Für die Verbindung mit einem seriellen Terminal verwenden Sie ein USB-zu-RS232 Kabel.

Setzen Sie die DEBUG_TYPE Variable. Mögliche Werte sind DEBUG_NONE, DEBUG_USB_CONFIGURE, DEBUG_USB_IN_REPORT, DEBUG_USB_OUT_REPORT, DEBUG_USB_DATA, DEBUG_USB_VERBOSE

Die Variable DEBUG_TYPE ist eine Bitmaske. Verwenden Sie das 'logische Oder' für die Kombination von mehreren Optionen.

Beispiele:

#define DEBUG_TYPE DEBUG_NONE
#define DEBUG_TYPE (DEBUG_USB_CONFIGURE | DEBUG_USB_OUT_REPORT)
#define DEBUG_TYPE DEBUG_USB_VERBOSE

3.3. RC-Werte anzeigen

Sie können die RC-Werte mit einem seriellen Terminal anzeigen. Aktivieren Sie

#define PRINT_RC_VALUES

If PRINT_RC_VALUES is enabled, then the screen will be shown automatically. If PRINT_RC_VALUES is not enabled, then the screen can be enabled on demand by pressing the key 'v'. Wenn PRINT_RC_VALUES aktiviert ist, werden die Werte automatisch angezeigt. Wenn PRINT_RC_VALUES nicht aktiviert ist, kann die Anzeige bei Bedarf durch Drücken der Taste 'v' aktiviert werden.

Hinweis: Wenn gleichzeitig auch das USB-Debuggen aktiviert ist, dann wird der Bildschirm unleserlich weil USB-Daten und RC-Werte vermischt angezeigt werden.

3.4. Kanalnummern des RC Empfängers

Wenn Ihre Fernsteuerung und der Empfänger unterschiedliche Kanalnummern verwendet, dann passen Sie die Nummern an:

#define CHANNEL1 1
#define CHANNEL2 2
#define CHANNEL3 3
#define CHANNEL4 4
#define CHANNEL5 5
#define CHANNEL6 6

3.5. Kalibrierung oder nicht

Beim RC Gamepad kann das Lenkrad und der Beschleunigungs-/Bremsentrigger kalibriert werden. Informationen zum Kalibrieren finden Sie unter 'Kalibrierung'. Das Kalibrierungsergebnis wird auf dem EEPROM des Teensy gespeichert. Alternativ zur Kalibrierung können Sie auch vordefinierte Werte verwenden. Mit 'PRINT_RC_VALUES' erhalten Sie die entsprechenen Werte für die Kanäle.

Die Kalibrierung ist standardmäßig aktiviert. Um vordefinierte Werte zu verwenden, entfernen Sie die Zeile oder machen Sie ein Kommentar aus

#define USE_CALIBRATE

Hier sind ein paar Werte von meiner Fernsteuerung:

// Steering wheel
#define CHANNEL1_MIN      936
#define CHANNEL1_RELAXED 1479
#define CHANNEL1_MAX     1999

// Accelerate/Break
#define CHANNEL2_MIN     1013
#define CHANNEL2_RELAXED 1475
#define CHANNEL2_MAX     1987

// Tristate channel
#define CHANNEL4_MODE1 1000
#define CHANNEL4_MODE2 2000

// Twostate channels
#define CHANNEL3_TIPPING 1200
#define CHANNEL5_TIPPING 1800
#define CHANNEL6_TIPPING 990

3.6. Taster Haltezeit

Die Taster der Fernsteuerung agieren als Schalter. Siehe 'RC-Taster'. RC Gamepad emuliert wiederum Taster. Mit der Variable BUTTON_PRESS_TIME kann man die taster Haltezeit (wie lange der Taster gedrückt ist) in Millisekunden definieren.

#define BUTTON_PRESS_TIME 400

3.7. Taster Spezialfunktion

Da die Taster der Fernsteuerung als Schalter agieren, gibt es für die Tasteremulation von RC Gamepad eine Spezialfunktion um Taster länger als die definierte Haltezeit gedrückt zu halten. Mit FEATURE_KEEP_PRESSED wird der Taster so lange gehalten, bis der Beschleunigungstrigger wieder in die Mittelstellung geht oder eine Zeitspanne abgelaufen ist.

#define FEATURE_KEEP_PRESSED

3.8. Terminalverbindung

Sie können ein serielles Terminal verwenden um Debug-Informationen und die Werte des RC-Senders (Fernsteuerung) anzeigen zu lassen.

#define SERIAL_PORT Serial1      // RS232 serial pins RX1 and TX1.
#define TERMINAL_REFRESH_MS 500  // Refresh rate for the terminal output. 500ms.

3.9. RC-Empfänger

Setup im Abschnitt: Remote control

Anzahl der Kanäle: #define RC_NUM_CHANNELS 6
Es können sechs Kanäle eingetragen bleiben, auch wenn die Fernsteuerung nur zwei Kanäle hat.

Teensy Pins:

rc_interrupt_pin[RC_NUM_CHANNELS] = {18, 19, 20, 21, 22, 23};


4. Serieller Terminal

Sie können eine der RS232 Schnittstellen des Teensys verwenden, um eine Verbindung zu einem seriellen Terminal herzustellen. Ich verwende ein USB-Serialkabel COM-FOUR PL2303HX USB zu TTL RS232 COM. Schließen Sie RDX an TX1, TDX an RX1 und GND an GND an. Siehe Schaltplan.

Output Device Node: /dev/ttyUSB0

Beispiel mit Minicom:

minicom -b 115200 -D /dev/ttyUSB0 -o

Minikom verlassen: Drücken Sie STRG-A und dann 'q'.
Siehe auch das Skript 'minicom.sh'.


5. Programm kompilieren

5.1. Compiler installieren

Laden Sie Arduino IDE herunter und installieren Sie das Programm
https://www.arduino.cc/en/software

Laden Sie Teensyduino herunter und installieren Sie das Programm in das Arduino IDE-Verzeichnis
https://www.pjrc.com/teensy/td_download.html

5.2. Makefile konfigurieren

Öffnen Sie das Makefile von RC Viewer und konfigurieren Sie folgende Variablen:

• die Variable ARDUINO_HOME auf das Arduino IDE Installationsverzeichnis.

• die Variable M_ARDUINO_VERSION auf die Arduino IDE Version.

• die Variable M_TEENSYDUINO_VERSION auf die Teensyduino Version.

• die Variable M_TEENSY_VERSION, falls Sie ein anderes Teensy 3 Modell verwenden als 3.2.

5.3. Kompilieren

Führen Sie 'make' aus um das Programm zu kompilieren.

Das kompilierte Programm (rcviewer.hex) finden Sie im Verzeichnis 'bin'.


6. Teensy flashen

6.1. Tool

Verwenden Sie das Programm 'teensy_loader_cli' um das Teensy zu flashen.
Download: https://www.pjrc.com/teensy/loader_cli.html

6.2. Befehl zum Flashen

Drücken Sie die weiße Taste des Teensy um in den Flash-Modus zu wechseln.

Zum Flashen starten Sie: teensy_loader_cli -mmcu=mk20dx256 -v -w bin/rcviewer.hex

Sie können auch das Skript 'flash' verwenden: ./flash


7. Kalibrierung

Sie können das Lenkrad und den Beschleunigungs- / Bremsentrigger kalibrieren.

1) Schalten Sie die Fernsteuerung ein.
2) Drehen Sie das Lenkrad ganz rechts und halten Sie es.
3) Den Teensy mit Strom versorgen (USB Kabel anstecken).
4) Die Teensy-LED blinkt sehr schnell wenn Sie den Kalibrierungsmodus aktiviert haben. Der Kalibrierungsmodus bleibt für 10 Sekunden aktiviert.
5) Drehen Sie das Lenkrad ganz links und ganz rechts.
6) Bewegen Sie den Beschleunigungs- / Bremstrigger in die minimale und maximale Position.
7) Warten Sie bis die 10 Sekunden vorbei sind.
8) Die Teensy-LED blinkt langsam wenn die Kalibrierung beendet ist.

Anstelle der Kalibrierung können Sie auch fest definierte Werte verwenden. Schreiben Sie im Programm rcgamepad.cpp '//' vor '#define USE_CALIBRATE' um die Kalibrierung zu deaktivieren. Tragen Sie Ihre Werte für das Lenkrad und den Beschleunigungs- / Bremstrigger bei den entsprechenden 'defines' ein. Sie erhalten die richtigen Werte, wenn Sie die serielle Verbindung zu einem Terminal aufbauen und '#define PRINT_RC_VALUES' im Programm verwenden. Sie können den Teensy auch mit dem Programm 'RC Viewer' für den Teensy 3.2 flashen lassen und die Werte anzeigen.

7.1. Fehlerbehebung - Kein Kalibrierungsmodus

Wenn die Aktivierung des Kalibrierungsmodus nicht funktioniert, dann drehen Sie das Lenkrad auf das Maximum der anderen Seite. Wenn dies auch nicht funktioniert, überprüfen Sie ob USE_CALIBRATE im Programm definiert ist und kompilieren Sie das Programm neu, dann flashen Sie den Teensy.


8. RC Taster - Taster emulieren

Die Taster der Fernsteuerung fungieren als Schalter. Wenn Sie zum Beispiel den Taster für Kanal 6 drücken, ändert sich die Impulsdauer (Impulsdauer> 1000 µs). Die Dauer wird beibehalten, wie bei einem Schalter, auch wenn der Taster losgelassen wurde. Wenn Sie erneut drücken, dann ändert sich wieder die Impulsdauer (Impulsdauer <1000 µs) und wird beibehalten. Dieses Verhalten ist nützlich für ferngesteuerte Fahrzeuge, aber für Spiele benötigen Sie Taster und keine Schalter. Die Two-State-Tastenfunktion emuliert einen Tastendruck mit der Dauer von 400 Millisekunden.


9. Konsolen Controller

Der Quellcode von RC Gamepad beinhaltet nicht die USB-Deskriptoren des Xbox 360 bzw. des PlayStation 3 Controllers. Wenn Sie die original Controller besitzen, dann können Sie die USB-Deskriptoren mit dem Programm 'getdescriptors' abrufen. Das Programm erstellt .h-Dateien. Diese Dateien müssen im Verzeichnis 'descriptors' gespeichert werden. Eine vorkompilierte Version des Programms finden Sie im Verzeichnis 'descriptors'. Starten Sie das Programm, wenn der/die original Controller am Computer angeschlossen sind.

Der Quellcode von 'getdesciptors' ist ebenfalls verfügbar. Sie finden ihn im Verzeichnis 'getdescriptors_src'. Verwenden Sie 'make' um das Programm zu kompilieren.

Die emulierten Konsolencontroller von RC Gamepad funktionieren nicht auf den entsprechenden Konsolen, da der erforderliche Sicherheitsmechanismus nicht implementiert ist. Sie können die emulierten Controller jedoch unter Linux, Windows, OSX und anderen Systemen verwenden.


10. Gamepad USB Vendor und Product ID

RC Gamepad ist ein nicht kommerzielles Programm. Ich besitze keine USB Vendor ID, daher verwende ich die Teensy Vendor ID zu Demonstrationszwecken für das implementierte Gamepad.

In descriptors/gamepad.h:

#define GAMEPAD_VENDOR  0x16C0 // Teensy Vendor ID
#define GAMEPAD_PRODUCT 0xFFF0 // No special number

11. Testen

Unter Linux: jstest /dev/input/js0


12. Probleme

Wenn Sie ein Spiel spielen und ein seltsames Verhalten feststellen, deaktivieren Sie die Terminalausgabe der RC-Werte. Schreiben Sie '//' vor '#define PRINT_RC_VALUES'. Wenn dies nicht hilft, deaktivieren Sie die Debug-Ausgabe. Setzen Sie '#define DEBUG_TYPE DEBUG_NONE'.


13. Debug-Ausgabe

Zum Debuggen können Sie den Teensy mit einem Seriell zu USB Kabel verbinden und mit einem Terminal Programm (z.B. Minicom) ausgeben.

Schaltplan: Teensy - RC Viewer/RC Gamepad

Weitere Informationen: Teensy - USB/UART


14. Modus Information

Verschiedene Blinkmodi, wenn die Fernsteuerung beim Einschalten vom Teensy nicht mit Strom versorgt wird, und für den Modus 1 - 'Spielmodus', den Modus 2 - 'Menümodus' und den Modus 3 - 'alternativen Tastenmodus'.


Using handicapped


Todo


Photos



© 2024 by Elmar Hanlhofer