Entendendo o pull-up e pull-down no Arduino 5

Você já observou que em esquemáticos eletrônicos que possuem sensores/chaves ligados a uma porta do Arduino é comum encontrarmos também resistores? Você sabe a necessidade disso? Nesse artigo iremos trabalhar com as portas de entradas, mais especificamente as portas digitais. Abaixo você vai entender a necessidade de um circuito pull-up ou pull-down e quais são os componentes necessários, assim como os valores, para montarmos um circuito do tipo.

Materiais necessários

No exemplo desse tutorial usamos os seguintes componentes:

Como funciona uma porta digital?

A função de uma porta digital é, basicamente, traduzir uma tensão elétrica em um sinal digital. O sinal digital possui somente dois estados possíveis:, alto (HIGH, 1) ou baixo (LOW, 0).

Mas como o sinal digital funciona na prática? Suponhamos que temos um sinal que varia de 0 V a 5 V. Caso o sinal esteja em 0 V e queira subir para 5 V, antes a tensão irá passar por 1 V, 2 V, 3 V, e 4 V. Todo esse caminho é chamado de sinal analógico. Mas como o sinal digital tem somente dois estados, em algum momento o sinal deve mudar de 0 (LOW) para 1 (HIGH). Observe na figura abaixo o sinal analógico na parte de cima e um sinal digital na parte de baixo. Os pontos em destaques mostra o momento exato em que um sinal digital passa de LOW para HIGH e vice versa.

Osciloscópio sinal lógico

Esses limites de tensão de entrada (Input Voltage Threshold) que identifica o ponto exato da mudança vai depender do fabricante de cada componente/circuito. O VIL (Volt Input Low) e o VIH (Volt Input High) é o que define qual o valor para um estado digital estar em nível baixo ou alto.

O microcontrolador ATmega328P, utilizado no Arduino Uno, trabalha seu VIL com o mínimo de -0,5 V e máximo de 1,5 V, e o seu VIH com o mínimo de 3 V e máximo de 5,5 V. Ou seja, uma tensão de entrada com valor de 0 V, 0,5 V ou 1 V equivale a nível lógico LOW. E uma tensão de entrada com valor de 4,6 V, 4,8 V ou 5,1 V equivale a nível lógico HIGH.

Exemplo de funcionamento da entrada digital

Para exemplificar o funcionamento de uma porta digital, vamos montar dois circuitos usando o Arduino. No primeiro exemplo ligaremos a porta digital 7 ao pino GND e assim obteremos o nível digital LOW (0). No segundo exemplo ligaremos a porta digital 7 ao pino 5 V e assim obteremos o nível digital HIGH (1).

Observe na figura abaixo que a porta 7 esta ligada ao GND, e na tela ao lado o monitor serial responde nível 0.

Exemplo porta digital

Já na figura abaixo, a porta 7 esta ligada ao 5 V, e na tela ao lado o monitor serial responde nível 1.

Exemplo porta digital 2

Pull-Up e Pull-Down

Agora, caso a porta 7 do circuito anterior não esteja ligada no GND ou no 5 V, ela poderá assumir nível LOW ou HIGH aleatoriamente, devido a interferências eletromagnéticas. Para resolver isso devemos puxar o nível de entrada para baixo (pull-down ou LOW) ou para cima (pull-up ou HIGH).

Suponhamos agora que um botão (push button) esteja ligado a porta 7 do Arduino, realizando o contato entre a porta 7 e o GND. Ao pressionar o botão, o nível lógico baixo será aplicado à porta. Ao soltar o botão a porta não estará ligada ao GND e nem ao 5 V podendo assumir um nível aleatório devido a interferência.

Lei de Ohm

Antes de seguirmos para a solução, vamos entender sobre uma das leis mais importante da eletrônica. A Lei de Ohm é utilizada para realizar cálculos entre corrente (ampére), tensão (volts) e resistência (ohms). No cenário que estamos trabalhando, utilizamos a tensão de 5 V para as portas digitais. O regulador de tensão utilizado no Arduino Uno é o modelo NCP1117 que consegue fornecer cerca de 800 mA para todo o circuito.

