I. Les interrupteurs▲
Les interrupteurs de manière générale permettent d’ouvrir ou fermer un circuit électrique, et il en existe de toutes sortes (images sparkfun.com, licence C.C) :
Les boutons-poussoirs à quatre broches que l’on retrouve souvent dans les kits Arduino pour débuter sont à appui momentané. Le circuit est normalement ouvert, puis il est fermé sur simple appui, mais un système à ressort ramène le poussoir en position initiale et rouvre le circuit dès que la pression du doigt est relâchée.
Par contre, les interrupteurs à levier, à bascule et à glissière sont bistables : la position est maintenue une fois l’interrupteur actionné.
D’autres types d’interrupteurs ne sont pas actionnés manuellement par un utilisateur, mais selon certaines conditions environnementales. Par exemple, les ILS (interrupteurs à lame souple) sont actionnés en présence d’un champ magnétique, créé par un aimant.
II. Branchement sur une entrée numérique▲
L’Arduino Uno dispose de 14 connecteurs d’entrées-sorties numériques (D0 à D13). Pour lire l’état d’un interrupteur, il faut donc relier une broche de celui-ci à un connecteur de l’Arduino configuré en entrée avec pinMode
(numConnecteur, INPUT
). La lecture de l’état se fait avec l’instruction digitalRead
() qui renverra l’état LOW
ou HIGH
selon le potentiel 0 V ou 5 V de l’entrée.
Le premier schéma de montage auquel on pense, et qui pourtant s’avère incorrect, est le schéma suivant :
On propose un programme de test associé à ce schéma où le bouton est relié à l’entrée numérique D2 :
const
byte
brocheBouton =
2
; // bouton sur connecteur D2
void
setup()
{
pinMode
(brocheBouton, INPUT
); // configuration en entrée
Serial
.begin(115200
); // pour affichage dans le moniteur série
}
void
loop()
{
byte
etatEntree =
digitalRead
(brocheBouton); // retourne 0 (LOW) ou 1 (HIGH)
Serial
.println(etatEntree); // affichage dans Terminal Série
delay
(5
); // temporisation 5 ms
}
Le résultat est plus spectaculaire visualisé dans le Traceur Série(1) de l’EDI Arduino :
Que constate-t-on ?
- Si le bouton est pressé, le circuit est fermé et l’entrée D2, reliée au potentiel 5 V, est à l’état logique haut (
HIGH
). - Si le bouton est relâché, l’entrée est dans un état… indéterminé. En tout cas, elle n’est pas forcément à l’état logique bas (
LOW
) comme on pourrait s’y attendre, car elle n’est pas reliée au potentiel 0 V. On dit que l’entrée est « flottante », et elle peut prendre des états fluctuants qui semblent aléatoires, mais qui dépendent en fait du bruit électromagnétique ambiant autour du montage.
Bien entendu, si vous devez déclencher une action sur appui du bouton, votre programme aura un comportement erratique puisque l’entrée de l’Arduino peut prendre l’état logique haut même si le bouton n’est pas pressé.
Pour lever cette indétermination, on peut avoir l’idée du montage suivant (à ne pas reproduire) qui ramène le potentiel de l’entrée à la masse (GND = 0 V) :
Mais lorsque le bouton est pressé, cela revient à relier directement l’alimentation 5 V à la masse GND. C’est ce qu’on appelle « un court-circuit » et vous risquez d’endommager le microcontrôleur avec cette configuration.
III. Montage avec résistance de rappel (pull-down)▲
Une solution au problème précédent consiste à rajouter une résistance électrique comme sur le schéma ci-dessous :
Cette résistance est appelée « résistance de rappel » ou pull-down en anglais. On l’appelle ainsi, car elle lève l’indétermination du potentiel lorsque le bouton est relâché, en abaissant la tension à l’entrée D2 à un niveau qui sera considéré comme l’état logique bas (LOW
).
Quelle valeur de résistance prendre ? Par facilité, prenez la valeur recommandée : 10 kΩ. Des explications sur le choix de cette valeur sont données dans la fiche : Branchement d’un interrupteur, quelle valeur pour la résistance pull-up/pull-down ? (à paraître).
Et si le bouton est appuyé, l’entrée est reliée au potentiel 5 V, la résistance de rappel évitant le court-circuit.
Avec le programme test.ino précédent, voici ce que vous devriez observer dans le Traceur Série :
Cette fois, l’état de l’entrée est bien déterminé, quelle que soit la position du bouton.
IV. Montage avec résistance de tirage (pull-up)▲
Avec la résistance de rappel pull-down, on a vu que l’entrée était « rappelée » à l’état logique bas (LOW
) lorsque le circuit était ouvert (bouton-poussoir relâché).
Sur le schéma qui suit, on a inversé la position du bouton et la résistance électrique.
Cette fois, lorsque le bouton est relâché, l’état de l’entrée est bien déterminé à l’état logique haut (HIGH
) puisque l’entrée est « tirée » au 5 V par l’intermédiaire de la résistance dite « de tirage » (ou pull-up). Quand le bouton est appuyé, l’entrée est reliée à la masse GND et un état logique bas (LOW
) sera détecté. Là encore, grâce à la résistance de tirage, un court-circuit est évité. Cette configuration avec résistance de tirage est donc aussi viable que la configuration précédente avec la résistance de rappel. Il faut juste faire attention avec la logique contraire à l’intuition, à savoir un passage de l’état haut à l’état bas sur fermeture du circuit lors d’un appui sur le bouton.
V. En résumé▲
|
|
VI. Résistances de tirage (pull-up) internes au microcontrôleur▲
Résistance de tirage ou résistance de rappel ? Quelle configuration choisir ?
À dire vrai, il n’y a pas de raison particulière de favoriser une configuration plus que l’autre.
Sauf que la plupart des microcontrôleurs disposent de résistances de tirage ou de rappel internes que l’on peut activer au niveau de leurs entrées par voie logicielle. Le microcontrôleur de l’Arduino Uno quant à lui dispose de résistances de tirage internes, mais pas de résistances de rappel.
Par exemple, pour activer la résistance de tirage interne d’une broche configurée en entrée, vous déclarerez dans le setup() : pinMode
(brocheEntree, INPUT_PULLUP
);
En activant la résistance de tirage interne d’une entrée, vous n’avez plus besoin de la résistance externe et vous simplifiez votre montage.
Si l’Arduino ne dispose que des résistances de tirage (pull-up) en interne, les modules Espressif ESP32 sont mieux dotés avec les deux types de configuration : résistances de tirage et résistances de rappel. Si vous programmez ces cartes dans l’EDI Arduino, vous pourrez activer les résistances de rappel sur la plupart des broches avec pinMode
(brocheEntree, INPUT_PULLDOWN);.
VII. Ressources sur Developpez.com▲
- Branchement d’un bouton-poussoir
- Petits exercices : bouton-poussoir et LED qui clignote
- Les entrées numériques
- Branchement d’un interrupteur, quelle valeur pour la résistance pull-up/pull-down ?
- Comment gérer les rebonds d’un interrupteur dans vos programmes ?
Et si vous avez encore des questions, n’hésitez pas à ouvrir une discussion dans le forum Arduino.