Portas Analógicas – Arduino

No artigo anterior foi descritos os pinos de entrada e saída digitais abordando as suas características e as funções para trabalhar com escrita e leitura de sinais digitais na plataforma Arduino. Nesse artigo vamos aprender sobre as entradas analógicas e compreender seu funcionamento para no futuro aplicar essa técnica para seus projetos.

As entradas digitais só podem assumir dois estados, HIGH e LOW, ou seja, 0 V ou 5 V. Dessa forma só é possível ler apenas dois estados. Por exemplo, verificar se uma porta está aberta ou fechada, identificar se um botão está pressionado ou solto, etc.Com as entradas digitais você aplica em  lógica discreta para controle de seus projetos, porém em muitas situações a variação das  grandezas envolvidas acontece de forma analógica. Ou seja, variam continuamente em relação ao tempo e podem assumir infinitos valores dentro de uma faixa. Como exemplo a temperatura, pressão e umidade são grandezas que variam dessa forma.

O microcontrolador da Arduino trabalha internamente com dados digitais, portanto é necessário traduzir um sinal analógico para um valor digital. A técnica utilizada para leitura de um sinal analógico pelo Arduino é a conversão analógica digital. Essa técnica consiste em converter o sinal analógico para um valor digital, dessa forma se pode quantificar o sinal presente no pino. Esse processo é feito pelo conversor Analógico digital, ADC ou conversor A/D.

 Um conversor A/D quantifica o valor analógico conforme a quantidade de bits da sua resolução. A resolução de um conversor A/D é dada pela seguinte equação:

 A resolução de um conversor A/D

 onde:

Vref: tensão de referência do conversor A/D;

n: número de bits do conversor.

Conversor A/D do Arduino

O conversor A/D do microcontrolador ATmega328 possui 10 bits de resolução, a sua tensão de entrada pode variar de 0 V até o valor de VCC e possui referência interna selecionável de 1,1 V.

Dessa forma quando está trabalhando com a referência em VCC o menor valor que pode ser lido será: esse é o valor de degrau para uma conversão em 10 bits com referência em 5 V.

 Caso  trabalhe com a referência interna de 1,1V a resolução será: Nota-se que o passo é bem menor para esse valor de referência.

 Se a referência externa  for selecionada, a resolução dependerá do valor de tensão aplicada ao pino AREF.

A placa Arduino UNO possui 6 canais de conversor analógico digital. Essas entradas são nomeadas de A0 a  A5 e são exibidas na figura a seguir:

Entradas analógicas da placa Arduino

Entradas analógicas da placa Arduino

Funções da plataforma Arduino

A plataforma Arduino possui funções para trabalhar com entradas analógicas, as quais abstraem a configuração dos registradores de configuração do conversor A/D, assim como selecionam o canal conforme o pino passado como parâmetro. São apenas duas funções e são exibidas a seguir:

  • analogReference(tipo)

Descrição

Configura a referência de tensão para a conversão analógica/digital, usando esse valor como o máximo para a entrada analógica.

Os tipos possíveis de configurações são:

  • DEFAULT: a tensão padrão para conversão é a tensão de alimentação da placa. 5 V para placas alimentadas com 5 V  e 3,3 V  para placas alimentadas com 3,3 V;

  • INTERNAL: referência interna de 1,1V no Atmega168 e Atmega328, e 2,56 V no ATmega8;

  • INTERNAL1V1: referência de 1,1V, apenas no Arduino Mega;

  • INTERNAL2V56: referência interna de 5,6 V, apenas no Arduino Mega;

  • EXTERNAL: referência de tensão aplicada no pino AREF (valor entre 0 e 5V).

Sintaxe:

analogReference(tipo);

Parâmetros:

tipo: DEFAULT, INTENAL, INTERNAL1V1, INTERNAL2V56, EXTERNAL.

Retorno:

Essa função não tem retorno algum.

  • int analogRead(pino)

Descrição

Lê o valor presente em um pino configurado como entrada analógica. Internamente o Arduino possui um conversor A/D de 10 bits. Dessa forma o valor retornado por esta função estará na faixa de 0 a 1023 conforme o valor presente no pino.

 O tempo para leitura pela função analogRead() é por volta de 100 micro segundos, dessa forma a máxima frequência de leitura que se pode ter é de 10000 vezes por segundo.

 Sintaxe:

analogRead(pino);

 Parâmetros:

pino: valor do pino configurado como entrada analógica (0 a 5 na maioria da placas, 0 a 7 na MINI e NANO, 0 a 15 na MEGA).

Retorno

int (0 a 1023)

Exemplo

Para iniciar o estudo da entrada analógica, a maneira mais simples e rápida é ligando um potenciômetro a uma entrada analógica, conforme esquema apresentado em seguida:

Ligação de um potenciômetro a uma entrada analógica

Ligação de um potenciômetro a uma entrada analógica

Se girarmos o cursor do potenciômetro, alteramos a resistência em cada lado do contato elétrico que está conectado ao terminal central do botão. Isso provoca a mudança na proximidade do terminal central aos 5 volts ou GND, o que implica numa mudança no valor analógico de entrada. Quando o cursor for levado até o final da escala, teremos, por exemplo, 0 V a ser fornecido ao pino de entrada do Arduino e, assim, ao lê-lo obtém-se 0. Quando giramos o cursor até o outro extremo da escala, haverá 5 V a ser fornecido ao pino do Arduino e, ao lê-lo, teremos 1023. Em qualquer posição intermediaria do cursor, teremos um valor entre 0 e 1023, que será proporcional à tensão elétrica sendo aplicada ao pino do Arduino.

A ligação no Arduino UNO pode ser feita conforme a figura abaixo:

Ligação em Arduino UNO

Ligação em Arduino UNO

O exemplo a seguir lê o valor no potenciômetro. O tempo que o LED permanece ligado ou desligado depende do valor obtido pelo analogRead().

 /*  
 * Entrada analógica  
 * Liga e desliga um LED conectado ao pino digital 13. O tempo  
 * que o LED permanece ligado ou desligado depende do valor  
 * obtido pelo analogRead().  
 */  
 int potPin = 0; // selecione o pino de entrada ao potenciômetro  
 int ledPin = 13;  // selecione o pino ao LED  
 int val = 0;  // variável a guardar o valor proveniente do sensor  
 void setup() {  
  pinMode(ledPin, OUTPUT); // declarar o pino ledPin como saída  
 }  
 void loop() {  
  val = analogRead(potPin); // ler o valor do potenciômetro  
  digitalWrite(ledPin, HIGH); // ligar o led  
  delay(val);         // espera tempo ajustado no potenciometro  
  digitalWrite(ledPin, LOW);  // desligar o led  
  delay(val);         // espera tempo ajustado no potenciometro  
 }  

O exemplo apresentado tem estrutura bem simples e serve para fixar os conceitos sobre o conversor A/D do Arduino. Aproveitaremos essa estrutura para artigos futuros onde faremos a leituras de sensores.

Fonte:

88x31

Arduino – Entradas Analógicas por Fábio Souza. Esta obra está licenciado com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Anúncios

Um comentário sobre “Portas Analógicas – Arduino

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s