Arduino Nano - Joystick

Ce tutoriel vous explique comment utiliser un joystick avec un Arduino Nano. En détail, nous allons apprendre :

Joystick Arduino Nano

Préparation du matériel

1×Arduino Nano
1×USB A to Mini-B USB cable
1×Joystick
1×Jumper Wires
1×(Optional) 9V Power Adapter for Arduino Nano
1×(Recommended) Screw Terminal Adapter for Arduino Nano

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du joystick 2 axes

Vous avez peut-être rencontré un joystick dans différents endroits, comme une manette de jeu, une télécommande de jouet ou même sur un grand engin tel que le tableau de commande d'une excavatrice.

Le joystick est constitué de deux potentiomètres perpendiculaires l'un à l'autre et d'un bouton-poussoir. Ainsi, il produit les sorties suivantes :

  • Une valeur analogique allant de 0 à 1023 (lue par Arduino) qui correspond à la position horizontale (connue sous le nom de coordonnée X)
  • Une valeur analogique allant de 0 à 1023 (lue par Arduino) qui correspond à la position verticale (connue sous le nom de coordonnée Y)
  • Une valeur numérique du bouton-poussoir (soit HAUT soit BAS)

Par conséquent :

  • Deux valeurs analogiques peuvent être fusionnées pour créer des coordonnées 2D.
  • Le centre du système de coordonnées 2D est la position de repos du joystick.
  • Pour déterminer la direction du joystick, exécutez un code de test qui présentera ces informations dans la section suivante.

Certaines applications peuvent utiliser les trois sorties, tandis que d'autres peuvent n'en utiliser que certaines.

Le schéma de brochage du joystick

Un joystick a 5 broches :

  • Broche GND : Celle-ci doit être connectée au GND (0V).
  • Broche VCC : Celle-ci doit être connectée au VCC (5V).
  • Broche VRX : Celle-ci produit une valeur analogique correspondant à la position horizontale (connue sous le nom de coordonnée X).
  • Broche VRY : Celle-ci produit une valeur analogique correspondant à la position verticale (connue sous le nom de coordonnée Y).
  • Broche SW : C'est la sortie du bouton-poussoir à l'intérieur du joystick. Elle est normalement ouverte. Si une résistance de tirage est utilisée sur cette broche, la broche SW sera HAUTE lorsqu'elle n'est pas pressée, et BASSE lorsqu'elle est pressée.
brochage de joystick

Comment ça fonctionne

  • Lorsque vous déplacez le pouce du joystick vers la gauche ou la droite, la tension dans la broche VRX varie de 0 à 5V, avec 0 à gauche et 5V à droite, ce qui donne une valeur de lecture sur la broche analogique de l'Arduino de 0 à 1023.
  • Lorsque vous déplacez le pouce du joystick vers le haut ou vers le bas, la tension dans la broche VRY varie de 0 à 5V, avec 0 en haut et 5V en bas, ce qui donne une valeur de lecture sur la broche analogique de l'Arduino de 0 à 1023.
  • Lorsque vous déplacez le pouce du joystick dans n'importe quelle direction, la tension dans les broches VRX et VRY change proportionnellement à la projection de la position sur chaque axe.
  • Lorsque vous poussez le pouce du joystick de haut en bas, le bouton-poussoir à l'intérieur du joystick se ferme. Si nous utilisons une résistance de tirage sur la broche SW, la sortie de la broche SW passera de 5V à 0V, résultant en une valeur de lecture sur la broche numérique de l'Arduino passée de HIGH à LOW.

Diagramme de câblage

Schéma de câblage du joystick Arduino Nano

This image is created using Fritzing. Click to enlarge image

Comment programmer pour un joystick

Le joystick est composé de deux composants : analogique (axe X, Y) et numérique (bouton-poussoir).

  • Pour les parties analogiques (axes X, Y), il suffit de lire la valeur depuis la broche d'entrée analogique en utilisant la fonction analogRead().
int value_X = analogRead(A6); int value_Y = analogRead(A7);
  • Pour la partie numérique (bouton-poussoir) : il s'agit d'un bouton. La manière la plus simple et la plus pratique de l'utiliser est avec la bibliothèque ezButton. Cette bibliothèque possède un support de l'anti-rebond pour les boutons, ainsi qu'une résistance de tirage interne. Pour en savoir plus sur les boutons, vous pouvez consulter le tutoriel Arduino Nano - Bouton. Le code pour cela sera présenté dans la session suivante de ce tutoriel.

Après avoir obtenu les valeurs des broches analogiques, nous pourrions avoir besoin de les convertir en valeurs contrôlables. La section suivante fournira des exemples de codes pour cela.

Code Arduino Nano

