Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto 05 - Acionar um led apertando 2 botões simultaneamente.
Projeto 05 - Acionar um led apertando 2 botões simultaneamente.
Angelo Luis Ferreira | 21/08/2018
Acessos: 29.747
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
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 e Leds ligados em série e em paralelo.
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 Ω
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:

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:

Código do projeto (Sketch)
Faça o dowload e abra o arquivo projeto05.ino no IDE do Arduino: DOWNLOAD - projeto05.ino
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 e 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 bot1Pin e bot2Pin 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) e 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: Desafio 26
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários