Souris contrôlée par joystick Arduino : Navigation précise du curseur
Composants et fournitures
| Arduino UNO | × | 1 |
| Joystick à double axe | × | 1 |
Applications et services en ligne
- Arduino IDE
- IDLE (interface graphique Python)
À propos du projet
En alternative au contrôle du curseur de l'ordinateur via une souris ou un pavé tactile, j'ai réalisé cette application à l'aide d'un joystick. Le joystick permet de déplacer le curseur dans toutes les directions (axes X et Y) et d'effectuer la fonction de clic grâce à son bouton poussoir intégré.
Principes de base
Un joystick est constitué de deux potentiomètres alignés sur les axes X et Y. L'Arduino lit des valeurs analogiques comprises entre 0 et 1023. Lorsque le joystick est en position centrale (repos), la valeur analogique se situe autour de 500.

Le programme Arduino est conçu pour que lorsque le joystick s'éloigne du centre, il renvoie des valeurs comprises entre -sensibilité et +sensibilité (valeur par défaut : 10) selon la position. Ainsi, en position extrême dans un sens, la valeur est 10 ; dans l'autre sens, -10.
Pour distinguer les axes X et Y, les valeurs sont séparées par le caractère :. Exemple : 5:-3:0.
L'état du bouton du joystick (SW) est affiché (1/0) sur le moniteur série après les valeurs X et Y.
Pour que l'ordinateur exploite ces données, nous utiliserons le module Python mouse (anciennement pyautogui).
Programmation Python
(Mise à jour du 11/12/2020 : remplacement de la bibliothèque pyautogui par mouse)
Python 3 doit être installé sur votre ordinateur. Téléchargez-le ici.
Après l'installation, copiez le chemin d'accès au dossier d'installation de Python.

Effectuez les étapes suivantes dans l'invite de commandes :
cd <collez le chemin du dossier Python>py -m pip install --upgrade pippy -m pip install mousepy -m pip install pyserial
Le module mouse gère les actions de la souris, tandis que pyserial assure la communication série avec l'Arduino.

Le script Python lit les données envoyées par l'Arduino, extrait les valeurs X, Y et l'état du bouton (SW).
La position actuelle du curseur est obtenue via mouse.get_position() (coordonnées en pixels).
Lorsque le joystick est actionné, les valeurs analogiques de l'Arduino sont ajoutées à la position courante pour déplacer le curseur : mouse.move(X+x, Y+y).
Exemple : mouse.moveTo(100,150) place le curseur à 100 px sur l'axe X et 150 px sur l'axe Y.
Pour le clic, on utilise mouse.click(button="left") lorsque le bouton SW est pressé (valeur 1).
Exécution finale
- Téléversez le code Arduino (ci-dessous) sur votre Arduino UNO et branchez le joystick selon le schéma.
- Vérifiez que les modules
mouseetpyserialsont installés. - Copiez le script Python dans un fichier texte, indiquez le bon port COM de l'Arduino (via le Gestionnaire de périphériques), puis enregistrez-le avec l'extension
.py. - Ouvrez le fichier avec IDLE (Python GUI) et exécutez le module (F5).
- Si des erreurs apparaissent, redémarrez IDLE et vérifiez le port COM.
- Sans erreur, bougez le joystick : le curseur suivra vos mouvements.





Code
Code Arduino
//////////////////////////////// // Joystick controlled mouse/// /// by Shubham Santosh//////// ///////////////////////////// void setup() { Serial.begin(9600); pinMode(9,INPUT); // SW pin digitalWrite(9,HIGH); } int prev_state=0; // previous state of switch void loop() { int z=0,xpos=0,ypos=0; int x=analogRead(A0); int y=analogRead(A1); int sensitivity=10; // you can adjust the sensitivity based on your comfort if(x>=550) // when moved up xpos=map(x,550,1023,0,sensitivity); if(x<=450) // when moved down xpos=map(x,450,0,0,-sensitivity); if(y>=550) // when moved right ypos=map(y,550,1023,0,sensitivity); if(y<=450) // when moved left ypos=map(y,450,0,0,-sensitivity); int curr_state=digitalRead(9); if(curr_state==1 && prev_state==0) // when SW is pressed z=1; else z=0; if(xpos!=0 or ypos!=0 or z==1) // prints only when the joystick is moved { Serial.print(xpos); // print the data and separating by ":" Serial.print(":"); Serial.print(ypos); Serial.print(":"); Serial.println(z); } prev_state=curr_state; delay(10); // for normal operation }
Code Python
# Joystick controlled mouse # By Shubham Santosh # last edited 12/11/2020 import mouse, sys import time import serial mouse.FAILSAFE=False ArduinoSerial=serial.Serial('com3',9600) #Specify the correct COM port time.sleep(1) #delay of 1 second while 1: data=str(ArduinoSerial.readline().decode('ascii')) #read the data (x,y,z)=data.split(":") # assigns to x,y and z (X,Y)=mouse.get_position() #read the cursor's current position (x,y)=(int(x),int(y)) #convert to int mouse.move(X+x,Y-y) #move cursor to desired position if '1' in z: # read the Status of SW mouse.click(button="left") # clicks left button
Schémas

Processus de fabrication
- L'Évolution de la Souris d'Ordinateur : Design, Fabrication et Tendances Futures
- Ventilateur à contrôle de température : système relais DIY pour refroidissement meuble multimédia
- Système aquaponique piloté par Raspberry Pi : guide de construction et code
- Construire un bouton IoT AWS contrôlé par mouvement avec Raspberry Pi, capteur PIR et MQTT
- Construire un robot Raspberry Pi piloté par Bluetooth avec retour audio
- Construire un robot Raspberry Pi piloté Wi-Fi avec Python – Guide pas à pas
- Démo ARDrone 2.0 contrôlé par Alexa : Drone activé vocalement avec Raspberry Pi & Hologram Nova
- Transformez une vieille voiture RC en véhicule piloté au joystick avec Arduino
- Alliage FeNi42 : Faible dilatation thermique pour joints de précision