Cette section fournira des exemples de codes pour Arduino Nano comme suit :

  • Exemple de code : lire les valeurs analogiques d'un joystick
  • Exemple de code : lire les valeurs analogiques et l'état du bouton d'un joystick
  • Exemple de code : convertir une valeur analogique en commandes MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
  • Exemple de code : convertir des valeurs analogiques en angles pour gérer deux moteurs servo (par exemple dans une caméra pan-tilt)

Lit les valeurs analogiques du joystick

/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano/arduino-nano-joystick */ #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin int value_X = 0; // The variable to store value of the X axis int value_Y = 0; // The variable to store value of the Y axis void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(value_X); Serial.print(", y = "); Serial.println(value_Y); delay(200); }

Étapes rapides

  • Copiez le code et ouvrez-le dans l'IDE Arduino.
  • Cliquez sur le bouton Upload pour transférer le code vers l'Arduino Nano.
  • Poussez le pouce du joystick jusqu'au bout et faites-le tourner en mouvement circulaire (dans le sens des aiguilles d'une montre ou dans le sens inverse).
  • Consultez le résultat sur le moniteur série.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

En tournant le pouce du joystick, gardez un œil sur le moniteur série.

Si la valeur de X est 0, notez ou mémorisez la position actuelle comme étant à gauche, l'opposé étant à droite.

Si la valeur Y est 0, notez ou retenez la position actuelle comme étant en haut, l'opposée étant en bas.

Lit des valeurs analogiques et lit l'état du bouton d'un joystick

/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano/arduino-nano-joystick */ #include <ezButton.h> #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin #define SW_PIN 2 // The Arduino Nano pin connected to SW pin ezButton button(SW_PIN); int value_X = 0; // The variable to store value of the X axis int value_Y = 0; // The variable to store value of the Y axis int bValue = 0; // The variable to store value of the button void setup() { Serial.begin(9600) ; button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // Read the button value bValue = button.getState(); if (button.isPressed()) { Serial.println("The button is pressed"); // TODO do something here } if (button.isReleased()) { Serial.println("The button is released"); // TODO do something here } // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(value_X); Serial.print(", y = "); Serial.print(value_Y); Serial.print(" : button = "); Serial.println(bValue); }

Étapes rapides

  • Cliquez sur l'icône Libraries dans la barre gauche de l'IDE Arduino.
  • Recherchez "ezButton" et trouvez la bibliothèque de boutons de ArduinoGetStarted.com.
  • Ensuite, cliquez sur le bouton Install pour installer la bibliothèque ezButton.
Bibliothèque de boutons Arduino Nano
  • Copiez le code et ouvrez-le avec l'IDE Arduino.
  • Cliquez sur le bouton Upload pour l'envoyer au Arduino Nano.
  • Déplacez le pouce du joystick dans les directions gauche, droite, haut et bas.
  • Poussez le pouce du joystick depuis le haut.
  • Consultez le résultat sur le moniteur série.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Convertit la valeur analogique en commandes de DÉPLACEMENT GAUCHE/DROITE/HAUT/BAS

/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano/arduino-nano-joystick */ #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin #define LEFT_THRESHOLD 400 #define RIGHT_THRESHOLD 800 #define UP_THRESHOLD 400 #define DOWN_THRESHOLD 800 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 int value_X = 0 ; // The variable to store value of the X axis int value_Y = 0 ; // The variable to store value of the Y axis int command = COMMAND_NO; void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // converts the analog value to commands // reset commands command = COMMAND_NO; // check left/right commands if (value_X < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (value_X > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // check up/down commands if (value_Y < UP_THRESHOLD) command = command | COMMAND_UP; else if (value_Y > DOWN_THRESHOLD) command = command | COMMAND_DOWN; // NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND OR TWO COMMANDS // print command to serial and process command if (command & COMMAND_LEFT) { Serial.println("COMMAND LEFT"); // TODO: add your task here } if (command & COMMAND_RIGHT) { Serial.println("COMMAND RIGHT"); // TODO: add your task here } if (command & COMMAND_UP) { Serial.println("COMMAND UP"); // TODO: add your task here } if (command & COMMAND_DOWN) { Serial.println("COMMAND DOWN"); // TODO: add your task here } }

Étapes rapides

  • Copiez le code et ouvrez-le avec l'IDE Arduino.
  • Cliquez sur le bouton Upload dans l'IDE pour envoyer le code à l'Arduino Nano.
  • Déplacez le joystick dans n'importe quelle direction avec votre pouce.
  • Vérifiez les résultats dans le moniteur série.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NOTE THAT:

À tout moment, il pourrait n'y avoir aucun ordre, un ordre, ou deux ordres (par exemple, HAUT et GAUCHE simultanément).

Convertit les valeurs analogiques en angles pour contrôler deux moteurs servo.

Les détails sont disponibles dans le tutoriel intitulé Arduino Nano - Le joystick contrôle le moteur servo.

Vidéo

Références de fonction

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!