Différences entre versions de « Projets:JimStick »

De wikilab
Ligne 158 : Ligne 158 :
  
 
===Programme===
 
===Programme===
Le programme utilisé pour le JimStick est disponible ici : [[:File:pc_m.zip]]
+
Le dernier programme utilisé pour le JimStick est disponible ici : [[:File:ms_pc_b.zip]]
 
+
Ce programme requiert l'installation de la librairie [https://www.arduino.cc/reference/en/libraries/ezbutton/ ezbutton]
Le programme requiert l'installation de la librairie [https://www.arduino.cc/reference/en/libraries/ezbutton/ ezbutton]
 
  
 
  // parameters for reading the joystick:
 
  // parameters for reading the joystick:

Version du 15 février 2023 à 16:03

Description du projet

Le but de ce système est de rendre possible la commande d'un téléphone (via un câble OTG) ou d’un ordinateur a une personne ne pouvant pas utiliser ses mains. Pour cela nous réalisons un système qui sera considéré par l’appareil comme une souris et qui est composé de trois parties :

   • une boîte contenant quatre boutons,
   • un joystick,
   • une boîte contenant un microcontrôleur.

Cahier des charges

Les besoins identifiés pour ce projet sont :

  • Utilisation d'un smartphone ou d'un ordinateur sans souris
  • Système facilement transportable
  • Système modulable


L'architecture choisie afin de satisfaire ces besoins a été l’utilisation d’un joystick afin de contrôler le déplacement de la souris, ainsi que 4 boutons dont les fonctions sont :

  • un appui sur le bouton gauche en mode clic génère un clic gauche souris, voir plus loin dans le cas du mode appuyer
  • un appui sur le bouton droit, idem précédemment mais pour la version de droite.
  • un appui sur le bouton molette, bascule entre le mode déplacement souris et le mode molette.
  • un appui sur le bouton appuyer, bascule entre le mode appuyé et relâché


Cet ensemble est fixé devant un écran ou un support téléphone dans « un support type Tableau magnétique», avec sur le côté gauche une boîte composé de quatre boutons lumineux, puis sur le côté droit un joystick muni d’un manche adapté (U). Et enfin pour connecté ces deux éléments (les boutons et le joystick) au milieu la boîte avec le microcontrôleur, elle même connecté à l’ordinateur.

Schema.png

Analyse de l'existant

https://handicat.com/at-num-28697.html

[[1]]

Equipe (Porteur de projet et contributeurs)

  • Porteurs du projet : Jimmy, Amaury
  • Concepteurs/contributeurs : David Z, Thibaut, Michel M
  • Fabmanager référent : Yohann

Matériel nécessaire

Outils nécessaires

Coût

 ~15 euro

Délai estimé

4 heures

Etapes de fabrication pas à pas

Le schéma

File:JimStick.pdf

Boutons de commande

Il faut réaliser 4 boutons de commande afin d'accomplir toutes les fonctions d’une souris Chaque bouton sert pour effectuer une action. Les deux boutons ‘gauche’ et ‘droit’ permettent de simuler un appui souris. Le troisième permet d’utiliser l’axe y du joystick pour simuler la molette. Le quatrième permet enclencher le mode appuyer/relâcher pour simuler un appui long

Les boutons choisis sont des boutons d'arcade équipés d’une diode lumineuse et d’un interrupteur. La diode est branché en série avec une résistance (220Ω). Ces boutons sont reliés à 4 connecteurs 3,5 mm et ces connecteurs se trouve sur le coté droit de la boîte, positionné de façon à ne pas gêner les boutons.

Les boutons choisis sont des boutons d’arcade possédant une LED à l’intérieur. Chacun des 4 boutons doit être soudé à un connecteur jack. Les deux masses doivent être reliées au S, La sortie LED 5V doit être soudé à une résistance 220Ω puis au T du jack. Enfin le contact sec doit être relié au R. Le montage à réaliser est le suivant : Bouton montage1.png

Jack b.jpg

Les boitiers des boutons sont modélisés en 3D, voici quelques exemples de boitiers possibles : File:box_boutons.zip IMG 20220607 143117.jpg

Le joystick

Le joystick est muni d’un manche adapté (U), les deux potentiomètres (axe X et Y) sont relié à deux connecteurs 3,5 mm.

Joystick U.png

Jack axe: pointe = en série avec une résistance puis connecté au plus. milieu = la valeur est fonction de la position base = masse

L’axe X est branché sur l’entrée A0. L’axe Y est branché sur l’entrée A1. Joystick montage3.png
Le boitier du joystick est modélisé en 3D, voici un exemple de boitier possible : File:box_joystick.zip

Le déplacement du joystick est découpé en trois zones. Dans la zone du milieu même si les valeurs mesurées du joystick change dans une certaine limite, la souris elle ne se déplace pas. Dans les zones de chaque cotés, la position de la souris évolue (ex:512+100>1..5).

Microcontrôleur

La boîte contient un microcontrôleur permettant de simuler une souris ainsi qu’un buzzer, elle est relié à l’ordinateur via un câble USB.


Ces deux éléments sont connecté via 6 (4+2) connecteurs (jack 3,5 mm, 3 fils) à une carte (Arduino micro) qui est elle même connecté via un câble USB type a mâle à un port USB de l’ordinateur.

Cas d’utilisation :

  • un appui sur le bouton gauche en mode clic génère un clic gauche souris, voir plus loin dans le mode appuyer
  • un appui sur le bouton droit, idem précédemment mais pour la version droite.
  • un appui sur le bouton molette, bascule du mode déplacement souris en mode molette.
  • un appui sur le bouton appuyer, active le mode appuyé/relâché

un premier appui sur le bouton génère le début d’un clic long, Un second appui sur le même bouton génère le relâchement du clic (équivalent).


Fonction Couleur Entrée Sortie
Bouton Gauche Rouge D5 D8
Bouton Droit Vert D4 D10
Molette Jaune D3 D11
Appuyer Bleu D2 D12
Piedzo D9
Axe X A0
Axe Y A1

Le boitier du microcontrôleur est découpé à la laser, voici un exemple de boitier possible : File:box_arduino.zip.

Programme

Le dernier programme utilisé pour le JimStick est disponible ici : File:ms_pc_b.zip Ce programme requiert l'installation de la librairie ezbutton

// parameters for reading the joystick:
const int center        = 1024 / 2;          // resting position value
const int threshold_min = center-30;         // min resting threshold
const int threshold_max = center+30;         // max resting threshold
      if ((axisPosition > threshold_min)&&(axisPosition < threshold_max))  { ret = 0; }
 else if (axisPosition>threshold_max)     { ret =  (axisPosition-threshold_max)/50; }
 else if (axisPosition<threshold_min)     { ret = -(threshold_min-axisPosition)/50; }