LOCODUINO

Entrées numériques et résistance pull-up

Entrées numériques et résistance pull-up (1)

.
Par : Marc-Henri

DIFFICULTÉ :

Cet article précise comment utiliser les entrées numériques en y connectant un bouton poussoir. Il introduit le concept de résistance pull up et décrit comment utiliser les résistances pull up internes au microcontrôleur.

Lorsque l’on utilise les entrées numériques de l’Arduino, celles que l’on peut lire par l’instruction digitalRead(...), certains principes de base doivent être pris en compte.

La présentation générale des entrées sorties de l’Arduino fait l’objet de l’article de Jean-Luc : Les entrées sorties de l’Arduino.

Les images suivantes sont adaptées des exemples présentés dans www.arduino.cc.

Un premier exemple

À titre d’exemple, considérons la connexion d’un bouton poussoir à une entrée numérique de l’Arduino. On pourrait penser qu’il suffit de connecter un poussoir comme suit :

Lorsque le bouton est pressé, l’entrée est à 5 V, mais lorsque le bouton n’est pas pressé, elle n’est pas définie car elle est "en l’air". Les entrées du microcontrôleur équipant l’Arduino sont très sensibles et elles réagissent à la tension qui leur est appliquée. En conséquence, l’entrée laissée en l’air peut avoir n’importe quelle valeur comprise entre 0 et 5 V et être interprétée comme un LOW ou un HIGH par l’instruction digitalRead(...).

Résistance pull down

Pour fixer la tension lorsque le bouton n’est pas pressé, on insère une résistance pull down (résistance de tirage vers le bas) entre l’entrée et la masse (GND) dont le rôle est d’assurer que l’entrée est à 0 V lorsque le poussoir n’est pas pressé.

Lorsque le poussoir est pressé, un courant égal à 5 V / R circule dans la résistance. Pour une alimentation de 5 V, une bonne valeur pour R est d’au moins 4.7 Kilo-Ohm, le courant sera alors de 1.1 mA.

Résistance pull up

Pour des raisons liées aux technologies des circuits logiques, les électroniciens préfèrent utiliser une résistance pull up (résistance de tirage vers le haut) entre l’entrée et l’alimentation (5 V dans le schéma ci-après) et connecter le poussoir comme suit.

La résistance pull up doit aussi avoir une valeur d’au moins 4.7 Kilo-Ohm. Le raisonnement est le même que pour la résistance pull down, lorsque le bouton est pressé, l’entrée est à 0 V et un courant de 1.1 mA circule dans la résistance. Lorsque le bouton n’est pas pressé, l’entrée est à 5 V et il ne circule aucun courant dans la résistance. Dans le programme, il faut inverser le résultat retourné par digitalRead(...) comme suit pour tester que le bouton est pressé :

if (digitalRead (2) == LOW)
{
  // Actions à faire lorsque le bouton est pressé.
   ... 
}

Pour faciliter la compréhension de cet exemple, le numéro de la pin est codé en dur, la bonne pratique serait de définir une constante avec un nom significatif comme par exemple : int pinBouton = 2;

Résistance pull up intégrée au microcontrôleur

Les résistances pull up sont très communes en électronique numérique, raison pour laquelle le microcontrôleur qui équipe l’Arduino dispose de résistances pull up internes qui évitent l’utilisation de résistances externes. Ces résistances internes ont une valeur comprise entre 20 et 50 Kilo-Ohm, certes plus élevée que la valeur recommandée pour une résistance externe, mais suffisante. Le schéma ci-après illustre le câblage du poussoir sans résistance pull up externe, la résistance pull up interne étant représentée en traitillé et à l’intérieur de la carte Arduino,

Pour activer la résistance pull up interne d’une entrée, par exemple la no 2, il suffit d’écrire, dans la fonction setup :

pinMode (2, INPUT_PULLUP);

à la place de :

pinMode (2, INPUT);

Le test de l’état du bouton s’effectue de la même manière qu’avec une pull up externe.

En se basant sur cet exemple, nous verrons dans un autre article comment connecter un ILS ou une détection de présence aux entrées numériques de l’Arduino.

