La Résistance pour Bouton Poussoir Arduino Uno : Comprendre son Rôle et son Choix

L'utilisation d'un bouton poussoir avec une carte Arduino Uno est une étape fondamentale dans la création de projets interactifs et d'automatisation. Ces composants simples permettent de contrôler l'état d'un circuit en ouvrant ou en fermant une connexion lorsqu'ils sont activés. Ils sont qualifiés de "momentanés" car ils ne conservent pas leur état une fois que l'on cesse d'appuyer dessus. Un des aspects cruciaux de leur intégration dans un montage Arduino réside dans le choix et le branchement d'une résistance associée, souvent une résistance de "pull-up" ou de "pull-down". Cet article se propose d'explorer en détail le rôle de ces résistances, les raisons de leur nécessité, et les critères guidant leur sélection, en se basant sur les principes de fonctionnement des microcontrôleurs Arduino.

Le Comportement des Entrées Numériques d'un Microcontrôleur

Schéma d'une entrée numérique d'un microcontrôleur

Une entrée de microcontrôleur, telle que celle présente sur une Arduino Uno, consomme une quantité de courant extrêmement faible. Lorsqu'un fil est laissé déconnecté, c'est-à-dire "en l'air", il n'est pas formellement connecté à une tension définie (ni au 5V, ni à la masse). Dans cette situation, l'entrée du microcontrôleur peut capter des signaux parasites ambiants, conduisant à des lectures imprévisibles, fluctuantes entre un état logique haut et un état logique bas. On pourrait penser que l'entrée est "tirée" au potentiel 5V sans résistance, mais ce n'est pas tout à fait exact. Bien que l'état soit souvent interprété comme un niveau logique haut (HIGH) par le microcontrôleur, cette lecture n'est pas stable ni garantie.

Selon la documentation des microcontrôleurs AVR, tels que ceux équipant l'Arduino Uno, un état haut sera détecté si la tension à l'entrée d'une broche est supérieure à 0,6 fois la tension d'alimentation (Vcc). Pour une carte Arduino Uno fonctionnant à 5V, cela signifie qu'une tension supérieure à 0,6 x 5V = 3V sera interprétée comme un niveau logique HAUT.

Le Rôle Crucial des Résistances de Pull-up et Pull-down

Pour assurer une lecture fiable de l'état d'un bouton poussoir, il est indispensable de garantir que l'entrée numérique de l'Arduino soit toujours à un niveau logique défini lorsqu'aucun signal actif n'est appliqué. C'est là qu'interviennent les résistances de "pull-up" et de "pull-down".

La Résistance Pull-down

Dans une configuration avec une résistance "pull-down", la résistance est connectée entre la broche d'entrée de l'Arduino et la masse (GND). Le bouton poussoir est quant à lui connecté entre la broche d'entrée et la tension d'alimentation (5V).

  • Bouton non pressé : Le circuit est ouvert. La résistance de pull-down "tire" la broche d'entrée vers la masse. La tension à l'entrée est donc proche de 0V, ce qui est interprété comme un état logique BAS (LOW) par l'Arduino. Dans ce cas, un faible courant parasite circule à travers la résistance et est drainé vers la masse.
  • Bouton pressé : Le bouton ferme le circuit, connectant directement la broche d'entrée à la tension d'alimentation (5V). La tension à l'entrée devient 5V, interprétée comme un état logique HAUT (HIGH). Un courant circule alors de la source de 5V, à travers le bouton poussoir, puis vers la broche d'entrée de l'Arduino.

Il est important de noter que la valeur de la résistance de pull-down doit être choisie judicieusement. Si elle est trop faible, un courant excessif circulera lorsque le bouton est pressé, ce qui peut potentiellement endommager le bouton ou la source d'alimentation. Si elle est trop élevée, le courant de fuite lorsque le bouton n'est pas pressé pourrait ne pas être suffisant pour garantir un état BAS stable, rendant le microcontrôleur sensible aux interférences.

