• Arduino
  • Raspberry Pi
  • Raspberry Pi Pico
  • Micro:Bit

Dieses Modul erfasst die X- und Y-Position eines Joysticks und gibt diese als analoge Spannung an den Ausgangspins aus. Für jede Achse, X und Y, ist ein eigenes Potentiometer eingebaut. Im Ruhezustand befindet sich das Potentiometer in der Mitte, was bedeutet, dass die Widerstände und damit die Spannungen gleich sind.

Wenn die Position der X- oder Y-Achse verändert wird, ändern sich die Widerstände in Abhängigkeit von der neuen Position. Diese Veränderung der Widerstände führt zu unterschiedlichen Spannungswerten, die zwischen den Widerständen gemessen werden können. So kann die genaue Position der Achse bestimmt werden.

Dieses Modul ist ideal für Anwendungen wie Steuerungen in Spielen, Robotik oder anderen Projekten, bei denen die präzise Erfassung der Bewegung erforderlich ist. Durch die Ausgabe der Position als analoge Spannung kann der Joystick einfach in verschiedene elektronische Systeme integriert werden, um eine genaue und intuitive Steuerung zu ermöglichen.

Anschlussbelegung


Arduino Sensor
5 V +5V
GND GND
Pin A1 VRy
Pin A0 VRx
Pin 3 Knopf

Code-Beispiel

Das Programm liest die aktuellen Werte der Eingang-Pins, konvertiert diese in eine Spannung (0-1023 -> 0 V-5 V) und gibt diese in der seriellen Ausgabe aus.

Um das folgende Codebeispiel auf Ihren Arduino zu laden, empfehlen wir die Verwendung der Arduino IDE. In der IDE können Sie den passenden Port und das richtige Board für Ihr Gerät auswählen.

Kopieren Sie den unten stehenden Code in Ihre IDE. Um den Code auf Ihren Arduino hochzuladen, klicken Sie einfach auf den Upload-Button.

// Deklaration und Initialisierung der Eingang-Pins
int joystick_X = A0; // X-Achse-Signal
int joystick_Y = A1; // Y-Achse-Signal
int joystick_button = 3; // Knopf
 
void setup () {
  pinMode(joystick_X, INPUT);
  pinMode(joystick_Y, INPUT);
  pinMode(joystick_button, INPUT);
  // Da der Knopf das Signal beim druecken auf Masse zieht,
  // schalten wir hiermit den PullUp-Widerstand ein
  digitalWrite(joystick_button, HIGH);  
  Serial.begin (9600); // Serielle Ausgabe mit 9600 bps
}

// Das Programm liest die aktuellen Werte der Eingang-Pins
// und gibt diese auf der seriellen Ausgabe aus
void loop () {
  // Temporäre Variablen
  float temp_x, temp_y;
  int button_value;
   
  // Aktuelle Werte werden ausgelesen, auf den Spannungswert konvertiert...
  temp_x = analogRead(joystick_X) * (5.0 / 1023.0); 
  temp_y = analogRead(joystick_Y) * (5.0 / 1023.0);
  button_value = digitalRead(joystick_button);
   
  // ... und an dieser Stelle ausgegeben
  Serial.print ("X-Achse: "); 
  Serial.print (temp_x, 4);  
  Serial.print ("V, \tY-Achse: ");
  Serial.print (temp_y, 4);  
  Serial.print ("V, \tKnopf: ");
  if (button_value == 1) {
      Serial.println("nicht gedrückt");
  }
  else {
      Serial.println("gedrückt");
  }
  delay(1000);
}

Dieses Modul erfasst die X- und Y-Position eines Joysticks und gibt diese als analoge Spannung an den Ausgangspins aus. Für jede Achse, X und Y, ist ein eigenes Potentiometer eingebaut. Im Ruhezustand befindet sich das Potentiometer in der Mitte, was bedeutet, dass die Widerstände und damit die Spannungen gleich sind.