32 Messages

  • Entrées numériques et résistance pull-up 22 décembre 2017 09:21, par Daniel Lyonnet

    Bonjour,
    Aimant l’équilibre, j’ai trouvé la résistance interne de pull up mais rien sur pull down.
    Est ce normal ?
    Ou alors en cas de necessité de pull down faut il en passer par la résitance extérieure.
    Merci par avance de votre commentaire.

    Répondre

    • Entrées numériques et résistance pull-up 22 décembre 2017 13:46, par Jean-Luc

      Bonjour,
      Sur les Arduino à base d’AVR, il n’y a pas de résistance pull down et, oui, il faut mettre une résistance externe. Cette possibilité existerait sur les Arduino à base d’ARM mais elle n’est pas offerte par la bibliothèque Arduino.

      Répondre

  • Entrées numériques et résistance pull-up 27 janvier 2018 20:09, par Jack

    Bonsoir

    Je me demande comment une simple instruction comme pinMode (2, INPUT_PULLUP) peut réaliser un branchement en dur à l’intérieur de l’arduino. Merci d’avance pour la réponse.

    Répondre

  • Entrées numériques et résistance pull-up 19 janvier 2019 07:23, par LuckyMaxou

    Bonjour,
    j’ai lu quelque part que lorsqu’on mettait une pin en INPUT_PULLUP la carte gardait cela en mémoire et que si on utilisait ultérieurement la pin en sortie il fallait modifier...
    est ce que ca veut dire que si on reutilise la carte avec un autre programme la pin reste en pull up et que le programme buggera sans qu’on comprenne car on aura oublié qu’un jour la pin a été mise en pull up ?
    si oui comment eviter le piège ?
    Merci

    Répondre

  • Entrées numériques et résistance pull-up 19 janvier 2019 08:48, par Jean-Luc

    Bonjour,

    non pas du tout. Lors d’un reset et donc à la mise sous tension, toutes les broches sont configurées en INPUT. Le micro contrôleur ne retient que ce qui est en flash (le programme et les constantes du programme) et ce qui est en EEPROM (données sauvegardées par le programme).

    Répondre

  • Entrées numériques et résistance pull-up 8 février 2019 18:14, par eugenio

    Quelle est la valeur de la résistance de pull-up de l’arduino UNO

    Répondre

  • Entrées numériques et résistance pull-up 1er juin 2019 19:08, par Blofeld

    Bonjour,

    N’y a t’il pas une petite chute de tension entre les bornes de la résistance de pull up qui fait qu’on a plus 5v en entrée de l’Arduino ?
    Cette chute si elle existe se calcule t elle , et est-ce lié à l’impédance du circuit logique ?

    Répondre

  • Entrées numériques et résistance pull-up 23 septembre 2019 09:04, par Louis lebourcon

    bonjour pouvais vous m’aidée pour cette question

    Sachant qu’un Arduino est alimenté en 5V, calculer la valeur de ces résistances pour un courant de tirage de 10uA

    merci d’avance

    Voir en ligne : Entrées numériques et résistance pull-up

    Répondre

  • Entrées numériques et résistance pull-up 23 septembre 2019 23:12, par msport

    Tiens, bizarre, la question est formulée comme celle d’un exo ...

    Répondre

  • Entrées numériques et résistance pull-up 29 novembre 2019 14:05, par Michel

    Bonjour,
    Je viens de faire un montage correspondant au 1er schéma de la résistance "pull down". Ma résistance chauffe très fort si on maintient le bouton poussoir appuyé. Cela me parait logique puisqu’elle crée un court circuit, une des broches est au GND et l’autre au 5V.
    Or la carte arduino fournit du 5V, j’ai pris une résistance de 10kiloohms, je trouve I=0,5mA et donc P=0,0025W bien inférieur à 1/4W
    Je ne comprends donc pas pourquoi elle chauffe à ce point ...
    Pourriez-vous éclairer ma lanterne ?
    Merci d’avance
    (un débutant qui se questionne)

    Répondre

  • calculer la valeur des resistences 21 janvier 2020 22:02, par micka

    Bonjour,
    Je n’ai pas compris comment calculer la valeure des résistances de pullup et pull down.
    Que je comprenne, imaginons que j’ai du 3,3v au lieu du 5v. Mon but est en fait d’obtenir, pour une pulldown, 3,3/R=0,0011 -> R=3000 -> R=3Kohm ?
    et pour une pullup j’ai U=RxI -> 3,3=Rx0,0011 -> R=3000 -> R=3Kohm ?
    j’ai pigé ou pas du tout ?
    ps : pourquoi 0,0011A ? merci ;)

    Répondre

    • calculer la valeur des resistences 11 janvier 12:35, par erbrpr

      Bonjour, Pourquoi 0.0011 A ?
      1/ Est-ce une question d’intensité qu’il ne faut pas dépasser pour une sortie ("préférable de ne pas dépasser une consommation de 20 mA sur une broche programmée en sortie" d’après l’article sur les entrées/sorties) ?
      2/ Cette remarque est-elle applicable à la broche 5V d’une Arduino Uno R3 sur laquelle on branche un interrupteur ?
      3/ les 0.001 A viennent-ils de l’intensité prise par un bouton poussoir ?

      Peut-on formuler le problème du PULL DOWN comme suivant ?
      4/ On cherche la valeur de la résistance pour que, interrupteur ouvert, le courant parasite de la broche "en l’air" soit drainé par la différence de potentiels électrique entre la broche "en l’air" et la broche GND et non pas l’entrée numérique de l’Arduino ?
      5/ Donc peut-on plutôt aborder le problème suivant les étapes R=U/I = 5V/0.002A = 2500Ω donc 3.3kΩ dans le commerce puis 4,7 kΩ. Donc avec 4.7kΩ si interrupteur ouvert alors (digitalRead (2) == LOW) avec certitude sinon (else) on a état pin 2 == HIGH

      Je suis très novice en électronique. Merci pour votre aide :)

      Voir en ligne : entrées numériques et résistance pull-up

      Répondre

  • Entrées numériques et résistance pull-up 21 janvier 2020 23:33, par msport

    En fait les valeurs sont données à titre d’exemple.
    Le tout c’est que ça ne chauffe pas, que ça ne consomme pas trop mais que la résistance soit assez faible pour que les parasites qui se présentent soient atténués et ne dépassent pas les seuils des niveaux logiques.
    Pour le reste, c’est la loi. (d’Ohm)

    Répondre

  • Entrées numériques et résistance pull-up 24 novembre 2020 10:12, par leo.v66

    Bonjour,

    J’ai bien compris le système de résistance de pullup interne ce qui m’évite de mettre des résistances à l’extérieur du circuit.

    Peut-on mettre plusieurs sorties en mode Input_Pullup ?
    Par exemple, pour ce que je veux faire, un interrupteur et un bouton.

    Répondre

  • Entrées numériques et résistance pull-up 3 novembre 2021 12:04, par Léo Sailhac

    Bonjour

    J’aimerais pouvoir effectuer une action quand le port A0 reçoit du courant. J’ai essayé sans réussir. Quelqu’un pourrait m’aider ? Voici mon code actuelle :

    pinMode (A0, INPUT_PULLUP) ;
    int pinBouton = A0 ;

    void loop()

    if (digitalRead (A0) == LOW) ;

    // Affichage
    Serial.println("Ouverture de la porte") ;

    // Ouverture de la porte & Initialisation
    digitalWrite(Gate_PIN, ON) ;
    delay(3000) ;
    digitalWrite(Gate_PIN, LOW) ;
    delay(1000) ;

    Répondre

    • Entrées numériques et résistance pull-up 3 novembre 2021 13:39, par msport

      Bonjour,
      ça a l’air correct. Les accolades ont du disparaitre à cause de l’éditeur.
      Vérifiez la mise au GND pour la commande à LOW. Voir les schémas publiés.
      Cordialement

      Répondre

      • Entrées numériques et résistance pull-up 25 juillet 2022 19:47, par FAIVRE

        Si on utilise un contact inverseur avec le NC au GND, le NO à VCC et le commun à l’entrée on doit pouvoir se passer de résistance.
        Idem si on inverse GND et VCC.
        Je dis des bétises ?

        Répondre

  • Bonjour,
    J’ai deux questions auquel je ne trouve aucune réponse claire :

    • Tout d’abord, si je comprend bien, déclarer une broche comme INPUT PULLUP implique une consommation de courant (au moins lorsqu’on lui impose un état bas). Y a-t-il une limite du nombre de broches que l’on peut déclarer comme INPUT PULLUP pour ne pas dépasser le courant délivrable par le microcontrôleur au risque de l’endommager ou celui-ci va juste saturer en courant sans incidence sur l’état détecté par la broche ou sur la durée de vie du micro ?
      Pour préciser, dans mon cas j’utilise un AT91SAM3X8E (le microcontrôleur de l’Arduino Due) auquel je relie un bon nombre d’entrées (26) qu’il serait préférable de déclarer comme INPUT PULLUP pour économiser des résistances inutiles à mon montage. Mais Puis-je utiliser les résistances internes du micro car si le courant que cela implique provoque une surcharge sur la broche VCC (où ces résistances internes sont reliées si j’ai bien compris), je devrai peut être envisager d’utiliser des résistances pull-up externes utilisant une autre source d’alimentation ne passant pas par le micro.
    • Ensuite, pour mesurer les états qu’on leur impose, j’imagine que les broches du microcontrôleur consomment un peu de courant, ne faut-il donc pas ajouter une résistance au montage juste devant l’entrée pour limiter ce courant ou est-ce déjà prévu par le micro ?

    Merci d’avance,
    Simon

    Répondre

    • Bonjour Simon,

      Ensuite, pour mesurer les états qu’on leur impose, j’imagine que les broches du microcontrôleur consomment un peu de courant, ne faut-il donc pas ajouter une résistance au montage juste devant l’entrée pour limiter ce courant ou est-ce déjà prévu par le micro ?

      L’impédance d’entrée est supérieure à 1MΩ. Inutile de mettre une résistance supplémentaire.

      Cordialement

      Répondre

  • Entrées numériques et résistance pull-up (1) 15 mai 11:08, par Marc-Henri

    Bonjour Simon,

    La documentation des microcontrôleurs Atmel mentionne que les résistances pull-up intégrées sont comprises entre 20 et 50 kOhm. En imposant un état bas à l’entrée, le courant, pour 5 Volt sera compris entre 100 et 250 uA (micro).

    Dans le pire cas, avec 26 entrées à l’état bas et pull-up à 20 kOhm, le courant sera de 6.5 mA, ce qui ne devrait pas perturber le microcontrôleur.

    Meilleures salutations.

    Répondre

Réagissez à « Entrées numériques et résistance pull-up (1) »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Atelier »

Les derniers articles

Les articles les plus lus