Différences entre versions de « Entrée Bouton »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 6 : Ligne 6 :
 
* 3 résistances de 10 KOhms (Brun-Noir-Orange-Or).
 
* 3 résistances de 10 KOhms (Brun-Noir-Orange-Or).
 
* 3 résistances de 100 Ohms (Brun-Noir-Brun-Or).
 
* 3 résistances de 100 Ohms (Brun-Noir-Brun-Or).
 +
 +
[[Fichier:Bouton Tactile (Mini Kit) LOW-RES.jpg|250px]]
  
 
Le restant de cet article explique, en détail, le montage d'une entrée de type bouton.
 
Le restant de cet article explique, en détail, le montage d'une entrée de type bouton.

Version du 31 mars 2012 à 20:39

Bouton tactile (mini kit)

MC Hobby propose un mini kit "Bouton tactile" sur son WebShop. Ce mini-kit contient tous les éléments nécessaires à la réalisation du montage d'une entrée bouton pour Arduino, Beagle-Bone, Pinguino ou autre plateforme équivalente. Ce kit contient:

  • 3 boutons tactiles
  • 3 résistances de 10 KOhms (Brun-Noir-Orange-Or).
  • 3 résistances de 100 Ohms (Brun-Noir-Brun-Or).

Bouton Tactile (Mini Kit) LOW-RES.jpg

Le restant de cet article explique, en détail, le montage d'une entrée de type bouton.

Vous pouvez aussi trouvez d'autre mini-kit ici.

Entrée digitale

Avec Arduino, il est possible de configurer une pin en entrée ou en sortie.

Lorsqu'elle est configurée en entrée, il est possible de lire l'état haut/bas dans le programme.

  • Un état "haut" (HIGH) correspond au raccordement vers le +5 volts.
  • Un état "bas" (LOW) correspond au raccordement à la masse (GND, 0 Volts).

Il est fortement déconseillé d'appliquer plus de 5 volts sur une entrée...ce qui aurait pour effet d'endommager l'entrée, voire d'envoyer le micro-contrôleur "Ad Patres".

protéger l'entrée digitale

Comme précisé, l'entrée digitale est configurée dans le programme.

Si par malheur cette entrée est raccordée au +5 volts et que le programme configure la pin en sortie (OUTPUT), on a toutes les chances de produire un court-circuit franc!

Le micro-contrôleur n'appréciera pas et encore une fois, il a de forte chance de rendre visite à Saint Pierre.

Pour protéger l'entrée d'un tel risque, l'on insère généralement une résistance de 100 Ohms entre l'entrée et le reste du circuit.

Bouton1.png

source: AdaFruit

Raccordement du bouton

Maintenant, il ne reste plus qu'a raccorder l'entrée (protégée) soit au +5 volts, soit à la masse.

C'est bien entendu possible à l'aide d'un bouton deux directions ou un bouton a bascule (deux direction) comme celui présenté ci-dessous.

Les principaux désavantages d'une telle option sont:

  1. Le prix beaucoup plus élevé qu'un simple bouton poussoir.
  2. L'encombrement général.
  3. D'une façon générale, les gens préfèrent pousser des boutons plutôt que de basculer des leviers :-)

Bouton2.jpg

TODO: changer la photographie

Le raccordement ressemble alors à ceci:

Bouton3.png

Source: AdaFruit

Resistance de Pull-up et de Pull-down

Il est pourtant possible d'utiliser un simple bouton poussoir miniature pour atteindre exactement le même résultat qu'avec un bouton à levier deux directions.

On utilise alors un montage dit "pull-down resistor"

Résistance Pull-down resistor

Dans un montage "pull-down resistor" (résistance pull-down tirant le potentiel vers le bas [0v] par défaut), une résistance supplémentaire de 10KOhms est utilisée pour amener l'entrée à la masse (par défaut). Si l'utilisateur presse le bouton, 5Volts sont alors appliqués sur l'entrée. Si l'utilisateur relâche le bouton, la résistance pull-down ramène l'entrée à la masse. Notez que la résistance de protection de 100 Ohms est toujours insérée dans le circuit.

