22 fevereiro 2013

Resistor de elevação

Por acaso você já montou um circuito básico pra acender um led, utilizando um botao, e ele não funcionou direito ? Tipo... acendeu quando não deveria e não acendeu quando deveria ? Pois é, isso pode ser culpa do resistor de elevação (ou resistor pull-up).

Opa ! O que é isso ?

Bom, resistor de elevação é um componente (resistor) que você coloca em determinado circuito, para que o circuito não fique "perdido" quando nada está acontecendo. Parece complicado ? Nem tanto, vamos a um exemplo prático. Você faz um circuito simples, como este abaixo :

resistor pull up arduino

usando o  seguinte programa :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// Projeto : Circuito teste resistor de elevacao
// Autor : Arduino & Cia

void setup()
{
  pinMode(10,OUTPUT); // Pino led
  pinMode(6,INPUT);   // Pino botão
}

void loop()
{ 
  int leitura=digitalRead(6);
  if (leitura == 0)
  { 
     digitalWrite(10,1);
  }
  else
  {
     digitalWrite(10,0);
  }
}

Quando vc está apertando o botão, tudo bem, o Arduino sabe que ali está passando corrente, etc e tal, e acende o led, mas e quando o botão não está apertado ? Qual o estado ? Positivo, negativo, ou indefinido ? É justamente nesse estado "indefinido" que as coisas começam a complicar, gerando resultados diversos, e o Arduino se perde para saber o que está acontecendo no circuito. O resultado é um led que fica meio aceso, meio apagado, piscando às vezes, ou seja, perdido.

Utilizando o circuito anterior e uma pequena resistência (destacada no círculo vermelho), o problema desaparece. Mas qual a mágica ? Não há mágica. Utilizando um resistor de elevação, como este componente é chamado, você define um estado (HIGH) para o botão, quando o mesmo não é pressionado. Veja o circuito abaixo :

Circuito com resistor de elevação / pull-up
Felizmente o Arduíno tem uma função que permite que você acione um resistor de elevação interno, sem precisar adicionar componentes à placa. Para ativa-lo, basta adicionar a linha abaixo no programa :

digitalWrite(6,HIGH);

Seu programa fica assim :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
void setup()

{
  pinMode(10,OUTPUT); // Pino led
  pinMode(6,INPUT);   // Pino botão
  digitalWrite(6,HIGH); // Ativa o resistor de elevação
}

void loop()
{
  //Codigo aqui
}

Desta maneira, você pode usar normalmente o circuito da figura 1, sem se preocupar em colocar mais componentes no circuito.

Obviamente existe uma resposta "eletrônica" para essa questão do resistor de elevação, mas achei que a explicação ficaria melhor em termos gerais, sem muitos detalhes técnicos.

Ah ! da mesma forma que o "pull-up", existe o resistor "pull-down", que ligado ao circuito, mantém o sinal em estado LOW (baixo). ;-)

Comentários para enriquecer o post serão bem vindos. Até a próxima !

4 comentários:

  1. Amigo, bom dia,
    percebi que o resistor de elevação não está ligado no positivo da alimentação.
    só o toque para confundir os iniciantes.
    obrigado pelo material, estava querendo entender o pull-up resistor e com a sua explicação, já foi o suficiente.
    grato

    ResponderExcluir
  2. Também não entendi a imagem. Olhando o circuito parece que o led vai sempre estar aceso.
    O pino 6 está em High, no que o botão interferiria neste caso ? Desculpe sou analista de sistemas mas não tenho conhecimento de eletrônica. Só o muito básico...

    ResponderExcluir
    Respostas
    1. Boa tarde Clebio ! Talvez o tutorial não esteja muito claro, mas no último exemplo de programa eu só coloco o Pino 6 em High para ativar o resistor de elevação interno do Arduino. Se você fizer isso e utilizar o primeiro programa do tutorial, verá que o circuito da Figura 1 funciona normalmente sem a necessidade de utilizar um resistor externo. Abraço !

      Excluir