KY-023 Module joystick X-Y
La position X et Y du joystick est sortie sous forme de tension analogique sur les broches de sortie.
- Arduino
- Raspberry Pi
- Raspberry Pi Pico
- Micro:Bit
Ce module détecte la position X et Y d'un joystick et la délivre sous forme de tension analogique sur les broches de sortie. Pour chaque axe, X et Y, un potentiomètre séparé est intégré. Au repos, le potentiomètre se trouve au milieu, ce qui signifie que les résistances et donc les tensions sont identiques.
Lorsque la position de l'axe X ou Y est modifiée, les résistances changent en fonction de la nouvelle position. Cette modification des résistances entraîne des valeurs de tension différentes, qui peuvent être mesurées entre les résistances. Il est ainsi possible de déterminer la position exacte de l'axe.
Ce module est idéal pour les applications telles que les commandes dans les jeux, la robotique ou d'autres projets pour lesquels une détection précise du mouvement est nécessaire. En fournissant la position sous forme de tension analogique, le joystick peut être facilement intégré dans différents systèmes électroniques afin de permettre un contrôle précis et intuitif.
Affectation des broches
Arduino | Capteur |
---|---|
5V | +5V |
GND | GND |
Pin A1 | VRy |
Pin A0 | VRx |
Pin 3 | Bouton |
Exemple de code
Le programme lit les valeurs actuelles des broches d'entrée, les convertit en une tension (0-1023 -> 0V-5V) et la sort sur la sortie série.
Pour charger l'exemple de code suivant sur votre Arduino, nous vous recommandons d'utiliser l'IDE Arduino. Dans l'IDE, vous pouvez choisir le port et la carte qui conviennent à votre appareil.
Copiez le code ci-dessous dans votre IDE. Pour télécharger le code sur votre Arduino, il vous suffit de cliquer sur le bouton " Upload ".
// Déclaration et initialisation des broches d'entrée
int joystick_X = A0; // Signal de l'axe X
int joystick_Y = A1; // Signal de l'axe Y
int joystick_button = 3; // Bouton
void setup () {
pinMode(joystick_X, INPUT);
pinMode(joystick_Y, INPUT);
pinMode(joystick_button, INPUT);
// Comme le bouton tire le signal à la masse lorsqu'on appuie dessus,
// nous activons ainsi la résistance PullUp
digitalWrite(joystick_button, HIGH);
Serial.begin (9600); // Sortie série à 9600 bps
}
// Le programme lit les valeurs actuelles des broches d'entrée
// et les affiche sur la sortie sérielle
void loop () {
// Variables temporaires
float temp_x, temp_y;
int button_value;
// Les valeurs actuelles sont lues, converties en valeur de tension...
temp_x = analogRead(joystick_X) * (5.0 / 1023.0);
temp_y = analogRead(joystick_Y) * (5.0 / 1023.0);
button_value = digitalRead(joystick_button);
// ... et édité à cet endroit
Serial.print ("Axe X: ");
Serial.print (temp_x, 4);
Serial.print ("V, \tAxe Ye: ");
Serial.print (temp_y, 4);
Serial.print ("V, \tBouton: ");
if (button_value == 1) {
Serial.println("non appuyé");
}
else {
Serial.println("appuyé");
}
delay(1000);
}
Ce module détecte la position X et Y d'un joystick et la délivre sous forme de tension analogique sur les broches de sortie. Pour chaque axe, X et Y, un potentiomètre séparé est intégré. Au repos, le potentiomètre se trouve au milieu, ce qui signifie que les résistances et donc les tensions sont identiques.
Lorsque la position de l'axe X ou Y est modifiée, les résistances changent en fonction de la nouvelle position. Cette modification des résistances entraîne des valeurs de tension différentes, qui peuvent être mesurées entre les résistances. Il est ainsi possible de déterminer la position exacte de l'axe.
Ce module est idéal pour les applications telles que les commandes dans les jeux, la robotique ou d'autres projets pour lesquels une détection précise du mouvement est nécessaire. En fournissant la position sous forme de tension analogique, le joystick peut être facilement intégré dans différents systèmes électroniques afin de permettre un contrôle précis et intuitif.
Affectation des broches
Raspberry Pi | Capteur |
---|---|
GPIO 24 [Pin 18] | Bouton |
3,3 V [Pin 1] | +5V |
GND [Pin 6] | GND |
- | VRy |
- | VRx |
Capteur | 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 |
Capteur analogique, il faut donc respecter les points suivants.
Contrairement à l'Arduino, le Raspberry Pi n'a pas d'entrées analogiques ou il n'y a pas d'ADC (convertisseur analogique numérique) intégré dans la puce du Raspberry Pi. Cela limite le Raspberry Pi, si vous voulez utiliser des capteurs, où les valeurs de sortie ne sont pas numériques [valeur de tension dépassée -> valeur numérique ON | valeur de tension sous-cotée -> valeur numérique OFF | exemple : bouton enfoncé [ON] bouton relâché [OFF]], mais il doit s'agir d'une valeur variable continue (exemple : potentiomètre -> autre position = autre valeur de tension).
Pour éviter ce problème, notre kit de capteur X40 a le KY-053, un module avec ADC précis de 16 bits, que vous pouvez utiliser sur le Raspberry pour l'étendre avec 4 entrées analogiques. Il est connecté au Raspberry Pi via I2C, prend en charge la mesure analogique et transmet la valeur numérique au Raspberry Pi.
Ainsi, nous recommandons de connecter le module KY-053 avec ledit ADC entre les capteurs analogiques de cet ensemble. Pour plus d'informations, veuillez consulter la page d'information sur le convertisseur analogique-numérique KY-053.
Exemple de code
Attention! L'utilisation de ce module, en combinaison avec le convertisseur analogique-numérique KY-053, nécessite la mise en place d'un environnement virtuel. Vous trouverez toutes les informations nécessaires à cet effet ici.
import time
import board
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
from gpiozero import Button
# Configuration du bouton avec gpiozero
button = Button(24, pull_up=True)
delayTime = 0.2
# Création du bus I2C
i2c = busio.I2C(board.SCL, board.SDA)
# Création de l'objet ADC avec le bus I2C
ads = ADS.ADS1115(i2c)
# Création d'entrées asymétriques sur les canaux
chan0 = AnalogIn(ads, ADS.P0)
chan1 = AnalogIn(ads, ADS.P1)
chan2 = AnalogIn(ads, ADS.P2)
chan3 = AnalogIn(ads, ADS.P3)
while True:
# Les valeurs actuelles sont enregistrées
x = '%.2f' % chan0.voltage
y = '%.2f' % chan1.voltage
# Sortie vers la console
if button.is_pressed:
print("Axe X:", x, "V, ", "Axe Y:", y, "V, Bouton : enfoncé")
print("---------------------------------------")
else:
print("Axe X:", x, "V, ", "Axe Y:", y, "V, Bouton : non enfoncé")
# Délai
time.sleep(delayTime)
Ce module détecte la position X et Y d'un joystick et la délivre sous forme de tension analogique sur les broches de sortie. Pour chaque axe, X et Y, un potentiomètre séparé est intégré. Au repos, le potentiomètre se trouve au milieu, ce qui signifie que les résistances et donc les tensions sont identiques.
Lorsque la position de l'axe X ou Y est modifiée, les résistances changent en fonction de la nouvelle position. Cette modification des résistances entraîne des valeurs de tension différentes, qui peuvent être mesurées entre les résistances. Il est ainsi possible de déterminer la position exacte de l'axe.
Ce module est idéal pour les applications telles que les commandes dans les jeux, la robotique ou d'autres projets pour lesquels une détection précise du mouvement est nécessaire. En fournissant la position sous forme de tension analogique, le joystick peut être facilement intégré dans différents systèmes électroniques afin de permettre un contrôle précis et intuitif.
Affectation des broches
Micro:Bit | Capteur |
---|---|
Pin 1 | Signal numérique |
3,3 V | +5V |
GND | GND |
KY-053 A1 | VRy |
KY-053 A0 | VRx |
Capteur | KY-053 |
---|---|
VRy | A1 |
VRx | A0 |
Micro:Bit | KY-053 |
---|---|
Pin 19 | SCL |
Pin 20 | SDA |
3,3 V | VDD |
GND | GND |
Capteur analogique, il faut donc respecter les points suivants: Le Micro:Bit dispose d'entrées analogiques ou d'un ADC (convertisseur analogique-numérique) intégré dans la puce du Micro:Bit. Cependant, ceux-ci ne sont limités qu'à 10 bits et n'offrent donc qu'une précision assez faible pour les mesures analogiques.
Pour éviter ce problème, notre kit de capteur X40 contient le KY-053, un module avec un ADC de 16 bits, que vous pouvez utiliser sur le Micro:Bit pour l'étendre de 4 entrées analogiques. Celui-ci est connecté au Micro:Bit via I2C, prend en charge la mesure analogique et transfère la valeur numériquement au Micro:Bit.
Par conséquent, nous recommandons de connecter le module KY-053 avec le CAN mentionné entre les capteurs analogiques de ce jeu. Plus d'informations peuvent être trouvées sur la page d'information du convertisseur analogique numérique Convertisseur analogique numérique KY-053.
Exemple de code
Le programme utilise la bibliothèque correspondante de notre part pour contrôler l'ADC ADS1115. Ceci a été publié sous le lien suivant pxt-ads1115 sous la licence MIT.
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(`
. . . . #
# . . # .
# . # . .
# . . . .
# # # # .
`)
}
})
Téléchargement d'un exemple de programme
Ce module détecte la position X et Y d'un joystick et la délivre sous forme de tension analogique sur les broches de sortie. Pour chaque axe, X et Y, un potentiomètre séparé est intégré. Au repos, le potentiomètre se trouve au milieu, ce qui signifie que les résistances et donc les tensions sont identiques.
Lorsque la position de l'axe X ou Y est modifiée, les résistances changent en fonction de la nouvelle position. Cette modification des résistances entraîne des valeurs de tension différentes, qui peuvent être mesurées entre les résistances. Il est ainsi possible de déterminer la position exacte de l'axe.
Ce module est idéal pour les applications telles que les commandes dans les jeux, la robotique ou d'autres projets pour lesquels une détection précise du mouvement est nécessaire. En fournissant la position sous forme de tension analogique, le joystick peut être facilement intégré dans différents systèmes électroniques afin de permettre un contrôle précis et intuitif.
Affectation des broches
Raspberry Pi Pico | Capteur |
---|---|
GND | GND |
3 V | +V |
GPIO26 (A0) | VRx |
GPIO27 (A1) | VRy |
GPIO28 | SW |
On peut aussi utiliser un ADC comme le KY-053. Cet ADC a une résolution plus élevée que l'ADC interne de l'Raspberry Pi Pico, ce qui permet d'évaluer le capteur avec plus de précision.
Exemple de code
Voici un exemple de programme qui émet du texte en série lorsqu'un changement de signal est détecté par le capteur..
Pour charger l'exemple de code suivant sur votre Pico, nous vous recommandons d'utiliser l'IDE Thonny. Il vous suffit de commencer par sélectionner Run > Configure interpreter ... > Interpreter > Which kind of interpreter should Thonny use for running your code? > MicroPython (Raspberry Pi Pico).
Copiez maintenant le code ci-dessous dans votre IDE et cliquez sur Run.
# Charger les bibliothèques
from machine import Pin, ADC
import utime
# Initialisation de GPIO28 comme entrée
SW = Pin(28,Pin.IN, Pin.PULL_UP)
VRx = ADC(0)
VRy = ADC(1)
# Boucle infinie pour lire le joystick et l'interrupteur
while True:
# lecture des valeurs analogiques et conversion en tension
xAxis = round(VRx.read_u16() * 3.3 / 65536, 2)
yAxis = round(VRy.read_u16() * 3.3 / 65536, 2)
# lire la valeur
switch = SW.value()
# Sortie sérielle des valeurs reçues
print("Axe des X: " + str(xAxis) + ", Axe des Y: " + str(yAxis) + ", Bouton: " + str(not(switch)))
utime.sleep_ms(500)