FREE SHIPPING ON ALL ORDERS OVER £20

60 DAY HASSLE-FREE RETURNS

Como debounce adequadamente os interruptores para evitar gatilhos falsos em Arduino

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.

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.

Deixe um comentário