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.

Deixe um comentário

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.