Différences entre versions de « Projets:JimStick »
Ligne 158 : | Ligne 158 : | ||
===Programme=== | ===Programme=== | ||
− | Le programme utilisé pour le JimStick est disponible ici : [[:File: | + | 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] | |
− | |||
// 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.
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
- Arduino Micro
- 4 Boutons arcade
- 6 Connecteurs jack
- Joystick
Outils nécessaires
- Arduino Micro
- Câble micro vers type A femelle : Cable-adaptateur-Micro-vers-USB-type-A
- Suivant la connectique de votre appareil, téléphone etc. il faudra prendre un cvable Type A vers Type C pour les mobiles les plus récents. Cable type A vers Type C
Coût
~15 euro
Délai estimé
4 heures
Etapes de fabrication pas à pas
Le schéma
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 :
Les boitiers des boutons sont modélisés en 3D, voici quelques exemples de boitiers possibles : File:box_boutons.zip
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.
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.
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; }