HOWTO · Arduino

Arduino Pull Down Résistance

Découvrez comment câbler une résistance pull-down et un commutateur sur un Arduino, choisir une valeur de résistance et lire l'entrée dans un programme.

Sur cette page

Pour câbler une résistance de tirage vers le bas sur un Arduino, reliez une résistance entre le point de jonction de l’entrée numérique et GND, puis reliez un commutateur entre ce point et une tension d’alimentation compatible avec la broche d’entrée de la carte. L’entrée lit LOW lorsque le commutateur est ouvert et HIGH lorsqu’il est fermé. N’utilisez 5V que si l’entrée de la carte tolère 5 V ; une entrée limitée à 3,3 V nécessite une alimentation compatible de 3,3 V. Ce guide explique le câblage, le choix de la résistance et le code permettant de lire le commutateur.

Pourquoi une résistance de tirage vers le bas est nécessaire

Une entrée de microcontrôleur consomme très peu de courant. Lorsqu’un commutateur laisse l’entrée déconnectée, le bruit électrique peut faire varier sa tension et provoquer des lectures imprévisibles : on parle alors d’entrée flottante. Une résistance de tirage vers le bas relie l’entrée à GND lorsque le commutateur est ouvert et la maintient à LOW. Quand le commutateur se ferme, le même point de jonction est relié à l’alimentation de la carte ; la broche lit alors HIGH.

Câbler une résistance de tirage externe sur une entrée numérique

Réalisez le circuit de sorte que la broche d’entrée, une borne du commutateur et une borne de la résistance se rejoignent en un même point de jonction :

  1. Choisissez une tension d’alimentation que la broche d’entrée de la carte peut accepter sans risque. Reliez une borne d’un bouton-poussoir ou d’un commutateur à cette alimentation. Utilisez la broche 5V de la carte uniquement si l’entrée tolère 5 V ; pour une entrée limitée à 3,3 V, utilisez une alimentation compatible de 3,3 V.
  2. Reliez l’autre borne du commutateur à la broche numérique 2. Ce point constitue la jonction d’entrée.
  3. Reliez une résistance entre cette jonction et GND.

L’article source indique une plage de 1 kΩ à 100 kΩ comme point de départ. La valeur appropriée dépend de la carte et du circuit : consultez les caractéristiques électriques de la carte et tenez compte du bruit et des besoins en courant. Une résistance de très faible valeur peut laisser passer un courant excessif dans le commutateur lorsqu’il se ferme. La résistance doit être placée entre la jonction d’entrée et GND ; ne reliez pas directement l’alimentation à GND. Sur le schéma ci-dessous, l’étiquette +5V ne s’applique que si l’entrée de la carte tolère 5 V. Dans le cas contraire, utilisez à cette connexion du commutateur une tension d’alimentation compatible avec la carte.

Circuit diagram showing a switch from a board-compatible supply to the input junction and a pull-down resistor from the junction to GND; the diagram’s +5V label is for 5V-tolerant inputs only

Lire le commutateur dans un programme Arduino

Réglez le mode de la broche sur INPUT et lisez le commutateur avec digitalRead. Ce programme complet affiche un message pour chaque état du commutateur. La petite section de compatibilité permet de compiler le même code pour une démonstration sur l’ordinateur ; dans l’IDE Arduino, le cœur de la carte fournit ces noms et l’IDE fournit le point d’entrée du programme. La démonstration sur l’ordinateur utilise une lecture HIGH fixe : la ligne affichée illustre donc le cas où le commutateur est fermé, sans tester de matériel.

#ifndef ARDUINO
#include <iostream>
constexpr int INPUT = 0;
constexpr int LOW = 0;
constexpr int HIGH = 1;
struct SerialPort {
  void begin(long) {}
  void println(const char* message) { std::cout << message << '\n'; }
} Serial;
void pinMode(int, int) {}
int digitalRead(int) { return HIGH; }
void delay(unsigned long) {}
#endif

const int switchPin = 2;

void setup() {
  pinMode(switchPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  int switchState = digitalRead(switchPin);
  if (switchState == HIGH) {
    Serial.println("Switch closed");
  } else {
    Serial.println("Switch open");
  }
  delay(200);
}

#ifndef ARDUINO
int main() {
  setup();
  loop();
}
#endif
Switch closed

Avec la résistance de tirage externe câblée comme indiqué, digitalRead renvoie LOW lorsque le commutateur est ouvert et HIGH lorsqu’il est fermé. Placez l’action correspondant à chaque état dans la branche appropriée. Pour en savoir plus sur les tests conditionnels, consultez Arduino if Statement. Si votre programme doit attendre une action de l’utilisateur, consultez How to Wait for Input in Arduino.

Utiliser une entrée analogique avec une résistance de tirage externe vers le bas

Vous pouvez relier le même circuit à une entrée analogique, par exemple A0, au lieu d’une broche numérique. Gardez la résistance entre la jonction d’entrée et GND, et reliez le commutateur entre cette jonction et une tension d’alimentation compatible avec l’entrée analogique. N’utilisez 5V que si cette entrée tolère 5 V. Lorsque le commutateur est ouvert, la valeur analogique est proche de l’extrémité basse de la plage ; lorsqu’il se ferme, elle augmente vers la valeur correspondant à l’alimentation de la carte. Le nombre exact dépend du convertisseur analogique-numérique de la carte et de sa tension de référence.

Dans un programme Arduino, lisez la broche avec analogRead et comparez le résultat à un seuil choisi en fonction de la carte et du circuit. Par exemple, la condition reading >= threshold correspond au commutateur fermé lorsque celui-ci relie la jonction à l’alimentation. Déterminez le seuil à partir de mesures ; une valeur comme 512 ne convient pas à toutes les configurations. Cet exemple analogique dépend de la carte et ne figure pas dans la démonstration sur l’ordinateur ci-dessus.

Utiliser la résistance de tirage interne vers le haut comme solution de remplacement

Une résistance de tirage interne vers le haut constitue un circuit de remplacement, et non une résistance de tirage externe vers le bas. Elle utilise la résistance intégrée au microcontrôleur. Reliez le commutateur entre l’entrée numérique et GND, puis configurez la broche avec INPUT_PULLUP. Lorsque le commutateur est ouvert, l’entrée lit HIGH ; lorsqu’on appuie dessus, la broche est reliée à GND et lit LOW : la logique est donc inversée par rapport au circuit avec résistance de tirage externe vers le bas.

Dans le programme Arduino, utilisez pinMode(switchPin, INPUT_PULLUP) et considérez que digitalRead(switchPin) == LOW correspond à l’état enfoncé. Ce comportement dépend du cœur Arduino et du câblage physique ; il n’est donc pas représenté par la démonstration sur l’ordinateur ci-dessus.