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 este sinal (a tensão dele), fique em um valor conhecido enquanto o pino não recebe nenhuma tensão.
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 de nível alto (2~5v) ou sinal de nível baixo (0~1v).
Veja o circuito abaixo para entender.
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:
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. E a tensão em cima do resistor é próxima de zero, pois a corrente que circula nele é bem pequena. Então, o pino recebe praticamente 5V e 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. Nesse caso, haverá uma corrente fluindo do 5V para o terra por meio do resistor.
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.
A ideia é a mesma: enquanto a chave está aberta, a tensão em cima do pino será 0 (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.
Com a chave fechada, assim como antes, existe uma corrente fluindo do 5v para o terra por meio do resistor.
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 usar o comando INPUT_PULLUP na hora de configurar o pino como entrada. E isso é feito da seguinte forma:
pinMode(pino, INPUT_PULLUP);
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.
Gostei, só uma duvida agr.
Quando utilizar o pull down e o sinal positivo que receberei estiver desligado, será que essa corrente de retorno queimará o circuito desse sinal? Pois vou estar enviando Gnd a ele.
Olá, Jaciel. Excelente pergunta a sua. Mas não tem risco da corrente queimar o circuito, desde que você coloque um resistor com valor relativamente alto (normalmente 10kΩ).
Você pode fazer uma conta rápida da corrente que entra no pino considerando que a máxima tensão interna será de 5v. Portanto, a tensão em cima do resistor será de 5v. Aplicando a lei de Ohm: I = 5/10kΩ = 0,5mA. Ou seja, é uma corrente muito pequena.
Me ajudou muito!!!! Amei esse site.
Que ótimo, Caio! Espero que os demais conteúdos do site possam te ajudar da mesma forma.
Ótimo poder ter este tipo de conteúdo online, gostei bastante da explicação, isso parece explicar algumas falhas de leitura que tive quando trabalhava com microcontroladores.
Que ótimo, Romulo! Valeu pelo comentário. Também já tive alguns problemas de leitura justamente por não ter me preocupado com os resistores de pull-up ou pull-down. Até mesmo em alguns casos em que usei a comunicação I2C.