Conversor analógico digital ADS1115 e sensor LM35 Deixe um comentário

Muitos projetos dependem da aquisição de variáveis ambiente para controle, automação ou algum tipo de tomada de decisão, e dentro destas variáveis podemos citar a temperatura como uma das que mais se destaque. Existem inúmeros sensores/transdutores com foco na medição de temperatura, cada um com suas características, qualidade e em alguns casos, dificuldades de uso. Dentro da categoria “analógico” o LM35 é um dos modelos mais comuns visto sua exatidão, simplicidade de uso e amplo range de medição.  Apesar da sua simplicidade, obter medições com alto grau de reprodutibilidade (e também resolução) pode se tornar um desafio em microcontroladores com conversor Analógico Digital (ADC) de 8 ou 10 bit.

Conversor AD ADS1115

Neste artigo mostraremos como obter excelentes medições utilizando um conversor externo de 16 bits, o conversor analógico digital 4 canais ADS1115.

Conversor analógico digital ADS1115 de 16 bits

O conversor analógico digital ADS1115 é um ADC do tipo Sigma/Delta com resolução de 16 bit e com comunicação I2C, bastante versátil e interessante para projetos que demandem mais resolução e exatidão, mas que não necessitem de uma alta taxa de amostragem.

Conversor Analógico Digital ADS1115

Principais características

  • Alimentação entre 2V e 5,5V
  • Amostragem de 8 a 860 samples por segundo
  • Referência interna de tensão com elevada exatidão inicial
  • PGA interno – Ganho programável via software
  • MUX interno
  • Configuração Single-ended ou Differential
  • Pode atuar como comparador de tensão ou de janela
  • Permite a utilização de até 4 dispositivos no mesmo barramento I2C

Em uma comparação direta com o ATmega328P, os 6 bits a mais de resolução proporcionam 64x mais resolução, são 1024 gradações (10 bit) contra 65536 gradações (16 bit). Em uma aplicação real mais variáveis irão entrar em jogo, mas já dá para perceber que poderemos medir valores muito menores com este conversor.

Devido ao seu amplo range de alimentação o conversor pode ser utilizado desde um microcontrolador alimentado com 5V até dispositivos alimentados com 3,3V como uma NodeMCU ou mesmo uma Raspberry Pi.

Além da resolução muito maior podemos tirar proveito de outro artifício muito interessante, o PGA, ou “Programmable Gain Amplifier”, ou “Amplificador de Ganho Programável”. Basicamente é um circuito que permite amplificar o sinal na entradas analógicas para aproveitar ao máximo o range do ADC, com todo este controle sendo feito digitalmente via registradores internos acessados pela I2C. Configurando o PGA podemos trabalhar com sinais entre +/-256mV até +/-6.144V (range padrão).

O ADS1115 possui um MUX interno permitindo escolher entre 4 canais single-ended ou 2 canais diferenciais. Ok, mas o que isso quer dizer? Talvez você já esteja familiarizado com a configuração single-ended, visto que está presente no ADC interno da maioria dos microcontroladores. Nesta configuração o sinal é referenciado diretamente o GND do circuito e a entrada analógica em si precisa de apenas uma via de sinal. Na configuração diferencial o ADC irá converter um sinal diferencial, ou seja a diferença de potencial entre dois pontos, semelhante ao que acontece com um multímetro. Nesta configuração são necessárias duas entradas que serão conectadas aos pontos de interesse, além do GND que também deve ser comum para evitar que se exceda os limites do componente.

Uma observação importante, nunca o sinal na entrada deve exceder a tensão de “Vcc + 0,3V” ou “GND – 0,3V”. Apesar do componente possui proteções internas, ao exceder estes níveis você colocará em risco o dispositivo. De maneira resumida, o sinal não pode ser maior que a alimentação e nem ser negativo em referência ao terra.

O ADS1115 possui um pino “ADDR” responsável por configurar o endereço do dispositivo no barramento I2C. O Mais interessante é que com apenas um único pino conseguimos 4 endereços diferentes. No total podemos obter até 16 canais single-ended ou 8 diferenciais em um único barramento I2C.

ADDR conectado a:

Endereço (binário)

Endereço (hexadecimal)

GND

1001000

48h

VDD

1001001

49h

SDA

1001010

4Ah

SCL

1001011

4Bh

Endereçamento ADS1115

