Clube de Robótica

Botão de pressão

Anúncios

Introdução


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:



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:

Tipos de botões

Damos alguns exemplos de utilização (para visualizar cada tipo, click no link das marcas):


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


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:

 

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

Anúncios

Anúncios