Wenn die Position der X- oder Y-Achse verändert wird, ändern sich die Widerstände in Abhängigkeit von der neuen Position. Diese Veränderung der Widerstände führt zu unterschiedlichen Spannungswerten, die zwischen den Widerständen gemessen werden können. So kann die genaue Position der Achse bestimmt werden.

Dieses Modul ist ideal für Anwendungen wie Steuerungen in Spielen, Robotik oder anderen Projekten, bei denen die präzise Erfassung der Bewegung erforderlich ist. Durch die Ausgabe der Position als analoge Spannung kann der Joystick einfach in verschiedene elektronische Systeme integriert werden, um eine genaue und intuitive Steuerung zu ermöglichen.

Anschlussbelegung


Raspberry Pi Sensor
GPIO 24 [Pin 18] Knopf
3,3 V [Pin 1] +5V
GND [Pin 6] GND
- VRy
- VRx
Sensor KY-053
VRy A1
VRx A0
Raspberry Pi KY-053
GPIO 3 [Pin 5] SCL
Gpio 2 [Pin 3] SDA
3,3 V [Pin 17] VDD
GND [Pin 14] GND

Analoger Sensor, daher muss folgendes beachtet werden: Der Raspberry Pi besitzt, im Gegensatz zum Arduino, keine analogen Eingänge bzw. es ist kein ADC (analog digital Converter) im Chip des Raspberry Pi's integriert. Dies schränkt den Raspberry Pi ein, insofern man Sensoren einsetzen möchte, bei denen keine digitalen Werte ausgegeben werden, sondern es sich um einen kontinuierlich veränderlichen Wert handelt (Beispiel: Potentiometer -> Andere Position = Anderer Spannungswert)

Um diese Problematik zu umgehen, enthält unser Sensorkit X40 mit dem KY-053 ein Modul mit einem 16-Bit ADC, welchen Sie am Raspberry nutzen können, um diesen um 4 analoge Eingänge zu erweitern. Dieser wird per I2C an den Raspberry Pi angeschlossen, übernimmt die analoge Messung und übergibt den Wert digital an den Raspberry Pi.

Somit empfehlen wir bei analogen Sensoren dieses Sets das KY-053 Modul mit dem besagten ADC dazwischenzuschalten. Nähere Informationen finden Sie auf der Informationsseite zum KY-053 Analog Digital Converter.

Code-Beispiel

Achtung! Für die Verwendung dieses Moduls, in Kombination mit dem KY-053 Analog-Digital-Converter, ist die Einrichtung einer virtuellen Umgebung nötig. Alle hierfür notwendigen Informationen finden Sie hier.

# -*- coding: iso-8859-1 -*-
import time
import board
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
from gpiozero import Button

# Einrichten des Buttons mit gpiozero
button = Button(24, pull_up=True)

delayTime = 0.2

# Erstellen des I2C-Bus
i2c = busio.I2C(board.SCL, board.SDA)

# Erstellen des ADC-Objekts mit dem I2C-Bus
ads = ADS.ADS1115(i2c)

# Erstellen von Single-Ended-Eingängen auf den Kanälen
chan0 = AnalogIn(ads, ADS.P0)
chan1 = AnalogIn(ads, ADS.P1)
chan2 = AnalogIn(ads, ADS.P2)
chan3 = AnalogIn(ads, ADS.P3)

while True:
    # Aktuelle Werte werden aufgenommen
    x = '%.2f' % chan0.voltage
    y = '%.2f' % chan1.voltage
 
    # Ausgabe auf die Konsole
    if button.is_pressed:
        print("X-Achse:", x, "V, ", "Y-Achse:", y, "V, Button: gedrückt")
        print("---------------------------------------")
    else:
        print("X-Achse:", x, "V, ", "Y-Achse:", y, "V, Button: nicht gedrückt")
 
    # Verzögerung
    time.sleep(delayTime)

Die Datei starten sie dann mit dem folgenden Befehl:

python3 KY-023.py

