KY-023 Module Joystick X-Y

De SensorKit X40 Wiki

Aller à : navigation, rechercher

Photo

ky-023.jpg

Données techniques / Description sommaire

Deux signaux analogiques varient en fonction des positions sur les axes X et Y.

Deux potentiomètres ont été installés dans ce joystick, respectivement pour pour l'axe X et l'axe Y. Ceux-ci forment un diviseur de tension, comme cela est montré dans la figure suivante.

KY-023 VoltDivide.JPG

Au repos, le potentiomètre est en position milieu, de sorte que Resistance1 = Resistance2. La tension de 5 Vcc appliquée est répartie uniformément sur les deux, ce qui donne 2,5 Vcc sur chaque résistance.

Si la position de l'axe X est modifié, les résistances respectives varieront en fonction de l'emplacement actuel.

La tension au point milieu varie en fonction de la valeur des résistances selon la position de l'axe. La valeur de la tension permet donc de déterminer la position de l'axe

Brochage

KY-023broche.png

Exemple de code pour Arduino

Le programme lit les valeurs actuelles des broches d'entrée, les convertit en une tension (0-1023 -> 0V-5V) et les envoie à 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);
}

Affectation des broches Arduino:

Bouton = [Pin 3]
Position Y = [Pin A1]
Position X = [Pin A0]
Sensor +V = [Pin 5V]
Sensor GND = [Pin GND]

Exemple de programme à télécharger

KY-023.zip

Exemple de code pour Raspberry Pi

!! Attention !! Capteur analogique  !! Attention !!

Contrairement à une carte Arduino, la Raspberry Pi ne dispose pas d'entrées analogiques ni de convertisseur ADC (Analog Digital Converter) intégré. Cela pose problème lorsque vous voulez utiliser des capteurs analogiques avec une carte Raspberry.

Pour contourner ce problème, Sensorkit X40 inclut le module KY-053 qui possède un module convertisseur ADC de 16 bits et qui peut être raccordé sur la Raspberry pour lui procurer 4 entrées analogiques. Ce module se raccorde à la Raspberry via le bus I2C. Il mesure la tension (analogique) et envoie une valeur numérique à la Raspberry.

Vous trouverez de plus amples informations à ce sujet dans la description du module KY-053.

!!Attention !! Capteur analogique !! Attention !!


Ce programme utilise des librairies Python de la société Adafruit pour piloter les circuits ADS1115 (ADC) et ADS1x15 (I2C). 

Celles-ci se trouvent à la page https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code sous licence BSD.

Le programme mesure la tension à l'aide du convertisseur ADS1115. Le programme lit les tensions en entrées et les transmet à la console en mV.

#!/usr/bin/python
# coding=utf-8
  
#############################################################################################################
### Copyright by Joy-IT
### Published under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
### Commercial use only after permission is requested and granted
### Programme traduit par Go tronic
###
### KY-023 RPi Joystick Module - Raspberry Pi Python Code Example
###
#############################################################################################################
  
# Ce code utilise les librairies Python ADS1115 et I2C pour la Raspberry Pi
# Ces librairies sont publiées sous licence BSD sur le lien ci-dessous
# [https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code]
from Adafruit_ADS1x15 import ADS1x15
from time import sleep
 
# Les modules nécessaires sont importés et mis en place
import time, signal, sys, os
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
 
# Les variables utilisées sont initialisées
delayTime = 0.2
 
# attribution d'adresse ADS1x15 ADC
 
ADS1015 = 0x00  # 12-bit ADC
ADS1115 = 0x01  # 16-bit
 
# Choix du gain
gain = 4096  # +/- 4.096V
# gain = 2048  # +/- 2.048V
# gain = 1024  # +/- 1.024V
# gain = 512   # +/- 0.512V
# gain = 256   # +/- 0.256V
 
# Choix de la fréquence d'échantillonnage ADC (SampleRate)
# sps = 8    # 8 échantillons par seconde
# sps = 16   # 16 échantillons par seconde
# sps = 32   # 32 échantillons par seconde
sps = 64   # 64 échantillons par seconde
# sps = 128  # 128 échantillons par seconde
# sps = 250  # 250 échantillons par seconde
# sps = 475  # 475 échantillons par seconde
# sps = 860  # 860 échantillons par seconde
 
# choix du canal ADC (1-4)
x_adc_channel = 0    # Channel 0 für die x-Achse
y_adc_channel = 1    # Channel 1 für die y-Achse
# adc_channel = 2    # Channel 2
# adc_channel = 3    # Channel 3
 
# initialisation du convertisseur
adc = ADS1x15(ic=ADS1115)
 
Button_PIN = 24
GPIO.setup(Button_PIN, GPIO.IN, pull_up_down = GPIO.PUD_UP)
 
#############################################################################################################
 
# ########
# boucle de programme principale
# ########
# Le programme lit les tensions en entrées et les transmet à la console en mV.
 
try:
        while True:
                #Les valeurs de tension sont enregistrées
                x = adc.readADCSingleEnded(x_adc_channel, gain, sps)
                y = adc.readADCSingleEnded(y_adc_channel, gain, sps)
 
                # Envoi vers la console
                if GPIO.input(Button_PIN) == True:
                        print "Axe X:", x,"mV, ","Axe Y:", y,"mV, Bouton: n'est pas poussé"
                else:
                        print "Axe X:", x, "mV, ", "Axe Y:", y, "mV, Bouton: poussé"
                print "---------------------------------------"
 
                # Reset + Delay
                button_pressed = False
                time.sleep(delayTime)
 
 
 
except KeyboardInterrupt:
        GPIO.cleanup()

Brochage Raspberry Pi:

Sensor KY-023

Bouton = GPIO24 [Pin 18 (RPi)]
Position Y = Analog 1 [Pin A1 (ADS1115 - KY-053)]
Position X = Analog 0 [Pin A0 (ADS1115 - KY-053)]
+V = 3,3V [Pin 1 (RPi)]
GND = Masse [Pin 6 (RPi)]

ADS1115 - KY-053:

VDD = 3,3V [Pin 01]
GND = Masse [Pin 09]
SCL = GPIO03 / SCL [Pin 05 (RPi)]
SDA = GPIO02 / SDA [Pin 03 (RPi)]
A0 = s.o. [Capteur: Position X (KY-023)]
A1 = s.o. [Capteur: Position Y (KY-023)]

Exemple de programme à télécharger

KY-023_RPi_JoystickModule.zip

Commande pour lancer le programme:

sudo python KY-023_RPi_JoystickModule.py