Entendendo as Entradas Analógicas do Arduino

Entradas Analógicas

No artigo anterior descrevemos 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.

 

Entradas Analógicas

 

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:

 

Entradas Analógicas 

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

 

Resolução  = 5 V/1024 = 4,88 mV

 

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

  Entradas-Analógicas-03

 

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
Figura 1 - Entradas analógicas da placa Arduino

 

 

Funções da plataforma Arduino para Entradas Analógicas

 

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 - Entradas Analógicas com Arduino

 

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:

 

Entradas Analógicas
Figura 2 - 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:

 

Entradas Analógicas
Figura 3 - 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().

 

 

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.

 

 

Saiba mais

 

Primeiros Passos com Arduino

Arduino UNO

Arduino - O documentário

Placas Arduino - trajetória até o UNO

 

Referências

analogRead()

Outros artigos da série

<< Usando os pinos digitais do ArduinoUsando as saídas PWM do Arduino >>
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Fábio Souza
Engenheiro com experiência no desenvolvimento de projetos eletrônicos embarcados. Hoje é diretor de operações do portal Embarcados, onde trabalha para levar conteúdos de eletrônica, sistemas embarcados e IoT para o Brasil. Também atua no ensino eletrônica e programação pelo Brasil. É entusiastas do movimento maker, da cultura DIY e do compartilhamento de conhecimento, publica diversos artigos sobre eletrônica e projetos open hardware, como o projeto Franzininho Participou da residência hacker 2018 no Redbull Basement. Quando não está ministrando palestras, cursos ou workshops, dedica seu tempo “escovando bits” ou projetando placas eletrônicas.

73
Deixe um comentário

avatar
 
33 Comment threads
40 Thread replies
6 Followers
 
Most reacted comment
Hottest comment thread
25 Comment authors
altairRonaldoSEIJI TANAKAtiagoFábio Souza Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
altair
Visitante
altair

preciso de um converssor de leitura analogica para digital, qual empresa vende?????????

Ronaldo
Visitante
Ronaldo

Fabio, boa tarde!
Consigo fazer o arduino reconhecer uma faixa de frequencia captada por um microfone(filtro passa faixa), e me responder qts pulsos desta frequencia recebeu.
faixa de 5khz a 8khz?

SEIJI TANAKA
Visitante
SEIJI

Boa tarde a todos. Oi Fábio. Tenho uma dúvida, e agradeço, desde já, se alguém puder esclarecê-la. Estou fazendo um projeto com Arduino UNO, utilizando, em resumo, um LED, um POTENCIÔMETRO e um SENSOR HALL. O que pretendo fazer é: ao aproximar o imã do sensor hall, o LED acenda (até aqui, eu consegui fazer a programação - sketch). O que não estou conseguindo fazer, é ao aproximar o imã do sensor hall, eu possa controlar a luminosidade do LED com o potenciômetro (tudo, ao mesmo tempo). Ou seja, com o LED ligado em razão da proximidade do imã ao… Leia mais »

tiago
Visitante
tiago

Olá. Alguém pode tira minha duvida, entre leituras consecutivas de 2 ou mais portas analógicas.. qual o tempo para que a porta esteja apta a ler valores reais. por exemplo:

a = analogRead(A0);
b = analogRead(A1);
c = analogRead(A2);

Os valores de a, b e c serão valores reais dos pinos ? Ou é necessário um tempo para que algo se estabilize antes da leitura, pelo fato de ter mudado a porta de leitura..

IRÃ REITICLIFI LAURATTO
Visitante
IRÃ REITICLIFI LAURATTO

boa tarde, estou iniciando nesse arte de usar o arduino, gostaria de saber se tem como utilizar porta digital como analógica, se não for uma pergunta absurda, gostrai de uma respota

Rafael Voigt
Visitante
Rafael Voigt

gostaria de saber até quantos sensores de proximidade e pressão o Raspberry PI e o Arduino suporta? para interligar 500 sensores como posso fazer para controla-los e centralizar os dados em algum hardware ou outro processador?
grato
Rafael Voigt

Filipe Lemos
Visitante
Filipe Lemos

eu estou com uma dúvida
posso usar dois sensores em uma entrada anlógica?

Gerson Sena
Visitante
Gerson Sena

Fabio, estou tendo problemas com as leituras analógicas do meu código. Estou tentando mapear uma senóide de um gerador de funções, setei em 60Hz e dei um offset para que os 5vpp ficassem com o -2,5vp no eixo zero (todos os valores positivos); Sem o tratamento matemático eu até leio valores 'corretos' no printserial, mas ao inserir o código matemático que deveria me trazer um valor RMS sai todo tipo de valor, não pára de incrementar e logo a seguir dá overflow... a fórmula está certa, mas não entendo o que eu não estou conseguindo enxergar. Será que tu consegue… Leia mais »

trackback

[…] 2) Entradas analógicas; […]

João Victor Oliveira Novaes
Visitante
João Victor Oliveira Novaes

Ola, Desde já agradeço a ajuda.

Qual o menor valor em tensão(V), que o arduino consegue ler em suas portas analogicas?

Fabio_Souza_Embarcados
Visitante
Fabio_Souza_Embarcados

Olá João, o menor valor será o valor da resolução, que é a relação entre a tensão de referencia e a quantidade de bits do conversor, que no caso é 10 bits. Usando a referencia de 5 V, o menor valor será aproximadamente 4,89 mV. Já com 1,1 V o menor valor será aproximadamente 1,07 mV. Abraços