Básico - Projeto 05

Acionar um componente eletrônico apertando 2 botões simultaneamente.

Objetivo

Criar um circuito para que um componente eletrônico qualquer seja acionado somente se dois botões (push button) forem apertados simultaneamente. Isto é muito útil para a segurança de máquinas onde precisamos que o operador (usuário) esteja com as duas mãos ocupadas, evitando-se acidentes, como em uma prensa por exemplo. No nosso estudo vamos utilizar um led como componente que se acenderá quando apertarmos 2 botões simultaneamente.

Observação: Os botões de pressão (push button) apenas mudam seu estado enquanto estamos pressionando, voltando ao seu estado original quando o botão é liberado. Neste projeto, teremos uma rotina para atribuir uma ação, no caso acender um led, somente quando dois botões estejam pressionados simultaneamente. Caso solte um dos botões, o led deverá se apagar.

Aplicação

Para fins didáticos e projetos gerais.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 400 pontos

Comprar

1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 400 pontos

Jumpers Kit cabos ligação macho / macho

Comprar

1  
Resistor

Resistor

Comprar

1

1 Resistor 150Ω

Se precisar usar outros valores, calcule o resistor apropriado para o led utilizado - Calcular Resistor.

Led 5mm LED 5mm

Comprar

1

1 LED alto brilho ou difuso de qualquer cor

Você poderá utilizar também LEDs de 3 mm na cor que desejar.

Push Button Push button 6X6X5mm

Comprar

2  
Arduino UNO R3 Arduino UNO Original

Comprar

 

Arduino UNO Similar

Comprar

1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.

Atenção

1) Lembre-se que o LED tem polaridade: O terminal maior tem polaridade positiva e o lado do chanfro tem polaridade negativa.

1.1. Portanto, faça a conexão do Arduino no terminal positivo (anodo) e o GND no terminal negativo (catodo) do led.

1.2. Para evitar danos ao led é necessário a inclusão de um resistor no circuito. Como o resistor é um limitador da corrente elétrica, ele poderá estar conectado no anodo (terminal maior) ou no catodo (terminal menor) do led, tanto faz.

2) Determinamos o valor do resistor através da tabela prática: Tabela prática de utilização de leds 3mm e 5mm. Entretanto, o mais correto é sempre verificar o datasheet do fabricante do LED para você ter os exatos valores de tensão e corrente do mesmo - leia Como calcular o resistor adequado para o led. (Obs.: Resistores superiores a 150 Ω poderão ser utilizados em LEDs de todas as cores para um circuito com tensão igual ou inferior a 5V).

Valores utilizados para nossos projetos: LEDs difusos ou de alto brilho: Vermelho, Laranja e Amarelo: 150 Ω | Led Verde e Azul: 100 Ω ou 150 Ω

3) Monte os botões (push button) sem resistor, pois habilitaremos o pull-up interno do arduino através da programação. Desta forma, quando o botão estiver pressionado, o Arduino retornará "LOW" ou "0". Assista o vídeo Arduino: Botão e Resistor de Pull Up Interno e veja o projeto Projeto 02b - Led apaga com push button pressionado (pull-up interno do Arduino).


Obs.: Os resistores pull-up e pull-down garantem um nível lógico estável quando por exemplo uma tecla não está pressionada. Geralmente utiliza-se um resistor de 10KΩ para esse propósito. A seguir é exibida a ligação desses resistores no circuito para leitura de tecla do botão:

Entradas-e-Saídas-digitais-Arduino-pull-up-pull-down

Atenção: Observe que neste projeto não utilizaremos o resistor de 10K pois vamos habilitar o resitor pull-up interno do Arduino através da programação.

4) Veja abaixo a montagem dos componentes do nosso projeto: (Obs. Os botões 12X12 utilizados podem ser adquiridos no link Vida de Silício)

 

Código do projeto (Sketch)

Faça o dowload e abra o arquivo projeto04.ino no IDE do Arduino:

Ou se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************

     Projeto 05 – Liga led quando 02 botões são pressionados simultaneament
                    http://squids.com.br/arduino

*******************************************************************************/

const int ledPin = 8; //led no pino 8
const int bot1Pin = 2; //botao 1 (direito) no pino 2
const int bot2Pin = 12; //botao 2 (esquerdo) no pino 12

int estadoBotao1; //Variavel para ler o status do botão 1
int estadoBotao2; //Variavel para ler o status do botão 2

void setup() {
  pinMode(ledPin, OUTPUT); //Pino do led será saída
  pinMode(bot1Pin, INPUT_PULLUP); //Habilita o pull up interno do Arduino
  pinMode(bot2Pin, INPUT_PULLUP); //Habilita o pull up interno do Arduino
}

void loop() {
  estadoBotao1 = digitalRead(bot1Pin); //le o estado do botão 1 - HIGH OU LOW
  estadoBotao2 = digitalRead(bot2Pin); //le o estado do botão 2 - HIGH OU LOW

  if (!estadoBotao1 && !estadoBotao2 ) { //Se botão os 2 botões estiverem pressionados (HIGH)
    digitalWrite(ledPin, HIGH); // acende o led.
  }
  else { //se os 2 botões não estiverem pressionados simultaneamente (LOW)
    digitalWrite(ledPin, LOW); //deixa o led apagado
  }
}

