Projeto 04a - Push Button como interruptor - liga e desliga (padrão para pull-up interno do Arduino)

Básico - Projeto 04a

Botão (push button) com duas funções: liga e desliga usando a montagem pull-up interno do Arduino

Objetivo

Criar um circuito para atribuir duas funções em um único botão (push button). Neste circuito o botão servirá como um interruptor para ligar e desligar um componente eletrônico. O sketch deste projeto servirá para utilizar o botão (push button) montado resistor pull-up interno do Arduino.

ATENÇÃO:

1. O código apresentado neste projeto é ideal para quem está iniciando no aprendizado de Arduino, pois é escrito de forma simples, explícita e fácil de compreender. No entanto, deve ser utilizado apenas em projetos básicos que não envolvam multitarefas, ou seja, quando não há necessidade de executar várias funcionalidades ao mesmo tempo.

2. Em projetos mais complexos ou que demandam maior eficiência, existem alternativas mais adequadas para a implementação do push button como interruptor. Leia: Bouncing e Debouncing: Entenda e Resolva Problemas de Ruído nos Botões  

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. O sketch deste projeto servirá para utilizar o botão (push button) montado com o pull-up interno do Arduino

Por que pull-up interno do Arduino é a melhor opção para um botão liga/desliga?

A utilização do pull-up interno do Arduino é a opção mais eficiente e prática, pois elimina a necessidade de resistores externos, simplifica a montagem e diminui a chance de erros no circuito. Portanto, essa opção é geralmente preferível em projetos com Arduino e botões (push buttons). Veja os 3 motivos principais para utilizar o pull up interno do Arduino:

1. Simplicidade e Menos Componentes

Não precisa de resistor externo: O Arduino já possui resistores pull-up internos (entre 20kΩ e 50kΩ), ativados com pinMode(buttonPin, INPUT_PULLUP);. Isso reduz a complexidade da montagem e economiza componentes.

Com pull-down ou pull-up externo, você precisa de um resistor adicional de 10kΩ para garantir que o botão não fique "flutuando" quando não pressionado.

2. Melhor Estabilidade do Sinal (Menos Ruído)

Com pull-up o estado "normal" do botão é HIGH, e ele só muda para LOW quando pressionado. Como o Arduino detecta LOW como um acionamento, ele fica menos suscetível a interferências eletromagnéticas, comuns em fios longos ou ambientes com ruído elétrico.

Com pull-down, o estado normal do botão é LOW, e ele muda para HIGH quando pressionado. Esse HIGH pode sofrer interferências e leituras erradas caso o resistor não seja bem dimensionado.

3. Compatibilidade com Circuitos Digitais

Com pull-up, a lógica é ativa em LOW (0V = pressionado, 5V = solto), padrão para botões em eletrônica digital, sendo usada em microcontroladores e sistemas embarcados.

❌ Em um circuito com pull-down, a lógica seria invertida (0V = solto, 5V = pressionado), o que pode exigir ajustes na programação.

ATENÇÃO: Para saber mais sobre o uso de botões (push buttons), leia também a nossa dica de software - Como usar push button com Arduino (programação).

Aplicação

Para fins didáticos e projetos gerais.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

Jumpers Kit cabos ligação macho / macho 1  
Resistor

Resistor

2

1 Resistor 150Ω (led laranja)

1 Resistor 10KΩ (push button)

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

Led 5mm LED 5mm 1

1 LED alto brilho ou difuso (qualquer cor)

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

Push Button Push button 6X6X5mm 1  
Arduino UNO R3 Arduino UNO 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 e Leds ligados em série e em paralelo.

Obs.: Resistores iguais ou superiores a 250 Ω 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 o botão (push button) sem o resistor, pois através da programação vamos habilitar o resistor pull-up interno do arduino. 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 ou leia os artigos Como usar push button com Arduino (programação) e Resistores Pull-down e pull-up

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

