Fernsteuerung

 

Mo, 17.09. (9:00-18:00)
- Einarbeitung in Arduino (Tutorial)
- Löten einer Sirenenschaltung

Di, 18.09. (8:00-17:00)
- weiter arbeiten mit Arduino und Steckbrett
- Schaltplan und Programm des schon bestehenden Joysticks angeschaut und versucht zu verstehen

Mi, 19.09. (8:00-17:00)
- 7 Segment Display (Versuch des Aufbaus einer Transistorlogik auf dem Steckbrett, programmieren der Software, Schaltungsentwurf am PC)

Do, 20.09. (8:00-16:45)
- Anbringen eines 2. Displays, Programmierung
- 4 Displays

Fr, 21.09. (7:30-16:30)

Mo, 24.09. (8:00-17:00)
-Recherche, Einarbeitung
-Auslesen analog Input

Di, 25.09. (8:00-17:00+ 19:00-21:00)
-Auslesen Joystick
-Dokumentation

Mi, 25.09. (9:00-17:00)
-Löten eines A/D-Wandlers
-programmieren einfacher Töne mit Arduino



Do, 25.09. (8:00-16:30)
-noch mal programmieren verschiedener Melodien
-Verbesserung des Joystickcodes


Hauptprojekt - Fernsteuerung mittels Minijoysticks
 

 

Um die Funktionsweise des hier verwendeten, neuen Minijoysticks zu verstehen, bedurfte es einiger Recherche und Einarbeitung in das bisherige System. Hierzu verwendete ich zuerst ein einzelnes Potentiometer, aus denen der Joystick aufgebaut ist. Die drei Pins des Poti werden wie folgt angeschlossen: die beiden äußeren werden jeweils mit Masse und 5V verbunden, der mittlere kommt an einen der analog Eingangpins des Arduino boards. Der über den Widerstand einstellbare Spannungswert kann mit Hilfe der Funktion analogRead() ausgelesen werden. Ein anliegender Spannungswert von 0 Volt entspricht einem Ausgabewert von 0, die Maximalspannung 5 Volt dem Wert 1023.
Auf diese Weise habe ich nun auch die Werte der beiden Bewegungsachsen des Joysticks ausgelesen. Aufgrund der internen Verarbeitung mit 8 bit, werden die beiden least significant bits verworfen, was zu einem Wertebereich von 0 bis 256 führt. Zur Veranschaulichung der Auslenkung ist für jede Richtung eine LED an einen Ausgangspin des Arduino boards angeschlossen. Fällt der Wert aufgrund der Auslenkung unter 125 läuchtet die linke LED, analog für einen Wert über 140, die Rechte.
Um nun die Steuerwerte an den Zeppelin zu übergeben, wird das Funktmodul xBee für Arduino verwendet. Die Funktion Serial.print() sendet die Werte an das Funkmodul.

Playstation Controller

Auf der Suche nach einem geeigneten Gehäuse für die Joysticks, fand ich den Playstation Controller. Dieser besitzt bereits ähnliche Minijoysticks und ist sehr gut in der Hand zu halten, was die erwünschte einfachere, mobilere Steuerung ermöglicht. Außerdem lässt sich die verbaute Hardware im Controller mit einem Arduino ansteuern. Hierfür existiert eine frei verfügbare Library. Die Pinbelegung des Controllers soll im Weiteren vorgestellt werden:

Pinouts des Controllers


Pin 1 Data braunes Kabel
Pin 2 Command rotes Kabel
Pin 3 Vin lila Kabel, Spannung für Vibrationsmotoren
Pin 4 GND schwarzes Kabel
Pin 5 VCC pinkes Kabel
Pin 6 ATT gelbes Kabel
Pin 7 Clock blaues Kabel
Pin 8 not connected  
Pin 9 Acknowledge türkises Kabel

 

Alle Knöpfe des Controllers sind als Konstanten definiert:

"SELECT" PSB_SELECT  
"START" PSB_START  
"Pfeil-Taste oben" PSB_UP  
"Pfeiltaste rechts" PSB_RIGHT  
"Pfeiltaste unten" PSB_DOWN  
"Pfeiltaste links" PSB_LEFT  
"T-Taste" PSB_GREEN  
"C-Taste" PSB_RED  
"X-Taste" PSB_BLUE  
"S-Taste" PSB_PINK  
     
     
     
     
"L1-Taste" PSB_L1  
"R1-Taste" PSB_R1  
"L2-Taste" PSB_L2  
"R2-Taste" PSB_R2  
  PSB_L3  
  PSB_R3  
  PSS_RX  
  PSS_RY  
  PSS_LX  
  PSS_LY  
     

 

 


1) DATA =
Signal vom Controller zum Arduino. Das Signal wird 8 Bit seriell übertragen.

2) COMMAND
Signal vom Arduino zum Controller. Gleich wie DATA.
3) N/C
4) GND
5) VCC
6) ATT or SELECT
Zeigt Übertragung an.
7) CLOCK
8) N/C
9) ACK
Rückmeldung des Controllers zum Arduino

Wichtige Funktionen

1. config_gamepad(clock,command,attention,data)

-> legt die Pinbelegung für Clock, Command, Attention und Data fest

2. read_gamepad()

3. Button(Button_Constant)

4. Analog(Button_Constant)

5. ButtonPressed(Button_Constant)


6. ButtonReleased(Button_Constant)

7. NewButtonState(Button_constant)


Für die Steueurung über die Minijoysticks des Controllers benötigt man  allerdings nur die Funktion Analog(Button_Constant), um die analogen Werte auszulesen.