Utilisation en externe de +U continue variable.

Innombrables sont les applications Arduino pour lesquelles une entrée analogique recevant une tension variable issue d’un potentiomètre utilise cette dernière pour piloter « linéairement » un quelconque processus. Doublez la mise et vous avez un joystick. Brancher un potentiomètre entre la masse GND et le +5Vcc n’a rien de bien compliqué en sois. Par contre, les mini potentiomètres sans axes placés sur une platine d’essais n’ont rien de convivial. Il faut un tournevis pour les ajuster. Rien ne vaut un bon bouton rotatif associé à un cadran gradué. Si le mini laboratoire ou le SHIELD ne sont pas requis pour des mesures, autant utiliser l’entrée E qui fournit la tension variable idoine. La petite expérience résumée sur la Fig.45 que je vous propose est vraiment élémentaire.

Générateur B.F. « ANALOGIQUE ».

Vraiment simple, cette manipulation ludique consiste à téléverser le petit programme P14_bis_Generation_BF.ino sur une carte Arduino UNO et à se servir du laboratoire pour fournir la tension continue de pilotage. Ne vous y trompez pas, bien que n’exigeant absolument aucun composant

pour accompagner le module Arduino UNO, nous sommes en présence ici d’une véritable application. Nous n’allons pas nous contenter d’envoyer la tension continue issue du mini laboratoire ou du SHIELD, mais nous servir de l’écran LCD pour visualiser la valeur de la fréquence. C’est une autre façon de voir les choses, pour bien vous montrer que le logiciel actuel n’a rien de sculpté dans le marbre. Au gré de nos imaginations on peut à tout moment voguer vers de nouveaux horizons et papillonner dans l’univers infini de la création logicielle.
L’idée qui engendre cette version « analogique » d’un générateur B.F. est schématisée sur la Fig.46 avec pour corolaire l’exploration en surface de cette piste. Autrement dit, on va se contenter pour évaluer la validité d’un tel concept de réutiliser directement l’écran du voltmètre analogique.

En validant la fourniture externe du +5Vcc, l’écran analogique va servir simultanément à indiquer la valeur de la fréquence. Comme la procédure tone(Sortie_SIGNAL,QRG); ne peut pas fournir des fréquences inférieures à 31Hz environ, impossible de créer une plage partant de zéro. Par

ailleurs, l’affichage implique des multiples de 1 à 5. En fin de compte, comme résumé sur la Fig.46 la plage expérimentée va s’étendre de 50Hz à 500Hz. L’interprétation est immédiate. Par exemple, comme confirmé sur la Fig.47, sur la photographie de l’écran ci-dessous correspond à une valeur générée est de 300Hz. Nous allons pouvoir passer maintenant à l’analyse des particularités du programme qui émule cette petite récréation logicielle :

Aspect logiciel du générateur B.F. « ANALOGIQUE ».

L’affichage écran LCD est gratuit puisque faisant partie intégrante du système qui fournit la tension continue sur lequel on a validé la fonction voltmètre analogique. C’est donc le programme P14_bis_Generation_BF.ino qui doit s’adapter intégralement aux valeurs des tensions disponibles sur la « sortie » E. Comme il n’y a aucun bouton poussoir à gérer dans ce démonstrateur, on peut librement disposer des toutes les
entrées analogiques. Autant utiliser la « première » A0 comme entrée de pilotage. Quand on mesure sur A0 les tensions délivrées par le laboratoire ou par le SHIELD, on trouve les valeurs consignées dans le tableau ci-contre. La linéarité du potentiomètre est très correcte, on va pouvoir sans difficulté transposer la valeur de la tension en une fréquence qui « numériquement » correspondra aux graduations analogiques. Étudions cette transposition :
Nous savons que le CAN de l’ATmega328 fournit des nombres compris entre 0 et 1023 quand la tension en entrée varie entre 0 et +5Vcc. L’instruction du langage C spécifique à l’IDE d’Arduino qui calcule la valeur de la fréquence à générer est :

map(Tension_lue, Borne_INF, Borne_SUP, 50, 500);

On ne peut rêver plus simple. Dans cette instruction l’identificateur Tension_lue correspond à la valeur numérique retournée par le CAN. En réalité, pour s’affranchir des parasites il s’agit d’un lissage sur une moyenne de 500 mesures. En limites absolues nous aurions les valeurs extrêmes de 0 et de 1023. Mais compte tenu des limites de la tension fournie par E sur A0 les valeurs numériques des limites doivent être repensées. Pour que vous puissiez aisément affiner la valeur des limites, ces dernières sont définies par les constantes Borne_INF et Borne_SUP. En consultant le listage du programme vous trouvez la directive :
#define Borne_SUP 880 // Valeur pour affichage de 5 en analogique.
Cette valeur de 880 a été affinée expérimentalement, c’est plus facile que de refaire de savants calculs. Stratégie analogue pour la limite inférieure qui conduit à la directive :
#define Borne_INF 50 // Valeur pour affichage de 0.5 en analogique.
Avec ces deux lignes, le comportement du programme est quasi parfait. La longueur du ruban analogique permet sans imprécision notable d’ajuster à une fréquence désirée dans la plage 50Hz à 500Hz. (Les fréquences étaient mesurées simultanément par le SHIELD.) Naturellement il sera facile de remplacer 50, 500 dans l’instruction map par 500, 5000 ou 5000, 50000 à votre convenance.

Mesure de la durée de la boucle de base.

La technique employée ici a déjà été évoquée. La manipulation qui va suivre n’est qu’un prétexte de plus pour tester la fonction PÉRIODEMÈTRE. Le but consiste à déterminer la rapidité de la boucle de base, ou plus exactement sa « lenteur ». En effet, chaque cycle de void loop() effectue 500 mesures analogiques et 500 additions. Cette boucle de mesure consomme un temps important comme on va pouvoir le vérifier. (Désolé pour ceux qui n’ont que le SHIELD qui n’a pas la fonction PÉRIODEMÈTRE.) Pour mesurer le temps d’une boucle, il suffit au début de cette dernière de faire  « monter » une sortie binaire à « 1 », puis avant de recycler en dernière instruction de repasser cette sortie à « 0 ». La mesure de la fréquence ou de la période sur cette sortie nous renseignera immédiatement. Comme le laboratoire ne peut pas mesurer la période et simultanément fournir une tension continue, portez l’entrée A0 au +5Vcc du module Arduino. La Fig.48 indique une valeur de période d’environ 62mS, soit une fréquence de l’ordre de 16Hz. Et encore, comme la tension de commande est
stable la valeur mesurée ne change pas et la boucle ne fait pas le changement de la fréquence à générer. Vous comprenez pourquoi on a focalisé sur le terme « lenteur » au lieu de rapidité. Ce vocable n’est pas innocent, car il implique le choix du PÉRIODEMÈTRE qui assure cinq chiffres significatifs.

>>> Page suivante.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *