Nous avons déjà examiné la connexion d'un bouton à l'Arduino et abordé la question des contacts « rebondissants ». Il s'agit d'un phénomène très ennuyeux qui provoque des pressions répétées sur les boutons et rend difficile la gestion par programmation des clics sur les boutons. Parlons de la façon de se débarrasser du rebond de contact.
Nécessaire
- -Arduino;
- - bouton tactile;
- - résistance d'une valeur nominale de 10 kOhm;
- - Diode électro-luminescente;
- - les fils de connexion.
Instructions
Étape 1
Le rebond de contact est un phénomène courant dans les interrupteurs mécaniques, les boutons-poussoirs, les interrupteurs à bascule et les relais. En raison du fait que les contacts sont généralement constitués de métaux et d'alliages élastiques, lorsqu'ils sont physiquement fermés, ils n'établissent pas immédiatement une connexion fiable. En peu de temps, les contacts se ferment plusieurs fois et se repoussent. En conséquence, le courant électrique prend une valeur stable non pas instantanément, mais après une série de hauts et de bas. La durée de cet effet transitoire dépend du matériau de contact, de la taille et de la conception. L'illustration montre un oscillogramme typique lorsque les contacts du bouton tactile sont fermés. On voit que le temps entre le moment du passage à l'état stationnaire est de plusieurs millisecondes. C'est ce qu'on appelle le « rebond ».
Cet effet n'est pas perceptible dans les circuits électriques pour contrôler l'éclairage, les moteurs ou d'autres capteurs et dispositifs inertiels. Mais dans les circuits où il y a une lecture et un traitement rapide de l'information (où les fréquences sont du même ordre que les impulsions de "rebond", ou plus), c'est un problème. En particulier, l'Arduino UNO, qui fonctionne à 16 MHz, est excellent pour attraper le rebond de contact en acceptant une séquence de uns et de zéros au lieu d'un seul commutateur 0 à 1.
Étape 2
Voyons comment le rebond de contact affecte le bon fonctionnement du circuit. Connectons le bouton d'horloge à l'Arduino à l'aide d'un circuit de résistance pull-down. En appuyant sur le bouton, nous allumerons la LED et la laisserons allumée jusqu'à ce que le bouton soit à nouveau enfoncé. Pour plus de clarté, nous connectons une LED externe à la broche numérique 13, bien que celle intégrée puisse être supprimée.
Étape 3
Pour accomplir cette tâche, la première chose qui me vient à l'esprit:
- mémoriser l'état précédent du bouton;
- comparer avec l'état actuel;
- si l'état a changé, alors on change l'état de la LED.
Écrivons un tel croquis et chargeons-le dans la mémoire Arduino.
Lorsque le circuit est allumé, l'effet du rebond du contact est immédiatement visible. Cela se manifeste par le fait que la LED ne s'allume pas immédiatement après avoir appuyé sur le bouton, ou s'allume puis s'éteint, ou ne s'éteint pas immédiatement après avoir appuyé sur le bouton, mais reste allumée. En général, le circuit ne fonctionne pas de manière stable. Et si pour une tâche avec allumer la LED, ce n'est pas si critique, alors pour d'autres tâches plus sérieuses, c'est tout simplement inacceptable.
Étape 4
Nous allons essayer de régler la situation. Nous savons que le rebond de contact se produit quelques millisecondes après une fermeture de contact. Attendons, disons, 5 ms après avoir changé l'état du bouton. Ce temps pour une personne est presque un instant, et appuyer sur un bouton par une personne prend généralement beaucoup plus de temps - plusieurs dizaines de millisecondes. Et Arduino fonctionne très bien avec des périodes de temps aussi courtes, et ces 5 ms lui permettront de couper le rebond des contacts en appuyant sur un bouton.
Dans ce sketch, nous allons déclarer la procédure debounce() ("bounce" en anglais est juste "bounce", le préfixe "de" signifie le processus inverse), à l'entrée de laquelle nous fournissons l'état précédent du bouton. Si une pression sur un bouton dure plus de 5 ms, alors c'est vraiment une pression.
En détectant la presse, on change l'état de la LED.
Téléchargez le croquis sur la carte Arduino. Tout va beaucoup mieux maintenant ! Le bouton fonctionne sans faute, lorsqu'il est enfoncé, la LED change d'état, comme nous le voulions.
Étape 5
Des fonctionnalités similaires sont fournies par des bibliothèques spéciales telles que la bibliothèque Bounce2. Vous pouvez le télécharger à partir du lien dans la section "Sources" ou sur le site https://github.com/thomasfredericks/Bounce2. Pour installer la bibliothèque, placez-la dans le répertoire des bibliothèques de l'environnement de développement Arduino et redémarrez l'IDE.
La bibliothèque "Bounce2" contient les méthodes suivantes:
Bounce() - initialisation de l'objet "Bounce";
void interval (ms) - définit le temps de retard en millisecondes;
void attach (numéro de broche) - définit la broche à laquelle le bouton est connecté;
int update () - met à jour l'objet et renvoie true si l'état de la broche a changé, et false dans le cas contraire;
int read () - lit le nouvel état de la broche.
Réécrivons notre croquis en utilisant la bibliothèque. Vous pouvez également mémoriser et comparer l'état passé du bouton avec l'état actuel, mais simplifions l'algorithme. Lorsque le bouton est enfoncé, nous compterons les pressions, et chaque pression impaire allumera la LED, et chaque pression paire l'éteindra. Ce croquis a l'air concis, facile à lire et facile à utiliser.