IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Arduino : comment effectuer le branchement d’un interrupteur ?

Niveau : débutant

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.

17 commentaires Donner une note à l´article (5)

Article lu   fois.

L'auteur

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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

Image non disponible
Bouton-poussoir à appui momentané
Image non disponible
Bouton-poussoir à appui momentané
Image non disponible
Bouton jeu d'arcade
Image non disponible
Bouton métallique
Image non disponible
Bouton-poussoir à monter en surface
Image non disponible
Interrupteur à bascule
Image non disponible
Interrupteur à levier
Image non disponible
Interrupteur à glissière
Image non disponible
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.

Image non disponible
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 :

Image non disponible
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
Sélectionnez
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) :

Image non disponible
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 :

Image non disponible
Image non disponible
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 :

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.

Image non disponible

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é

Image non disponible
Configuration avec résistance de rappel (pull-down)
Image non disponible
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);

Image non disponible
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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   


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.

Copyright © 2021 Team developpez.com Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.