Cuando trabajan con proyectos de Arduino que involucran botones o conmutadores físicos, un desafío común que enfrentan los desarrolladores es lidiar con el rebote de interruptores. El rebote de interruptores puede conducir a múltiples desencadenantes no deseados, causando un comportamiento errático en sus proyectos. En esta publicación de blog, profundizaremos en lo que es el rebote de Switch, por qué es problemático y exploraremos métodos efectivos para desacreditar los interruptores, asegurando lecturas de entrada confiables y precisas en sus aplicaciones Arduino.
Comprender el rebote del interruptor
Los interruptores mecánicos, como los push-button, se utilizan ampliamente en proyectos Arduino para entradas de los usuarios. Sin embargo, estos interruptores no siempre hacen y rompen el contacto limpiamente cuando se presionan o liberan. En cambio, tienden a "rebotar", produciendo y rompiendo rápidamente la conexión varias veces antes de establecerse. Este fenómeno se conoce como rebote de interruptores.
Cuando un interruptor rebota, el Arduino puede interpretarlo como múltiples prensas o liberaciones rápidas, lo que lleva a comportamientos no deseados como múltiples flashes LED, movimientos motores erráticos o lecturas erráticas de sensores. El desacuerdo es el proceso de filtrar estas señales rápidas y no deseadas para garantizar que cada acción física corresponde a una sola señal de entrada limpia.
Métodos para los interruptores de desbloqueo
Hay dos métodos principales para los interruptores de desbloqueo: desacreditación de hardware y desunción de software. Cada método tiene sus ventajas y casos de uso, y a veces incluso se combinan para obtener resultados óptimos.
1. Hardware que se desbloquea
El desacuerdo de hardware implica el uso de componentes físicos para estabilizar la señal del interruptor. Los enfoques de hardware más comunes utilizan resistencias, condensadores o ICS de desbloqueo especializado.
RC (Resistor-Capacitor) Desmontaje
Un circuito RC puede suavizar las transiciones rápidas causadas por el rebote del interruptor. Así es como puedes configurarlo:
/* 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);
}
}
En esta configuración, una resistencia y un condensador están conectados en serie con el botón. Cuando se presiona el botón, el condensador carga, suavizando el voltaje y evitando fluctuaciones rápidas que podrían causar desencadenantes falsos.
2. Software de desacuerdo
El desacreditación de software se maneja en su código Arduino mediante la implementación de la lógica que filtra los rápidos cambios en la señal causados por el rebote de conmutadores. Este método es flexible y no requiere componentes de hardware adicionales.
Ejemplo de desacuerdo de software
Aquí hay un ejemplo simple de cómo implementar el desacuerdo de software en 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;
}
En este código:
- El programa lee el estado actual del botón.
- Si el estado ha cambiado desde la última lectura, restablece el temporizador de debuncia.
- Solo si el estado sigue siendo consistente por más tiempo que el retraso de debuncia (50 milisegundos en este caso) el programa acepta el nuevo estado como válido y actúa sobre él.
3. Uso de bibliotecas para desacreditar
Para proyectos más complejos o para simplificar el desacuerdo, puede usar bibliotecas dedicadas como la Rebotar biblioteca. Las bibliotecas manejan la lógica de debuncia, lo que le permite concentrarse en otros aspectos de su proyecto.
Ejemplo usando la biblioteca de rebote
Primero, instale la biblioteca de rebote a través del Administrador de la Biblioteca Arduino. Luego, use el siguiente código:
#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
}
}
Este enfoque simplifica la lógica de debuncia, haciendo que su código sea más limpio y mantenible.
Elegir el método de desacuerdo correcto
La elección entre el hardware y el desacuerdo de software depende de sus necesidades y limitaciones específicas:
- Desvaluación de hardware: Ideal para proyectos en los que desea minimizar la sobrecarga de software o cuando trabaja con múltiples interruptores. Asegura que las señales estén limpias antes de alcanzar el microcontrolador.
- Software de desacuerdo: Más flexible y rentable, especialmente para proyectos simples con algunos botones. Le permite ajustar el tiempo de desbloqueo fácilmente a través del código.
- Desbloqueo basado en la biblioteca: Lo mejor para proyectos complejos o cuando desee ahorrar tiempo y evitar reinventar la rueda. Las bibliotecas ofrecen soluciones de desbloqueo robustas y probadas.
Las mejores prácticas para los interruptores de desacuerdo
- Use resistencias pull-up o desplegables: Asegúrese de que las entradas de su botón estén en un estado conocido utilizando resistencias pull-up o desplegables. Esto evita las entradas flotantes, reduciendo el ruido y los desencadenantes falsos.
- Tiempo consistente de desbloqueo: Ya sea que use hardware o desacreditación de software, mantenga intervalos consistentes de desbordamiento para garantizar un rendimiento confiable en diferentes botones y condiciones.
- Combine los métodos si es necesario: Para aplicaciones altamente sensibles, considere combinar tanto el hardware como el desacuerdo de software para lograr la mayor confiabilidad.
Conclusión
El desbloqueo de los interruptores es un paso crucial para desarrollar proyectos de Arduino confiables que involucren entradas de usuarios. Ya sea que elija soluciones de hardware, algoritmos de software o aproveche las bibliotecas existentes, la implementación de mecanismos efectivos de desbloqueo lo ahorrará de la frustración de lidiar con falsos desencadenantes y comportamientos erráticos. Al comprender los principios de rebotar y aplicar las técnicas de desacuerdo apropiadas, puede mejorar el rendimiento y la confiabilidad de sus creaciones Arduino.