Les boutons-poussoirs
Sommaire du chapitre
- Les boutons-poussoirs
- Le branchement
- Mise en pratique avec la carte CREPP.io
- L'anti-rebond
- Un montage simplifié
- A retenir
- Une première tentative de montage
- Un montage avec une résistance de tirage
- Les montages pull-up
- Avec un délai logiciel
- Avec un délai électronique
- Principe
- Code
- Principe
- Code
- Propriété des circuits RC
Les boutons-poussoirs

Les boutons-poussoirs sont des composants couramment utilisés pour interagir avec un utilisateur.
Dans cette section, nous allons expliquer en détail comment utiliser un bouton-poussoir avec un
microcontrôleur. Nous couvrirons le branchement du bouton-poussoir, l'utilisation de résistances
de pull-up et pull-down, et comment lire l'état du bouton-poussoir avec un microcontrôleur.
Un bouton-poussoir est un interrupteur avec une position de repos lors de l'absence de pression de la part de l'utilisateur.
Il est donc à dissocier de l'interrupteur qui comporte lui aussi plusieurs positions mais sans revenir à une position déterminée.
La plupart des boutons poussoir possèdent 4 broches et le schéma interne, bien que non universel, est souvent le suivant :


Le branchement
Une première tentative de montage
Nous sommes naturellement tenté de faire le montage suivant :

Faisons le raisonnement pour le cas d'utilisation.
Quand on appuie sur le bouton, que vaut la tension sur la broche ?
La tension vaut 3.3V, on retrouve la broche qui se retrouve au 3.3V.
Et quand on laisse le bouton au repos (normalement ouvert), que vaut la tension sur la broche ?
On se retrouve avec une tension indeterminée... Il n'y a pas de raison d'avoir du 3.3V ou bien du 0V.
Nous sommes dans le cas avec une tension flottante.
Ce genre de montage, hors résistance de tirage que nous verrons par la suite, est à bannir. Nous allons donc voir un type de montage pour éviter cela.
Un montage avec une résistance de tirage
Principe
Nous voyons donc que lorsque le bouton est au repos, il faut définir son niveau logique. Nous allons donc incorporer une résistance de la façon suivante :
Nous avons résolu notre problème car lorsque le bouton est au repos (pas d'appui), la broche est reliée à la masse par l'intermédiaire de la résistance. Le niveau logique est donc fixé à LOW.
Ce type de montage est appelé car la résistance vient forcer, lors du repos, au niveau LOW
Pour utiliser une résistance de pull-down, suivez ces étapes :
Connectez une extrémité de la résistance à la broche du bouton-poussoir qui est connectée à la broche d'entrée de votre microcontrôleur.
Connectez l'autre extrémité de la résistance à la masse (GND).
Connectez l'autre broche du bouton-poussoir à VCC (tension d'alimentation) comme précédemment.
Qu'en-est-il de la valeur de la résistance ?
Il convient de prendre une résistance pour limiter le courant quand le bouton-poussoir est pressé. On met généralement des résistances de l'ordre de la dizaine de kilo$\Omega$ pour ce genre de montage.
Mise en pratique avec la carte CREPP.io
La carte CREPP.io intègre 4 boutons poussoirs avec la configuration Pull-Up. Cela veut dire que par défaut, le niveau logique est HAUT.

Pour l'instant, nous n'utiliserons par le bouton LEFT, relié au Jumper D8.
Lors du téléversement du code, il faut que cette broche soit au niveau logique BAS
alors qu'avec le montage de la carte, il est HAUT.
Il faut donc retirer le jumper D8 pour l'instant.
Code
Code pour les boutons Nous allons utiliser la fonction qui va lire l'état logique de la broche reliée au bouton-poussoir.
On constate qu'avec un montage ,lors d'un appui sur le bouton, le niveau logique sur la broche passe à HIGH. C'est normal car à l'état de repos, le niveau est LOW.
Les montages pull-up
Principe
Le montage est le contraire du :Connectez une extrémité de la résistance à la broche du bouton-poussoir qui est connectée à la broche d'entrée de votre microcontrôleur.
Connectez l'autre extrémité de la résistance à VCC (tension d'alimentation).
Connectez l'autre broche du bouton-poussoir à la masse (GND) comme précédemment.

