Arduino Mega - Joystick

Bienvenue dans ce tutoriel complet sur le joystick Arduino Mega ! Dans ce guide détaillé sur le joystick Arduino Mega, vous découvrirez comment exploiter la puissance des modules joystick analogiques pour créer des systèmes de contrôle intuitifs et interactifs pour vos projets Arduino Mega.

Les modules joystick sont des dispositifs d'entrée incroyablement polyvalents qui fournissent un contrôle de positionnement bidimensionnel précis, les rendant parfaits pour les applications de jeu, le contrôle de robotique, les systèmes de caméra panoramique-inclinaison et les installations d'art interactif. Tout au long de ce tutoriel joystick Arduino Mega, nous explorerons tout ce dont vous avez besoin pour maîtriser l'intégration du joystick :

Ce projet joystick Arduino Mega ouvre des possibilités créatives infinies ! Construisez des contrôleurs de jeu, des robots télécommandés avec direction intuitive, des systèmes de caméra panoramique-inclinaison, des interfaces de réalité virtuelle ou des affichages interactifs qui répondent aux mouvements du joystick. La combinaison du contrôle analogique précis et de l'entrée bouton numérique fait des joysticks l'un des dispositifs d'entrée les plus puissants et conviviaux disponibles !

Arduino Mega et Joystick

Matériel requis

1×Arduino Mega
1×Câble USB 2.0 type A/B
1×Joystick
1×Fils de connexion
1×Recommandé: Screw Terminal Block Shield for Arduino Uno/Mega
1×Recommandé: Breadboard Shield for Arduino Mega
1×Recommandé: Enclosure for Arduino Mega

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (30 capteurs/écrans)
1×Kit de Capteurs DIYables (18 capteurs/écrans)
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

Les joysticks sont des dispositifs d'entrée familiers que vous avez probablement rencontrés dans de nombreuses applications—des contrôleurs de jeux vidéo classiques et télécommandes de jouets RC aux équipements professionnels comme les machines industrielles, les excavateurs et les systèmes de contrôle de drones. Leur interface intuitive en fait un choix naturel pour tout projet nécessitant un contrôle directionnel.

Le module joystick se compose de deux potentiomètres (résistances variables) montés perpendiculairement l'un à l'autre sous un bâton à ressort, plus un interrupteur bouton-poussoir intégré qui s'active lorsque vous appuyez sur le bâton. Cette disposition mécanique astucieuse fournit trois sorties distinctes :

  • Sortie axe X : Une lecture analogique allant de 0 à 1023 représentant la position gauche-droite (mouvement horizontal)
  • Sortie axe Y : Une lecture analogique allant de 0 à 1023 représentant la position haut-bas (mouvement vertical)
  • État du bouton : Un signal numérique (HIGH ou LOW) indiquant si le joystick est enfoncé

Lorsque vous combinez les deux valeurs analogiques, elles créent des coordonnées 2D précises qui cartographient la position du joystick dans l'espace. Au repos (position neutre), le joystick produit généralement des valeurs de milieu de gamme autour de 512 pour les axes X et Y. Déplacer le bâton dans n'importe quelle direction change ces valeurs proportionnellement, fournissant un contrôle fluide et continu.