Dieses Modul erfasst die X- und Y-Position eines Joysticks und gibt diese als analoge Spannung an den Ausgangspins aus. Für jede Achse, X und Y, ist ein eigenes Potentiometer eingebaut. Im Ruhezustand befindet sich das Potentiometer in der Mitte, was bedeutet, dass die Widerstände und damit die Spannungen gleich sind.

Wenn die Position der X- oder Y-Achse verändert wird, ändern sich die Widerstände in Abhängigkeit von der neuen Position. Diese Veränderung der Widerstände führt zu unterschiedlichen Spannungswerten, die zwischen den Widerständen gemessen werden können. So kann die genaue Position der Achse bestimmt werden.

Dieses Modul ist ideal für Anwendungen wie Steuerungen in Spielen, Robotik oder anderen Projekten, bei denen die präzise Erfassung der Bewegung erforderlich ist. Durch die Ausgabe der Position als analoge Spannung kann der Joystick einfach in verschiedene elektronische Systeme integriert werden, um eine genaue und intuitive Steuerung zu ermöglichen.

Anschlussbelegung


Mico:Bit Sensor
Pin 0 Knopf
3,3 V +5V
GND GND
- VRy
- VRx
Sensor KY-053
VRy A1
VRx A0
Mico:Bit KY-053
Pin 19 SCL
Pin 20 SDA
3,3 V VDD
GND GND

Analoger Sensor, daher muss folgendes beachtet werden: Der Micro:Bit besitzt analoge Eingänge bzw. es ist ein ADC (analog digital Converter) im Chip des Micro:Bits integriert. Diese sind jedoch nur auf 10-Bit beschränkt und bieten daher nur eine recht geringe Genauigkeit für analoge Messungen.

Um diese Problematik zu umgehen, enthält unser Sensorkit X40 mit dem KY-053 ein Modul mit einem 16-Bit ADC, welchen Sie am Micro:Bit nutzen können, um diesen um 4 analoge Eingänge zu erweitern. Dieser wird per I2C an den Micro:Bit angeschlossen, übernimmt die analoge Messung und übergibt den Wert digital an den Micro:Bit.

Somit empfehlen wir bei analogen Sensoren dieses Sets das KY-053 Modul mit dem erwähnten ADC dazwischenzuschalten. Nähere Informationen finden Sie auf der Informationsseite zum KY-053 Analog Digital Converter KY-053 Analog Digital Converter.

Code-Beispiel

Das Programm nutzt zur Ansteuerung des ADS1115 ADC die entsprechende Bibliothek von uns. Diese wurde unter dem folgenden Link pxt-ads1115 unter der MIT-Lizenz veröffentlicht.

	
		input.onPinPressed(TouchPin.P0, function () {
		    basic.clearScreen()
		})
		ADS1115.setMode(mode.Multi)
		ADS1115.setRate(rate.Rate5)
		ADS1115.setGain(gain.One)
		ADS1115.initADS1115(userInI2C.Gnd)
		basic.forever(function () {
		    if (ADS1115.read(4) < -12600 && ADS1115.read(4) > -12700) {
		        basic.showLeds(`
		            . . # . .
		            . # . # .
		            # . # . #
		            . . # . .
		            . . # . .
		            `)
		    }
		    if (ADS1115.read(4) > 13400 && ADS1115.read(4) < 13500) {
		        basic.showLeds(`
		            . . # . .
		            . . # . .
		            # . # . #
		            . # . # .
		            . . # . .
		            `)
		    }
		    if (ADS1115.read(4) < -12800 && ADS1115.read(4) > -12900) {
		        basic.showLeds(`
		            . . # . .
		            . # . . .
		            # . # # #
		            . # . . .
		            . . # . .
		            `)
		    }
		    if (ADS1115.read(4) > 13250 && ADS1115.read(4) < 13350) {
		        basic.showLeds(`
		            . . # . .
		            . . . # .
		            # # # . #
		            . . . # .
		            . . # . .
		            `)
		    }
		    if (ADS1115.read(4) > -12500 && ADS1115.read(4) < 13100 && (ADS1115.read(4) < 70 && ADS1115.read(4) > 15)) {
		        basic.showLeds(`
		            . # # # #
		            . . . . #
		            . . # . #
		            . # . . #
		            # . . . .
		            `)
		    }
		    if (ADS1115.read(4) < -12500 && ADS1115.read(4) < -12700 && ADS1115.read(4) < -26000) {
		        basic.showLeds(`
		            # # # # .
		            # . . . .
		            # . # . .
		            # . . # .
		            . . . . #
		            `)
		    }
		    if (ADS1115.read(4) > 13200 && ADS1115.read(4) > 13400 && ADS1115.read(4) > 26000) {
		        basic.showLeds(`
		            # . . . .
		            . # . . #
		            . . # . #
		            . . . . #
		            . # # # #
		            `)
		    }
		    if (ADS1115.read(4) < 13400 && ADS1115.read(4) > -12800 && ADS1115.read(4) == 3) {
		        basic.showLeds(`
		            . . . . #
		            # . . # .
		            # . # . .
		            # . . . .
		            # # # # .
		            `)
		    }
		})
	

