Rares sont les asservissements qui n’ont pas besoin de dispositifs pour assurer le dialogue entre l’utilisateur et la machine. Cette dernière reçoit les consignes à travers divers périphériques de dialogue, objet de ce chapitre, réalise les actions qui en résultent et rend compte au moyen de technologies d’affichage, depuis la simple LED jusqu’aux écrans graphiques du chapitre précédent. Dans ce chapitre nous allons balayer l’éventail des périphériques de dialogue les plus courants.
Expérience 055 : Petit clavier à 16 touches.
Encore un clavier ! Yena ralbol des claviers, c’est quand qu’on va voir les moteurs ? Oui, vous avez un peu raison. Nous avons déjà passé en revue les claviers avec deux touches, trois touches, cinq touches. L’antiparasitage n’a plus de secret pour vous. Toutefois, il reste encore à voir comment traiter un clavier qui présenterait un grand nombre de touches par les techniques de multiplexage non encore abordées. Et comme les claviers sont fondamentaux, autant « évacuer » une fois pour toute ce domaine avant de passer à d’autres senseurs dédiés au dialogue H/M. (Personnellement, par courtoisie je préfèrerais « Dialogue Femme/Machine », mais l’expression « masculine » est la norme … et je suis un peu obligé de m’y tenir.)
Mobiliser seize entrées sur Arduino pour prendre en compte la présence d’un clavier n’est pas raisonnable car il ne resterait plus de broches d’E/S pour gérer les autres périphériques. Aussi, la solution « miracle » consiste à utiliser à nouveau le multiplexage, thème abordé avec P038 par exemple. Pour cette manipulation je vous propose le petit clavier du commerce montré sur la Fig.120 qui ne nous épargne pas la réalisation du petit circuit imprimé de la Fig.121 car il n’est pas équipé des résistances de limitation de courant, c’est à nous de les agencer. La Fig.122 résume les résultats obtenus. La Fiche n°38 et la Fiche n°39 fournissent les détails techniques du petit clavier. Enfin les photographies d’Image 018.JPG à Image 020.JPG présentent le circuit imprimé de complément. Pour tester Experience_055.ino il suffit de le téléverser, de brancher le clavier conformément à la Fig.121. Chaque touche cliquée
sera dénoncée sur le Moniteur de l’IDE à 57600 bauds.
Les techniques de multiplexage.
Omni présentes en électronique ou en logiciel de robotique de loisir, il me semble incontournable et raisonnable d’ouvrir ici une parenthèse et d’en détailler ici un minimum la technique générale. La Fiche n°16 en précise le principe de base pour un clavier. Cette technique s’applique également pour « matricer » des grilles de LEDs par exemple. Un exemple de gestion d’un clavier de 30 touches est disponible sur https://www.robot-maker.com/ouvrages/00-replique-materielle-denigma/
La Fiche n°40 et la Fiche n°41 en explicitent les détails de traitement matériel et logiciel.
Expérience 056 : Encodeur rotatif KY-040
C’est incontestablement le périphérique de dialogue à privilégier dans les applications devant gérer un ou des menus. Très populaire et facile à se procurer, le composant Keyes FZ0534 est un codeur rotatif sans butée particulièrement convivial. Il est décrit dans la Fiche n°25 avec précision sur la technique de codage binaire utilisée. Il permet une foule d’applications complexes, avec éventuellement un modeste clavier en complément. Le KY-40 est un codeur à 20 points par tour pourvu d’un « bouton poussoir » par appui sur la tige de commande qui permet d’envoyer une consigne de RAZ par exemple. La sortie se fait par deux lignes pilotées par des capteurs de type binaire. La Fig.122 donne le schéma des branchements à réaliser sur ARDUINO pour utiliser P056. Plusieurs démonstrateurs vont utiliser ce codeur rotatif KY-040 plus avant lors de notre promenade logicielle dans les autres chapitres.
Fonctionnement : Concrètement les trois sorties sont alimentées au +5Vcc par des résistances de 10 kΩ. La sortie SW est celle de l’inverseur piloté par appui sur la tige du rotor. Les deux sorties CLK et DT sont en réalité deux sorties classiques avec déphasage de 90° souvent nommées A et B pour ce type de capteur. Le déphasage de 90° électriques des signaux CLK et DT permet de déterminer le sens de rotation. (Voir Fig.123)
Expérience 057 : Potentiomètre sur RESET.
Lorsqu’une application impose la présence d’un potentiomètre branché sur une entrée analogique, on peut parfaitement s’en servir pour gérer un menu. Par exemple la technique consiste à définir une orientation préalable. Puis on clique sur un B.P. qui valide la fonction. Pour simplifier les branchements du démonstrateur Experience_057.ino on va se contenter de brancher le curseur d’un potentiomètre de 10kΩ sur A5 par exemple. Chaque fois que l’on cliquera sur le bouton de RESET d’ARDUINO un item du Menu de base sera activé. L’idée qui préside ce concept consiste comme montré par les gros points verts sur la Fig.124 à imprimer en façade des index pour six à 10 positions. (Pour la fiabilité du procédé ne pas exagérer le nombre d’index car la détermination des orientations deviendrait incertaine.) Par exemple avec P057 on va choisir six positions. La technique consiste à attribuer à chaque index un secteur angulaire dont les limites sont éloignées au maximum des positions voisines. Il suffit de placer la frontière du secteur à la « moyenne » des deux positions mitoyennes. Avec cette approche, même soufrant d’une très mauvaise coordination gestuelle, plaçant vaguement la flèche du bouton pas trop loin du point vert, on déclenche sans aucun problème l’activation de la fonction désirée. Valeurs obtenues :
Les valeurs coloriées en vert sont celles numérisées quand la flèche « pointe exactement l’index ».
Pour utiliser Experience_057.ino il suffit de le téléverser, de brancher un potentiomètre de 10kΩ sur l’entrée analogique A5. Puis, d’activer le Moniteur de l’IDE toujours à 57600 bauds et de faire des RESETS manuels. Pour chaque clic sur le B.P. d’initialisation du microcontrôleur la référence de l’index pointé sera affichée dans la fenêtre contextuelle du Moniteur.
Expérience 058 : Mini joystick à deux axes.
Autant un clavier ou un codeur rotatif sont conviviaux pour interfacer la machine et y consigner des commandes dans des menus, ou fournir des valeurs textuelles ou numériques, autant pour piloter des mouvements analogiques ces périphériques sont très incommodes. Dans de telles applications, un joystick s’impose. Celui de la Fig.125 est très courant, et pour une somme de l’ordre de 11€ ce jour on trouve des lots de cinq unités. Quand on appui sur le bouton de commande on dispose d’un bouton poussoir SW pour valider une quelconque fonction. ATTENTION : Ce contact n’a pas de résistance pour polariser au +5Vcc au repos. La Fiche n°42 détaille les caractéristiques de ce composant analogique. Le démonstrateur Experience_058.ino est d’une mise en œuvre élémentaire. Il suffit simplement de brancher le mini-manche comme indiqué sur la Fig.125, de téléverser le croquis et d’ouvrir le Moniteur de l’IDE initialisé à 57600baud. Le programme liste en permanence les conversions analogiques numériques obtenues sur l’axe X et sur l’axe Y. On constate alors les plages « mortes » indiquées dans la Fiche n°42.
Expérience 059 : Mini joystick et OLED.
Exercise de révision on associe le mini manche à un écran OLED de 1,3 pouce et on utilise l’interrupteur SW. Le programme trace un PIXEL aux coordonnées des CAN de X et de Y. Cliquer sur le bouton central SW fait afficher une page d’aide à l’opérateur pour orienter correctement le composant et observer sur l’écran des déplacements « naturels » du point lumineux en fonction de l’inclinaison du mini-manche. À mon sens ce joystick manque un peu de convivialité par la plage importante des zones mortes et par le manque de longueur du manche oscillant.
Expérience 060 : Commande analogique sans usure.
L’intégralité des commandes de type joystick qui utilise comme corps d’épreuve un potentiomètre présentent à mes yeux un inconvénient que je considère comme rédhibitoire : L’usure par frottement de la piste résistante. Le principe de tout potentiomètre consiste à réaliser une piste d’un matériau résistant circulaire ou linéaire. Un dispositif mécanique déplace un contact électrique en le faisant glisser sur la piste résistante. Hors, qui dit glissement dit frottement. Qui dit frottement implique usure. Aussi, si un tel potentiomètre est utilisé avec de très nombreux déplacements rapides, inévitablement il finira
par « cracher ». Aussi, dans un tel contexte personnellement j’opte pour une technologie inusable par usage d’une barrière optique interceptée par un masque (Came de forme étudiée.) qui va intercepter plus ou moins la lumière en fonction de la position de la commande. Ce dispositif peut être aussi bien linéaire que circulaire. Pour concrétiser le matériel de P060 on va utiliser une petite commande rotative dont le schéma Fig.128 dévoile la structure électrique. La barrière optique est constituée par une diode électroluminescente D qui éclaire une Cellule photorésistante. Sa résistance diminue quand l’éclairement augmente. La résistance R1 constitue avec la Cellule photo un diviseur résistant dont la tension U est directement branchée sur l’entrée de mesure analogique A0. Le courant dans la LED D est dosé par la valeur de R2. Choisir une valeur pour que la lumière émise soit assez intense et si possible un composant qui diffuse assez large. (Les divers fichiers relatifs àP060 sont tous rangés dans le dossier nommé <EXPERIENCE 60>.) En particulier y sont rangés six
photographies commentées présentant la réalisation matérielle du dispositif. Dans la pratique n’importe quelle Cellule photorésistante ordinaire conviendra. Il suffit de bien l’éclairer avec D. Puis vous téléversez Experience_060.ino, en tournant la commande, l’écran affiche comme sur la Fig.126 les paramètres de la numérisation. En fonction des limites de valeurs obtenues, il suffit ensuite d’aller modifier le croquis en tête de programme pour inscrire ces valeurs dans les constantes MINI et MAXI. Ce dispositif doit absolument être enfermé dans un petit boitier pour empêcher la lumière ambiante d’influencer la Cellule photorésistante. Pour vous proposer un exemple de construction d’un dessin avec cet afficheur OLED, lorsque l’on arrive à une valeur numérisée « limite », l’écran devient celui de la Fig.127 jusqu’à ce que l’on réajuste la commande.
Une présentation analogique comme celle de la Fig.126 engendre des difficultés logicielles :
1) La bibliothèque ne sait pas tracer des arcs de cercle d’ouverture quelconque.
2) Comment tracer les graduations linéaires aux angles espérés ?
3) Comment tracer l’aiguille dans un nombre de positions suffisant pour donner l’impression d’une rotation « continue » ?
C’est précisément pour vous proposer des solutions directement utilisables dans d’autres logiciels que j’ai opté pour ce mode de visualisation dans ce démonstrateur. Il peut s’avérer riche d’enseignement si vous en analysez les « instructions et les algorithmes spécifiques » qui chaque fois que l’on est confronté à des « trucs qui tournent » impose d’utiliser de la trigonométrie.
La bibliothèque accepte de tracer des cercles qui débordent du cadre d’affichage. On va donc décentrer le tracé de ce dernier vers le bas. Pour avoir le meilleur affichage possible le cercle sera de la plus grande taille possible compatible avec l’angle total à balayer. Les coordonnées du centre du cercle seront à X = 35 et Y = 35. (Valeurs en pixels.) Le rayon du cercle sera également de 35 PIXELs. Avec ces valeurs la zone visible ouvre bien pour l’angle de 300° avec toutefois un « aplatissement » vers le bas. (Zone en médaillon rouge sur la Fig.126) Pour des raisons esthétiques ces discontinuités sont comblées par deux petits segments horizontaux dans le médaillon rouge.
L’allure globale de l’écran d’affichage présente quelques subtilités qui ne sautent pas aux yeux. Par exemple le caractère degré angulaire ‘°’ n’existe pas, ou du moins si on tente de l’afficher, il est alors précédé du caractère ‘A‘. Du coup, ce caractère « degré » est construit par écriture de quatre PIXELs. Pour simplifier le logiciel, ses coordonnées d’affichages sont constantes. Du coup, pour ne pas être « écrasé » si l’angle dépasse 99°, il est comme sur la Fig.126 décalé d’un caractère pour les valeurs angulaires à deux chiffres. Le démonstrateur Experience_060.ino prouve que l’on peut tracer les vecteurs représentant l’aiguille tous les degrés entre les deux graduations limites. Visuellement c’est largement suffisant, inutile de calculer avec plus de précision angulaire, d’autant plus que ce type de cadran analogique est fait pour être consulté d’un peu loin ou rapidement. Dans ce contexte le degré est suffisant, une précision plus grande exigerait une définition plus importante de l’afficheur. La trigonométrie n’est pas forcément le point fort du programmeur de loisir. Aussi, pour éviter d’alourdir cet exposé, vous trouverez dans <EXPERIENCE 60> un petit fascicule technique nommé Aspects logiciels.pdf qui détaille le plus simplement possible les détails de programmation liés à la « géométrie des angles » et aux « trucs qui tournent ».
La suite est ici.