Button-PullDown.png

Source: AdaFruit

Résistance Pull-up

Le montage Pull-Up resistor est le montage complémentaire du Pull-Down Resistor. Dans son fonctionnement par défaut, un Pull-Up resistor applique 5Volts sur l'entrée tant que l'utilisateur ne presse pas le bouton. Lorsque l'utilisateur presse le bouton, l'entrée est raccordée à la masse. C'est un cas typique des commandes de Reset, le Reset n'étant effectif/signalé que lorsque le signal appliqué passe à la masse (c'est en autre le cas d'Arduino).

Button-PullUp.png

Source: AdaFruit

Valeur de la résistance de Pull-up/Pull-Down

La résistance est ici de 10KOhms, c'est une valeur assez commune permettant d'identifier facilement un circuit de pull-up/down. Il est possible de diminuer cette résistances à 4.7 KOhms mais cela consommera aussi plus de courant. Il n'est pas conseillé d'utiliser une résistance de pull-up de plus de 10KOhms.... à partir de 100 KOhms, la résistance de pull-up/down interfère avec la circuiterie interne du micro-contrôleur et le résultat (la détection) deviendrait incertain.

Le bouton tactile du mini kit

Dans les montages présentés ci-dessus, le bouton tactile proposé par MC Hobby peut se monter très facilement.

Sa forme carrée peut laisser penser qu'il est facile de monter le bouton "de travers" puisqu'il est facile de le tourner d'un quart de tour, un demi tour.

Bouton tactile raccordement 1.jpg

Il n'est pourtant pas nécessaire d'avoir recourt à un multimètre pour être certain du montage, tout soucis de mauvais raccordement peut facilement être écarté en utilisant le principe suivant:

"Toujours utiliser les bornes de deux coins totalement opposés pour effectuer le raccordement" (simple et efficace)

Bouton tactile raccordement 2.jpg

Vous constaterez dans l'exemple ci-dessus que même si le bouton est tourné d'un quart de tour (à droite de l'image), la position des points de raccordements (en bleu) font que ce dernier opère toujours correctement. Il n'y a ni court-circuit, ni dysfonctionnement :-) .

Déparasitage des boutons

Lorsque l'on presse/relâche un bouton, il y a souvent l'apparition de parasites pendant quelques milisecondes. Ce parasites n'apparaissent que durant les moments où l'on enfonce/relâche le bouton poussoir.

Switchbounce.jpg

Source: AdaFruit

Si l'on compte le nombre de pressions (pour faire un compteur), ces parasites viennent justement perturber le bon fonctionnement du logiciel. Le problème est matériel... et les parasites viennent ajouter des "pressions" fantômes (voir leçon 5 ci-avant).

Il y a deux façons de corriger le problème:

  1. Utiliser une capacité de déparasitage (déparasitage matériel).
  2. Introduire un délai logiciel dans le programme (déparasitage logiciel).

Déparasitage logiciel

Puisque le phénomène transitoire ne dure que quelques micro-secondes, il suffirait de faire deux lectures successives de l'entrée (après un délai de quelques millisecondes) et de s'assurer qu'il ne s'agit pas d'une phase transitoire. S'il ne s'agit pas d'une phase transitoire, la lecture de l'état de l'entrée 10 ms plus tard doit être identique à celle 10 ms plus tôt. Personne n'arrivant à presser et relâcher un bouton en moins de 10 ms.

Voici donc un bout de code (francisé) issus du tutoriel de de Ladyada.

/*
 *  Eclairage Velo avec bouton déparasité
 *  Presser une fois  
 */

  int switchPin = 2; // Bouton connecté à la pin 2 (pull-up, LOW=bouton pressé)
  int led1Pin = 12;
  int led2Pin = 11;
  int led3Pin = 10;
  int led4Pin = 9;
  int led5Pin = 8;

  int val;        // variable pour lire l'état de l'entrée
  int val2;       // variable pour lire l'état de l'entrée (après un delai)
  int buttonState;   // variable pour mémoriser l'état du bouton
  int lightMode = 0;              // La lampe est elle allumée?

void setup() {
  pinMode(switchPin, INPUT);    // Le bouton est une entrée 
  
  pinMode(led1Pin, OUTPUT);
  pinMode(led2Pin, OUTPUT);
  pinMode(led3Pin, OUTPUT);
  pinMode(led4Pin, OUTPUT);
  pinMode(led5Pin, OUTPUT);
  
  buttonState = digitalRead(switchPin);   // lecture de l'état initial
}

void loop(){
  val = digitalRead(switchPin);      // Lecture de la valeur d'entrée
  delay(10);                         // 10 millisecondes
  val2 = digitalRead(switchPin);     // Relecture de l'entrée pour vérification de parasitage

  if (val == val2) {                 // S'assurer que l'on a 2 lectures successives consistante!

    if (val != buttonState) {          // Le bouton a changer d'état!
      if (val == LOW) {                // Le bouton est il pressé?
        if (lightMode == 0) {          // La lumière est-elle éteinte?
          lightMode = 1;               // Allumer la lumière!
          digitalWrite(led1Pin, HIGH);
          digitalWrite(led2Pin, HIGH);
          digitalWrite(led3Pin, HIGH);
          digitalWrite(led4Pin, HIGH);
          digitalWrite(led5Pin, HIGH);
        } else {
          lightMode = 0;               // Éteindre la lumière!
          digitalWrite(led1Pin, LOW);
          digitalWrite(led2Pin, LOW);
          digitalWrite(led3Pin, LOW);
          digitalWrite(led4Pin, LOW);
          digitalWrite(led5Pin, LOW);
        }
      }
    }
    buttonState = val;                 // Sauver le nouvel état du bouton dans une variable
  }
}

Déparasitage matériel - version 1

Le déparasitage se fait à l'aide d'une capacité qui absorbera les impulsions parasites. Mais à elle seule, elle n'est pas suffisante (voir version 2 ci-dessous). Dans le cas d'un montage pull-up, l'on place une capacité de 100nF comme suit (100 nF pour une résistance de pull-up de 10KOhm).

DebounceInput.png

Source: AdaFruit

Lorsque l'on presse le bouton:

  • La capacité et instantanément déchargée (court-circuité par le bouton).
  • L'entrée passe en LOW.
  • Si il y a des parasites (pics a +5 volts) au niveau du bouton, ces derniers seront absorbés par la capacité.

Lorsque l'on relâche le bouton:

La tension est appliquée sur la capacité et cette dernière va se charger assez vite.

Cependant, la charge n'est pas instantanée mais progressive.

Cela veut dire que les 5 volts sont appliqués progressivement à l'entrée comme le montre le graphique issu de IkaLogic.

Ikalogicproblem2.jpg

Sur le graphique, l'on voit clairement que la courbe de charge passe un certain temps dans la zone d'incertitude où le micro-contrôleur ne sait pas si c'est toujours un 0 ou déjà un 1 logique. Le parasitage existe donc toujours au moment ou l'on relâche le bouton (mais sous une autre forme). Pour éviter ce nouveau type de parasitage, il fait insérer un trigger de Schmitt sur l'entrée. Ainsi, tant que la tension sera en dessus du seuil minimal du 1 logique, le trigger ne change pas d'état vers 1... et inversement tant que la tension ne sera pas passée sous le seuil minimum du trigger (0 logique), le trigger ne repassera pas à 0.

Déparasitage matériel - version 2

Un deuxième article beaucoup plus précis est paru sur le déparasitage matériel.

Vous pouvez le consulter ici sur le blog de MC Hobby: Boutons, contacts et déparasitage matériel.

Où acheter

MC Hobby propose un mini kit "Bouton tactile" sur son WebShop. Ce mini-kit contient tous les éléments nécessaires à la réalisation du montage d'une entrée bouton pour Arduino, Beagle-Bone, Pinguino ou autre plateforme équivalente.