Pour une résistance de pull-down, lorsque le bouton est pressé, un courant égal à 5V / R circule dans la résistance. Par exemple, avec une résistance de 10 kΩ, ce courant est de 0,5 mA. C'est une consommation très faible par rapport aux 40-50 mA qu'une carte Arduino Uno peut consommer à vide, juste pour alimenter ses LEDs.

La Résistance Pull-up

Dans une configuration avec une résistance "pull-up", la résistance est connectée entre la broche d'entrée de l'Arduino et la tension d'alimentation (5V). Le bouton poussoir est quant à lui connecté entre la broche d'entrée et la masse (GND).

  • Bouton non pressé : Le circuit est ouvert. La résistance de pull-up "tire" la broche d'entrée vers la tension d'alimentation (5V). La tension à l'entrée est donc proche de 5V, interprétée comme un état logique HAUT (HIGH). Aucun courant significatif ne circule dans la résistance.
  • Bouton pressé : Le bouton ferme le circuit, connectant directement la broche d'entrée à la masse (GND). La tension à l'entrée devient 0V, interprétée comme un état logique BAS (LOW). Un courant circule alors de la tension d'alimentation (5V), à travers la résistance de pull-up, puis à travers le bouton poussoir vers la masse.

La puissance dissipée dans la résistance (sous forme de chaleur, effet Joule) peut être calculée avec la formule P = Vcc x I, où I est le courant circulant dans la résistance. Pour une résistance de 10 kΩ dans une configuration pull-up, le courant lorsque le bouton est pressé est de 5V / 10 kΩ = 0,5 mA. La puissance dissipée est alors P = 5V x 0,0005A = 0,0025W, soit 2,5 mW, une valeur négligeable.

Le Choix de la Valeur de la Résistance : 10 kΩ et Au-delà

La valeur de 10 kΩ est fréquemment recommandée pour les résistances de pull-up ou pull-down utilisées avec les boutons poussoirs sur Arduino. Mais pourquoi cette valeur en particulier, et pourquoi pas 20, 30 kΩ, voire plus ?

Compromis entre Consommation et Immunité au Bruit

Le choix de la valeur de la résistance est un compromis entre plusieurs facteurs :

  1. Consommation de courant : Une résistance de valeur plus faible entraîne une consommation de courant plus élevée lorsque le bouton est pressé (dans le cas d'une pull-up) ou lorsque le circuit est ouvert (dans le cas d'une pull-down). Une résistance de 10 kΩ, par exemple, assure une consommation de courant minime (0,5 mA) lors de l'activation du bouton. Avec une résistance de valeur inférieure à 10 kΩ, vous avez un tirage "fort" au 5V (par exemple, 4,99 V pour une résistance de 10 kΩ), alors qu'il est un peu moins fort si vous augmentez la valeur de la résistance (4,90 V pour 100 kΩ).
  2. Stabilité du niveau logique : Une résistance de valeur plus élevée peut rendre l'entrée plus sensible aux bruits électriques ambiants. Les interférences électromagnétiques peuvent induire des tensions parasites sur la ligne de connexion, potentiellement interprétées à tort comme des changements d'état logique.
  3. Temps de montée du signal : Si la ligne est capacitive (ce qui est souvent le cas avec les câbles longs ou les circuits plus complexes), le temps de montée du signal, c'est-à-dire le temps nécessaire pour que la tension passe de l'état BAS à l'état HAUT, augmente avec la valeur de la résistance. Une résistance plus faible chargera et déchargera plus rapidement la capacité parasite.

Pour un interrupteur actionné manuellement et une carte Arduino (de type Uno, Mega…), une résistance de tirage de 10 kΩ conviendra déjà très bien. Une valeur un peu inférieure ne perturbe aucunement le fonctionnement, mais peut augmenter inutilement la consommation.

Les Résistances Internes de l'Arduino

Schéma de la carte Arduino Uno montrant les broches numériques

