samedi 6 juillet 2013

Bargraphe à LED, Arduino et CD4017

Un afficheur bargraphe à LED est constitué de 10 LEDs regroupées dans un même boîtier, chaque LED étant munie de sa propre paire de broches (vous pouvez donc obtenir le même résultat avec 10 LEDs individuelles si vous ne disposez pas d'un bargraphe déjà fait).  Un bargraphe peut être bien utile pour afficher une valeur analogique dont la valeur numérique exacte n'a pas une grande importance.  L'exemple classique est le VU-mètre qui affiche le niveau d'un signal audio:  la barre lumineuse qui monte et qui descend est plus pertinente qu'une valeur numérique qui changerait tout le temps!

On pourrait aussi imaginer un magnétomètre utilisant comme capteur une sonde à effet Hall (la Allegro A1302, par exemple).  La sonde produit une tension proportionnelle à l'intensité du champ magnétique, mais ce résultat n'est pas calibré en Tesla ou en Gauss:  on pourrait être plus intéressés à un affichage bargraphe qui nous indiquera en un coup d'oeil si le champ magnétique est faible ou intense plutôt qu'à une valeur numérique n'ayant pas de signification directe.

10 sorties de l'Arduino?!?!?!?!?

La plupart des tutoriels concernant l'utilisation d'un bargraphe avec un Arduino préconisent un branchement direct:  chaque LED du bargraphe est contrôlée par sa propre sortie de l'Arduino.  C'est simple, et ça peut toujours s'appliquer si votre Arduino est muni d'un unique capteur (le magnétomètre mentionné plus haut, par exemple), mais si votre projet est un tantinet plus ambitieux, vous préférerez utiliser ces pins de l'Arduino pour autre chose.

Économiser des sorties de l'Arduino

Nous allons donc utiliser un intermédiaire entre l'Arduino et l'afficheur bargraphe pour que ce dernier n'utilise que 3 ou 4 pins de l'Arduino, pas plus.  Il existe plusieurs possibilités:
  • un pilote de LEDs spécialisé, genre MAX7219, MAX7221 ou AS1108:  ils sont conçus pour ce genre d'application, mais coûtent vraiment cher.  Puisqu'ils permettent de contrôler 64 LEDs individuelles, ça peut devenir un choix intéressant si vous avez 5 ou 6 bargraphes à contrôler en même temps.
  • un registre à décalage 74HC595:  peu coûteux, mais puisqu'il n'a que 8 sorties, il en faudrait un deuxième, comportant 6 sorties non-utilisées 
  • un compteur décimal CD4017 qui a, justement, 10 sorties, une pour chaque LED de mon  bargraphe! C'est cette dernière option que j'ai décidé d'appliquer.


Étude du circuit intégré CD4017

Le CD4017 est un compteur décimal:  il est muni de 10 sorties.  Si vous appliquez un signal logique haut à l'entrée 15 (reset), la sortie 0 devient haute (toute les autres sorties sont basses). Ensuite vous appliquez un signal haut à la broche 14 (clock):  la sortie 0 devient basse, et la sortie 1 devient haute.  Vous appliquez à nouveau un signal haut à la broche 14, et c'est la sortie 2 qui devient haute.  Chaque fois que signal acheminé à sa pin 14 (clock) passe d'une valeur logique basse à une valeur logique haute, c'est la sortie suivante qui devient haute.

Persistence rétinienne

Ce qui complique un peu les choses, dans notre cas, c'est que nous voulons que plusieurs LEDs du bargraphe soient allumées en même temps, alors qu'avec un CD4017 on dispose de 10 sorties, dont une seule est active à la fois.  Heureusement, l'Arduino est capable d'envoyer à la pin "clock" des impulsions tellement rapides que nos yeux ne verrons pas la différence:  plusieurs LEDs sembleront allumées en même temps, alors qu'en réalité elles s'allument et s'éteignent très rapidement, une à la fois.

Les connexions

Rien de bien compliqué:  vous alimentez chaque LED du bargraphe au moyen d'une sortie du CD4017, en ajoutant une résistance de protection pour chaque LED (150 Ω ou environ), tel qu'illustré ci-contre.

Les pins 8 (GND) et 13 (Enable) sont toutes les deux reliées au GND de l'Arduino.  Les trois entrées restantes du CD4017 sont branchées à l'Arduino de la façon suivante:

  • pin 14 du CD4017 (Clock) à la pin 2 de l'Arduino
  • pin 15 du CD4017 (Reset) à la pin 3 de l'Arduino
  • pin 16 du CD4017 (Vcc) à la pin 4 de l'Arduino
Pour produire rapidement un signal analogique variable qui fera réagir le bargraphe, vous pouvez utiliser un potentiomètre dont le curseur est branché à l'entrée analogique A0 de l'Arduino.


Le sketch

Le voici:

En résumé, on prend la valeur analogique captée à l'entrée A0 de l'Arduino, on la convertit pour obtenir une valeur entière située entre 0 et 10.  Si la valeur est 0, on n'achemine rien à la broche 16 du CD4017 (de façon à ce qu'aucune LED ne soit allumée).  Si la valeur est 5, on allume les 5 première LEDs une après l'autre, mais ça se fait tellement vite qu'on a l'impression que les 5 LEDs sont allumées en même temps.

On peut aussi obtenir un résultat similaire avec un afficheur à cristaux liquides (LCD), mais ça, je l'avais déjà expliqué.

MSP430 Launchpad

Pour utiliser le sketch avec un MSP430 Launchpad et Energia, une légère modification est nécessaire car la pin digitale 2 et la pin analogique A0 font toutes deux référence à la même pin (P1_0).  Il est donc nécessaire d'assigner les pins différemment au début du sketch.

La configuration qui nécessite le moins de modifications au sketch serait:
  • pin 14 du CD4017 (Clock) branchée à la pin P1_0 du msp430 Launchpad
  • pin 15 du CD4017 (Reset) branchée à la pin P1_1 du msp430 Launchpad
  • pin 16 du CD4017 (Vcc) branchée à la pin P1_2 du msp430 Launchpad
  • signal analogique acheminé à la pin P1_3 du msp430 Lauchpad
Dans le sketch, il ne reste plus qu'à remplacer la ligne "int signalPin = A0;" par "int signalPin = A3;". 

(Dans ce cas, le signal analogique ne doit pas excéder 3,3 V.)


(Pour la rédaction de cet article, je me suis inspiré des travaux de Leonel Machava publiés ici, mais j'ai beaucoup modifié le sketch).

Yves Pelletier (Twitter: @ElectroAmateur)

Aucun commentaire:

Enregistrer un commentaire