Modifications

Sauter à la navigation Sauter à la recherche
6 833 octets ajoutés ,  27 février 2017 à 14:52
Ligne 1 : Ligne 1 :  
== Bouton tactile (mini kit) ==
 
== Bouton tactile (mini kit) ==
MC Hobby propose un [http://mchobby.be/PrestaShop/product.php?id_product=39 mini kit "Bouton tactile"] sur son WebShop.
+
MC Hobby propose un {{pl|39|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 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:
 
Ce kit contient:
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.
   −
Vous pouvez aussi trouvez d'[http://mchobby.be/PrestaShop/category.php?id_category=25 autre mini-kit ici].
+
Vous pouvez aussi trouvez d'{{cl|25|autre mini-kit ici}}.
    
== Entrée digitale ==
 
== Entrée digitale ==
Ligne 89 : Ligne 91 :  
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.
 
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.
   −
[[Fichier:Bouton tactile raccordement 1.jpg]]
+
[[Fichier:Bouton tactile raccordement 1.jpg|150px]]
    
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:
 
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:
Ligne 96 : Ligne 98 :     
[[Fichier:Bouton tactile raccordement 2.jpg]]
 
[[Fichier: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. 
 +
 +
[[Fichier:switchbounce.jpg|400px]]
 +
 +
Source: [http://www.ladyada.net/learn/arduino/lesson5.html 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:
 +
# Utiliser une capacité de déparasitage (déparasitage matériel).
 +
# 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 [http://www.ladyada.net/learn/arduino/lesson5.html Ladyada].
 +
<nowiki>
 +
/*
 +
*  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
 +
  }
 +
}
 +
</nowiki>
 +
 +
=== 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).
 +
 +
[[Fichier:debounceInput.png]]
 +
 +
Source: [http://www.ladyada.net/learn/arduino/lesson5.html AdaFruit]
 +
 +
A noter que vous pouvez facilement remplacer les capacités de 100nF par des {{pl|456|capacités de 10nF comme celles-ci}}. Les capacités de 10nF sont particulièrement appréciées pour filtrer les parasites sur les lignes d'alimentation de vos circuits intégrés. Vous pouvez profiter de cette même efficacité pour vos montages.
 +
 +
 +
'''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 [http://www.ikalogic.com/debouncing.php IkaLogic].
 +
 +
[[Fichier: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 [http://www.ac-nancy-metz.fr/pres-etab/lycom/electro/cours-electro/triggerdeschmitt.htm 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: [http://arduino103.blogspot.com/2011/12/boutons-contacts-et-deparatisage.html Boutons, contacts et déparasitage matériel].
 +
 +
== Où acheter ==
 +
* {{pl|39|mini kit "Bouton tactile" standard 6mm}} sur son WebShop.<br />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.
 +
* {{pl|378|Bouton tactile étroit}}
 +
* {{pl|1086|Bouton tactile large 12mm}} (très pratique pour les Workshops.
 +
* {{pl|187|Bouton tactile avec capuchon carré}}
 +
* {{pl|344|Bouton tactile avec capuchon rond}}
 +
* {{pl|489|Un keypad 4 bouton}}, équivalent à 4 boutons poussoir.
 +
 +
<hr />
 +
Une partie de ce travail est basé sur la documentation d'AdaFruit.
 +
 +
{{ADF-Accord}}
 +
 +
{{MCH-Accord}}
30 894

modifications

Menu de navigation