Hack d’un joystick avec une arduino leonardo

Bon alors voila. J’ai ressortie d’un placard un vieux joystick analogique qui à appartenu à mon père. Il s’agit d’un Quickshot de Spectravideo (fig. 1).

Ce joystick se branche sur un port joystick ( étonnant ! ) 15 pin analogique qui n’existe plus sur nos ordis moderne. N’ayant pas d’ordinosaure en fonction je me suis dit qu’il était temps de redonner une jeunesse à ce sympathique objet.

Donc première étape l’ouverture, il faut savoir ce qu’il à dans le ventre et ce que l’on peut en faire.

A ma grande surprise il s’agit de quelque chose de très simple. Trois transistor, sept résistances et deux condensateurs, je ne m’attendais pas à si peu de composants (fig. 2). En même temps comme c’est de l’analogique j’aurais du y penser.

  

Les commandes sont tout aussi rustiques. Les deux potard linéaires sont montés en résistances variable (fig. 3) et les switchs sont en directe sur les sorties (fig. 4).

Le but est de rendre ce truc utilisable avec un arduino. Il va donc falloir améliorer un peut tous ça. En gros le seul aspet utilisable c’est la mécanique. Le reste on va devoir le refaire. Faites chauffer les fers à souder !

Je précise que le petit bricolage que je vais maintenant décrire est irréversible. Ce n’est pas forcement la seule ni la meilleurs solution pour réhabilité ce joystick. Réfléchissez donc bien avant de vous lancer.

En ce qui concerne la difficulté du projet elle est moindre et si vous savez vous servir d’un fer à souder tous devrais bien se passer.

Bon notre joystick ainsi éventrer il ne reste plus qu’à passer à l’action.

Il y a deux étapes principales dans ce projet. La première sera de rendre utilisable les boutons, la deuxième le joystick lui même.

Pour l’ensemble du projet vous aurez besoin de :

– un fer à souder

– une paire de ciseaux

– de l’étain d’électronique

– deux résistances de 10 kilo-ohms

– du fil électrique fin

– une carte arduino (ou équivalent) d’un modèle standard ( uno, leonardo, duemilanove…)

– le logiciel arduino correctement installer et près à servir

I Les boutons

D’abord un petit rappel sur l’arduino et les boutons poussoirs. Pour connaître l’état logique d’un bouton ( appuyer ou relacher ) il faut que le bouton soit connecter d’une part à une pin digital et d’autre part à l’une des bornes de la carte (+5V ou GND). Mais ça ne suffit pas. Il faut aussi que le coté connecté à la pin digital soit maintenu dans un état logique. Pour cela on utilise une résistance de pull-down (si le bouton est connecté au +5V) ou de pull-up (si le bouton est connecté au GND). Cette résistance doit se placer entre la pin digital et l’autre borne de la carte. Le problème c’est que le joystick ne possède pas de tel système. On va donc le faire. Ici j’ai choisi d’utiliser une résistance de pull-down. Celle-ci va maintenir la pin en état bas ( LOW ) tant que le bouton sera relâcher. Quand on appuiera sur le bouton la pin passera en état haut ( HIGH ).

Ces résistances de pull-down, ferons 10 kilo-ohms et relierons le centre des boutons à la masse (fig. 5)  

En ce qui concerne le système « auto fire » qui est la seul raison d’être des quelques composants de ce joystick, on ne vas pas s’en servir. Je pense que en plus de ne servir à rien ça ne facilite pas l’utilisation du joystick par la carte. Je vous conseil vivement de dessouder l’ensemble des composants en dehors des trois fils reliées au potards et des switchs. Les trous libérées rendrons le montage des résistances plus simple, et de toute façon on ne laisse pas des composants inutiles sur une carte pour éviter de parasiter le fonctionnement normale du joystick.

Pour dessouder les composants il suffit de faire fondre l’étain avec le fer et de tirer sur le composants avec une PINCE ( sauf si vous ne craigniez pas les cloques ). Vous pouvez aussi utiliser une pompe à dessouder ou de la tresse à dessouder mais ce n’est pas indispensable.

Le résultat pour moi : fig. 6

Maintenant que la voie est libre il faut souder les résistances. Pour le switch de droite je l’ai enficher dans un trous d’une piste liée à la masse et je l’ai souder sous le plot centrale du switch (fig. 7)

  

Pour le switch de guache c’étais un peut plus compliquer. Je ne pouvais pas souder sous le plot car la carte repose sur un support en plastique etre les deux switchs. Il à donc fallu ruser.

La solution consiste à dévernir la piste avec un cutter pour souder en surface. Nettoyer bien la piste en raclant avec le cutter jusqu’à ce que le cuivre apparaisse bien brillant. Après il suffit de poser la patte de la résistance dessus et de souder (fig. 8). Faites-le un peut plus près du bord de la carte que moi, ça touche encore un peut le support plastique. Mais rien de bien gênant. Pour l’autre coté j’ai utiliser un trous qui n’étais pas relier à la masse mais j’ai fait un pont en étain vers une piste qui y était relié (fig. 8).

