- Conditions préalables
- Schéma
- Flux de processus pour la souris Air
- Programmation de l'Arduino pour Air Mouse
- Script de pilote Python
- Test de la souris Arduino Air
Jamais demandé comment notre monde évolue vers la réalité immersive. Nous trouvons continuellement de nouvelles façons et méthodes pour interagir avec notre environnement en utilisant la réalité virtuelle, la réalité mixte, la réalité augmentée, etc. De nouveaux appareils sortent chaque jour avec ces technologies rapides pour nous impressionner par leurs nouvelles technologies interactives.
Ces technologies immersives sont utilisées dans les jeux, les activités interactives, les divertissements et de nombreuses autres applications. Dans ce tutoriel, nous allons connaître une telle méthode interactive qui vous offre une nouvelle façon d'interagir avec votre système au lieu d'utiliser une souris ennuyeuse. Nos geeks de jeux doivent savoir qu'il y a quelques années, Nintendo, une société de jeux, vend une idée d'une méthode interactive 3D pour interagir avec leurs consoles à l'aide d'un contrôleur portable connu sous le nom de contrôleur Wii. Il utilise l' accéléromètre pour localiser vos gestes pour un jeu et les envoyer au système sans fil. Si vous souhaitez en savoir plus sur cette technologie, vous pouvez consulter leur brevet EP1854518B1, cela vous donnera une idée complète du fonctionnement de cette technologie.
Inspiré par cette idée, nous allons créer une "souris à air", pour interagir avec les systèmes simplement en déplaçant la console dans les airs, mais au lieu d'utiliser des références de coordonnées en 3 dimensions, nous n'utiliserons que des références de coordonnées en 2 dimensions. on peut imiter les actions de la souris d'ordinateur puisque la souris fonctionne en deux dimensions X et Y.
Le concept de cette souris Air 3D sans fil est très simple, nous utiliserons un accéléromètre pour obtenir la valeur de l'accélération des actions et des mouvements de la «souris Air» le long des axes x et y, puis en fonction des valeurs de l'accéléromètre, nous contrôlerons le curseur de la souris et effectuerons certaines actions à l'aide des pilotes logiciels python exécutés sur l'ordinateur.
Conditions préalables
- Arduino Nano (tout modèle)
- Module d'accéléromètre ADXL335
- Module Bluetooth HC-05
- Boutons poussoir
- Ordinateur installé en Python
Pour en savoir plus sur l'installation de python sur un ordinateur, suivez le tutoriel précédent sur le contrôle des LED Arduino-Python.
Schéma
Pour contrôler votre ordinateur avec les mouvements de votre main, vous avez besoin d'un accéléromètre qui donne l'accélération le long des axes X et Y et pour rendre l'ensemble du système sans fil, un module Bluetooth est utilisé pour transférer le signal sans fil vers votre système.
Ici, un accéléromètre ADXL335 est utilisé, il s'agit d'un module à trois axes basé sur MEMS produisant l'accélération le long des axes X, Y et Z, mais comme indiqué précédemment pour contrôler la souris, nous n'aurions besoin que de l'accélération le long des axes X et Y. En savoir plus sur l'utilisation de l' accéléromètre ADXL335 avec Arduino avec nos projets précédents:
- Système d'alerte d'accident de véhicule basé sur Arduino utilisant le GPS, le GSM et l'accéléromètre
- Jeu de ping-pong utilisant Arduino et accéléromètre
- Robot contrôlé par geste de la main basé sur un accéléromètre utilisant Arduino
- Alarme de détecteur de tremblement de terre utilisant Arduino
Ici, les broches Xout et Yout de l' accéléromètre sont connectées aux broches analogiques, A0 et A1 d'Arduino et pour transmettre les signaux de l'Arduino au système, le module Bluetooth HC-05 est utilisé ici, car le Bluetooth fonctionne sur le Tx et le Rx connexions de broches, nous utilisons donc les broches série logicielles D2 et D3. Il est connecté à l'aide de la série logicielle car si nous connectons le Bluetooth à la série matérielle et commençons à obtenir les lectures sur la console python, il afficherait des erreurs pour le débit en bauds de discordance car le Bluetooth communiquerait avec le python sur son propre débit en bauds. En savoir plus sur l'utilisation du module Bluetooth en passant par divers projets basés sur Bluetooth à l'aide de différents microcontrôleurs, y compris Arduino.
Ici, nous avons utilisé trois boutons poussoirs - un pour déclencher la souris Air, et deux autres pour le clic gauche et droit comme indiqué dans l'image ci-dessous:
Flux de processus pour la souris Air
L'organigramme montre le flux de processus de Air Mouse basé sur Arduino:
1. Le système vérifie en permanence si la gâchette mécanique doit être enfoncée jusqu'à ce qu'elle ne soit pas enfoncée, nous pouvons travailler normalement avec la souris de l'ordinateur.
2. Lorsque le système détecte une pression sur un bouton, le contrôle de la souris est transféré à la souris aérienne.
3. Lorsque le bouton de déclenchement est enfoncé, le système commence à transférer les lectures de la souris vers l'ordinateur. La lecture du système se compose des lectures de l'accéléromètre et des lectures pour le clic gauche et droit.
4. Les lectures du système se composent du flux de données de 1 octet ou 8 bits, dans lequel les trois premiers bits sont constitués des coordonnées X, les trois autres bits sont constitués des coordonnées Y, le deuxième dernier bit est le bit d'état pour obtenir l'état du clic gauche de la souris et le dernier bit est le bit d'état pour obtenir l'état du clic droit.
5. La valeur des trois premiers bits, c'est-à-dire la coordonnée X, peut aller de 100 <= Xcord <= 999, tandis que la valeur de la coordonnée Y peut aller de 100 <= Ycord <= 800. Les valeurs du clic droit et du clic gauche sont les valeurs binaires 0 ou 1 dans lesquelles 1 indique que le clic a été effectué et 0 que le clic n'est pas effectué par l'utilisateur.
6. Pour ne pas laisser le rebond du bouton affecter la position du curseur, un délai connu de 4 secondes est conservé après chaque clic du bouton de déclenchement de la souris.
7. Pour le clic droit et gauche dans la souris aérienne, nous devons d'abord appuyer sur le bouton-poussoir gauche ou droit, et après cela, nous devons appuyer sur le bouton de déclenchement pour nous déplacer vers la position de la souris aérienne où nous voulons.
Programmation de l'Arduino pour Air Mouse
L'Arduino doit être programmé pour lire les valeurs d'accélération sur les axes X et Y. Le programme complet est donné à la fin, ci-dessous sont les extraits importants du code.
Configuration des variables globales
Comme indiqué précédemment, nous allons connecter le module Bluetooth aux broches série du logiciel. Donc, pour définir la série du logiciel, nous devons déclarer la bibliothèque de la série du logiciel et configurer les broches pour Tx et Rx. Dans Arduino Nano et Uno, les broches 2 et 3 peuvent fonctionner comme une série logicielle. Ensuite, nous déclarons l'objet Bluetooth de la bibliothèque série logicielle pour configurer la broche pour le Tx et le Rx.
#comprendre
Void setup()
Dans la fonction de configuration , nous allons définir les variables pour dire au programme si elles agiront comme entrée ou sortie. Le bouton de déclenchement serait configuré comme pull-up d'entrée, et les clics gauche et droit sont déclarés en tant qu'entrée et configurés comme High pour les faire agir comme des pullups d'entrée.
Réglez également le débit en bauds pour la communication série et Bluetooth sur 9600.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (déclencheur, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, sortie); digitalWrite (cliquez sur, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Boucle vide ()
Comme nous aurions besoin bouton de déclenchement de dire quand nous avons besoin d'envoyer le système, le flux de données, nous avons donc mis en place tout le code à l' intérieur du tout en boucle qui surveillera en permanence l'état numérique de la gâchette de pull-up, car il va bas, il passez-le plus loin pour le traitement.
Comme nous l' avons joint une LED pour nous faire connaître l'état du système lorsque le bouton de déclenchement est pressé, nous avons mis d' abord le conduit à faible en dehors du tout en boucle comme état de défaut et élevée à l' intérieur en boucle qui allume la led chaque fois que le bouton de déclenchement est enfoncé.
Pour lire l'état des boutons de clic gauche et droit, nous avons globalement déclaré deux variables lclick et rclick dont les valeurs étaient initialement définies sur 0.
Et dans la boucle , définissez la valeur de ces variables en fonction de l'état numérique des boutons de clic gauche et droit pour vérifier si les boutons sont enfoncés ou non.
Nous lirions les valeurs des broches X et Y out de l'accéléromètre à l'aide de la fonction analogRead et mapperions ces valeurs à la taille de l'écran pour que le pointeur de la souris se déplace sur tout l'écran. Étant donné que la taille de l'écran correspond aux pixels de l'écran, nous devons la configurer en conséquence et comme nous avons besoin que la valeur de sortie soit à trois chiffres, nous avons délibérément défini la plage pour le X comme 100 <= X <= 999 et de même le valeur pour Y comme 100 <= Y <= 800. N'oubliez pas que les pixels sont lus depuis le coin supérieur gauche, c'est-à-dire que le coin supérieur gauche a la valeur (0,0), mais puisque nous avons déclaré trois chiffres pour le x et le y, nos valeurs seraient lues à partir du point (100,100).
En outre, imprimez la valeur des coordonnées et l'état du clic sur le numéro de série et Bluetooth à l'aide des fonctions Serial.print et bluetooth.print , elles aident à obtenir les valeurs sur le moniteur série et sur votre système via Bluetooth.
Enfin, en raison du rebond d'un bouton, une seule valeur peut être répétée, ce qui ferait s'attarder le curseur de la souris sur une seule position, donc pour s'en débarrasser, nous devons ajouter ce délai.
boucle vide () { digitalWrite (led, LOW); while (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lcliquez); rstate = digitalRead (rclick); xh = lecture analogique (x); yh = analogRead (y); xcord = carte (xh, 286 429 100 999); ycord = carte (yh, 282 427 100 800); Serial.print (xcord); Serial.print (ycord); if (lstate == LOW) Serial.print (1); else Serial.print (0); if (rstate == LOW) Serial.print (1); else Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); autre bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); else bluetooth.print (0); retard (4000); }}
Script de pilote Python
À partir de maintenant, nous avons terminé avec le matériel et sa partie firmware, maintenant pour faire fonctionner la souris aérienne, nous devons avoir un script de pilote qui pourrait décoder les signaux de la souris aérienne dans les mouvements du curseur, donc pour cela, nous avons choisi Python. Python est un langage de script et par script ici, nous voulons dire qu'il nous aide à prendre le contrôle de l'autre programme, car ici nous contrôlons le curseur de la souris.
Alors ouvrez votre shell python et installez les bibliothèques suivantes à l'aide des commandes ci-dessous:
pip installer série pip installer pyautogui
La série est une bibliothèque pour python qui nous aide à obtenir les données d'interfaces série telles que les ports com et nous permet également de la manipuler, tandis que pyautogui est une bibliothèque pour python permettant de contrôler les fonctionnalités de l'interface graphique, dans ce cas, la souris.
Passons maintenant au code des pilotes, la première chose à faire est d'importer les bibliothèques série et pyautogui, puis à partir de la bibliothèque série, nous devons définir le port com pour la communication avec un débit en bauds de 9600, le identique à Bluetooth.serial fonctionne à. Pour cela, vous devez connecter le module Bluetooth à votre système, puis dans les paramètres système, vous devez vérifier à quel port com est-il connecté.
La prochaine chose à faire est de lire la communication série du Bluetooth vers le système et de la maintenir en permanence, garder le reste du code dans une boucle continue à l'aide de while 1.
Comme indiqué précédemment, Arduino envoie 8 bits, 6 premiers pour les coordonnées et les deux derniers pour l'état des boutons de clic. Alors lisez tous les bits à l'aide de ser.read et configurez sa longueur à 8 bits.
Ensuite, divisez les bits pour les coordonnées du curseur et les clics en les découpant, puis découpez les bits du curseur en coordonnées X et Y séparément. Il en va de même pour le clic gauche et droit.
Maintenant, à partir de la communication, nous obtenons une chaîne d'octets et nous devons la convertir en entier afin qu'ils puissent tenir dans les coordonnées, nous le faisons en les décodant puis en les convertissant en entiers.
Maintenant, pour déplacer le curseur, nous utilisons la fonction pyautogui moveto , qui prend comme arguments ces coordonnées entières et déplace le curseur vers cette position.
Ensuite, vérifiez les clics, nous le faisons en utilisant les deux derniers bits et la fonction de clic de pyautogui, son clic par défaut est celui de gauche, mais nous pouvons le définir à droite en déclarant la valeur du bouton à droite, nous pouvons également définir le nombre de clics à réglez-le sur un double clic en définissant le paramètre clicks sur 2.
Vous trouverez ci-dessous le code Python complet à exécuter sur l'ordinateur:
import serial import pyautogui ser = serial.Serial ('com3', 9600) while 1: k = ser.read (8) cursor = k click = k x = curseur y = curseur l = click r = click xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) if l == 49: pyautogui.click (clicks = 2) elif r = = 49: pyautogui.click (bouton = 'droite', clics = 2)
Test de la souris Arduino Air
Donc, pour faire fonctionner la souris Air Mouse, connectez-y une source d'alimentation. Il peut provenir de la fente USB Arduino Nano ou de l'alimentation régulée 5v utilisant 7805 IC. Ensuite, exécutez le script du pilote python en définissant le port com auquel votre Bluetooth est connecté. Au fur et à mesure que le script s'exécute, vous verrez un délai dans le clignotement du Bluetooth, cela signifie qu'il est connecté à votre système. Ensuite, pour le faire fonctionner, cliquez sur le bouton de déclenchement et vous verrez que la position des coordonnées changerait et si vous voulez le clic gauche ou droit, appuyez d'abord sur le bouton-poussoir gauche ou droit et le bouton de déclenchement ensemble, vous verrez l'action du clic à un emplacement modifié du curseur.
Consultez la vidéo de travail détaillée ci-dessous.