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.