Pourquoi votre broche Arduino lit HIGH lorsque rien n'est connecté (et comment y remédier)

Une broche d'entrée Arduino non connectée ne se stabilise pas à zéro volt : elle flotte dans un état de haute impédance et agit comme une antenne captant les bruits électrostatiques ambiants.
Une broche d'entrée Arduino non connectée lit un état HIGH — ou oscille de manière imprévisible entre HIGH et LOW — parce qu'elle se trouve dans un état de haute impédance appelé broche flottante (floating pin). Elle n'est reliée à aucune tension de référence, ce qui signifie qu'elle se comporte comme une minuscule antenne captant les champs électromagnétiques ambiants, l'électricité statique de vos mains et le ronflement à 50 Hz des lignes électriques environnantes.
Pour obtenir une lecture stable, chaque broche d'entrée numérique doit impérativement être fixée en permanence soit au rail d'alimentation positive (HIGH), soit à la masse (LOW). Nul besoin de souder des résistances externes ni d'encombrer la plaque d'essai d'un élève pour y parvenir : la quasi-totalité des microcontrôleurs modernes intègrent des résistances de rappel au niveau haut (pull-up) activables en une seule ligne de code.
Le problème de la haute impédance
Lorsque vous configurez une broche avec pinMode(pin, INPUT), le microcontrôleur place le circuit interne de cette broche dans un état de haute impédance. Sur un ATmega328P (le microcontrôleur qui équipe les cartes classiques Arduino Uno et Nano), la résistance d'entrée d'une broche GPIO standard est d'environ 100 mégohms (100 000 000 Ω). La broche ne consomme ainsi presque aucun courant — moins d'un microampère.
Ce comportement est délibéré : il permet au microcontrôleur de mesurer un circuit externe sans le surcharger ni en déformer le signal. Cependant, cette sensibilité entraîne une conséquence physique directe. Comme il ne faut pratiquement aucun courant pour modifier la tension de grille à l'intérieur de la puce, d'infimes charges électrostatiques présentes à la surface de la broche ou sur un court fil de raccordement suffisent à faire basculer la tension au-dessus du seuil logique.
Sur une carte 5V, toute tension supérieure à environ 3,0V est interprétée comme un niveau HIGH, tandis que tout ce qui se situe en dessous d'environ 1,5V est lu comme un niveau LOW. Lorsqu'une broche n'est connectée à rien, sa tension flotte au hasard dans cette plage intermédiaire. Dès que vous passez la main à proximité, frottez vos semelles sur la moquette synthétique d'une salle de classe ou approchez le bloc d'alimentation d'un ordinateur portable, le couplage capacitif pousse la tension au-delà du seuil, et digitalRead() renvoie 1 (HIGH).
Le cas d'école des pannes en classe
Dans les salles de cours et les ateliers de robotique, ce phénomène engendre une série de difficultés de débogage bien connues :
- Appuis fantômes sur les boutons : Un élève écrit un programme pour allumer une LED lorsqu'on appuie sur un bouton. Dès le téléversement du code, la LED s'allume immédiatement, alors même que personne n'a touché au bouton.
- L'effet d'approche : Le capteur du robot se déclenche dès que la main d'un élève s'approche à moins de dix centimètres de la carte, laissant croire à la classe que leur simple fil de raccordement s'est transformé en détecteur de proximité involontaire.
- Comportement intermittent sur plaque d'essai : Un montage fonctionne parfaitement sur la table de l'enseignant, mais se met à dysfonctionner une fois posé sur le châssis métallique d'un bureau d'élève sous un éclairage fluorescent.
Le remède classique des manuels consiste à ajouter une résistance externe de rappel à la masse (pull-down) ou au niveau haut (pull-up) de 10kΩ sur la plaque d'essai. Pour des débutants, ces composants externes introduisent toutefois des sources d'erreurs inutiles : les élèves se trompent de rail d'alimentation, confondent les bagues de couleur ou créent des courts-circuits francs entre 5V et GND en actionnant les boutons-poussoirs.
La solution propre : INPUT_PULLUP
Les concepteurs de microcontrôleurs ont anticipé ce problème il y a des décennies. Les circuits intégrés comme l'ATmega328P, le RP2040 et l'ESP32 intègrent des résistances directement gravées dans le silicium aux côtés de chaque broche GPIO. Sur un Arduino Uno ou Nano, ces résistances internes présentent une valeur effective comprise entre 20kΩ et 50kΩ.
Vous pouvez enclencher cette résistance directement dans votre fonction setup() en passant une simple constante à pinMode() :
void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
}Lorsque INPUT_PULLUP est appelé, le microcontrôleur relie en interne la broche 2 à son alimentation 5V via une résistance de 20kΩ à 50kΩ. Cette liaison souple tire doucement la broche vers le 5V dès qu'elle se trouve en circuit ouvert. La broche étant désormais ancrée à une source de tension définie, les parasites électrostatiques ne peuvent plus altérer son état. Lorsqu'elle n'est pas sollicitée, la broche renvoie alors un état HIGH parfaitement stable et reproductible.
Le changement de logique : câbler à l'état bas actif
L'utilisation de INPUT_PULLUP exige un petit ajustement de raisonnement pour les élèves : le circuit doit désormais adopter une logique à l'état bas actif (active-LOW).
Puisque la broche est maintenue au niveau HIGH par défaut, le bouton-poussoir ne doit plus la relier au 5V. Il doit au contraire connecter la broche directement à la masse (GND) :
- Bouton relâché (circuit ouvert) : La résistance de rappel interne maintient la broche à 5V.
digitalRead(pin)renvoie HIGH. - Bouton enfoncé (circuit fermé) : La broche est reliée directement à la masse (0V). Le faible courant traversant la résistance de rappel interne s'évacue sans danger vers le GND.
digitalRead(pin)renvoie LOW.
Le câblage matériel s'en trouve simplifié : vous n'avez besoin que de deux fils pour votre interrupteur — l'un vers la broche numérique, l'autre vers n'importe quelle broche de masse (GND) de la carte. Vous supprimez ainsi entièrement le raccordement au rail 5V et les résistances externes.
Côté logiciel, il suffit d'inverser la condition :
void loop() {
int buttonState = digitalRead(2);
// Avec INPUT_PULLUP, LOW signifie que le bouton est enfonce
if (buttonState == LOW) {
digitalWrite(LED_BUILTIN, HIGH);
} else {
digitalWrite(LED_BUILTIN, LOW);
}
}Quand privilégier des résistances externes
Bien qu'INPUT_PULLUP doive constituer la norme en classe pour les boutons numériques, cette solution a des limites dictées par la physique :
| Scénario | Rappel interne (20k–50kΩ) | Résistance externe (1k–10kΩ) |
|---|---|---|
| Bouton-poussoir standard sur plaque d'essai | Idéal (aucun composant superflu) | Complexité inutile |
| Liaisons filaires longues (> 1 mètre) | Sensible au retard capacitif et aux parasites | Obligatoire (utiliser un rappel fort de 1kΩ ou 4,7kΩ) |
| Lignes de communication I2C (SDA/SCL) | Trop faible pour les fréquences de bus élevées | Obligatoire (généralement 2,2kΩ à 4,7kΩ) |
| Exigences de sortie de capteur à l'état haut actif | Impossible d'inverser le rail matériel interne | Obligatoire (utiliser un rappel vers le bas externe vers GND) |
Pour le matériel pédagogique modulaire et les plateformes de prototypage scolaire où les erreurs de câblage doivent être réduites au strict minimum, découvrez notre sélection de capteurs et composants pour microcontrôleurs disponible sur Sheen Robotics Store.
Récapitulatif pour les enseignants
- Ne laissez jamais une entrée flottante : Si une broche d'entrée est configurée avec un simple
INPUT, elle doit obligatoirement être fixée en permanence à une tension définie par un circuit externe. - Adoptez
INPUT_PULLUPpar défaut : Modifiez vos modèles de cours habituels pour initialiser les broches avecpinMode(pin, INPUT_PULLUP). - Câblez les boutons vers GND et non vers le 5V : Cela réduit le nombre de composants sur la plaque d'essai, élimine les risques de court-circuit et reproduit les standards industriels de câblage.
- Enseignez l'état bas actif sans attendre : Expliquer pourquoi
LOWcorrespond à l'état « actif » initie les élèves aux réalités de l'électronique, où relier un circuit à la masse s'avère bien plus sûr et robuste que de faire transiter des rails d'alimentation positive par des commutateurs déportés.