Segundo o datasheet, uma porta digital do Arduino consegue ler um nível lógico com corrente de no mínimo 1 uA (micro ampere). Usualmente um resistor de 10 kΩ é utilizado para um circuito que tenha pull-up/pull-down. Colocando na fórmula da Lei de Ohm teremos:

  • I (corrente)  = V (tensão) / R (resistência)
  • I = 5 / 10000
  • I = 0,0005 A ou 0,5 mA ou 500 uA

Assim, com um resistor de 10 kΩ trabalhando em uma tensão de 5 V teremos 0,5 mA de consumo do regulador.

Circuito básico pull up ou down

Pull-down (puxar para baixo)

Ligando a porta 7 ao GND, usando um resistor de 10 kΩ, estaremos puxando o nível da porta para baixo (LOW). Ao ligar o 5 V no botão e o botão na porta 7, quando pressionado, a corrente elétrica percorre o caminho com menos resistência, jogando o nível lógico da porta para cima (HIGH).

Observe na figura abaixo que a chave esta em OFF, e o resistor esta ligando a porta 7 ao GND. Como resultado no monitor serial responde nível 0.

Pull down

Agora, observe que ao colocar a chave em ON, o caminho entre a porta 7 e o 5 V fica sem resistência, jogando o nível lógico para 1, como mostrado no monitor serial. Ao mesmo tempo o GND possui uma ligação para o 5 V, mas passando pelo resistor, evitando que um curto circuito ocorra.

Pull down

Pull-up (puxar para cima)

Ligando a porta 7 ao 5 V, usando um resistor de 10 kΩ, estaremos puxando o nível da porta para cima (HIGH). Ao ligar o GND no botão e o botão na porta 7, quando pressionado, a corrente elétrica percorre o caminho com menos resistência, jogando o nível lógico da porta para baixo (LOW).

Observe na figura abaixo que a chave esta em OFF, e o resistor esta ligando a porta 7 ao 5 V. Como resultado no monitor serial responde nível 1.

 

Observe na figura abaixo que ao colocar a chave em on, o caminho entre a porta 7 e o GND fica sem resistência, jogando o nível lógico para 0, como mostrado no monitor serial. Ao mesmo tempo o GND possui uma ligação para o 5 V, mas passando pelo resistor, evitando que um curto circuito ocorra.

Pull up

Por estarmos tratando de uma entrada de sinal, nos exemplos anteriores pode-se observar que o pinMode foi configurado no modo INPUT. Uma boa notícia é que o microcontrolador do Arduino possui internamente um resistor exclusivo para se trabalhar com pull-up. Para isso, basta setar o modo para INPUT_PULLUP, não sendo necessário o uso de um resistor externo para essa função.

Observe na figura abaixo que no código fonte utilizamos o modo do pino com “INPUT_PULLUP” e que a chave esta em OFF. Internamente o microcontrolador usou um resistor para ligar o pino 7 ao 5 V. Como resultado no monitor serial responde nível 1.

Pull up interno

Observe na figura abaixo que ao colocar a chave em ON, o caminho entre a porta 7 e o GND fica sem resistência, jogando o nível lógico para 0, como mostrado no monitor serial. Ao mesmo tempo o GND possui uma ligação interna ao microcontrolador para o 5 V, mas passando pelo resistor interno, evitando que um curto circuito ocorra.

Pull up interno

Conclusão

Vimos nesse post como é o funcionamento de uma porta digital, um pouco sobre a lei de Ohm e o funcionamento dos resistores no modo pull-up e no modo pull-down.

Além disso, ajude-nos a melhorar o blog, participe com a sua sugestão, dúvida ou comentário aqui embaixo.

Faça seu comentário

Acesse sua conta e participe

5 Comentários

  1. muito bom seu artigo, parabens

  2. Excelente! Eu ainda não tinha entendido o funcionamento e o porquê de ser preciso utilizar os resistores em PULL UP/PULL DOWN. Agora, já consigo aplicar nos meus projetos.

  3. Sensacional,muito didático

  4. Excelente material, parabéns. Vale a pena ler. Muito didático.

  5. Olá Sílvio parabéns pela explicação!
    A aplicação deste conceito garante que não ocorrerá variações indesejadas no nível lógico das portas, por algum tipo de interferência eletromagnética!