Arduino Nano - Botão

Este tutorial ensina como usar o Arduino Nano com um botão. Em detalhes, vamos aprender:

O botão também é chamado de botão de pressão, botão tátil ou interruptor momentâneo. É um componente fundamental e usado com frequência em projetos Arduino. É simples de usar. No entanto, pode ser confuso para iniciantes por causa de aspectos mecânicos e físicos e das várias formas de usá-lo. Este tutorial facilita as coisas para iniciantes.

Hardware Necessário

1×Official Arduino Nano
1×Alternatively, DIYables Nano V3.0 Development Board
1×Cabo USB A para Mini-B
1×Botão para Protoboard com Capa
1×Kit de Botões para Protoboard
1×Botão de Pressão para Painel
1×Módulo de Botão
1×Protoboard
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Sobre o Botão

Iniciantes costumam encontrar duas dificuldades comuns ao usar um botão:

1. Problema de entrada flutuante:.

  • Sintoma: O valor lido no pino de entrada não corresponde ao estado de pressionado do botão.
  • Causa: O pino de entrada não está usando um resistor de pull-up ou pull-down.
  • Solução: Use um resistor de pull-up ou pull-down; os passos para isso serão explicados neste tutorial.

2. Fenômeno de chattering (trepidação):.

  • Sintoma: Embora o botão seja pressionado apenas uma vez, o código do Arduino detecta vários acionamentos.
  • Causa: Problemas mecânicos e físicos fazem o estado do botão (ou interruptor) alternar rapidamente entre LOW e HIGH várias vezes.
  • Solução: Para resolver esse problema, as técnicas de debounce serão abordadas no tutorial Arduino Nano- Botão - Debounce

Somente aplicações que exigem detecção precisa do número de acionamentos precisam levar isso em consideração.

※ Nota:

Não confunda o botão com os seguintes componentes:

Pinagem do Botão

O botão de pressão, também chamado de pushbutton, botão tátil ou interruptor momentâneo, é um tipo de interruptor que fecha quando o botão é pressionado e mantido, e abre quando é solto. Existem vários tipos de botões de pressão, que podem ser divididos em dois grandes grupos:

  • Botão de pressão para montagem em PCB (adequado para montar em uma protoboard)
  • Botão de pressão para montagem em painel
Botão de pressão

Um botão para montagem em PCB normalmente tem quatro pinos.

Pinagem do botão

No entanto, esses pinos são ligados entre si em pares. Por isso, apenas dois dos quatro pinos precisam ser usados, aqueles que não estão conectados internamente.

Há quatro formas possíveis de conectar o botão, duas delas simétricas (como visto na imagem).

Como Usar o Botão

? Por que apenas dois pinos de um botão são utilizados, se ele tem quatro?

⇒ Para garantir que ele fique bem fixado na PCB (placa de circuito impresso) e suporte qualquer força de pressionamento.

Um botão para montagem em painel geralmente tem dois pinos.

Pinagem do botão de pressão de dois pinos
image source: diyables.io

O módulo de botão de pressão inclui um resistor de pull-down embutido, que garante que a saída permaneça LOW quando o botão não está pressionado. Ele tem três pinos:

  • GND: Conecte este pino ao terra.
  • VCC: Conecte este pino a uma fonte de alimentação de 5V ou 3.3V.
  • OUT: Conecte este pino a uma entrada digital do seu Arduino.

Com essa configuração, o módulo envia LOW quando o botão não está pressionado e envia HIGH quando o botão está pressionado.

Como Funciona

  • Quando o botão não está pressionado, o pino A e o pino B não estão conectados.
  • No entanto, quando o botão é pressionado, o pino A e o pino B ficam conectados.
Como o Botão Funciona

Arduino Nano - Botão

Um pino do botão é conectado ao VCC ou ao GND. O outro pino do mesmo botão é conectado a um pino de uma placa Arduino Nano. Examinando o estado de um pino do Arduino Nano configurado como entrada, podemos determinar se um botão foi pressionado ou não.

Estado do Botão e Estado de Pressionamento

A conexão entre o botão e o Arduino Nano, assim como a configuração do pino do Arduino, determinará a relação entre o estado do botão e o estado de pressionamento.