4) Circuito Pull-up interno do Arduíno: Neste caso, não precisaremos utilizar um resistor para garantir um nível estável, pois utilizaremos um resistor interno do Arduino. Para isto, basta habilitar o resitor pull-up interno do Arduino através da programação. Atenção: Nível lógico  (HIGH ou 1) no estado normal e Nível lógico (LOW ou 0) quando pressionado.

5) A montagem abaixo foi realizada em um protoboard com linhas de alimentação não contínuas, onde acrescentamos jampers para a ligação. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas - saiba mais em protoboard

Código do projeto (Sketch)

Faça o dowload e abra o arquivo projeto04a.ino no IDE do Arduino:  DOWNLOAD - projeto04a.ino

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

/*******************************************************************************
*
*    Projeto 04a – Push button com funão liga / desliga (pull-up interno do Arduino)
*                   http://squids.com.br/arduino
*
*******************************************************************************/

// set pinos
const int buttonPin = 8; // número do pino pushbutton
const int ledPin = 3; // número do pino LED
 
// set variables
int estado; // variável para leitura do pushbutton
int guarda_estado = HIGH; // variável para armazenar valores do pushbutton
 
void setup() {
  // define o pino do Led como saída do Arduino
  pinMode(ledPin, OUTPUT);
  // define pino do pushbutton como entrada do Arduino:
  pinMode(buttonPin, INPUT_PULLUP);
}
 
void loop(){
  // le o estado pushbutton: ligado (LOW) ou desligado (HIGH)
  estado = digitalRead(buttonPin);
 
  // verifica se o botão (pushbutton) está pressionado (LOW)
  if (estado == LOW) {
  // inverte valor da variável guarda_estado
  guarda_estado = !guarda_estado;
  //esperera o tempo de 500ms para evitar que haja várias vezes alterações (efeito bounce)
  delay(500);
  }
 
  if (guarda_estado == LOW) {
  // liga o led
  digitalWrite(ledPin, HIGH);
  }
  else {
  // desliga o led
  digitalWrite(ledPin, LOW);
  }
}

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 o botão o led se acenderá. Entretanto, o led se manterá aceso após você soltar o botão.

3. Ao pressionar novamente o botão o led se apagará, invertendo-se assim o seu estado.

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.2. A constante buttonPin se refere ao push button que deverá estar conectado à porta digital 8 do microcontrolador Arduino.

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

1.4. Declaramos as variáveis estado e guarda_estado igual a HIGH (desligado).

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

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

2.2. Define buttonPin como entrada do controlador Arduino (INPUT_PULLUP) conectado ao pino 8.

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). (leia: Projeto 02b - Led apaga com push button pressionado (pull-up interno do Arduino)

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

3.1. Primeiro fazemos a leitura do botão através função digitalRead(buttonPin), determinando se está pressionado (HIGH ou 1) ou se está liberado (LOW ou zero), armazenando esta informação na variável estado.

3.2. Através do comando if (estado == LOW) verificamos se o estado do botão está diferente do estado original, ou seja, se está pressionado. Este procedimento servirá para qualquer montagem do push button, seja pull-down ou pull-up. Se o botão estiver pressionado, teremos:

3..2.1. Através do operador lógico NOT (guarda_estado = !guarda-estado) o valor da variável guarda_estado será invertido. Desta forma, se a variável guarda_estado estava definida como LOW passará a ser HIGH e vice e versa. Para saber mais sobre operadores lógicos leia - Referência Arduino.

3.2.2. Através da função delay(500) definimos um tempo de espera para haja um tempo mínimo de permanência pressionando o botão. Desta forma você evitará que o led fique piscando repetidamente. Quanto maior o tempo do delay, mais tempo você poderá ficar pressionando o botão. Não é aconselhável deixar valores menores que 500ms.

Observação: Se você não quiser que haja repetições após o tempo de 500ms, substitua a linha de comando delay(500); por:

while (digitalRead(buttonPin) == LOW) {};
delay(50);

Desta forma, o programa irá esperar você soltar o botão para que acenda ou apague o led.

3.3. Através da função condicional if verificamos se a variável guarda_estado é igual a LOW:

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

3.3.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 11

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

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores