Você já observou que em esquemáticos eletrônicos que possuem sensores/chaves ligados a uma porta do Arduino é comum encontrarmos também resistores? Você sabe a necessidade disso? Nesse artigo iremos trabalhar com as portas de entradas, mais especificamente as portas digitais. Abaixo você vai entender a necessidade de um circuito pull-up ou pull-down e quais são os componentes necessários, assim como os valores, para montarmos um circuito do tipo.
Materiais necessários
No exemplo desse tutorial usamos os seguintes componentes:
Como funciona uma porta digital?
A função de uma porta digital é, basicamente, traduzir uma tensão elétrica em um sinal digital. O sinal digital possui somente dois estados possíveis:, alto (HIGH, 1) ou baixo (LOW, 0).
Mas como o sinal digital funciona na prática? Suponhamos que temos um sinal que varia de 0 V a 5 V. Caso o sinal esteja em 0 V e queira subir para 5 V, antes a tensão irá passar por 1 V, 2 V, 3 V, e 4 V. Todo esse caminho é chamado de sinal analógico. Mas como o sinal digital tem somente dois estados, em algum momento o sinal deve mudar de 0 (LOW) para 1 (HIGH). Observe na figura abaixo o sinal analógico na parte de cima e um sinal digital na parte de baixo. Os pontos em destaques mostra o momento exato em que um sinal digital passa de LOW para HIGH e vice versa.
Esses limites de tensão de entrada (Input Voltage Threshold) que identifica o ponto exato da mudança vai depender do fabricante de cada componente/circuito. O VIL (Volt Input Low) e o VIH (Volt Input High) é o que define qual o valor para um estado digital estar em nível baixo ou alto.
O microcontrolador ATmega328P, utilizado no Arduino Uno, trabalha seu VIL com o mínimo de -0,5 V e máximo de 1,5 V, e o seu VIH com o mínimo de 3 V e máximo de 5,5 V. Ou seja, uma tensão de entrada com valor de 0 V, 0,5 V ou 1 V equivale a nível lógico LOW. E uma tensão de entrada com valor de 4,6 V, 4,8 V ou 5,1 V equivale a nível lógico HIGH.
Exemplo de funcionamento da entrada digital
Para exemplificar o funcionamento de uma porta digital, vamos montar dois circuitos usando o Arduino. No primeiro exemplo ligaremos a porta digital 7 ao pino GND e assim obteremos o nível digital LOW (0). No segundo exemplo ligaremos a porta digital 7 ao pino 5 V e assim obteremos o nível digital HIGH (1).
Observe na figura abaixo que a porta 7 esta ligada ao GND, e na tela ao lado o monitor serial responde nível 0.
Já na figura abaixo, a porta 7 esta ligada ao 5 V, e na tela ao lado o monitor serial responde nível 1.
Pull-Up e Pull-Down
Agora, caso a porta 7 do circuito anterior não esteja ligada no GND ou no 5 V, ela poderá assumir nível LOW ou HIGH aleatoriamente, devido a interferências eletromagnéticas. Para resolver isso devemos puxar o nível de entrada para baixo (pull-down ou LOW) ou para cima (pull-up ou HIGH).
Suponhamos agora que um botão (push button) esteja ligado a porta 7 do Arduino, realizando o contato entre a porta 7 e o GND. Ao pressionar o botão, o nível lógico baixo será aplicado à porta. Ao soltar o botão a porta não estará ligada ao GND e nem ao 5 V podendo assumir um nível aleatório devido a interferência.
Lei de Ohm
Antes de seguirmos para a solução, vamos entender sobre uma das leis mais importante da eletrônica. A Lei de Ohm é utilizada para realizar cálculos entre corrente (ampére), tensão (volts) e resistência (ohms). No cenário que estamos trabalhando, utilizamos a tensão de 5 V para as portas digitais. O regulador de tensão utilizado no Arduino Uno é o modelo NCP1117 que consegue fornecer cerca de 800 mA para todo o circuito.
Segundo o datasheet, uma porta digital do Arduino consegue ler um nível lógico com corrente de no mínimo 1 uA (micro ampere). Usualmente um resistor de 10 kΩ é utilizado para um circuito que tenha pull-up/pull-down. Colocando na fórmula da Lei de Ohm teremos:
- I (corrente) = V (tensão) / R (resistência)
- I = 5 / 10000
- I = 0,0005 A ou 0,5 mA ou 500 uA
Assim, com um resistor de 10 kΩ trabalhando em uma tensão de 5 V teremos 0,5 mA de consumo do regulador.
Pull-down (puxar para baixo)
Ligando a porta 7 ao GND, usando um resistor de 10 kΩ, estaremos puxando o nível da porta para baixo (LOW). Ao ligar o 5 V no botão e o botão na porta 7, quando pressionado, a corrente elétrica percorre o caminho com menos resistência, jogando o nível lógico da porta para cima (HIGH).
Observe na figura abaixo que a chave esta em OFF, e o resistor esta ligando a porta 7 ao GND. Como resultado no monitor serial responde nível 0.
Agora, observe que ao colocar a chave em ON, o caminho entre a porta 7 e o 5 V fica sem resistência, jogando o nível lógico para 1, como mostrado no monitor serial. Ao mesmo tempo o GND possui uma ligação para o 5 V, mas passando pelo resistor, evitando que um curto circuito ocorra.
Pull-up (puxar para cima)
Ligando a porta 7 ao 5 V, usando um resistor de 10 kΩ, estaremos puxando o nível da porta para cima (HIGH). Ao ligar o GND no botão e o botão na porta 7, quando pressionado, a corrente elétrica percorre o caminho com menos resistência, jogando o nível lógico da porta para baixo (LOW).
Observe na figura abaixo que a chave esta em OFF, e o resistor esta ligando a porta 7 ao 5 V. Como resultado no monitor serial responde nível 1.
Observe na figura abaixo que ao colocar a chave em on, o caminho entre a porta 7 e o GND fica sem resistência, jogando o nível lógico para 0, como mostrado no monitor serial. Ao mesmo tempo o GND possui uma ligação para o 5 V, mas passando pelo resistor, evitando que um curto circuito ocorra.
Por estarmos tratando de uma entrada de sinal, nos exemplos anteriores pode-se observar que o pinMode foi configurado no modo INPUT. Uma boa notícia é que o microcontrolador do Arduino possui internamente um resistor exclusivo para se trabalhar com pull-up. Para isso, basta setar o modo para INPUT_PULLUP, não sendo necessário o uso de um resistor externo para essa função.
Observe na figura abaixo que no código fonte utilizamos o modo do pino com “INPUT_PULLUP” e que a chave esta em OFF. Internamente o microcontrolador usou um resistor para ligar o pino 7 ao 5 V. Como resultado no monitor serial responde nível 1.
Observe na figura abaixo que ao colocar a chave em ON, o caminho entre a porta 7 e o GND fica sem resistência, jogando o nível lógico para 0, como mostrado no monitor serial. Ao mesmo tempo o GND possui uma ligação interna ao microcontrolador para o 5 V, mas passando pelo resistor interno, evitando que um curto circuito ocorra.
Conclusão
Vimos nesse post como é o funcionamento de uma porta digital, um pouco sobre a lei de Ohm e o funcionamento dos resistores no modo pull-up e no modo pull-down.
Além disso, ajude-nos a melhorar o blog, participe com a sua sugestão, dúvida ou comentário aqui embaixo.
muito bom seu artigo, parabens
Excelente! Eu ainda não tinha entendido o funcionamento e o porquê de ser preciso utilizar os resistores em PULL UP/PULL DOWN. Agora, já consigo aplicar nos meus projetos.
Sensacional,muito didático
Excelente material, parabéns. Vale a pena ler. Muito didático.
Olá Sílvio parabéns pela explicação!
A aplicação deste conceito garante que não ocorrerá variações indesejadas no nível lógico das portas, por algum tipo de interferência eletromagnética!