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

X und Y Position des Joysticks, werden als analoge Spannung auf den Ausgangspins ausgegeben.

In diesem Joystick wurde für die X-Achse, sowie für die Y-Achse, ein eigenes Potentiometer verbaut:

Im Ruhezustand befindet sich das Potentiometer in der Mitte, sodass Widerstand1 und Widerstand, und damit auch die angelegte Spannung, identisch sind.

Wird jetzt beispielsweise die Position der X-Achse verändert, so ändern sich die jeweiligen Widerstände in Abhängigkeit zur aktuellen Position.

Je nachdem wie sich die Widerstände untereinander aufteilen, resultiert dies in einem entsprechenden Spannungswert, den man zwischen den Widerständen messen und somit die Position der Achse bestimmen kann.

Pin-Belegung

Codebeispiel Arduino

Anschlussbelegung Arduino

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

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.

// Deklaration und Initialisierung der Eingang-Pins
int JoyStick_X = A0; // X-Achse-Signal
int JoyStick_Y = A1; // Y-Achse-Signal
int Button = 3; // Knopf
 
void setup ()
{
  pinMode (JoyStick_X, INPUT);
  pinMode (JoyStick_Y, INPUT);
  pinMode (Button, INPUT);
   
  // Da der Knopf das Signal beim druecken auf Masse zieht,
  // schalten wir hiermit den PullUp-Widerstand ein
  digitalWrite(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 ()
{
  float x, y;
  int Knopf;
   
  //Aktuelle Werte werden ausgelesen, auf den Spannungswert konvertiert...
  x = analogRead (JoyStick_X) * (5.0 / 1023.0); 
  y = analogRead (JoyStick_Y) * (5.0 / 1023.0);
  Knopf = digitalRead (Button);
   
  //... und an dieser Stelle ausgegeben
  Serial.print ("X-Achse:"); Serial.print (x, 4);  Serial.print ("V, ");
  Serial.print ("Y-Achse:"); Serial.print (y, 4);  Serial.print ("V, ");
  Serial.print ("Knopf:");
 
  if(Knopf==1)
  {
      Serial.println (" nicht gedrueckt");
  }
  else
  {
      Serial.println (" gedrueckt");
  }
  delay (200);
}

Beispielprogramm Download

KY023-Arduino.zip

X und Y Position des Joysticks, werden als analoge Spannung auf den Ausgangspins ausgegeben.

In diesem Joystick wurde für die X-Achse, sowie für die Y-Achse, ein eigenes Potentiometer verbaut:

Im Ruhezustand befindet sich das Potentiometer in der Mitte, sodass Widerstand1 und Widerstand, und damit auch die angelegte Spannung, identisch sind.

Wird jetzt beispielsweise die Position der X-Achse verändert, so ändern sich die jeweiligen Widerstände in Abhängigkeit zur aktuellen Position.

Je nachdem wie sich die Widerstände untereinander aufteilen, resultiert dies in einem entsprechenden Spannungswert, den man zwischen den Widerständen messen und somit die Position der Achse bestimmen kann.

Pin-Belegung

Codebeispiel Raspberry Pi

Anschlussbelegung Raspberry Pi

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.

Das Programm nutzt zur Ansteuerung des ADS1115 ADC die entsprechenden ADS1x15 und I2C Python-Libraries von Adafruit. Diese wurden unter dem folgenden Link https://github.com/adafruit/Adafruit_CircuitPython_ADS1x15 unter der MIT-Lizenz veröffentlicht. Die benötigten Libraries sind nicht im unteren Download-Paket enthalten.

Bitte beachten Sie das Sie vor der benutzung dieses Beispiels I2C auf ihrem Raspberry Pi aktivieren müssen.

#!/usr/bin/python
# coding=utf-8

import time
import board
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

Button_PIN = 24
GPIO.setup(Button_PIN, GPIO.IN, pull_up_down = GPIO.PUD_UP)

delayTime = 0.2
# Create the I2C bus
i2c = busio.I2C(board.SCL, board.SDA)

# Create the ADC object using the I2C bus
ads = ADS.ADS1115(i2c)

# Create single-ended input on channels
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 GPIO.input(Button_PIN) == True:
        print ("X-Achse:", x,"V, ","Y-Achse:", y,"V, Button: nicht gedrückt")
    else:
        print ("X-Achse:", x, "V, ", "Y-Achse:", y, "V, Button: gedrückt")
        print ("---------------------------------------")
 
        # Reset + Delay
        button_pressed = False
        time.sleep(delayTime)

Beispielprogramm Download

KY023-RPi.zip

Zu starten mit dem Befehl:

sudo python3 KY023\ mit\ KY053.py

X und Y Position des Joysticks, werden als analoge Spannung auf den Ausgangspins ausgegeben.

In diesem Joystick wurde für die X-Achse, sowie für die Y-Achse, ein eigenes Potentiometer verbaut:

Im Ruhezustand befindet sich das Potentiometer in der Mitte, sodass Widerstand1 und Widerstand, und damit auch die angelegte Spannung, identisch sind.

Wird jetzt beispielsweise die Position der X-Achse verändert, so ändern sich die jeweiligen Widerstände in Abhängigkeit zur aktuellen Position.

Je nachdem wie sich die Widerstände untereinander aufteilen, resultiert dies in einem entsprechenden Spannungswert, den man zwischen den Widerständen messen und somit die Position der Achse bestimmen kann.

Pin-Belegung

Codebeispiel Micro:Bit

Anschlussbelegung Micro:Bit:

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.

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.

Beispielprogramm Download

microbit-KY-023

X und Y Position des Joysticks, werden als analoge Spannung auf den Ausgangspins ausgegeben.

In diesem Joystick wurde für die X-Achse, sowie für die Y-Achse, ein eigenes Potentiometer verbaut:

Im Ruhezustand befindet sich das Potentiometer in der Mitte, sodass Widerstand1 und Widerstand, und damit auch die angelegte Spannung, identisch sind.

Wird jetzt beispielsweise die Position der X-Achse verändert, so ändern sich die jeweiligen Widerstände in Abhängigkeit zur aktuellen Position.

Je nachdem wie sich die Widerstände untereinander aufteilen, resultiert dies in einem entsprechenden Spannungswert, den man zwischen den Widerständen messen und somit die Position der Achse bestimmen kann.

Pin-Belegung

Codebeispiel Raspberry Pi Pico

Anschlussbelegung Raspberry Pi Pico

Raspberry Pi Pico Sensor
GND GND
3 V +V
- VRx
- VRy
GPIO28 SW
Sensor KY-053
GND -
+V -
VRx A0
VRy A1
SW -
Raspberry Pi Pico KY-053
GPIO1 SCL
GPIO0 SDA
3 V VDD
GND GND

Analoger Sensor, daher muss folgendes beachtet werden

Der Raspberry Pi Pico besitzt zwar analoge Eingänge für den internen ADC (analog digital Converter) im Chip des Raspberry Pi Pico's jedoch hat dieser ADC nur eine Auflösung von 12-Bit.

Um diesen 12-Bit ADC zu umgehen, besitzt unser Sensorkit X40 mit dem KY-053 ein Modul mit 16 Bit genauen ADC, welches Sie am Raspberry Pi Pico nutzen können, um diesen um 4 analoge Eingänge erweitern zu können. Dieses wird per I2C an den Raspberry Pi Pico angeschlossen, übernimmt die analoge Messung und gibt den Wert digital an den Raspberry Pi Pico weiter.

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

Das Programm nutzt zur Ansteuerung des ADS1115 ADC die entsprechenden ADS1115-Micropython Library von Joy-IT. Diese wurde unter dem folgenden Link https://github.com/joy-it/ADS1115-Micropython unter der MIT-Lizenz veröffentlicht. Die benötigte Library ist im unteren Download-Paket enthalten.

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

# Bibliotheken laden
from machine import Pin
import ADS1115
import utime

# Initialisierung des ADC
ADS1115.init(0x48, 1, 4, False)
# Initialisierung von GPIO28 als Input
SW = Pin(28,Pin.IN, Pin.PULL_UP)

# Endlosschleife zum Auslesen des ADC und Schalters
while True:
    xAxis = ADS1115.read(0)
    utime.sleep_ms(20)
    yAxis = ADS1115.read(1)
    switch = SW.value()

    # Serielle Ausgabe der Analogen Werte
    print("X-axis: " + str(xAxis) + ", Y-axis: " + str(yAxis) + ", Switch " + str(switch))
    if switch == 0:
        print("Taste wird gedrückt.")
    print(" ")
    utime.sleep_ms(500)

Beispielprogramm Download

KY023-Pico.zip