Lorsque vous travaillez avec des projets Arduino qui impliquent des boutons physiques ou des commutateurs, un défi commun aux développeurs est confronté à la rebond de Switch. Le rebond de changement peut entraîner plusieurs déclencheurs involontaires, provoquant un comportement erratique dans vos projets. Dans cet article de blog, nous nous plongerons sur ce qu'est le rebond de commutation, pourquoi il est problématique et explorer des méthodes efficaces pour déboucher, assurer des lectures d'entrée fiables et précises dans vos applications Arduino.
Comprendre le changement de commutateur
Les commutateurs mécaniques, tels que les bouts-poussoirs, sont largement utilisés dans les projets Arduino pour les entrées utilisateur. Cependant, ces commutateurs ne font pas toujours et ne cassent pas le contact proprement lorsqu'ils sont pressés ou libérés. Au lieu de cela, ils ont tendance à «rebondir», faisant rapidement et briser la connexion plusieurs fois avant de s'installer. Ce phénomène est connu sous le nom de commutateur rebondissant.
Lorsqu'un commutateur rebondit, l'Arduino peut l'interpréter comme de multiples pressions rapides ou libère, conduisant à des comportements involontaires comme plusieurs flashs LED, des mouvements de moteur erratiques ou des lectures erratiques à partir de capteurs. Le débouchement est le processus de filtrage de ces signaux rapides et involontaires pour garantir que chaque action physique correspond à un seul signal d'entrée propre.
Méthodes pour déboucher les commutateurs
Il existe deux méthodes principales pour déboucher des commutateurs: le débouchement matériel et le débouchement logiciel. Chaque méthode a ses avantages et ses cas d'utilisation, et parfois ils sont même combinés pour des résultats optimaux.
1. Debougning matériel
Le débouchement matériel implique l'utilisation de composants physiques pour stabiliser le signal de commutation. Les approches matérielles les plus courantes utilisent des résistances, des condensateurs ou des circuits intégrés spécialisés.
RC (résistance-condensateur)
Un circuit RC peut lisser les transitions rapides causées par le rebond de commutation. Voici comment vous pouvez le configurer:
/* RC Debounce Circuit */
const int buttonPin = 2; // Button connected to digital pin 2
const int ledPin = 13; // LED connected to digital pin 13
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
Dans cette configuration, une résistance et un condensateur sont connectés en série avec le bouton. Lorsque le bouton est enfoncé, le condensateur charge, lissant la tension et empêchant des fluctuations rapides qui pourraient provoquer de faux déclencheurs.
2. Debountage logiciel
Le débouchement logiciel est géré dans votre code Arduino en implémentant la logique qui filtre les changements rapides du signal causés par le rebond de commutation. Cette méthode est flexible et ne nécessite pas de composants matériels supplémentaires.
Exemple de dégoumage logiciel
Voici un exemple simple de la façon de mettre en œuvre le débouchement logiciel dans Arduino:
const int buttonPin = 2; // Button connected to digital pin 2
const int ledPin = 13; // LED connected to digital pin 13
int buttonState; // Current state of the button
int lastButtonState = LOW; // Previous state of the button
unsigned long lastDebounceTime = 0; // Last time the button state changed
unsigned long debounceDelay = 50; // Debounce time in milliseconds
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
digitalWrite(ledPin, !digitalRead(ledPin));
}
}
}
lastButtonState = reading;
}
Dans ce code:
- Le programme lit l'état actuel du bouton.
- Si l'État a changé par rapport à la dernière lecture, il réinitialise la minuterie de débouchement.
- Ce n'est que si l'État reste cohérent plus longtemps que le délai de débouchement (50 millisecondes dans cette affaire) que le programme accepte le nouvel État comme valide et agit sur lui.
3. Utiliser des bibliothèques pour le débouchement
Pour des projets plus complexes ou pour simplifier le débouchement, vous pouvez utiliser des bibliothèques dédiées comme le Rebond bibliothèque. Les bibliothèques gèrent la logique de débouchement, vous permettant de vous concentrer sur d'autres aspects de votre projet.
Exemple à l'aide de la bibliothèque Bounce
Tout d'abord, installez la bibliothèque Bounce via le gestionnaire de bibliothèque Arduino. Ensuite, utilisez le code suivant:
#include
const int buttonPin = 2;
const int ledPin = 13;
Bounce debouncer = Bounce();
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
debouncer.attach(buttonPin);
debouncer.interval(25); // Debounce interval in milliseconds
}
void loop() {
debouncer.update();
if (debouncer.fell()) { // When button is pressed
digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle LED
}
}
Cette approche simplifie la logique de débouchement, ce qui rend votre code plus propre et plus maintenable.
Choisir la bonne méthode de débouchement
Le choix entre le matériel et le débouchement logiciel dépend de vos besoins et contraintes spécifiques:
- Débountage matériel: Idéal pour les projets où vous souhaitez minimiser les frais généraux du logiciel ou lorsque vous travaillez avec plusieurs commutateurs. Il garantit que les signaux sont propres avant d'atteindre le microcontrôleur.
- Déboulagement logiciel: Plus flexible et rentable, en particulier pour les projets simples avec quelques boutons. Il vous permet d'ajuster facilement la synchronisation de la synchronisation via le code.
- Debougning basé sur la bibliothèque: Mieux pour les projets complexes ou lorsque vous voulez gagner du temps et éviter de réinventer la roue. Les bibliothèques offrent des solutions de débouchement robustes et testées.
Meilleures pratiques pour les commutateurs de débouchement
- Utilisez des résistances de traction ou de traction: Assurez-vous que les entrées de votre bouton sont dans un état connu en utilisant des résistances pull-up ou des résistances. Cela empêche les entrées flottantes, la réduction du bruit et les faux déclencheurs.
- Débouncement cohérent CHIMING: Que ce soit en utilisant le matériel ou le débouchement logiciel, maintenez des intervalles de débouchement cohérents pour garantir des performances fiables entre les différents boutons et conditions.
- Combinez des méthodes si nécessaire: Pour des applications très sensibles, envisagez de combiner le débouchement matériel et logiciel pour obtenir la plus grande fiabilité.
Conclusion
Debouncing Switches est une étape cruciale dans le développement de projets Arduino fiables qui impliquent des entrées utilisateur. Que vous choisissiez des solutions matérielles, des algorithmes logiciels ou de tirer parti des bibliothèques existantes, la mise en œuvre de mécanismes de débouchement efficaces vous sauvera de la frustration de traiter les faux déclencheurs et les comportements erratiques. En comprenant les principes de changement de changement et d'application des techniques de démontage appropriées, vous pouvez améliorer les performances et la fiabilité de vos créations Arduino.