Arduino : comment effectuer le branchement d’un interrupteur ?

Niveau : débutant

f-leb

Boutons-poussoirs, interrupteurs à bascule, à glissière, à levier, microswitch, etc. Ces composants semblent faciles à appréhender, ils ne servent qu’à fermer ou ouvrir un circuit électrique pour allumer ou éteindre une lampe, démarrer ou freiner un moteur, déclencher une action dans un jeu vidéo, sélectionner une option dans un menu et bien d’autres applications encore. Pour autant, quand il faut relier ces interrupteurs aux entrées d’un microcontrôleur, vous verrez des montages avec des résistances électriques dites pull-up ou pull-down, et il n’est pas toujours facile de comprendre leur utilité. Ce tutoriel vous décrit le pourquoi de ces résistances dans vos montages avec une carte Arduino.

Commentez

- Titre : Arduino : comment effectuer le branchement d’un interrupteur ?

- Auteur : f-leb

- Parution : 27 août 2021

- Mise à jour : 6 octobre 2022

- Public visé :

- Licence : Copyright ® 2021 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Voir également :

- Les Cahiers Pratiques Arduino, une série de tutoriels pour débuter

Sommaire

- I. Les interrupteurs

- II. Branchement sur une entrée numérique

- III. Montage avec résistance de rappel (pull-down)

- IV. Montage avec résistance de tirage (pull-up)

- V. En résumé

- VI. Résistances de tirage (pull-up) internes au microcontrôleur

- VII. Ressources sur Developpez.com

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) :

Bouton-poussoir à appui momentané

Bouton-poussoir à appui momentané

Bouton jeu d'arcade

Bouton métallique

Bouton-poussoir à monter en surface

Interrupteur à bascule

Interrupteur à levier

Interrupteur à glissière

Interrupteur à lame souple (ILS)

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.

Bouton-poussoir à appui momentané sur plaque de câblage rapide

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 :

Schéma incorrect

On propose un programme de test associé à ce schéma où le bouton est relié à l’entrée numérique D2 :

test.ino

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 :

Animation en format "mp4" non supportée.
Contenu uniquement consultable en ligne à cette adresse :
./videos/COM-sanspulldown2.mp4

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) :

Danger, court-circuit !!

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 :

Schéma tinkercad.com

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 :

Animation en format "mp4" non supportée.
Contenu uniquement consultable en ligne à cette adresse :
./videos/COM-avecpulldown2.mp4

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é

Configuration avec résistance de rappel (pull-down)

Configuration avec résistance de tirage (pull-up)

- Bouton relâché : entrée D2 à l’état logique LOW

- Bouton appuyé : entrée D2 à l’état logique HIGH

- Bouton relâché : entrée D2 à l’état logique HIGH

- Bouton appuyé : entrée D2 à l’état logique LOW

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);

Configuration avec résistance de tirage interne (pull-up)

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.

(1)Traceur série (ou Serial plotter) : une fonctionnalité présente depuis la version 1.6.6 de l’EDI Arduino et qui permet de tracer à l’écran des courbes de vos données en temps réel, à la façon d’un oscilloscope logiciel.