Beispielprogramm Download

microbit-KY-023

Dieses Modul erfasst die X- und Y-Position eines Joysticks und gibt diese als analoge Spannung an den Ausgangspins aus. Für jede Achse, X und Y, ist ein eigenes Potentiometer eingebaut. Im Ruhezustand befindet sich das Potentiometer in der Mitte, was bedeutet, dass die Widerstände und damit die Spannungen gleich sind.

Wenn die Position der X- oder Y-Achse verändert wird, ändern sich die Widerstände in Abhängigkeit von der neuen Position. Diese Veränderung der Widerstände führt zu unterschiedlichen Spannungswerten, die zwischen den Widerständen gemessen werden können. So kann die genaue Position der Achse bestimmt werden.

Dieses Modul ist ideal für Anwendungen wie Steuerungen in Spielen, Robotik oder anderen Projekten, bei denen die präzise Erfassung der Bewegung erforderlich ist. Durch die Ausgabe der Position als analoge Spannung kann der Joystick einfach in verschiedene elektronische Systeme integriert werden, um eine genaue und intuitive Steuerung zu ermöglichen.

Anschlussbelegung


Raspberry Pi Pico Sensor
GND GND
3 V +V
GPIO26 (A0) VRx
GPIO27 (A1) VRy
GPIO28 SW

Man kann auch einen ADC wie der KY-053 verwenden. Dieser ADC hat eine höhere Auflösung als der interne ADC vom Raspberry Pi Pico, was dazuführt, dass der Sensor genauer ausgewertet werden kann.

Code-Beispiel

Hierbei handelt es sich um ein Beispielprogramm, welches Text Seriell ausgibt, wenn am Sensor eine Signal Änderung detektiert wurde.

Um das folgende Codebeispiel auf Ihren Pico zu laden, empfehlen wir die Verwendung von der Thonny IDE. Sie müssen nur zunächst unter Run > Configure interpreter … > Interpreter > Which kind of interpreter should Thonny use for running your code? > MicroPython (Raspberry Pi Pico) auswählen.

Kopieren Sie den untenstehenden Code nun in Ihre IDE und klicken Sie auf Run.

# Bibliotheken laden
from machine import Pin, ADC
import utime

# Initialisierung von GPIO28 als Input
SW = Pin(28,Pin.IN, Pin.PULL_UP)
VRx = ADC(0)
VRy = ADC(1)

# Endlosschleife zum Auslesen des Joysticks und Schalters
while True:
    # lesen der analogen Werte und Umrechnung in Spannung
    xAxis = round(VRx.read_u16() * 3.3 / 65536, 2)
    yAxis = round(VRy.read_u16() * 3.3 / 65536, 2)
    # lesen des Wertes
    switch = SW.value()
    # Serielle Ausgabe der empfangenen Werte
    print("X-Achse: " + str(xAxis) + ", Y-Achse: " + str(yAxis) + ", Button: " + str(not(switch)))
    utime.sleep_ms(500)