Em praticamente todo projeto, é necessário que alguma leitura digital seja feita. E é extremamente ruim ler valores errados, e isso pode ocorrer por causa do pino não estar conectado a nada em determinado momento. Portanto, é necessário usar um resistor pull-up ou pull-down para resolver o problema.


O que é

O resistor pull-up ou pull-down é basicamente um resistor que fica ligado junto ao sinal que você deseja ler. Ele serve para garantir que um determinado sinal, ou uma determinada tensão, seja lida enquanto o pino não recebe nenhum sinal.

Um conceito importante é o de “pino flutuando”, que é o estado que o pino fica sem receber nada. Isso ocorre, pois o pino não está ligado a nada e não há como saber qual sinal ele está recebendo, se é sinal alto(2~5v) ou sinal baixo (0~1v).

Veja o circuito abaixo para entender.

esquema sem pull-up

Observe que, enquanto a chave está aberta, não tem como sabe qual valor está sendo lido no pino D2.

Pull-up

O resistor pull-up garante que o sinal lido seja de nível alto (5v) enquanto o botão ou a chave não forem pressionados. Ele faz isso da seguinte forma:

reistor de pull-up

Enquanto a chave está aberta, a tensão em cima do pino é a tensão de 5v menos a tensão em cima do resistor, que é de aproximadamente 5v. Ou seja, o pino reconhece sinal de nível alto.

Porém, quando a chave se fecha, o terra (GND) fica ligado diretamente no pino, e isso faz com que D2 leia sinal de nível baixo. E é claro, haverá uma corrente fluindo do 5v para o terra.

Pull-down

O funcionamento é igual ao resistor pull-up, porém o que muda é a forma como a chave e o resistor são alimentados. Assim, o resistor pull-down garante que o sinal lido seja de nível baixo (GND) enquanto o botão ou a chave não forem pressionados.

resistor de pull-down

A ideia é a mesma: enquanto a chave está aberta, a tensão em cima do pino será 0v( GND). E, dessa forma, o pino reconhece  sinal de nível baixo. Mas quando a chave se fecha, o 5v fica ligado diretamente no pino, e isso faz com que D2 leia sinal de nível alto. E da mesma forma, existe uma corrente fluindo do 5v para o terra.

Valores das resistências

Por questões práticas, os valores comuns (tanto para pull-up quanto para pull-down) que podem ser usados estão na faixa de 1k~10kΩ. Mas, para calcular, basta usar a lei de Ohm:

R = \frac{V}{I}

V é a tensão que você está alimentando o resistor ou a chave (5v) e I a corrente limite que circula quando a chave é fechada. Por exemplo: estipulando uma corrente limite de 1mA, e como estamos usando 5v, a nossa resistência seria:

R = \frac{5}{0,001}=5000\Omega

Arduino

O Arduino possui uma forma de ativar as resistências pull-up que existem dentro dele. Ele não possui pull-down. Enfim, para ativá-las, basta chamar o comando INPUT_PULLUP na hora de configurar o pino como saída ou entrada. Obviamente nesse caso seria como entrada. E isso é feito da seguinte forma:

pinMode(pino,  INPUT_PULLUP);

Veja o tutorial explicando como ler um botão.

Aplicações

As resistências pull-up e pull-down podem ser usadas em quaisquer circunstancia em que seja necessário garantir uma leitura sem erros.

Um outro exemplo, além da leitura de botões ou chaves em pinos digitais, é a comunicação I2C. Nesse tipo de comunicação, os dispositivos comunicam entre si com sinais digitais (0 ou 1).

Dessa forma, quando não houver nenhum sinal sendo mandado, algum dispositivo pode interpretar um sinal de maneira errada. Então, é preciso usar resistores pull-up no clock e na linha de dados desse tipo de comunicação.

A imagem abaixo mostra como a ligação é feita e os resistores Rp são os resistores pull-up.

Diagrama da comunicação I2c
Fonte: Wikipedia