Depois, faça a verificação e o upload para o microcontrolador.

Vídeo

Como o projeto deve funcionar

1. Quando você rodar o programa, o led ficará apagado.

2. Ao pressionar os dois botões simultaneamente o led se acenderá.

3. Ao soltar qualquer um dos botões o botão o led se apagará.

Explicando o código do projeto

1. Primeiro declaramos as constantes e as variáveis do projeto.

1.1. Observe que utilizamos a variável tipo "int". Veja na tabela abaixo as diferenças nos tipos de constantes e variáveis:

Tipo Valores Válidos para Variáveis e Constantes
char letras e símbolos: 'a', 'b', 'H', '^', '*','1','0'
int de -32767 até 32767 (apenas números inteiros)
float de -3.4 x 1038 até +3.4 x 10+38com até 6 dígitos de precisão (2 casas depois da vírgula)
double de -1.7 x 10308 até +1.7 x 10+308com até 10 dígitos de precisão

1.3. A constante ledPin se refere ao Led que deverá estar conectado à porta digital 8 do microcontrolador Arduino.

1.2. 1.2. As constantes bot1Pin e bot2Pin se referem ao pushbuttons que deverão estar conectados às portas digitais 2 e 12 do Arduino respectivamente.

1.4. Declaramos as variáveis estadoBotão1 estadoBotão1 que serão utilizadas para armazenar os estados (0 - desligado ou 1- ligado) dos botões 1 e 2.

2. Através da strutura void setup(), definimos:

2.1. Define ledPin como saída do controlador Arduino (OUTPUT) conectado ao pino 8.

2.1. Define bot1Pinbot2Pin como entradas do controlador Arduino (INPUT_PULLUP) conectados aos pinos 2 e 12.

2.2.1. INPUT_PULLUP habilita o resistor pull-up interno do Arduino, eliminando a necessidade de colocarmos um resistor de 10K ligado ao VCC (5V).

3. Através da estrutura void loop(), obtemos:

3.1. Primeiro fazemos as leituras dos botões através função digitalRead(bot1Pin) digitalRead(bot1Pin), determinando se está pressionado (LOW ou zero) ou se está liberado (HIGH ou 1), armazenando esta informação nas variáveis estadoBotao1 e estadoBotao3.

3.2.  Através do comando if (!estadoBotao1 && !estadoBotao2) verificamos se os 2 botões estão pressionados:

3.2.1. Observe que utilizamos o operador lógico NOT (!) para estadoBotao1 e estadoBotao2, verificando se o estado do botão está diferente do original, ou seja, pressionado. Desta forma, podemos utilizar o operador lógico NOT para verificar se um pushbutton está pressionado. Leia Como usar push button com Arduino (programação) .

3.2.1.1. A expressão !estadoBotao1 define que a variável é false, ou seja, a estadoBotaao1 = LOW, condição verdadeira para botão pressionado quando configurado como pullup.

3.2.1.2. A expressão !estadoBotao1 define que a variável é false, ou seja, a estadoBotaao1 = LOW, condição verdadeira para botão pressionado quando configurado como pullup.

3.2.2. Observe que utilizamos o operador lógico AND (&&) para verificar se o botão 1 "E" o botão 2 estão pressionados:

3.2.2.1. Se sim, o led será aceso através da função digitalWrite(ledPin, High).

3.2.2.2. Se não, o led será ou permanecerá apagado de acordo com a função digitalWrite(ledPin, LOW).

Desafios

Com base neste projeto, resolva o seguinte desafio:

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Compartilhe:

Doações

Contribua pra manter o site online :)

Inscreva-se no canal Squids

Squids Arduino News

Básico - Projeto 98 Módulo Matriz de Led rítmico - MAX7219 Objetivo O objetivo deste projeto é criar um circuito para fazer com que os leds de uma matriz de leds pisquem de acordo com o ritmo d...

Básico - Projeto 97 Leds piscam de acordo com o som Objetivo O objetivo deste projeto é criar um circuito para fazer piscar vários leds de acordo com o ritmo de uma música. Para isso, vamos uti...

Desafio 89 - Projeto I13 Dez efeitos de iluminação com controle remoto Com base no projeto I13 - Como usar o Controle Remoto Infravermelho com Arduino resolva o seguinte desafio: 1. Com base...

Intermediário - Projeto 13 Usando o Controle Remoto IR com Arduino com leds Objetivo Utilizar o Controle Remoto Infravermelho junto com o Arduino e um fotorreceptor IR para controlar 6 leds de ...

Desafio 88 - Projeto I12 Cronômetro contador de voltas com sensor infravermelho Com base no projeto I12 - Cronômetro com pause controlado por leds infravermelhos - Arduino resolva os seguintes ...

Outros artigos

Mais: Projetos Básicos Desafios Projetos Intermediários Básico

Você está preparado?

Topo