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

La position X et Y du joystick est sortie sous forme de tension analogique sur les broches de sortie.

Dans ce joystick, un potentiomètre séparé a été installé pour l'axe X et pour l'axe Y. On obtient ainsi un diviseur de tension comme celui de l'image suivante.

A l'état de repos, le potentiomètre est au milieu, de sorte que la résistance 1=résistance 2, ce qui signifie que la tension appliquée est répartie de manière égale entre les deux - par exemple, la valeur mesurée à +V=5V -> 2,5V.

Si maintenant la position de l'axe X, par exemple, est modifiée, les résistances respectives changent en fonction de la position actuelle - par exemple, si elle va dans une direction, la résistance 1 devient plus petite et la résistance 2 plus grande, si elle va dans l'autre direction, la résistance 1 devient plus grande et la résistance 2 plus petite.

Selon la façon dont les résistances sont réparties entre elles, il en résulte une valeur de tension respective qui peut être mesurée entre les résistances (dans le cas du potentiomètre, ce que l'on appelle des curseurs) et ainsi déterminer la position de l'axe.

Affectation des broches

Exemple de code Arduino

Affectation des broches Arduino

Arduino Capteur
5V +5V
GND GND
Pin A1 VRy
Pin A0 VRx
Pin 3 Bouton

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.

// Déclaration et initialisation des broches d'entrées
int JoyStick_X = A0; // Signal de l'axe X
int JoyStick_Y = A1; // Signal de l'axe Y
int Button = 3; // Bouton
 
void setup ()
{
  pinMode (JoyStick_X, INPUT);
  pinMode (JoyStick_Y, INPUT);
  pinMode (Button, INPUT);
   
  // Lorsqu'on pousse sur le bouton, la mise à la masse
  // active la résistance de PullUp.
  digitalWrite(Button, HIGH);  
   
  Serial.begin (9600); // Sortie série à 9600 bauds
}
 
// Le programme lit les valeurs des broches d'entrée et les envoie à la sortie série
void loop ()
{
  float x, y;
  int Knopf;
   
  //Les valeurs sont lues, sont converties en tension...
  x = analogRead (JoyStick_X) * (5.0 / 1023.0); 
  y = analogRead (JoyStick_Y) * (5.0 / 1023.0);
  Knopf = digitalRead (Button);
   
  //... et envoyées à la sortie série.
  Serial.print ("Axe X:"); Serial.print (x, 4);  Serial.print ("V, ");
  Serial.print ("Axe Y:"); Serial.print (y, 4);  Serial.print ("V, ");
  Serial.print ("Bouton:");
 
  if(Knopf==1)
  {
      Serial.println (" pas de pression sur le bouton");
  }
  else
  {
      Serial.println (" pression sur le bouton");
  }
  delay (200);
}

Télécharger l'exemple de programme

KY023-Arduino.zip

La position X et Y du joystick est sortie sous forme de tension analogique sur les broches de sortie.

Dans ce joystick, un potentiomètre séparé a été installé pour l'axe X et pour l'axe Y. On obtient ainsi un diviseur de tension comme celui de l'image suivante.

A l'état de repos, le potentiomètre est au milieu, de sorte que la résistance 1=résistance 2, ce qui signifie que la tension appliquée est répartie de manière égale entre les deux - par exemple, la valeur mesurée à +V=5V -> 2,5V.

Si maintenant la position de l'axe X, par exemple, est modifiée, les résistances respectives changent en fonction de la position actuelle - par exemple, si elle va dans une direction, la résistance 1 devient plus petite et la résistance 2 plus grande, si elle va dans l'autre direction, la résistance 1 devient plus grande et la résistance 2 plus petite.

Selon la façon dont les résistances sont réparties entre elles, il en résulte une valeur de tension respective qui peut être mesurée entre les résistances (dans le cas du potentiomètre, ce que l'on appelle des curseurs) et ainsi déterminer la position de l'axe.

Affectation des broches

Exemple de code Raspberry Pi

Affectation des broches Raspberry Pi

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.

Le programme utilise les bibliothèques Python ADS1x15 et I2C correspondantes d'Adafruit pour piloter l'ADC ADS1115. Ceux-ci ont été publiés au lien suivant https://github.com/adafruit/Adafruit_CircuitPython_ADS1x15 sous la licence MIT. Les bibliothèques requises ne sont pas incluses dans le paquet de téléchargement ci-dessous.

Le programme lit les valeurs actuelles des broches d'entrée et les affiche dans la console sous forme de valeur en [mV].

Veuillez noter que vous devez activer I2C sur votre Raspberry Pi avant d'utiliser cet exemple.

#!/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:
    # Les valeurs actuelles sont enregistrées
    x = '%.2f' % chan0.voltage
    y = '%.2f' % chan1.voltage
 
    # Sortie sur la console
    if GPIO.input(Button_PIN) == True:
        print ("X-Achse:", x,"V, ","Axe Y:", y,"V, Bouton : non pressé")
    else:
        print ("X-Achse:", x, "V, ", "Axe des Y :", y, "V, Bouton : pressé")
    print ("---------------------------------------")
 
    # Reset + Delay
    button_pressed = False
    time.sleep(delayTime)

Exemple de téléchargement de programme

KY023-RPi.zip

Pour commencer avec la commande :

sudo python3 KY023-RPi.py

La position X et Y du joystick est sortie sous forme de tension analogique sur les broches de sortie.

Dans ce joystick, un potentiomètre séparé a été installé pour l'axe X et pour l'axe Y. On obtient ainsi un diviseur de tension comme celui de l'image suivante.

A l'état de repos, le potentiomètre est au milieu, de sorte que la résistance 1=résistance 2, ce qui signifie que la tension appliquée est répartie de manière égale entre les deux - par exemple, la valeur mesurée à +V=5V -> 2,5V.

Si maintenant la position de l'axe X, par exemple, est modifiée, les résistances respectives changent en fonction de la position actuelle - par exemple, si elle va dans une direction, la résistance 1 devient plus petite et la résistance 2 plus grande, si elle va dans l'autre direction, la résistance 1 devient plus grande et la résistance 2 plus petite.

Selon la façon dont les résistances sont réparties entre elles, il en résulte une valeur de tension respective qui peut être mesurée entre les résistances (dans le cas du potentiomètre, ce que l'on appelle des curseurs) et ainsi déterminer la position de l'axe.

Affectation des broches

Exemple de code Micro:Bit

Affectation des broches Micro:Bit :

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.

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.

Téléchargement d'un exemple de programme

microbit-KY-023.zip

La position X et Y du joystick est sortie sous forme de tension analogique sur les broches de sortie.

Dans ce joystick, un potentiomètre séparé a été installé pour l'axe X et pour l'axe Y. On obtient ainsi un diviseur de tension comme celui de l'image suivante.

A l'état de repos, le potentiomètre est au milieu, de sorte que la résistance 1=résistance 2, ce qui signifie que la tension appliquée est répartie de manière égale entre les deux - par exemple, la valeur mesurée à +V=5V -> 2,5V.

Si maintenant la position de l'axe X, par exemple, est modifiée, les résistances respectives changent en fonction de la position actuelle - par exemple, si elle va dans une direction, la résistance 1 devient plus petite et la résistance 2 plus grande, si elle va dans l'autre direction, la résistance 1 devient plus grande et la résistance 2 plus petite.

Selon la façon dont les résistances sont réparties entre elles, il en résulte une valeur de tension respective qui peut être mesurée entre les résistances (dans le cas du potentiomètre, ce que l'on appelle des curseurs) et ainsi déterminer la position de l'axe.

Affectation des broches

Exemple de code Raspberry Pi Pico

Affectation des broches Raspberry Pi Pico

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

Capteur analogique, il faut donc respecter ce qui suit

Le Raspberry Pi Pico dispose d'entrées analogiques pour l'ADC (convertisseur analogique numérique) interne dans la puce du Raspberry Pi Pico, mais cet ADC n'a qu'une résolution de 12 bits.

Pour contourner cet ADC de 12 bits, notre kit de capteur X40 avec le KY-053 dispose d'un module avec ADC précis de 16 bits, que vous pouvez utiliser sur le Raspberry Pi Pico pour l'étendre avec 4 entrées analogiques. Ce module est connecté au Raspberry Pi Pico via I2C, prend en charge la mesure analogique et transmet la valeur numériquement au Raspberry Pi Pico.

Par conséquent, nous recommandons de connecter le module KY-053 avec le convertisseur analogique-numérique mentionné entre les capteurs analogiques de cet ensemble. Plus d'informations peuvent être trouvées sur la page d'information pour le convertisseur analogique numérique KY-053.

Le programme utilise la bibliothèque ADS1115-Micropython correspondante de Joy-IT pour contrôler l'ADS1115 ADC. Il a été publié sous le lien suivant https://github.com/joy-it/ADS1115-Micropython sous la licence MIT. La bibliothèque requise est incluse dans le paquet de téléchargement ci-dessous.

Voici un exemple de programme qui émet du texte en série lorsqu'un changement de signal est détecté par le capteur..

# Charger les bibliothèques
from machine import Pin
import ADS1115
import utime

# Initialisation de l'ADC
ADS1115.init(0x48, 1, 4, False)
# Initialisation de GPIO28 comme entrée
SW = Pin(28,Pin.IN, Pin.PULL_UP)

# Boucle sans fin pour la lecture de l'ADC et du commutateur
while True:
    xAxis = ADS1115.read(0)
    utime.sleep_ms(20)
    yAxis = ADS1115.read(1)
    switch = SW.value()

    # Sortie série des valeurs analogiques
    print("X-axis: " + str(xAxis) + ", Y-axis: " + str(yAxis) + ", Switch " + str(switch))
    if switch == 0:
        print("Le bouton poussoir est pressé.")
    print(" ")
    utime.sleep_ms(500)

Exemple de téléchargement de programme

KY023-Pico.zip