Arduino

Resistores Pullup e PullDown

Escrito por: ­ 8 de dez de 2016 ­ 8.111 views
pullup_pulldown_hackeduca

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.
Pullup_Pulldown_Floating  Pullup_Pulldown_Floating

Pull-Down

pulldown

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

pullup

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
pulldown_released pulldown_pressed

 Pull-Up com o botão solto Pull-Up com o botão pressionado
pulldown_pressed pulldown_released

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);
 }
}

internal_pullup

 

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.


print
Previous Post Next Post

Você também pode gostar / You Might Also Like

4 Comments

  • Reply hyngrid 1 de abr de 2018 at 19:40

    pagina muito boa matéria muito bem explicada esta tudo muito claro obrigada me ajudou bastante

  • Reply Bruno 18 de set de 2018 at 22:15

    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.

  • Leave a Reply

    Show Buttons
    Siga-nos no Facebook
    Siga-nos no Twitter
    Siga-nos no Google Plus
    Siga-nos no Pintrest
    Siga-nos no Youtube
    Siga-nos no Scratch
    Hide Buttons
    Top
    HackEduca