Il est important de savoir que les microcontrôleurs équipant les cartes Arduino, comme l'AVR, disposent de résistances de pull-up internes qui peuvent être activées par logiciel. Ces résistances internes ont une valeur généralement comprise entre 20 kΩ et 50 kΩ. Elles ont l'avantage d'éviter l'ajout de composants externes, simplifiant ainsi le câblage.

L'activation de ces résistances internes se fait lors de la configuration de la broche d'entrée numérique. Par exemple, dans le code Arduino, la fonction pinMode() est utilisée pour configurer le port d'entrée numérique. Pour activer la résistance de pull-up interne, on utilise l'option INPUT_PULLUP.

pinMode(brocheBouton, INPUT_PULLUP);

Lorsque vous utilisez INPUT_PULLUP, la broche est configurée comme une entrée avec la résistance de pull-up interne activée. Dans ce mode, lorsque le bouton poussoir est pressé (connecté à la masse), la broche lira un état BAS (LOW). Lorsqu'il n'est pas pressé, la résistance de pull-up interne le tirera vers 5V, et la broche lira un état HAUT (HIGH).

Cette approche simplifie grandement le câblage, car elle ne nécessite pas de résistance externe. Cependant, il faut garder à l'esprit que la valeur de ces résistances internes est plus élevée que celle souvent utilisée pour une résistance externe (par exemple, 10 kΩ). Si votre application est particulièrement sensible au bruit dans un environnement électromagnétique intense, une résistance externe de valeur plus faible pourrait offrir une meilleure immunité.

Au-delà de 10 kΩ : Quand et Pourquoi ?

Une valeur comprise entre 20 kΩ et 50 kΩ, comme celle de la résistance de tirage interne de l'Arduino Uno, est adaptée dans la très grande majorité des cas pour des boutons poussoirs. Pour des applications particulièrement sensibles à la consommation d'énergie, où chaque milliampère compte (par exemple, sur des projets alimentés par batterie), vous pouvez envisager d'utiliser des valeurs plus élevées, comme 100 kΩ, voire au-delà de 50 kΩ.

Cependant, il faut être conscient que l'utilisation de résistances de très haute valeur (supérieures à 100 kΩ, et sans dépasser idéalement 2 MΩ pour rester dans des plages raisonnables) rend votre circuit moins immunisé face aux environnements bruyants. Les signaux parasites auront plus d'impact sur la stabilité du niveau logique lu par l'Arduino.

Il est également mentionné dans la documentation des microcontrôleurs Atmel que les résistances pull-up intégrées sont comprises entre 20 et 50 kOhm. Ceci confirme que ces valeurs sont considérées comme suffisantes par le fabricant pour un fonctionnement standard.

Considérations Pratiques et Exemples de Code

Lecture de l'État du Bouton

Pour lire l'état d'un bouton poussoir connecté à une broche d'entrée numérique, vous utilisez la fonction digitalRead(). Cette fonction lit l'état de la broche et renvoie la valeur HIGH ou LOW.

