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 :
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 :
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 !