A11|03 Der Daumen-Joystick
Joystick Module


Sensorwerte / Mix an Sensoren

Joysticks sind coole elektromechanische Eingabegeräte, vor allem wenn sie so winzig sind. Dieser hier ist für den Daumen gedacht und zeichnet Bewegungen im 2 dimensionalen Raum auf. Der Aufbau ist denkbar einfach: Es sind zwei Potentiometer für die X und Y-Achse, die durch eine Mechanik miteinander verbunden sind. Außerdem besitzt es einen Druckknopf, der beim Herunterdrücken der Kappe ausgelöst wird.

 

Spezifikationen
- Arbeitsspannung: 3,3 – 5V
- Pinabstand: 2,54mm
- Signalart: Analog x2, Digital x1

Am Keyesstudio Joystick ist zusätzlich noch eine rote Betriebs-LED aufgelötet, die aufleuchtet, wenn das Board mit Strom versorgt wird. Der einzige Nachteil ist der kurze Weg des Joysticks. Durch den geringen Weg ist der Joystick sehr empfindlich. Schon einige Millimeter Bewegung sorgen für einen schnellen Anstieg der Werte.

 

Der Aufbau

Der Joystick verfügt über 5 PINs welche wie folgt an das Arduino angeschlossen werden:

Der G-Pin wird an den GND-Pin des Arduinos angeschlossen.
Der V-Pin für die Stromversorgung wird am 5V-Pin des Arduinos angeschlossen
Der X-Pin für die X-Achse des Joystick Moduls kommt an den Pin A0.
Der Y-Pin für die Y-Achse des Joystick Moduls wird mit dem Pin A1 verbunden.
Der B-Pin steht für Button, das ist ein Taster, der durch einen Druck senkrecht auf den Joystick aktiviert wird. Er wird an den Digital-Pin 3 angeschlossen.

 
 

Der minimal Sketch

Der Sketch liest alle drei Eingabewerte X-Potentiometer, Y-Potentiometer und Button ein und gibt sie am seriellen Monitor aus.

/********************************************************
A11|03 Der Daumen-Joystick
Der minimal Sketch
Mr Robot UXSD / www.mrrobotuxsd.com
*********************************************************/
int xAxisPin = 0; //x analog pin
int yAxisPin = 1; //y analog pin
int buttonPin = 3; //digital pin

//Variablen für die Zustände der X, Y-Achsen und den Taster
int xAxisValue, yAxisValue, buttonValue; 


void setup() 
{
  //Initialisiere die serielle Kommunikation mit 9600 Bits pro Sekunde:
  Serial.begin(9600); 

  pinMode(buttonPin, INPUT); //den Taster als INPUT deklarieren
}


void loop() 
{
  xAxisValue = analogRead(xAxisPin);    //lies den aktuellen Wert für die X-Achse
  yAxisValue = analogRead(yAxisPin);    //lies den aktuellen Wert für die Y-Achse
  buttonValue = digitalRead(buttonPin); //lies den aktuellen Wert für den Taster

  //sende den aktuellen Wert der X-Achse an den seriellen Monitor
  Serial.print(" X-Achse: ");
  Serial.print(xAxisValue ,DEC);

  //sende den aktuellen Wert der Y-Achse an den seriellen Monitor
  Serial.print("    Y-Achse: ");
  Serial.print(yAxisValue ,DEC);

  //sende den aktuellen Wert des Tasters an den seriellen Monitor
  Serial.print("    Taster: ");
  Serial.println(buttonValue ,DEC);
}

Je nach Position des Joysticks variiert die Spannung an den analoge Pins für die X- und Y-Achse zwischen 0V und 5V. Die Spannung wird mithilfe des Analog-Digital-Wandlers (ADC) in Werte zwischen 0 und 1023 umgewandelt und auf dem seriellen Monitor ausgegeben. In der Ausgangsposition (Mitte) der Joysticks haben beide Potentiometer den Wert 500.

 
 

Der Sketch im Detail

Der Sketch beginnt mit der Initialisierung von mehreren Variablen:
Der xAxisPin ist die Variable für die Pinbelegung der X-Achse.
Der yAxisPin ist die Variable für die Pinbelegung der Y-Achse
Der buttonPin ist die Variable für den Taster-Pin
In den drei Variablen xAxisValue, yAxisValue und buttonValue werden die Werte für die X, Y-Achsen und der Taste zwischen gespeichert.

int xAxisPin = 0; //x analog pin
int yAxisPin = 1; //y analog pin
int buttonPin = 3; //digital pin

//Variablen für die Zustände der X, Y-Achsen und den Taster
int xAxisValue, yAxisValue, buttonValue;
 

Im void setup() initialisieren wir die serielle Kommunikation und stellen den Taster buttonPin als OUTPUT ein.

void setup() 
{
  //Initialisiere die serielle Kommunikation mit 9600 Bits pro Sekunde:
  Serial.begin(9600); 

  pinMode(buttonPin, INPUT); //den Taster als INPUT deklarieren
}
 

In der void loop() Schleife lesen wir zunächst die Sensorwerte für X, Y und button ein und speichern die Werte in die jeweiligen Variablen xAxisValue, yAxisValue und buttonValue.

void loop() 
{
  xAxisValue = analogRead(xAxisPin);    //lies den aktuellen Wert für die X-Achse
  yAxisValue = analogRead(yAxisPin);    //lies den aktuellen Wert für die Y-Achse
  buttonValue = digitalRead(buttonPin); //lies den aktuellen Wert für den Taster

  ...
}
 

Als letzten Schritt senden wir die einzelnen Sensorwerte für xAxisValue, yAxisValue und buttonValue zum seriellen Monitor.

//sende den aktuellen Wert der X-Achse an den seriellen Monitor
Serial.print(" X-Achse: ");
Serial.print(xAxisValue ,DEC);

//sende den aktuellen Wert der Y-Achse an den seriellen Monitor
Serial.print("    Y-Achse: ");
Serial.print(yAxisValue ,DEC);

//sende den aktuellen Wert des Tasters an den seriellen Monitor
Serial.print("    Taster: ");
Serial.println(buttonValue ,DEC);
 

Schalte den seriellen Monitor ein, indem du in der Arduino IDE in der Menüleiste auf Werkzeuge > Serieller Monitor gehst.

Du solltest nun die folgende Anzeige sehen:

 
 

Falls du die hier beschriebenen Elektronik-Module nicht hast, kannst du sie in meiner Einkaufsliste finden. Warum ich selber hauptsächlich mit Modulen der Marke Keyestudio arbeite, erläutere ich unter diesem Blog-Artikel.

In dieser Übersicht äußere ich Empfehlungen aller Art.

Hier kommst du wieder zur Übersicht aller Module.