Pour finir il faut relier l’autre coté des switchs au +5V. Là rien de compliquer, ils sont déjà relié entre eux et les possibilitées ne manque pas. Il faut juste un petit bout de fil que l’on soude d’une part dans le trous le plus proche du +5V (le fil vert) et d’autre part sur le switch de droite. Je l’ai soudé sous la structure du switch (fig. 8) mais vous pouvez le souder à la surface de la piste qui est bien large.

Voilà après ça la carte est prette. Maintenant on s’occupe des potards.

II Les potards

Comme je l’ai dis plus hauts les potards sont montés en résistance variable. C’est à dire qu’on à souder un fil à chaque bout et puis basta. Mais une carte arduino c’est pas un ohmmètre et ce type de montage je ne sais pas m’en servir avec une arduino ( pour ce que j’en sais, c’est même pas possible ). La solution va consister à recâbler correctement les potards pour les rendre lisible par la carte.

Un potentiomètre est équipé de trois pattes. Une patte doit être relié à la masse ( GND ), une autre au +5V et la troisième à une pin analogique de la carte. Il y a entre les pattes que l’on relie à la masse une résistance forte et fixe. La troisième patte à une résistance variable avec chacune des deux autre pattes. Quand on fait augmenter la résistance entre la patte commune et l’une des deux autre, la résistance entre la patte commune et l’autre diminue. La tension à la patte varie entre 0 et 5V en fonction de la résistance entre elle et les deux autres pattes. C’est cette tension que la carte mesure.

Sur ces potards, la patte commune est la patte la plus de droite du extérieur du coté ou il y en à deux. On va câbler ces pattes aux câbles correspondants et on va relier les deux autres deux à deux à la masse et au +5V.

Le fil noir on ne va pas y toucher, il est à sa place.

D’abord on va replacer le fil jaune. Décrochez le du coté du potard et soudez le au bout à droite du potentiomètre X (fig. 9).

À gauche du potentiomètre Y, il y à deux câble. L’un est relié à la carte, on le laisse. L’autre est relié à la patte centrale du potard X. Celui la on va le sortir. À la place on va en souder un autre, qui va relié les pattes gauche de chaque potentiomètre. Ensuite on relie les pattes centrales des deux potars. Pour finir souder un fil sur la patte centrale du potard Y et souder le dans l’un des trous de la carte relié à la masse.

Et voilà il ne reste plus qu’a refermer le joystick.

III Finalisation

Pour finir il nous faut un petit programme arduino qui récupérera les données pour les utiliser. Le programme est très simple :

const int s1 = 0, s2 = 1, x = A0, y = A1;

// entier : bouton 1, bouton 2, axe X, axe Y

// Fonction d'initialisation

void setup()

{

pinMode(s1, INPUT);// pins des boutons : entrées

pinMode(s2, INPUT);

Serial.begin(9600);// initialisation de la communication série

}

// Boucle principale

void loop()

{

// Sur la même ligne :

Serial.print("s1 : ");

Serial.print(digitalRead(s1));// état de s1

Serial.print("; s2 : ");

Serial.print(digitalRead(s2));// état de s2

Serial.print("; x : ");

Serial.print(analogRead(x));// valeur de x (0-1023)

Serial.print("; y : ");

Serial.print(analogRead(y));// valeur de y (0-1023)

Serial.print("\n");// retour à la ligne

delay(500);// une pause pour pouvoir lire en milliseconde

}

À partir de cette structure on peut créer n’importe qu’elle syntaxe de communication pour transmettre les données à l’ordi. Avec un langage de programmation vous pouvez faire une interface qui receptionne les infos et les traites.

Si vous posséder une carte arduino leonardo ou équivalent vous pouvez également faire passer la carte pour un joystick. Pour cela c’est assez simple. Téléchargez ce dossier et placez son contenu dans le dossier [dossier arduino]/hardware/arduino/cores/arduino. Je vous conseille de faire une copie des fichiers d’origine au cas ou vous en auriez besoin.

Ensuite compiler le code suivant :

const int s1 = 0, s2 = 1, x = A0, y = A1;

JoyState_t joySt;

void setup()
{
pinMode(s1, INPUT);
pinMode(s2, INPUT);
Serial.begin(9600);

joySt.xAxis = 0;
joySt.yAxis = 0;
joySt.zAxis = 0;
joySt.xRotAxis = 0;
joySt.yRotAxis = 0;
joySt.zRotAxis = 0;
joySt.throttle = 0;
joySt.rudder = 0;
joySt.hatSw1 = 0;
joySt.hatSw2 = 0;
joySt.buttons = 0;
}

void loop()
{
joySt.buttons = digitalRead(s1) + (digitalRead(s2) << 1);
joySt.xAxis = int(analogRead(x)/4);
joySt.yAxis = int(analogRead(y)/4);
Joystick.setState(&joySt);
}

Lorsque votre arduino se lancera elle sera vu par l’ordi comme un joystick à 32 boutons et vous pourrez vous en servir dans tous les jeux qui acceptent un joystick.

En ce qui concerne ce dernier aspect, j’ai trouvé la méthode et les fichiers ici : http://www.imaginaryindustries.com/blog/?p=80

Voilà il n’y à plus qu’a inventé une utilisation à ce joystick.

N’hésiter pas à laisser vos avis et critiques, ainsi que vos retours si vous réaliser à votre tour ce bricolage sur ce joystick ou un autre semblable.

Publicités

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