int etatBouton = digitalRead(brocheBouton);if (etatBouton == HIGH) { // Le bouton n'est pas pressé (en configuration pull-up) // ou est pressé (en configuration pull-down)} else { // Le bouton est pressé (en configuration pull-up) // ou n'est pas pressé (en configuration pull-down)}

Exemple de Connexion et de Code

Voici un exemple typique de connexion d'un bouton poussoir avec une résistance de pull-up externe et une LED pour visualiser l'action.

Matériel nécessaire :

  • Arduino Uno
  • Breadboard
  • Bouton poussoir
  • Résistance de 10 kΩ (pour pull-up)
  • Résistance de 220 Ω (pour la LED)
  • LED
  • Fils de connexion

Câblage :

  1. Connectez une patte du bouton poussoir à une broche numérique de l'Arduino (par exemple, la broche 2).
  2. Connectez l'autre patte du bouton poussoir à la masse (GND) de l'Arduino.
  3. Connectez une résistance de 10 kΩ entre la broche numérique (broche 2) et la tension d'alimentation 5V de l'Arduino.
  4. Connectez l'anode de la LED (la patte plus longue) à une autre broche numérique de l'Arduino (par exemple, la broche 13).
  5. Connectez la cathode de la LED (la patte plus courte) à une résistance de 220 Ω.
  6. Connectez l'autre extrémité de la résistance de 220 Ω à la masse (GND) de l'Arduino.

Code Arduino :

const int brocheBouton = 2; // Broche connectée au bouton poussoirconst int brocheLED = 13; // Broche connectée à la LEDint etatBouton = 0; // Variable pour lire l'état du boutonvoid setup() { // Initialise la broche de la LED comme sortie pinMode(brocheLED, OUTPUT); // Initialise la broche du bouton comme entrée avec résistance de pull-up interne activée pinMode(brocheBouton, INPUT_PULLUP);}void loop() { // Lit l'état du bouton poussoir etatBouton = digitalRead(brocheBouton); // Vérifie si le bouton est pressé (en mode INPUT_PULLUP, LOW indique que le bouton est pressé) if (etatBouton == LOW) { // Le bouton est pressé, allume la LED digitalWrite(brocheLED, HIGH); } else { // Le bouton n'est pas pressé, éteint la LED digitalWrite(brocheLED, LOW); }}

Dans cet exemple, l'utilisation de INPUT_PULLUP désactive le besoin d'une résistance externe de 10 kΩ. Si vous préférez utiliser une résistance externe, vous configurerez la broche comme INPUT et connecterez la résistance entre la broche et le 5V.

Gestion des "Rebonds" de Bouton

Un aspect important à considérer lors de l'utilisation de boutons poussoirs physiques est le phénomène de "rebond" (ou "bouncing" en anglais). Lorsqu'un bouton est pressé ou relâché, le contact électrique ne se fait pas instantanément de manière nette. Il peut y avoir de très brèves interruptions ou connexions multiples avant que le contact ne se stabilise. Ces "rebonds" peuvent être interprétés par le microcontrôleur comme plusieurs pressions ou relâchements rapides du bouton, conduisant à des comportements indésirables dans le programme.

Diagramme illustrant les rebonds d'un bouton poussoir

Pour contrer ce phénomène, plusieurs techniques existent :

  • Débouncing logiciel : Attendre un court laps de temps après la détection d'un changement d'état avant de le considérer comme définitif. Cela implique généralement de stocker l'état précédent du bouton et de vérifier le nouvel état après un délai.
  • Débouncing matériel : Utiliser des composants électroniques comme des condensateurs et des résistances pour "lisser" le signal et absorber les rebonds. Une configuration courante consiste à placer un condensateur en parallèle avec le bouton et une résistance en série avec la ligne d'entrée. Le condensateur se charge et se décharge progressivement, atténuant les fluctuations rapides.

Pour des applications nécessitant une réponse immédiate et fiable, comme dans les jeux ou les interfaces critiques, la gestion des rebonds est essentielle.

Conclusion sur le Choix de la Résistance

En résumé, pour l'utilisation d'un bouton poussoir avec une Arduino Uno, une résistance de 10 kΩ est une valeur courante et efficace pour une configuration pull-up ou pull-down externe. Elle offre un bon équilibre entre une consommation de courant raisonnable et une immunité suffisante au bruit. Cependant, la disponibilité des résistances de pull-up internes sur l'Arduino, activables via INPUT_PULLUP, simplifie grandement le câblage et est souvent la solution privilégiée pour la majorité des projets.

Pour des applications particulièrement sensibles à la consommation d'énergie, des valeurs de résistance plus élevées (jusqu'à 2 MΩ, avec prudence) peuvent être envisagées, tandis que pour une robustesse accrue face aux perturbations, des valeurs plus basses peuvent être préférées. Le choix final dépendra des contraintes spécifiques de votre projet, de l'environnement d'exploitation et des compromis acceptables entre consommation, fiabilité et simplicité de montage.

Arduino UNO etc : Réagir à l'appui sur un bouton poussoir (front descendant...). Eviter les rebonds.

tags: #resistance #pour #bancher #un #boutton #arduino

Articles populaires:

%d blogueurs aiment cette page :