Resistores são componentes eletrônicos que oferecem resistência à passagem de corrente, limitando a valores ideais para cada aplicação. Eles podem também usados para direcionar a corrente, fazendo com que o circuito apresente um estado lógico fixo no caso de algum elemento externo ser desconectado ou removido. Nesse tipo de aplicação, o resistor pode ser classificados como resistor de pull-up ou de pull-down dependendo da forma como ele é conectado ao circuito.
Essa técnica é muito usada em conjunto a componentes como optoacopladores, transistores e chaves, que são usados para abrir ou fechar o circuito a fim de permitir ou bloquear a passagem de corrente para outros componentes.
Nessa postagem vamos explicar qual é o papel dos resistores de pull-up e pull-down, como conectá-los e como eles podem ser aplicados ao uso de botões e LDRs com Arduino.
Componentes necessários
Para seguir este tutorial, você precisará dos seguintes itens:
- 1x Placa UNO R3 ATmega328 + Cabo USB (Arduino Compatível).
- 1x LED Difuso 5mm.
- 1x Push Button 6x6x5mm.
- 1x Sensor de Luminosidade LDR 5mm.
- 1x Resistor 1/4W 5% – 220R.
- 1x Resistor 1/4W 5% – 10K.
- 1x Protoboard 400 Pontos.
Pull-Up e Pull-Down
Ligando um botão a um pino de uma placa Arduino sem resistor, o pino estará propenso a sofrer interferências eletromagnéticas e entrar em estado flutuante quando o circuito estiver aberto. Isso significa que as leituras no pino vão oscilar arbitrariamente entre HIGH e LOW, sendo impossível obter uma leitura precisa.
Para resolver este problema, precisamos ter em mente que a corrente elétrica procura passar sempre pelo caminho com menos resistência. Ligando o botão sempre a um resistor de 10kΩ, temos um valor que é baixo o suficiente para permitir a passagem de corrente para o pino do Arduino mas que ao mesmo tempo é intencionalmente alto o suficiente para puxar a tensão no pino em outra direção quando o botão é pressionado.
Resistor de Pull-Up
O papel de um resistor de pull-up é puxar (pull) fracamente a tensão do pino ao qual ele está conectado para um nível lógico alto (up) enquanto o circuito estiver aberto. Sendo assim, a tensão no pino será de 5V (HIGH) enquanto o botão não é pressionado e 0V (LOW) quando for pressionado.
Imagem 1 — Circuito com resistor de pull-up
Para entender melhor este comportamento, conecte um LED ao pino 13 de seu Arduino usando um resistor de 220Ohms. Em seguida, ligue um botão ao pino 10 usando um resistor de pull-up de 10kOhms de acordo com a ilustração abaixo:
Imagem 2 — Botão ligado ao Arduino com pull-up
Agora execute o seguinte código:
1 2 3 4 5 6 7 8 9 10 11 12 | ledPin = 13; buttonPin = 10; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { int estado = digitalRead(buttonPin); digitalWrite(ledPin, estado); } |
Pressione o botão e observe o comportamento do LED.
OBS: Alternativamente, é possível ligar botões ao Arduino sem o uso de resistores externos pois a placa já possui um resistor de pull-up interno que pode ser ativado por código. Na configuração do pino ao qual o botão está ligado (linha 6), basta substituir INPUT por INPUT_PULLUP. Os terminais do botão precisariam ser ligados somente ao GND e ao pino digital 10.
Resistor de Pull-Down
O papel de um resistor de pull-down é puxar (pull) fracamente a tensão do pino ao qual ele está conectado para um nível lógico baixo (down) enquanto o circuito estiver aberto. Sendo assim, a tensão no pino será de 0V (LOW) enquanto o botão não é pressionado e 5V (HIGH) quando for pressionado.
Imagem 3 — Circuito com resistor de pull-down
Alterando o circuito do exemplo anterior para usar um resistor de pull-down, temos:
Imagem 4 — Botão ligado ao Arduino com pull-down
Execute o mesmo código do exemplo anterior e note a diferença no comportamento do LED quando o botão é ou não pressionado.
LDRs
O LDR (Light Dependent Resistor) é um tipo de resistor variável cuja resistência varia de acordo com a intensidade da luz que incide sobre ele. Geralmente quanto mais intensa a luz, menor será sua resistência, permitindo a passagem de uma tensão maior. Por esse motivo, ele também é popularmente conhecido como sensor de luz.
A ligação de um LDR se assemelha bastante à de um botão, podendo também ser feita com um resistor de pull-down ou de pull-up de 10kΩ. A diferença é que a tensão que passa pelo LDR deve ser lida através de um pino analógico do Arduino.
Imagem 5 — LDR com resistor de pull-down (esquerda) e de pull-up (direita)
Ligando o LDR com um resistor de pull-down, teremos uma tensão maior chegando ao pino quando o ambiente estiver mais iluminado, pois a resistência do LDR diminuirá. Com menos luz, a tensão no pino será menor, pois a resistência do LDR será maior.
Imagem 6 — LDR ligado ao Arduino com pull-down
Quando ligado com um resistor de pull-up, uma tensão menor chegará ao pino em ambientes mais iluminados, pois a resistência do LDR vai diminuir e facilitar o acesso ao ground. Com menos luz, a tensão no pino será maior, pois a resistência do LDR também estará maior.
Imagem 7 — LDR ligado ao Arduino com pull-up
Para observar o comportamento do LDR com os diferentes tipos de ligação, execute o código abaixo e abra o monitor serial do Arduino. O LDR deve ser conectado ao pino analógico A0.
1 2 3 4 5 6 7 8 9 | void setup() { Serial.begin(9600); } void loop() { int valorLdr = analogRead(A0); Serial.println(valorLdr); delay(500); } |
Gostou? Deixe seu comentário logo abaixo, não deixe de conferir outras postagens do nosso blog. Confira também a nossa loja virtual e encontre todos os componentes utilizados no projeto no post.
Deixe um Comentário