Ao trabalhar com projetos de Arduino que envolvem botões ou interruptores físicos, um desafio comum que os desenvolvedores enfrentam é lidar com o Switch Swings. O Switch Bouncing pode levar a vários gatilhos não intencionais, causando comportamento irregular em seus projetos. Nesta postagem do blog, vamos nos aprofundar no que é o trocador de troca, por que é problemático e explorar métodos eficazes para debarçar comutadores, garantindo leituras de entrada confiáveis e precisas em seus aplicativos Arduino.
Entendendo o interruptor saltando
Os interruptores mecânicos, como push-buttons, são amplamente utilizados em projetos Arduino para entradas do usuário. No entanto, esses interruptores nem sempre fazem e quebram o contato de forma limpa quando pressionados ou liberados. Em vez disso, eles tendem a "saltar", fazendo e quebrando rapidamente a conexão várias vezes antes de se estabelecer. Esse fenômeno é conhecido como interruptor.
Quando um interruptor salta, o Arduino pode interpretá -lo como múltiplas pressões ou liberações rápidas, levando a comportamentos não intencionais, como múltiplos flashes de LED, movimentos motores irregulares ou leituras irregulares de sensores. Debouncing é o processo de filtrar esses sinais rápidos e não intencionais para garantir que cada ação física corresponda a um único sinal de entrada limpo.
Métodos para debarçar interruptores
Existem dois métodos principais para debarçar com os switches: Debouncing de hardware e Debouncing de software. Cada método tem suas vantagens e casos de uso e, às vezes, eles são combinados para obter resultados ideais.
1. Debocamento de hardware
O Debounding de hardware envolve o uso de componentes físicos para estabilizar o sinal de comutação. As abordagens de hardware mais comuns utilizam resistores, capacitores ou ICs de Debounce especializados.
RC (resistor-capacitor) Debouncing
Um circuito RC pode suavizar as transições rápidas causadas pelo interruptor. Veja como você pode configurá -lo:
/* 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);
}
}
Nesta configuração, um resistor e capacitor estão conectados em série com o botão. Quando o botão é pressionado, o capacitor cobra, suavizando a tensão e impedindo flutuações rápidas que podem causar gatilhos falsos.
2. Debocamento de software
O software Debouncing é tratado em seu código Arduino, implementando a lógica que filtra as rápidas alterações no sinal causadas pelo interruptor. Este método é flexível e não requer componentes de hardware adicionais.
Exemplo de Debouncing de Software
Aqui está um exemplo simples de como implementar o software Debouncing em 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;
}
Neste código:
- O programa lê o estado atual do botão.
- Se o estado mudou da última leitura, redefine o cronômetro de debounce.
- Somente se o estado permanecer consistente por mais tempo que o atraso de debounce (50 milissegundos nesse caso) o programa aceita o novo estado como válido e age sobre ele.
3. Usando bibliotecas para debouning
Para projetos mais complexos ou para simplificar o debouning, você pode usar bibliotecas dedicadas como o Quicar biblioteca. As bibliotecas lidam com a lógica de debounce, permitindo que você se concentre em outros aspectos do seu projeto.
Exemplo usando biblioteca de salto
Primeiro, instale a biblioteca de salto através do Arduino Library Manager. Em seguida, use o seguinte 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
}
}
Essa abordagem simplifica a lógica do Debounce, tornando seu código mais limpo e mais sustentável.
Escolhendo o método de debouning certo
A escolha entre hardware e debouning de software depende de suas necessidades e restrições específicas:
- Hardware Debouncing: Ideal para projetos em que você deseja minimizar a sobrecarga do software ou ao trabalhar com vários comutadores. Ele garante que os sinais estejam limpos antes de atingirem o microcontrolador.
- Debouncing de software: Mais flexível e econômico, especialmente para projetos simples com alguns botões. Ele permite ajustar o tempo de deboun facilmente através do código.
- Debouncing baseado em biblioteca: Melhor para projetos complexos ou quando você deseja economizar tempo e evitar reinventar a roda. As bibliotecas oferecem soluções de Debounce robustas e testadas.
Melhores práticas para interruptores de debouscing
- Use resistores de pull-up ou pull-down: Certifique-se de que as entradas do botão estejam em um estado conhecido usando resistores de pull-up ou pull-down. Isso impede as entradas flutuantes, reduzindo o ruído e os gatilhos falsos.
- Timing consistente de debounce: Seja usando hardware ou software debousing, mantenha intervalos consistentes de debounce para garantir um desempenho confiável em diferentes botões e condições.
- Combine métodos, se necessário: Para aplicativos altamente sensíveis, considere combinar o hardware e o software debousing para obter a maior confiabilidade.
Conclusão
O Switches devassinado é uma etapa crucial no desenvolvimento de projetos de Arduino confiáveis que envolvem entradas do usuário. Se você escolher soluções de hardware, algoritmos de software ou aproveitar as bibliotecas existentes, a implementação de mecanismos de debounce eficaz salvará você da frustração de lidar com gatilhos falsos e comportamentos erráticos. Ao entender os princípios de interruptor e aplicar as técnicas de debouning apropriadas, você pode aprimorar o desempenho e a confiabilidade de suas criações de Arduino.