Indico a leitura do datasheet para conhecer mais sobre as características deste conversor analógico digital (ADC).

O sensor de temperatura LM35

O sensor de temperatura LM35 é um sensor de temperatura de precisão com saída analógica proporcional a temperatura em grau Celsius.

Possui um fator de escala de 10mV/°C, ou seja, cada 1°C de variação desencadeia uma variação de 10mV em sua saída. Veja, a variação é bem pequena e justamente por isso pode-se perder muita resolução se tentarmos utilizar o ADC do Arduino Nano ou Uno em sua configuração padrão com referência de tensão em Vcc.

Possui uma ótima exatidão de 0,5°C à 25°C, podendo chegar a 1°C nos extremos da escala (onde geralmente não costumamos utilizar).

O componente possuir apenas 3 terminais se assemelhando muito a um transistor bipolar. Sua alimentação pode variar entre 4V até 30V.

LM35

Indico darem uma olhada no datasheet do componente para conhecer mais sobre suas características e também alguns circuitos indicados pelo fabricante.

Principais materiais utilizados

Montagem do circuito com ADS1115

O circuito é bastante minimalista e simples de ser montado em uma protoboard. Deve-se conectar o pino SDA ao pino A4 e o pino SCL ao pino A5. Além disso devemos conectar o pino ADDR ao GND (endereço 48h). O pino VDD deve ser conectado a linha de 5V e o GND ao GND.

Circuito Arduino ADS1115

Programa de teste do ADS1115

O código também é bastante simples e está bem comentado. Mas antes de começar temos que instalar a biblioteca. Você pode utilizar o “Gerenciador de Biblioteca” e instalar a libraryAdafruit ADS1x15”, ou então baixá-la neste link e realizar a instalação manualmente.

Os principais passos para uso são

  • Criar uma instância da classe “Adafruit_ADS1115” já indicando o endereço do dispositivo;
  • Dentro do Setup, modificar o ganho caso necessário, inicializar o conversor;
  • Dentro do Loop, chamar a função de leitura (single-ended ou diferencial)

O código é bastante explicativo, veja a seguir.

O resultado será apresentado no serial monitor com os dados RAW e com o valor já convertido em temperatura.

COMPARANDO OS RESULTADOS

A título de curiosidade realizei um comparativo coletando amostras utilizando o conversor analógico digital ASD1115 e também o conversor interno da placa Nano. Basicamente montei o esquema acima, adicionei um fio conectando a saída do LM35 a entrada A0 da placa Nano e então aqueci brevemente o sensor com meus dedos.

Note que existem três traçados na figura abaixo. Em azul temos as medições com o ADS1115, note como a resolução a mais permite um traçado sem a presença de variações bruscas, diferente do que notamos nos outros dois traçados. Em laranja temos a medição direta com o ADC interno e em verde temos uma média de 16 leituras sequenciais para suavizar as amostras e reduzir o ruído.

Bastante diferente o resultado não é!? Achou o resultado do conversor interno com muito ruído? Poderia ser pior pois neste caso configurei o código para utilizar a referência interna de 1,1V e com isso melhorar a margem dinâmica, em 5V o resultado teria muito mais ruído. Mas isso é bastante normal nos conversores internos dos microcontroladores. Só o fato de utilizar conversores externos já minimiza muito o ruído, tanto é que em aplicações de exatidão geralmente são utilizados conversores externos.

Desconsidere o pequeno offset entre as temperatura pois isso pode ser compensado em software. O ruído também poderia ser minimizado aumentando o tamanho da média, mas veja, isso não é muito prático e nem eficiente. Você precisa tomar N amostras a mais para então calcular a média, tudo isso toma mais tempo e consome mais energia. Em diversos casos vale a pena utilizar um conversor com mais resolução.

Se quiser reproduzir esse teste é só utilizar o código abaixo, lembrando de conectar a saída do sensor também ao pino A0 da placa Nano. Tente modificar o tamanho da média através da variável “repeat” para ver o resultado. Utilize o “Serial Plotter” para visualizar os dados.

Chegamos ao final deste artigo. Você pode acessar os arquivos deste projeto no meu Github. Qualquer dúvida sinta-se a vontade de deixar seus comentários.

Gostou do post com conversor analógico digital ADS1115? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo), comente e visite nossa loja FILIPEFLOP!

Posts Relacionados

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *