Arduino – Grandezas digitais, analógicas e PWM

Antes de partirmos para o desenvolvimento de aplicações praticas utilizando algum tipo de sistema embarcado como por exemplo, uma placa Arduinoé necessário que o leitor tenha o conhecimento necessário para diferenciar uma grandeza analógica de uma grandeza digital. O domínio destes conceitos é muito importante para que seja possível aprender como estes sistemas trabalham com essas grandezas (de maneira mais específica, como estes sistemas realizam os processos de conversão entre as mesmas). Sendo assim, este tutorial visa trazer informações referentes aos tipos de grandezas citadas, para que então, o leitor possa adentrar com maior segurança em outros conteúdos.

[toc]

 

Diferença entre grandezas digitais e analógicas

Primeiramente, as grandezas digitais são aquelas que podem ser definidas por meio de saltos entre valores bem definidos dentro de uma faixa de valores. Um exemplo de elementos que trabalham com estas grandezas são os relógios digitais, de modo que, nestes, apesar do tempo em si variar continuamente, o visor dos mesmos mostra o tempo em saltos de um em um segundo (observe que os visores destes relógios nunca mostrarão 30,4 segundos, pois, para eles, só existem 30 e 31 segundos, ou seja, qualquer valor intermediário não está definido).

Em contrapartida, as grandezas analógicas são aquelas que, ao contrário das grandezas digitais, podem assumir infinitos valores de amplitude dentro de uma faixa de valores. O velocímetro de um carro, por exemplo, pode ser considerado analógico, pois o ponteiro gira continuamente conforme o automóvel acelera ou freia. Se o ponteiro girasse em saltos, o velocímetro seria considerado digital.

Uma analogia interessante que pode ser feita é a comparação de uma escada com uma rampa, pois, enquanto uma rampa sobe de forma contínua, assumindo todos os valores de altura entre a base e o topo, a escada sobe em saltos, com apenas alguns valores de altura definidos entre a base e o topo. A escada representa, portanto, uma grandeza digital, enquanto a rampa representa uma grandeza analógica.

É importante observar que a quantidade de degraus em uma escada define quais e quantas posições pode-se escolher. Por exemplo, suponha que um determinado degrau em uma escada está a 1,00 m de altura do solo e o próximo está a 1,20 m da mesma referência, note que, neste caso, não é possível ocupar uma posição a 1,15 m do solo porque não existe um degrau lá.

Portanto, percebe-se que ao adicionar mais degraus em uma escada, mais perto de uma rampa esta se aproximará.


Entradas e saídas digitais

Os circuitos e equipamentos elétricos ditos digitais trabalham com apenas dois níveis de tensão definidos. No caso do Arduino UNO, estes são:

  • Um nível lógico alto, correspondente a 5V;
  • Um nível lógico baixo, correspondente a 0V.

Na prática existem faixas de valores próximos a esses números em que o circuito digital entende como nível alto ou baixo. De maneira complementar, existe também uma faixa intermediária não definida que pode gerar resultados inesperados e que, portanto, deve ser evitada.

No Arduino UNO, as entradas e saídas digitais estão localizadas desde pino 0 até o pino 13. Note que, estes pinos devem ser configurados previamente para que atuem como entradas ou saídas (é importante ressaltar que alguns destes pinos possuem funções especiais, no entanto, isto será tratado posteriormente. Neste momento basta salientar a função destes enquanto entradas e saídas digitais).

Entradas digitais do Arduino Uno
Entradas digitais do Arduino Uno

 

Características de uma entrada digital

Quando configuramos um pino como entrada digital ele apresentará uma característica chamada alta impedância. Isso significa que uma pequena corrente consegue fazer com que seu estado mude. Utiliza-se essa configuração, por exemplo, para ler botões, fotodiodos entre outros, de modo que, a partir do estado lido ou das mudanças desses estados conclui-se o que está acontecendo no mundo externo e então pode-se tomar decisões baseadas nessas medidas.

Caso um determinado pino seja configurado como entrada digital mas não esteja conectado a nada, seu estado poderá ser alterado aleatoriamente em virtude de ruídos elétricos do ambiente. Para evitar esse problema utiliza-se um resistor de pull up ou pull down, cuja função é fazer com que a tensão na entrada em questão esteja bem definida quando a mesma não estiver conectada a nada.

As figuras abaixo mostram três ligações de um botão a um pino configurado como entrada digital de um Arduino UNO. Observe o que acontece em cada caso :

  • Caso 1: O estado do pino não estará bem definido fazendo com que este esteja suscetível a ruído.

 

 

  • Caso 2: Neste caso devido à presença do resistor de pull-down seu estado está bem definido e ele enxergará GND (0V). Como consequência seu estado será definido como baixo.

 

Botão com Pull-down no Arduino Uno
Botão com Pull-down

 

  • Caso 3: Neste caso devido à presença do resistor de pull-up, seu estado está bem definido e ele enxergará 5V. Sendo assim, seu estado estará definido como alto.

 

Botão com Pull-up no Arduino Uno
Botão com Pull-up

 

Como curiosidade, vale ressaltar que os microcontroladores presentes nas placas Arduino possuem resistores de pull-up construídos internamente que podem ser acessados por software.

 

Características de uma saída digital

Quando configurados nesse estado os pinos podem fornecer 0 ou 5 V fazendo com que eles drenem ou forneçam corrente. O valor máximo dessa corrente varia de placa para placa, mas, em geral, é de 30mA. Note que esta corrente é mais do que suficiente para ligar um LED de alto-brilho e alguns sensores, porém não é suficiente para ligar a maioria dos relés e motores.

Deve-se ter cuidado, pois, caso uma corrente maior que o limite passe por um pino, este poderá ser danificado.


Entradas analógicas

Com um pouco de observação, pode-se notar que o mundo é quase todo formado por variáveis analógicas, tais como posição, temperatura e pressão, de forma que, torna-se necessário saber trabalhar com esses tipos de grandezas. Um Arduino UNO, por exemplo, possui um conjunto de pinos destinados a serem utilizados como entradas analógicas.

Entradas analógicas no Arduino Uno
Entradas analógicas no Arduino Uno

Como no Arduino UNO tudo é processado de forma digital, é necessário converter as grandezas analógicas em digitais. Para realizar esta tarefa existem conversores já embutidos na placa, de forma que, deve-se apenas compreender o básico do processo de conversão para poder utilizar portas analógicas citadas anteriormente.

De volta no exemplo da escada e da rampa, a quantidade de degraus que temos em uma escada nos podemos associar o conceito de resolução. A resolução de um conversor indica o número de valores discretos (degraus) que o mesmo pode produzir. Quanto mais intervalos (degraus) existirem, mais perto estará um sinal digital de um sinal analógico.

Características de uma entrada analógica

Os conversores analógico-digital do Arduino UNO possuem uma resolução de 10 bits e o intervalo de tensão no qual são realizadas as discretizações (degraus da escada) é de 0 a 5V, ou seja, este intervalo será dividido em 1024 pedaços (210, onde 10 é a resolução do conversor ) , de forma que, o valor atribuído à tensão presente em um determinado pino será o valor discreto (um dos 1024 valores) mais próximo da mesma.

Em outras palavras, com 10 bits de resolução e um intervalo de 0 a 5V de tensão pode-se representar 1024 degraus, os quais, cada um representa um salto de 0,0048828 V (este resultado foi obtido através da razão 5/1024).

Por exemplo, suponha uma tensão de 3,25 V. o valor retornado pela conversão será:

O resultado deve ser inteiro para que o conversor consiga representá-lo, portanto, o valor 666 será escolhido por ser o degrau mais próximo. Esse valor representa uma tensão de 3,251953125 V. Repare que a utilização deste valor insere um erro de 0,001953125 V na medida em questão.


PWM – Simulando saídas analógicas

Além de possuir portas para realizar a leitura de variáveis analógicas, o Arduino UNO conta também com pinos que podem ser usados para simularem saídas analógicas através do PWM, que por sua vez, é uma técnica para obter resultados analógicos por meios digitais. No Arduino UNO, os pinos em questão são: 3,4,6,9,10 e 11, mostrados conforme a figura abaixo.

Saídas PWM
Saídas PWM

 

Este recurso consiste na geração de uma onda quadrada, na qual, controla-se a porcentagem do tempo em que a onda permanece em nível lógico alto. Esta porcentagem é chamada de Duty Cycle e sua alteração provoca mudança no valor médio da onda, indo desde 0V (0% de Duty Cycle) a 5V (100% de Duty Cycle) no caso do Arduino UNO.

O Duty Cycle a ser definido no projeto corresponde a um número inteiro, que é armazenado em um registrador 8 bits. Sendo assim, seu valor vai de 0 (0%) a 255 (100%).

 

 

De maneira mais detalhada, o Duty Cycle é a razão entre o tempo em que o sinal permanece na tensão máxima (5V no Arduino UNO) e o tempo total de oscilação, conforme ilustrado na figura abaixo:

O  Duty Cycle pode ser calculado da seguinte maneira:

Da mesma forma, pode-se também calcular o valor médio da tensão que está sendo entregue pela saída utilizada.


CONSIDERAÇÕES FINAIS

Este conteúdo foi totalmente voltado para esclarecer alguns pontos à respeito dos tipos de grandezas encontradas ao utilizar uma placa Arduino. Esperamos que você tenha gostado deste conteúdo, sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.

Este conteúdo consiste em uma modificação/revisão do tutorial sobre grandezas digitais, analógicas e PWM do autor Ronan Largura (Eng Elétrica – UFES).

 

Apostila Arduino Básico

 

Privacy Preference Center