Code
#include //For Platform.io
const uint8_t buttonPin = D5; //Connected pin of button
void setup()
pinMode(buttonPin, INPUT); //As input
Serial.begin(9600); //Communication with computer
void loop()
{
//Read button state
bool stateButton = digitalRead(buttonPin);
//Display result
Serial.println(stateButton);
if(stateButton == LOW)
Serial.println("Pressed");
delay(10);
}
L'anti-rebond
Le rebond de contact, également connu sous le nom de rebond mécanique, est un phénomène courant lors de l'utilisation de boutons poussoirs ou d'interrupteurs mécaniques. Lorsque vous appuyez sur un bouton, les contacts métalliques à l'intérieur peuvent rebondir, créant une série de connexions et de déconnexions rapides avant de se stabiliser.

La figure précédente montre clairement l'instabilité du niveau logique lors d'un appui sur un bouton-poussoir.
Cela peut entraîner des problèmes de lecture du bouton, tels que des détections multiples
d'appuis ou de relâchements, même si vous n'appuyez ou ne relâchez le bouton qu'une seule fois.
Nous allons donc chercher à lutter contre ce phénomène. L'utilisation d'une technique appelée "anti-rebond" est courante pour atténuer ce problème.
Avec un délai logiciel
L'idée est d'ajouter un délai entre les lectures du bouton, permettant ainsi aux rebonds mécaniques de se stabiliser avant que le programme ne traite
l'état du bouton.
Voici la version du programme qui ajoute un anti-rebond.
#include //For Platform.io
const uint8_t buttonPin = D2; //Connected pin of button
void setup()
pinMode(buttonPin, INPUT); //As output
Serial.begin(9600); //Communication with computer
void loop()
{
//Read button state
bool stateButton = digitalRead(buttonPin);
//Display result
Serial.println(stateButton);
if(stateButton == LOW)
Serial.println("Pressed");
delay(100);
delay(10);
}
Avec un délai électronique
L'utilisation d'un circuit RC (résistance-condensateur) pour gérer le rebond du bouton est une technique physique qui peut être intégrée à votre montage.
Un circuit RC, basé sur une résistance et un condensateur en série, crée un délai lors du changement d'état du bouton en raison du temps de charge ou de
décharge du condensateur à travers la résistance.
Cela peut aider à filtrer les rebonds mécaniques.
Propriété des circuits RC
(0,0) coordinate (ref_gnd); (ref_gnd) to[american voltage source=$V$] ++(0,2) to[R=$R_1$] ++(3,0) to[C=$C_1$] ++(0,-2) – (ref_gnd);
La manière dont le circuit RC se charge ou se décharge est déterminée par la constante de temps ($\tau$), mesurée en secondes.
La constante de temps est le produit de la résistance (R) et de la capacité (C) dans le circuit et est souvent notée comme $$ \tau= R * C$$.
[ title=Charge d'un condensateur en fonction du temps, xlabel=Temps (s), ylabel=Tension (V), grid=major, width=0.9, height=8cm, legend pos=north east, ] 1 1 1 - exp(-x / ( * )); ;
Le circuit RC offre un délai déterminé par la constante de temps RC.
Vous pouvez ajuster les valeurs de la résistance (R) et du condensateur (C)
pour modifier le délai en fonction de vos besoins spécifiques.
Il existe une multitude de façon de corriger les rebonds, nous ne pouvons pas toutes les traiter en détail.
Un montage simplifié
De nos jours, la plupart des microcontrôleurs intègrent des résistances internes de tirage [2] ou }. Les microcontrôleurs ESP12 intègrent des résistances de .
Pour les activer, il faut changer le mot-clé INPUT en INPUT\_PULLUP dans la fonction .
Les résistances internes en mode ne sont pas disponibles sur les cartes ES12 [1], contrairement aux cartes Arduino. Uniquuement les broches sont disponibles.
Le montage s'en trouve simplifié, il devient :

Et le code devient :
#include //For Platform.io
const uint8_t buttonPin = D2; //Connected pin of button
void setup()
pinMode(buttonPin, INPUT_PULLUP); //Enable internal resistance (Pull-up)
Serial.begin(9600); //Communication with computer
void loop()
{
//Read button state
bool stateButton = digitalRead(buttonPin);
//Display result
Serial.println(stateButton);
if(stateButton == LOW)
Serial.println("Pressed");
delay(100);
delay(10);
}
A retenir
Un bouton-poussoir est un interrupteur avec une position de repos
Une résistance de pull-up relie la broche du bouton-poussoir à une tension positive (VCC), tandis qu'une résistance de pull-down relie la broche du bouton-poussoir à la masse (GND).
les microcontrôleurs intègrent des résistances internes