Há duas formas de usar um botão com o Arduino:

  1. Um pino do botão é conectado ao VCC, e o outro é conectado a um pino do Arduino com um resistor de pull-down
    • Quando o botão é pressionado, o estado do pino do Arduino será HIGH. Caso contrário, será LOW
    • Neste caso, é necessário um resistor externo.
  • Um pino do botão é conectado ao GND, e o outro é conectado a um pino do Arduino com um resistor de pull-up
    • Quando o botão é pressionado, o estado do pino do Arduino será LOW. Caso contrário, será HIGH
    • Podemos usar um resistor interno ou externo. O resistor interno já vem embutido no Arduino Nano e pode ser configurado pelo código do Arduino Nano.

    ※ Nota:

    • Se NÃO usarmos nenhum resistor externo de pull-down/pull-up, o estado do pino de entrada fica “flutuante” quando o botão NÃO está pressionado. Isso significa que o estado pode ser HIGH ou LOW (instável, não fixo), resultando em detecção incorreta.
    • A pior prática: Inicializar o pino do Arduino como entrada (pinMode(BUTTON_PIN, INPUT)) sem usar nenhum resistor externo de pull-down ou pull-up.
    • A melhor prática: inicializar o pino do Arduino como entrada com pull-up interno (usando pinMode(BUTTON_PIN, INPUT_PULLUP)). Ela NÃO precisa de nenhum resistor externo de pull-down/pull-up.

    Para simplificar a vida de quem está começando, este tutorial usa a abordagem mais direta: inicializar o pino do Arduino Nano como entrada com pull-up interno, sem precisar de um resistor externo. Os iniciantes não precisam se preocupar com a forma de conectar o resistor de pull-up/pull-down. Basta usar o código do Arduino Nano.

    Diagrama de Ligação

    • Diagrama de Ligação entre o Arduino Nano e o botão para montagem em PCB
    Diagrama de Ligação do Botão com Arduino Nano

    This image is created using Fritzing. Click to enlarge image

    • Diagrama de Ligação entre o Arduino Nano e o botão para montagem em painel
    Diagrama de Ligação do botão de pressão de dois pinos com Arduino Nano

    This image is created using Fritzing. Click to enlarge image

    Veja A melhor forma de alimentar o Arduino Nano e outros componentes.

    Como Programar o Botão

    • Use a função pinMode() para configurar o pino do Arduino Nano como entrada com pull-up interno.
    • Por exemplo, o pino 2:
    pinMode(2, INPUT_PULLUP);
    • Use a função digitalRead() para verificar o estado do pino do Arduino Nano.
    int button_state = digitalRead(BUTTON_PIN);

    ※ Nota:

    Existem dois casos de uso comuns:

    • O primeiro: Se o estado da entrada for HIGH, execute uma ação. Se o estado da entrada for LOW, execute a ação oposta.
    • O segundo: Se o estado da entrada mudar de LOW para HIGH (ou de HIGH para LOW), faça algo.

    Escolhemos um deles de acordo com a aplicação. Por exemplo, ao usar um botão para controlar um LED:

    • Se queremos que o LED fique LIGADO quando o botão está pressionado e DESLIGADO quando o botão NÃO está pressionado, DEVEMOS usar o primeiro caso de uso.
    • Se queremos que o LED alterne entre LIGADO e DESLIGADO a cada vez que pressionamos o botão, DEVEMOS usar o segundo caso de uso.

    Como detectar a mudança de estado de LOW para HIGH

    const int BUTTON_PIN = 2; // the number of the pushbutton pin int prev_button_state = HIGH; // the previous state from the input pin int button_state; // the current reading from the input pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // initialize the pushbutton pin as an pull-up input // the pull-up input pin will be HIGH when the switch is open and LOW when the switch is closed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if(prev_button_state == LOW && button_state == HIGH) Serial.println("The state changed from LOW to HIGH"); // save the last state prev_button_state = button_state; }

    Código do Arduino Nano

    Passos Rápidos

    • Conecte seu Arduino Nano a um computador usando um cabo USB.
    • Abra a Arduino IDE e selecione a placa e a porta corretas.
    • Copie o código abaixo e abra-o na Arduino IDE.
    /* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-button */ #define BUTTON_PIN 2 // The number of the pushbutton pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // Configure the Arduino Nano pin as a pull-up input // The pull-up input pin is HIGH when the button is open and LOW when pressed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: int button_state = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(button_state); }
    • Clique no botão Upload da Arduino IDE para compilar e carregar o código no Arduino Nano.
    Como carregar o código no Arduino Nano
    • Abra o Serial Monitor.
    • Pressione e solte o botão várias vezes.
    • Confira os resultados exibidos no Serial Monitor.
    ∞
    Newbiely | Arduino IDE 2.3.8
    ──
    ☐
    ✕
    File
    Edit
    Sketch
    Tools
    Help
    Arduino Nano
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'Arduino Nano' on 'COM15')
    New Line
    9600 baud
    1 1 1 0 0 0 0 0 0 1 1 1
    Ln 11, Col 1
    Arduino Nano on COM15
    2

    1 é HIGH, 0 é LOW.

    Explicação do Código

    Confira a explicação linha por linha contida nos comentários do código-fonte!

    Modificando o Código do Arduino Nano

    Vamos modificar o código para que ele reconheça os eventos de pressionar e soltar.

    Passos Rápidos

    • Modifique o código da seguinte forma:
    /* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-button */ #define BUTTON_PIN 2 // The number of the pushbutton pin int prev_button_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // Configure the Arduino Nano pin as a pull-up input // The pull-up input pin is HIGH when the button is open and LOW when pressed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if(prev_button_state == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if(prev_button_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last state prev_button_state = button_state; }
    • Clique no botão Upload da Arduino IDE para compilar e carregar o código na placa Arduino Nano.
    Carregar código pela Arduino IDE
    • Abra o Serial Monitor.
    • Pressione o botão e mantenha-o pressionado.
    • Solte o botão e observe o resultado no Serial Monitor.
    ∞
    Newbiely | Arduino IDE 2.3.8
    ──
    ☐
    ✕
    File
    Edit
    Sketch
    Tools
    Help
    Arduino Nano
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'Arduino Nano' on 'COM15')
    New Line
    9600 baud
    The button is pressed The button is released
    Ln 11, Col 1
    Arduino Nano on COM15
    2

    ※ Nota:

    • Mesmo que você pressione e solte o botão apenas uma vez, a saída no Serial Monitor pode exibir vários eventos de pressionado e solto. Esse é o comportamento típico do botão e é conhecido como "fenômeno de chattering". Para resolver esse problema, consulte o tutorial Arduino Nano - Debounce de Botão.
    • Desenvolvemos uma biblioteca, a ezButton, para simplificar o processo para quem está começando, principalmente ao lidar com vários botões. Você pode saber mais sobre a biblioteca ezButton aqui.
    • Para o módulo de botão, configure o pino com pinMode(BUTTON_PIN, INPUT). O módulo envia LOW quando não está pressionado e HIGH quando está pressionado.

    Vídeo

    Desafie-se

    • Quando o botão for pressionado, o LED será aceso.
    • Quando o botão não estiver pressionado, o LED será apagado.
    • A cada vez que o botão for pressionado, o LED alternará entre LIGADO e DESLIGADO.

    Conhecimento Adicional

    Quais são as ocasiões em que é apropriado usar um resistor de pull-down/pull-up em um pino de entrada? Quais são as ocasiões em que não é adequado usar um resistor de pull-down/pull-up em um pino de entrada?

    • Se o sensor tem estados fechado ou aberto, é necessário um resistor de pull-up ou pull-down para fazê-los se tornarem LOW e HIGH. Exemplos desses sensores incluem botão de pressão, interruptor e chave de contato magnético (sensor de porta).
    • Por outro lado, se o sensor tem dois níveis de tensão definidos (LOW e HIGH), nenhum resistor de pull-up ou pull-down é necessário. Exemplos desses sensores são o sensor de movimento e o sensor de toque.

    Referências de Funções

    ※ NOSSAS MENSAGENS

    • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!