Accueil > Arduino, Matériel > Utilisation d’un Joystick à partir de l’Arduino

Utilisation d’un Joystick à partir de l’Arduino

Il y a quelques temps, j’ai récupéré quelques pièces sur un hélicoptère télécommandé par infra-rouge à mon fils et notamment un Joystick :

2013-04-03 11.50.27 2013-04-03 11.51.15

La carte est équipée en plus du Joystick, d’un potentiomètre; j’ai juste soudé un connecteur 4 broches afin de pouvoir m’y connecter. Le schéma de cette carte est le suivant :

image

Pour les tests, je vais utiliser les broches 1, 2 et 3. Vu le câblage des potentiomètres, je vais être obligé de rajouter 2 résistances de 8.2 Ko (par exemple) à mon câblage sur l’Arduino.

Le câblage sera le suivant :

image

Le premier programme va permettre de lire l’état du Joystick et d’afficher une valeur pour l’axe X et l’axe Y; voici le contenu :

/*
  Utilisation Joystick
*/

int port_v = A0; // joystick mouvement vertical
int port_h = A1; // joystick mouvement horizontal    
int valeur_v = 0;
int valeur_h = 0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  // Lit l’entrée analogique A0
  valeur_v = analogRead(port_v);
  // lit l’entrée analogique A1
  valeur_h = analogRead(port_h);
  Serial.print("X:");
  Serial.print(valeur_h);
  Serial.print(" Y:");
  Serial.println(valeur_v);
  delay(500);
}

En ouvrant le moniteur, on affiche donc 2 valeurs en fonction du positionnement du Joystick; on remarque que si on ne touche pas le Joystick, on obtient 2 valeurs qui seront notre référence :

image

Donc cela a permis de vérifier le bon fonctionnement du matériel et de notre programme.

Maintenant on va commencer à réfléchir à l’utilisation du Joystick afin de pouvoir piloter mon robot 2WD. En fait le but de cet article est de pouvoir piloter via le Joystick le déplacement de mon robot en utilisant une liaison sans fil à partir d’un Arduino et si possible à partir du Raspberry.

Afin de pouvoir piloter mon robot, il va falloir traiter 8 directions possibles et une au repos à partir du Joystick :

image

La correspondance avec le Joystick sera le suivant :

image

Avec le programme, j’ai pu mesurer les valeurs obtenues en fonction de la position du Joystick. Les valeurs utilisées sont en fonction du Joystick; bien sûr elles seront différentes pour un autre Joystick. Je vais travailler au niveau des zones; j’ai donc 8 zones à traiter pour effectuer une action qui correspondent aux 8 directions possibles.

Le programme sera le suivant :

/*
  Programme pour utilisation Joystick
  Celui-ci permet de définir la zone en fonction de la position du Joystick
*/

int port_v = A0; // joystick mouvement vertical
int port_h = A1; // joystick mouvement horizontal    
int valeur_v = 0;
int valeur_h = 0;
int zone = 0;

void setup()
{
  Serial.begin(9600);
}

void calcul_zone(int x, int y)
{
  if (x <= 120)
  {
     if (y >= 300){zone = 2;}
     if (y <= 120){zone = 4;}
     if ((y < 300) && (y > 120)) {zone = 3;}
  }
  if (x >= 300)
  {
     if (y >= 300){zone = 8;}
     if (y <= 120){zone = 6;}
     if ((y < 300) && (y > 120)) {zone = 7;}
  }
  if ((x > 120) && (x < 300))
  {
     if (y >= 300){zone = 1;}
     if (y <= 120){zone = 5;}
     if ((y < 300) && (y > 120)) {zone = 0;}
  }
}

void loop()
{
  // Lit l’entrée analogique A0
  valeur_v = analogRead(port_v);
  // lit l’entrée analogique A1
  valeur_h = analogRead(port_h);
  calcul_zone(valeur_h, valeur_v);
  switch (zone)
  {
    case 0:
      Serial.println("Robot stop");
      break;
    case 1:
      Serial.println("Robot avance");
      break;
    case 2:
      Serial.println("Robot avance et tourne à droite");
      break;
    case 3:
      Serial.println("Robot tourne à droite toute");
      break;
    case 4:
      Serial.println("Robot recule et tourne à droite");
      break;
    case 5:
      Serial.println("Robot recule");
      break;
    case 6:
      Serial.println("Robot recule et tourne à gauche");
      break;
    case 7:
      Serial.println("Robot tourne à gauche toute");
      break;
    case 8:
      Serial.println("Robot avance et tourne à gauche");
      break;      
  }
  delay(100);
}

Je reviendrai sur un prochain article qui permettra de piloter mon Robot à distance via ce Joystick.

Advertisements
Catégories :Arduino, Matériel Étiquettes : ,
  1. clovis
    15/04/2013 à 15:18

    Bonjour je viens de voir votre petit article et il m’intéresse beaucoup ! Je suis actuellement en Terminale Sti et je dois piloter une petite voiture avec deux moteurs: http://www.centralmedia.fr/lycee/robotique/base-aluminium-avec-4-roues-motrices-circuit-imprime-pre-erce-BA3000,P44154.html

    Je n’ai actuellement pas trouvé de programme qui pourrait résourdre mon problème sur internet, autre que le votre; c’est pour cela que j’aimerais savoir si celui-ci est compatible sur une petite voiture, pour la piloter à distance j’utilise 2 modules Xbee donc pas de soucis de ce côté la.
    Merci de me répondre au plus vite, je n’ai plus beaucoup de temps avant l’échéance de mon projet.

    • 15/04/2013 à 16:59

      Bonjour,
      Pour le joystick, il suffit d’adapter le programme en fonction du joystick utilisé. Maintenant côté véhicule, il faudra ajouter une alimentation supplémentaire pour l’arduino car 4.5v n’est pas suffisant

  2. 25/09/2013 à 14:23

    Bonjour j’aimerai me baser sur votre code pour faire avancer un robot et je voulais savoir comment vous aviez défini les coordonnées des zones en rouge ?

    Salutations et merci pour le tuto

  3. 25/09/2013 à 15:33

    En fait c’est tout bon.. Avez vous fait l’article pour pilote à distance avec le joystick ?

    • 29/09/2013 à 11:50

      Et non en fait j’ai des problèmes de parasites en liaison radio avec le robot. Donc pour l’instant j’ai mis en pause, le projet de piloter mon robot via liaison radio

  4. BOB
    22/04/2014 à 08:36

    Bonjour,

    je suis en gros doute sur les joysticks, le premier est un joystick 1 ou deux axe(s) ?

  5. PEPE du59
    20/07/2014 à 21:07

    Bonjour,

    J’ai testé le programme, il fonctionne super bien.
    Je travaille sur un sujet similaire pour piloter un multimoteur.
    Quand prévoyez-vous la publication de la version « radiocommande » ?
    Utilisera-t-elle un nrf24l01 ?

    A bientôt

    • 10/10/2014 à 07:50

      Bonjour je n’ai pas trop le temps en ce moment mais je vais m’y remettre cet hiver

      • Roxas
        09/03/2015 à 17:40

        Bonjour, je tiens à vous remercier pour le programme que vous nous avez fournit. Pour mes études, je dois réaliser un projet consistant à programmer un robot en radio fréquence. J’aimerais savoir si vous avez continuez le programme en RF et si non je voudrais pouvoir vous contacter afin de se concerter car dans tous les cas je dois le finir avant fin Mai. Merci d’avance pour votre réponse

  6. Hugo
    14/01/2015 à 11:26

    Bonjour, j’ai regardé votre article, et j’aurai aimé savoir comment il aurai été possible de piloter un robot en WiFi grace à un Joystick qui lui aussi serait relié en wifi à la carte arduino pour mon projet en Terminale STI2D pour le BAC de cette année.

    Est-ce possible ? Et si oui, comment procéder ?

    Merci de m’avoir lu 🙂

    Cordialement, Hugo.

  7. UnTravailleur
    05/04/2015 à 17:54

    Bonjour j’aimerais savoir comment vous avez déterminer le chiffre a placer devant les cases

  8. kriss99
    17/08/2016 à 16:50

    super tuto merci

  1. 24/05/2013 à 08:56

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :