Este componente é de facto muito simples e de longe o mais utilizado. Teve sempre um papel insubstituível na evolução da comunicação lógica nas diferentes vertentes de utilização. Estes factos fazem dele um “elemento vulgar” e por isso mesmo a sua compreensão parece ser imediata e simplista e muitas vezes subestimamos a necessidade de o estudar de forma mais aprofundada. Este artigo pretende esclarecer e dar a conhecer aspectos fundamentais para a utilização correta dos botões de pressão.
Objetivos deste artigo:
- Perceber o que é um botão de pressão
- Conhecer diferentes tipos de botões e os seus estados
- Saber aplicar num circuito com Arduino diferentes tipos de ligações
- Compreender para que serve uma resistência Pull-down ou Pull-up
- Compreender o que é o efeito bounce
- Anular o efeito bounce (debouncing)
O que é um botão de pressão?
Como definição simples podemos dizer que:
O botão de pressão é um componente que liga (NA) ou desliga (NF) dois pontos do circuito elétrico quando é pressionado.
Como definição basta mas para a compreensão deste componente devemos dizer um pouco mais.
Os botões de pressão são elementos muito simples e robustos e podem ser utilizados para diferentes fins. Estes permitem enviar um sinal digital, 1, HIGH, ou 0, LOW a um circuito lógico, quer estejamos a falar de circuitos de lógica cabelada ou programada. A sua utilização faz-se desde que se começaram a utilizar circuitos lógicos de automação cabelada, passando mais tarde a ter um papel importante na lógica programada com a utilização em circuitos com autómatos industriais. Os botões, como habitualmente são conhecidos, são muito importantes no diálogo Homem máquina, gerando um sinal digital. Muitas vezes incorporam elementos de sinalização luminosa, atualmente LED’s, e são instalados em caixas de aparelhagem, caixas próprias, painéis, botoneiras ou placas de circuito impresso. Alguns incorporam mais do que um contacto e é frente encontramos algumas das seguintes siglas:
- SPST-NO – Botão com um pólo simples e um curso simples, com contacto normalmente aberto que permite passar de off para on, ou seja este em repouso está com o contacto aberto, desligado (off), e quando pressionado passa ao estado ligado (on).
- SPDT (ON)-OFF 1NC-1NO – Botão com dois pólos simples e um curso simples, com contacto normalmente fechado (NC) e outro normalmente aberto (NO). Logo quando pressionado o contacto aberto passa a fechado e o fechado passa a aberto.
- DPDT (ON)-OFF– Botão com dois pólos simples e um curso com 2 posições, com contactos normalmente abertos.
Tipos de botões
Damos alguns exemplos de utilização (para visualizar cada tipo, click no link das marcas):
- Botões de pressão com aplicação em automação industrial
- Botões de pressão com utilização doméstica
- Eletrónica
Circuitos com botões aplicados a Arduino
Existem duas forma de ligar um botão de pressão SPST-NO, com um contacto simples normalmente aberto, em repouso o seu estado é um contacto aberto ao Arduíno. Uma permite um sinal inicial a HIGH e a outra a LOW, dependendo do circuito utilizado, as duas situações são descritas nos exemplos seguintes:
Exemplo 1:
– HIGH – com o botão não pressionado (estado de repouso)
– LOW – com o botão pressionado
Significa que a porta está polarizada com 5 V (HIGH) com o botão não pressionado, para que esta situação aconteça temos de utilizar uma resistência pull-up para manter a porta em HIGH. A porta só terá leitura LOW quando o botão for pressionado.
Exemplo 2:
– HIGH – com o botão pressionado
– LOW – com o botão não pressionado (estado de repouso)
Ao contrário da situação anterior, significa que a porta está em LOW, 0 V, quando o botão não está pressionado e passará para HIGH quando o botão for pressionado, para que esta situação aconteça temos de utilizar uma resistência pull-down para manter a porta em LOW enquanto não pressionamos o botão.
Resumindo
Aplicar um sinal HIGH ou LOW a uma porta não depende apenas do tipo de botão mas também depende da montagem do circuito efetuada.
Exemplo 1 – Porta em HIGH (resistência pull-up)
Material utilizado:
1 Arduino Uno, 1 cabo USB, 1 botão de pressão NO, 1 resistência 10K Ohms, 1 Led vermelho, 1 resistência 220 Ohms, 1 Breadboard e 7 jumpers macho/macho.
Software utilizado:
Arduino IDE e Fritzing
Esquema de ligação com um led vermelho ligado a indicar porta de ligação a HIGH e desligado a indicar LOW (por vezes verificam-se algumas falhas, erros, assunto abordado mais à frente).
Quando o botão não está pressionado a porta está ligada aos 5V (HIGH), através da resistência pull-up, quando se pressiona o botão o caminho do sinal segue o percurso com menor resistência e aplicará o valor GND (LOW), 0 Volts, à porta. O Led deverá registar a informação visual de porta a HIGH, ligado, ou LOW, ficando desligado. O estado de desligado só se mantém quando o botão é pressionado, por exemplo esta ligação deve ser utilizada para situações em que se algo não acontecer tudo continua a funcionar e que só se desligue quando um sensor (o botão) é pressionado.
Programa
void setup() { pinMode(9, OUTPUT); pinMode(3, INPUT); Serial.begin(9600); } void loop() { int a = digitalRead(3);//Le a porta 3 if (a==HIGH) { digitalWrite(9, HIGH);//Liga o led vermelho Serial.println("Botao nao pressionado - Led vermelho ligado "); delay(500); // Espera de 500 milisegundos } else { digitalWrite(9, LOW);// Desliga o led vermelho Serial.println("Botao pressionado - Led vermelho desligado "); delay(500); // Espera de 500 milisegundos } }
Exemplo 2 – Porta em LOW (resistência pull-down)
Material utilizado:
1 Arduino Uno, 1 cabo USB, 1 botão de pressão NO, 1 resistência 10K Ohms, 1 Led vermelho, 1 resistência 220 Ohms, 1 Breadboard e 7 jumpers macho/macho.
Software utilizado:
Arduino IDE e Fritzing
Esquema de ligação com um led vermelho desligado a indicar porta de ligação a LOW e ligado a indicar HIGH (por vezes verificam-se algumas falhas, erros, assunto abordado mais à frente).
Quando o botão não está pressionado a porta está ligada ao GND, 0V (LOW), através da resistência pull-down, quando se pressiona o botão o caminho do sinal segue o percurso com menor resistência e aplicará o valor 5 V (HIGH) à porta 3. O Led deverá registar a informação visual de porta a HIGH, ligado, ou LOW, ficando desligado. O estado de ligado só se mantém quando o botão é pressionado, por exemplo esta ligação deve ser utilizada para situações em que se algo só deverá acontecer quando um sensor (o botão) é pressionado.
Programa
void setup() { pinMode(9, OUTPUT); pinMode(3, INPUT); Serial.begin(9600); } void loop() { int a = digitalRead(3);//Le a porta 3 if (a==HIGH) { digitalWrite(9, HIGH);//Liga o led vermelho Serial.println("Botao pressionado - Led vermelho ligado "); delay(500); // Espera de 500 milisegundos } else { digitalWrite(9, LOW);// Desliga o led vermelho Serial.println("Botao nao pressionado - Led vermelho desligado "); delay(500); // Espera de 500 milisegundos } }
Alternativas às ligações eletrónicas para a resistência pull-up
- Resistências internas pull-up
O Arduino possui internamente resistência de pull-up, que podem ser ativadas através do código:
pinMode (buttonPin,INPUT);
digitalWrite (buttonPin,HIGH); // ativa as resistencias pull-up
O digitalWrite de HIGH na porta onde está o botão faz com que a resistência pull-up interna do Arduino seja ativado.
Para esta situação as ligações são as seguintes:
- Módulos de botões com resistência pull-up de 10k Ohms
A Vellman tem o módulo VMA310, “MÓDULO DE SENSOR COM INTERRUPTOR COMPATÍVEL COM ARDUINO® (2 peças)” que já incorpora a resistência pull-up de 10k Ohms.
Para esta situação as ligações são as seguintes:
Continua no artigo “Bounce-Falsos toques”
Sites consultados:
1ª Parte
https://www.arduino.cc/en/Tutorial/Button
https://m.multilogica-shop.com/tutorial/arduino-bot%C3%A3o
http://robotfeliciano.blogspot.pt/2012/03/botoes-e-resistores-pull-down-e-pull-up.html
2ª Parte
Bounce/debouncing
https://arduinobymyself.blogspot.pt/2012/02/debouncing.html
http://eletronworld.com.br/eletronica/efeito-bounce/
http://arduinoifsul.blogspot.pt/2012/09/debounce.html
https://www.arduino.cc/en/Tutorial/Debounce