Em nossos projetos, sabemos que precisamos utilizar um resistor igual ou aproximadamente 10KΩ junto a um botão (switch), um LDR, sensor de Hall Effect, etc…
Sabemos também que verificando esse pino através da serial do Arduino ou a leitura do pino pelo Scratch, mostrará oscilações entre os valores “1” e “0” que é o mesmo que “ligado” e “desligado”.
Esse fenômeno é chamado de floating, o que nada mais é que flutuação.
Para interromper essa flutuação usamos um resistor de Pull-up ou Pull-Down que visa equalizar o sistema.
Neste artigo vamos discutir um pouco sobre esse assunto
A função principal desses resistores é garantir uma entrada compreensível para o microprocessador, mesmo que ele esteja aguardando um sinal
Floating – Flutuação
Circuitos lógicos digitais, como no caso do Arduino reconhece somente 3 estados lógicos, que são: HIGH, LOW e Floating. O Floating ocorre porque o microprocessador não está recebendo HIGH (Vcc) ou LOW (Ground). Se um deles for interrompido a leitura ficará flutuando, pois nenhum sinal, não é igual a ZERO – ZERO é o ground.
Carregue o seu Arduino com o seguinte sketch:
/* Resistores PullDown e Pullup https://www.hackeduca.com Exemplo criado por Edson Sobreira Domínio Público */ int pushButton = 3; int sinal; //---------------------------------- void setup() { pinMode(pushButton, INPUT); Serial.begin(9600); Serial.println ("https://www.hackeduca.com"); Serial.println (""); } //---------------------------------- void loop() { sinal = digitalRead(pushButton); Serial.print ("A Leitura atual é : "); Serial.print(sinal); Serial.println (" "); delay(1); }
Neste exemplo não há comunicação com o pino D3 (input) | A leitura do pino mostra flutuação – pino não recebe 5v, tampouco ground. |
Pull-Down
Resistores pull-down são resistores que tem por objetivo garantir que o processador sempre receba o nível lógico LOW, na ausência de um sinal de entrada
O resistor pull-down acima é o resistor 10K. Quando o botão é mantido pressionado, o pino D3 recebe diretamente os 5 volts, que é mais forte que o ground, porém quando o botão é liberado, o pino D3 que já está conectado ao resistor de 10K, puxa para o ground, baixando a carga para 0 (zero) volt, por isso se chama Pull-Down (Puxar para baixo)
Quando montamos um circuito com o Pull-Down, devemos pensar que se nada for feito o pino lerá “0”, ou seja LOW.
Quando se aperta o botão o pino lerá “1”, ou seja, HIGH
Pull-Up
Resistores pull-up são resistores que tem por objetivo garantir que o processador sempre receba o nível lógico HIGH, na ausência de um sinal de entrada
O resistor pull-up acima é o resistor 10K. Quando o botão é mantido pressionado, o pino D3 recebe diretamente o Ground, que está ligado sem resistor, e neste caso menos resistivo que os 5v + 10kΩ, porém quando o botão é liberado, o pino D3 que já está conectado ao resistor de 10K, puxa para os 5 volts, elevando a carga que antes era 0 (zero) volt, por isso se chama Pull-Up (Puxar para Cima)
Quando montamos um circuito com o Pull-Up, devemos pensar que se nada for feito o pino lerá “1”, ou seja HIGH.
Quando se aperta o botão o pino lerá “0”, ou seja, LOW.
Para meus projetos costumo utilizar o Pull-Down, pois acho que faz mais sentido (HIGH quando está pressionado e LOW quando está solto), no entanto qualquer um dois dois dará o efeito esperado, desde que considerado essa diferença na programação. Em geral, o Pull-Up é mais utilizado.
Pull-Down com o botão solto | Pull-Down com o botão pressionado |
Pull-Up com o botão solto | Pull-Up com o botão pressionado |
O resistor Pull-up e/ou Pull-Down precisam ser de 10kΩ?
A resposta é não, porém use 10KΩ que não terá erro.
Em geral >4,7KΩ já dá o efeito esperado.
Não tenho um resistor, posso usar um botão no Arduino?
A resposta é sim. O Arduino possui resistores pull-up em seus pinos.
Para acessar esses resistores, é necessário atribuir essa função ao Pino desejado.
Em geral aprendemos que os pinos podem ser:
INPUT, OUTPUT
, porém ele pode ser também INPUT_PULLUP
Veja o seguinte sketch onde esse resistor pode ser utilizado.
/* Resistor Interno em PullDown https://www.hackeduca.com Exemplo criado por Edson Sobreira Domínio Público */ int led = 13; int switchButton = 4; int sensor; void setup() { Serial.begin(9600); pinMode(4, INPUT_PULLUP); pinMode(led, OUTPUT); } //------------------------ void loop() { sensor = digitalRead(switchButton); Serial.println(sensor); //Como pode ser observado a lógica do Pull-Up que comentei em repouso o botão retorna 1 e apertado ele retorna 0 if (sensor == HIGH) { digitalWrite(led, LOW); } else { digitalWrite(led, HIGH); } }
Extras
Modifique a linha 16 do pograma para: pinMode(4, INPUT_PULLUP);
Na comunicação serial de seu Arduino haverá oscilação constante entre 1 e 0.
Você verá os valores flutuando, uma vez que agora não há mais o resistor conectado como pull-up
Você verá também que o LED 13 está piscando muito rápido, pois no programa diz que HIGH é apagado e LOW é ligado.
Por estar flutuando ele oscila entre ligado e desligado o tempo todo.
4 Comments
pagina muito boa matéria muito bem explicada esta tudo muito claro obrigada me ajudou bastante
Obrigado!
Olá Edson, muito bom o artigo. Entretanto, sabe se tem como adicionar a instrução INPUT_PULLUP no Scratch? Por enquanto to usando o resistor 10k Ohms como pull up. Valeu.
Olá Bruno, na extensão do Scratch não há esse comando mapeado.