La beauté de cette conception est sa flexibilité—certaines applications utilisent les trois sorties simultanément (comme un contrôleur de jeu avec boutons de mouvement et d'action), tandis que d'autres peuvent n'avoir besoin que des données de positionnement X/Y (comme un système de caméra panoramique-inclinaison) ou juste le bouton (comme un simple interrupteur). Vous pouvez facilement déterminer la cartographie exacte des coordonnées en exécutant du code de test, que nous explorerons en détail dans la section programmation ci-dessous.

Brochage

Comprendre la configuration des broches du joystick est essentiel pour un câblage approprié. Le module joystick comporte cinq broches qui fournissent l'alimentation, la masse et les connexions de signal :

  • Broche GND : La broche de référence de masse. Connectez-la au GND (0V) de l'Arduino Mega pour compléter tous les circuits électriques et établir une référence de masse commune.
  • Broche VCC : La broche d'alimentation. Connectez-la à la sortie 5V de l'Arduino Mega pour fournir la tension de fonctionnement aux potentiomètres et aux circuits internes.
  • Broche VRX : La broche de sortie analogique de l'axe X. Elle fournit un signal de tension analogique (0V à 5V) représentant la position horizontale du joystick. Connectez-la à n'importe quelle broche d'entrée analogique de l'Arduino Mega (A0-A15).
  • Broche VRY : La broche de sortie analogique de l'axe Y. Elle fournit un signal de tension analogique (0V à 5V) représentant la position verticale du joystick. Connectez-la à n'importe quelle broche d'entrée analogique de l'Arduino Mega (A0-A15).
  • Broche SW : La broche de sortie de l'interrupteur (bouton) du bouton-poussoir intégré. Cette broche est normalement ouverte (aucune connexion). Le module inclut généralement une résistance de rappel interne qui maintient cette broche HIGH (5V) lorsqu'elle n'est pas pressée et la tire LOW (0V) lorsque le joystick est enfoncé. Connectez-la à n'importe quelle broche d'entrée numérique de l'Arduino Mega.
Brochage du Joystick

Conseil de connexion : Vous pouvez connecter VRX et VRY à n'importe quelles broches analogiques disponibles sur votre Arduino Mega. L'Arduino Mega fournit 16 broches d'entrée analogique (A0 à A15), vous donnant beaucoup d'options pour intégrer plusieurs capteurs aux côtés de votre joystick.

Comment ça fonctionne

Plongeons dans les détails techniques de la façon dont le joystick convertit le mouvement physique en signaux électriques que votre Arduino peut comprendre :

Mouvement Gauche/Droite (Axe X) :

  • Lorsque vous déplacez le joystick vers la gauche ou la droite, vous faites physiquement tourner le potentiomètre de l'axe X à l'intérieur du module
  • Déplacer le bâton complètement vers la gauche fait tourner le potentiomètre à sa position de résistance minimale, produisant approximativement 0V à la broche VRX
  • Déplacer le bâton complètement vers la droite fait tourner le potentiomètre à sa position de résistance maximale, produisant approximativement 5V à la broche VRX
  • Le convertisseur analogique-numérique (ADC) de l'Arduino Mega lit cette tension et la convertit en valeur numérique de 0 à 1023, où 0V égale 0 et 5V égale 1023
  • À la position centrale (neutre), la tension est approximativement de 2,5V, ce qui se traduit par une valeur autour de 512

Mouvement Haut/Bas (Axe Y) :

  • L'axe Y fonctionne de manière identique à l'axe X, mais répond au mouvement vertical au lieu d'horizontal
  • Déplacer le bâton complètement vers le haut produit approximativement 0V à la broche VRY (valeur analogique près de 0)
  • Déplacer le bâton complètement vers le bas produit approximativement 5V à la broche VRY (valeur analogique près de 1023)
  • L'Arduino convertit cette tension en nombre de 0 à 1023 en utilisant le même processus ADC
  • La position centrale donne approximativement 2,5V (valeur analogique autour de 512)

Mouvements Combinés (Diagonal) :

  • Lorsque vous déplacez le joystick en diagonale (par exemple, haut-droite ou bas-gauche), les broches VRX et VRY changent simultanément leurs tensions
  • Chaque axe fonctionne indépendamment, vous obtenez donc des paires de coordonnées uniques pour chaque position du joystick
  • Par exemple, se déplacer vers le coin supérieur droit pourrait vous donner X=1023, Y=0, tandis que le coin inférieur gauche donne X=0, Y=1023
  • Cela crée une cartographie fluide et continue de toute la plage de mouvement 2D

Presser le Joystick (Axe Z / Bouton) :

  • Pousser directement vers le bas sur le dessus du joystick active un interrupteur bouton-poussoir tactile sous le bâton
  • La broche SW inclut une résistance de rappel interne (ou vous pouvez activer le rappel interne de l'Arduino)
  • Lorsqu'elle n'est pas pressée, la résistance de rappel maintient la broche SW à tension HIGH (5V)
  • Lorsqu'elle est pressée, le bouton connecte la broche SW directement à la masse, la tirant LOW (0V)
  • L'Arduino lit cela comme un simple signal numérique : HIGH = non pressé, LOW = pressé

En résumé : Le joystick est essentiellement deux résistances variables (potentiomètres) plus un bouton. Déplacer le bâton change les valeurs de résistance, qui changent les tensions à VRX et VRY. Les entrées analogiques de l'Arduino mesurent ces tensions comme des nombres de 0 à 1023, vous donnant des données de position précises. Le bouton fournit une entrée numérique supplémentaire qui est soit HIGH soit LOW, parfaite pour déclencher des actions lorsque l'utilisateur appuie sur le joystick.

Diagramme de câblage

Examinons maintenant les connexions appropriées entre votre Arduino Mega et le module joystick. Cette configuration utilise deux broches analogiques pour la détection de position et une broche numérique pour la détection de bouton :

Diagramme de câblage Arduino Mega Joystick

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Résumé des connexions :

  • Joystick GND → Arduino Mega GND (connexion de masse)
  • Joystick VCC → Arduino Mega 5V (alimentation)
  • Joystick VRX → Arduino Mega A1 (entrée analogique axe X)
  • Joystick VRY → Arduino Mega A0 (entrée analogique axe Y)
  • Joystick SW → Arduino Mega Pin 2 (entrée numérique bouton)

Ces affectations de broches peuvent être changées dans votre code si nécessaire pour accommoder d'autres composants dans votre projet.

Comment programmer pour le Joystick

Explorons les éléments essentiels de la programmation pour travailler avec les modules joystick ! Le joystick combine deux types d'entrée distincts—positionnement analogique et détection de bouton numérique—qui nécessitent différentes approches de programmation.

Lecture des données de position analogique

Les axes X et Y du joystick sont des entrées analogiques, les rendant simples à lire. Utilisez simplement la fonction analogRead() sur les broches analogiques connectées :

int xValue = analogRead(A1); // Lire la position axe X (0-1023) int yValue = analogRead(A0); // Lire la position axe Y (0-1023)

Ces valeurs vont de 0 à 1023, avec approximativement 512 représentant la position centrale (neutre). Vous pouvez lire ces valeurs continuellement dans votre fonction loop() pour suivre le mouvement du joystick en temps réel.

Lecture du bouton-poussoir

Pour le composant bouton numérique (broche SW), nous recommandons d'utiliser la bibliothèque ezButton plutôt que de simples appels digitalRead(). Voici pourquoi :

  • Anti-rebond : La bibliothèque ezButton inclut des algorithmes d'anti-rebond intégrés qui filtrent le bruit électrique et les rebonds mécaniques, garantissant une détection fiable de l'état du bouton
  • Détection de front : Elle fournit des méthodes faciles pour détecter les événements de pression, les événements de relâchement et les états de pression continue
  • Code plus propre : Simplifie la gestion des boutons avec des fonctions intuitives

Vous pouvez apprendre les techniques complètes de programmation de bouton dans notre tutoriel Arduino Mega - Button. Nous démontrerons l'utilisation d'ezButton dans les exemples de code qui suivent.

Traitement des données du Joystick

Après avoir lu les valeurs analogiques brutes, vous devrez souvent les transformer en formats plus utiles :

  • Commandes directionnelles (HAUT, BAS, GAUCHE, DROITE)
  • Angles de servo (0° à 180°)
  • Vitesses de moteur (-255 à +255)
  • Coordonnées de curseur pour les affichages

Les exemples de code dans la section suivante démontrent plusieurs techniques courantes de transformation de données que vous pouvez adapter pour votre application spécifique.

Code Arduino Mega

Plongeons dans des exemples de code pratiques qui démontrent différentes façons de travailler avec les données du joystick ! Nous avons préparé plusieurs exemples progressivement avancés pour vous aider à maîtriser la programmation du joystick :

  • Exemple 1 : Lecture et affichage des valeurs analogiques brutes du joystick (données de position X et Y)
  • Exemple 2 : Lecture des valeurs analogiques plus détection des événements de pression du bouton-poussoir
  • Exemple 3 : Conversion des données de position analogique en commandes directionnelles (DÉPLACER GAUCHE, DÉPLACER DROITE, DÉPLACER HAUT, DÉPLACER BAS)
  • Exemple 4 : Transformation des valeurs analogiques en angles de servomoteur pour contrôler un système de caméra panoramique-inclinaison

Chaque exemple s'appuie sur les concepts précédents, nous recommandons donc de les travailler dans l'ordre si vous êtes nouveau à la programmation de joystick.

Lit les valeurs analogiques du joystick

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega 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-mega/arduino-mega-joystick */ #define VRX_PIN A1 // The Arduino Mega pin connected to VRX pin #define VRY_PIN A0 // The Arduino Mega pin connected to VRY pin int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(xValue); Serial.print(", y = "); Serial.println(yValue); delay(200); }

Étapes rapides

Suivez ces étapes détaillées attentivement pour tester votre configuration de joystick :

Étape 1 - Connexion physique : Connectez le joystick à l'Arduino Mega en utilisant le diagramme de câblage montré ci-dessus. Vérifiez bien que VCC, GND, VRX, VRY et SW sont tous connectés aux bonnes broches.

Étape 2 - Connexion USB : Connectez la carte Arduino Mega à votre ordinateur en utilisant un câble USB. Attendez que votre système d'exploitation reconnaisse le périphérique.

Étape 3 - Lancer l'IDE Arduino : Ouvrez le logiciel Arduino IDE sur votre ordinateur. Si vous ne l'avez pas encore installé, téléchargez-le depuis le site officiel d'Arduino.

Étape 4 - Configuration de la carte : Naviguez vers Outils > Carte et sélectionnez "Arduino Mega or Mega 2560". Puis allez dans Outils > Port et sélectionnez le port COM approprié.

Étape 5 - Charger le code : Copiez l'exemple de code ci-dessus et collez-le dans la fenêtre d'édition de l'IDE Arduino.

Étape 6 - Téléverser le programme : Cliquez sur le bouton Téléverser (icône de flèche droite) dans l'IDE Arduino pour compiler et transférer le code vers votre Arduino Mega. Attendez le message "Téléversement terminé".

Étape 7 - Tester le mouvement : Déplacez le joystick vers ses bords extrêmes et faites-le tourner en cercles complets (dans le sens horaire ou antihoraire) pour tester toute la plage de mouvement.

Étape 8 - Monitorer la sortie : Ouvrez le Moniteur Série (Outils > Moniteur Série ou Ctrl+Shift+M) pour voir les données du joystick en temps réel.

COM6
Send
x = 512, y = 508 x = 512, y = 509 x = 1023, y = 512 x = 1023, y = 510 x = 514, y = 1023 x = 512, y = 1023 x = 0, y = 511 x = 0, y = 512 x = 511, y = 0 x = 512, y = 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Comprendre la sortie :

  • Quand X lit près de 0, le joystick est déplacé complètement vers la GAUCHE
  • Quand X lit près de 1023, le joystick est déplacé complètement vers la DROITE
  • Quand Y lit près de 0, le joystick est déplacé complètement vers le HAUT
  • Quand Y lit près de 1023, le joystick est déplacé complètement vers le BAS
  • La position centrale montre des valeurs autour de 512 pour les deux axes

Conseil de pro : Votre joystick peut ne pas lire exactement 0, 512 ou 1023 en raison des tolérances de fabrication. Les valeurs centrales typiques vont de 505-520, et les valeurs de bord peuvent être de 10-20 comptes loin des extrêmes. C'est normal et peut être compensé dans votre code en utilisant des valeurs de calibration ou de seuil.

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

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega 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-mega/arduino-mega-joystick */ #include <ezButton.h> #define VRX_PIN A1 // The Arduino Mega pin connected to VRX pin #define VRY_PIN A0 // The Arduino Mega pin connected to VRY pin #define SW_PIN 2 // The Arduino Mega pin connected to SW pin ezButton button(SW_PIN); int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis int bValue = 0; // 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 xValue = analogRead(VRX_PIN); yValue = 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(xValue); Serial.print(", y = "); Serial.print(yValue); Serial.print(" : button = "); Serial.println(bValue); }

Étapes rapides

Étape 1 - Installer la bibliothèque ezButton : Cliquez sur l'icône Bibliothèques (icône de livre) dans la barre latérale gauche de l'IDE Arduino pour ouvrir le Gestionnaire de bibliothèques.

Étape 2 - Rechercher la bibliothèque : Dans la boîte de recherche, tapez "ezButton" et localisez la bibliothèque ezButton d'ArduinoGetStarted.com dans les résultats.

Étape 3 - Installer : Cliquez sur le bouton Installer pour ajouter la bibliothèque ezButton à votre IDE Arduino. Attendez que l'installation se termine.

Bibliothèque bouton Arduino Mega

Étape 4 - Charger le code : Copiez l'exemple de code ci-dessus et ouvrez-le dans l'éditeur de l'IDE Arduino.

Étape 5 - Téléverser le programme : Cliquez sur le bouton Téléverser dans l'IDE Arduino pour compiler et téléverser le code vers votre Arduino Mega.

Étape 6 - Tester le joystick : Déplacez le joystick dans toutes les directions—gauche, droite, haut et bas—pour voir les valeurs analogiques changer.

Étape 7 - Tester le bouton : Appuyez fermement vers le bas sur le dessus du joystick pour activer le bouton-poussoir intégré.

Étape 8 - Voir les résultats : Ouvrez le Moniteur Série pour voir les données de position du joystick en temps réel et les événements de pression du bouton.

COM6
Send
x = 512, y = 510 x = 1020, y = 512 x = 1023, y = 510 The button is pressed x = 1021, y = 512 The button is released x = 510, y = 1023 x = 5, y = 8 x = 0, y = 0 The button is pressed x = 1, y = 2 The button is released x = 512, y = 511
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Conseil de pro : La fonction d'anti-rebond de la bibliothèque ezButton assure que vous obtenez une détection de pression de bouton propre et fiable sans faux déclenchements dus au bruit électrique ou aux rebonds mécaniques.

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

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega 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-mega/arduino-mega-joystick */ #define VRX_PIN A1 // The Arduino Mega pin connected to VRX pin #define VRY_PIN A0 // The Arduino Mega 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 xValue = 0 ; // To store value of the X axis int yValue = 0 ; // 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 xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // converts the analog value to commands // reset commands command = COMMAND_NO; // check left/right commands if (xValue < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (xValue > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // check up/down commands if (yValue < UP_THRESHOLD) command = command | COMMAND_UP; else if (yValue > 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

Étape 1 - Charger le code : Copiez l'exemple de code ci-dessus et ouvrez-le dans la fenêtre d'éditeur de l'IDE Arduino.

Étape 2 - Téléverser le programme : Cliquez sur le bouton Téléverser dans l'IDE Arduino pour compiler et téléverser le code vers l'Arduino Mega.

Étape 3 - Tester les directions : Déplacez le joystick délibérément dans chaque direction cardinale—gauche, droite, haut et bas—ainsi que les directions diagonales.

Étape 4 - Voir les commandes : Ouvrez le Moniteur Série pour voir les commandes directionnelles interprétées en temps réel.

COM6
Send
COMMAND: MOVE UP COMMAND: MOVE UP, MOVE RIGHT COMMAND: MOVE RIGHT COMMAND: MOVE RIGHT COMMAND: MOVE DOWN, MOVE RIGHT COMMAND: MOVE DOWN COMMAND: MOVE DOWN, MOVE LEFT COMMAND: MOVE LEFT COMMAND: MOVE LEFT COMMAND: MOVE UP, MOVE LEFT COMMAND: MOVE UP
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Note:

Comprendre la sortie des commandes : Selon la position du joystick, vous pouvez voir aucune commande (position centrale/neutre), une seule commande (direction cardinale pure), ou deux commandes simultanées (mouvement diagonal comme HAUT + GAUCHE ou BAS + DROITE). C'est parfaitement normal et représente la capacité de positionnement 2D continu du joystick.

Idées d'application : Cette approche basée sur les commandes est parfaite pour la navigation de robot, le mouvement de personnage dans les jeux, la navigation de menu, ou toute application où vous avez besoin d'instructions directionnelles discrètes plutôt que de valeurs analogiques brutes.

Convertit les valeurs analogiques en angles pour contrôler deux servomoteurs

Cet exemple avancé démontre l'une des applications de joystick les plus populaires : contrôler un support de caméra panoramique-inclinaison ou un bras robotique en utilisant deux servomoteurs ! L'axe X contrôle le panoramique horizontal, tandis que l'axe Y contrôle l'inclinaison verticale. Pour un tutoriel complet et détaillé avec code et diagrammes de câblage, voir notre tutoriel dédié Arduino Mega - Joystick Servo Motor.

Vidéo

Références de fonctions

Tutoriels connexes

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !