Como usar pull-up interno no Arduino
No mundo da eletrônica, muitas vezes é necessário utilizar resistores externos para controlar o fluxo de carga, evitar interferências indesejadas e impedir a queima de equipamento. O que poucas pessoas sabem é que o Arduino já possui resistores internos de pull-up em suas portas digitais que podem ser utilizados ativados por meio do comando “INPUT_PULLUP”.
Os resistores pull-up são usados em circuitos eletrônicos para garantir o nível lógico alto quando nenhum outro componente estiver conduzindo. Contudo, o valor do resistor pull-up é intencionalmente alto para que, se qualquer componente puxe a tensão para 0V, o nível lógico irá para o nível baixo.
A principal vantagem da utilização dos resistores internos de pull-up do Arduino é que não será necessário o uso de resistores externos no circuito. Assim, o projeto ficará mais simplificado e barato.
Nesse tutorial, vamos aprender a utilizar o recurso pull-up em um circuito simples com botão.
MATERIAIS NECESSÁRIOS
- 1 x Placa UNO SMD R3 Atmega328 compatível com Arduino UNO;
- 1x Chaves Táctil Push Button Botão;
- 1 x Cabo USB compatível com Arduino;
- 1x Protoboard;
- Jumpers Macho-Macho.
ESQUEMÁTICO DE LIGAÇÃO
Inicialmente, certifique-se de que a sua placa Arduino esteja desligada. Em seguida, monte o circuito da Figura 1 utilizando o botão e os jumpers.
Ao realizar a montagem do circuito, observe os seguintes pontos:
- Conecte um dos terminais do botão ao GND do Arduino;
- Conecte o outro terminal (lado oposto) do botão ao pino digital 9 do Arduino.
ELABORANDO O CÓDIGO
Após a montagem do circuito, vamos a programação do Sketch. O objetivo deste projeto é utilizar o resistor pull-up interno do Arduino em um circuito simples com botão.
Acompanhe os passos a seguir para melhor compreensão da lógica de programação:
1. Declarar as variáveis:
O primeiro passo na construção do Sketch será a declaração de variáveis. Desta forma, definimos a porta digital 9, em que o botão está conectado, a variável botão e criamos a variável EstadoBotao, do tipo inteiro, para armazenar o estado (HIGH ou LOW) do botão.
2. Iniciar a comunicação serial e realizar configurações iniciais
Na função void setup() inicializamos a comunicação serial por meio da instrução Serial.begin(9600);
Em seguida, inicializamos a variável botao (pino digital 9) como entrada com resistor pull-up interno habilitado através da instrução pinMode(botao, INPUT_PULLUP);
3. Realizar a leitura do botão
Iniciamos o loop() realizando a leitura da porta digital 9 (botao), para isso utilizaremos a função digitalRead(botao), e armazenaremos este valor na variável EstadoBotao.
4. Realizar verificação se o botão foi pressionado ou não
Neste projeto utilizaremos a estrutura de repetição if…else realizando múltiplos testes agrupados.
Se a leitura do botão for igual a 0 significa que o botão está sendo pressionado. Senão, o botão não está sendo pressionado. O resultado da verificação será impresso no monitor serial.
Desta forma, o Sketch deste projeto ficará da seguinte maneira:
/* -- UTILIZAR RESISTOR PULL-UP DO ARDUINO -- ================================================= === BLOG DA ROBOTICA - www.blogdarobotica.com === ================================================= Autor: Jonas Souza E-mail: contato@blogdarobotica.com Facebook: facebook.com/blogdarobotica Instagram:@blogdarobotica YouTube: youtube.com/user/blogdarobotica ================================================= === CASA DA ROBOTICA - www.casadarobotica.com === ================================================= Facebook: facebook.com/casadaroboticaoficial Instagram:@casadarobotica ================================================== */ int botao = 9; //Define botao no pino digital 9 int EstadoBotao; //Variável responsável por armazenar os dados de leitura do botao void setup() { Serial.begin(9600);// Inicia a comunicação serial pinMode(botao, INPUT_PULLUP); // define que o pino conectado ao botao é um pino de entrada de sinal } void loop() { EstadoBotao = digitalRead(botao);//Lê o valor de botao e armazena em EstadoBotao Serial.println(EstadoBotao); //Imprime o valor armazenado em EstadoBotao no monitor serial delay(100); //Intervalo de 0.1 segundo até a proxima leitura if (EstadoBotao == 0) { //Se EstadoBotao tiver um valor igual a 0 na leitura, será mostrado que o botão está sendo pressionado no monitor serial Serial.println("botao pressionado"); //Imprime mensagem no monitor serial } else { //Se EstadoBotao tiver um valor igual a 1 na leitura, será mostrado que o botão não esta sendo pressionado no monitor serial Serial.println("botao nao pressionado"); //Imprime mensagem no monitor serial } }
O funcionamento deste projeto pode ser observado no Vídeo 1.
Espero ter ajudado,
Obrigado a todos e em caso de dúvidas deixe seu comentário abaixo!
Att. Jonas Souza
Graduando em Engenharia Elétrica.