Se você precisa efetuar leituras analógicas de forma precisa e confiável, confira neste post como usar o módulo conversor analógico digital ADS1115 em conjunto com o ESP8266 NodeMCU, uma das placas mais utilizadas em projetos de IoT.

O ADS1115 funciona com ESP8266 mas também pode ser usado por exemplo em projetos com Arduino ou Raspberry Pi, onde seja necessário um maior número de portas analógicas ou a leitura de sensores com precisão, já que o módulo possui resolução de 16 bits.

O módulo conversor analógico digital ADS1115

O módulo conversor analógico digital (ADC) ADS1115 que vamos usar é esse da imagem abaixo, que tem 4 canais (4 entradas analógicas) e comunicação I2C, o que permite a sua ligação com a maioria das placas e microcontroladores do mercado.

A alimentação do módulo é de 2 à 5.5 VDC e em um mesmo barramento I2C você pode ligar até 4 módulos, já que é possível mudar o endereço I2C do ADS1115 por meio do pino ADDR. No módulo que estamos usando, foram detectados os endereços I2C mostrados na tabela abaixo.

Você consegue setar os diferentes endereços conectando o pino ADDR do módulo aos pinos Vcc, GND, SDA ou SCL. Confira:

CONEXÃO PINO ADDRENDEREÇO I2C
VDD0x49
GND0x48
SDA0x4A
SCL0x4B

Como outras características podemos destacar também a taxa de amostragem (de 8 a 860 samples por segundo) e o PGA interno, um amplificador de ganho programável com controle digital.

Conexão do conversor ADS1115 no ESP8266 NodeMCU

Como sabemos, o ESP8266 NodeMCU tem apenas uma porta analógica, e com o ADS1115 vamos expandir esse número de portas, adicionando mais 4 delas.

A porta analógica nativa do NodeMCU suporta tensões entre 0 e 1V, e no caso do módulo conversor analógico digital a tensão máxima suportada pelas portas analógicas será aquela com a qual alimentamos o módulo, ou seja, se usarmos alimentação de 5V, podemos enviar até 5V nas portas analógicas.

No caso do NodeMCU que estamos usando vamos alimentar o módulo ADS1115 com 3.3V, logo essa será a tensão máxima suportada nos pinos A0, A1, A2 e A3. Isso é especialmente importante (e interessante) se usarmos sensores “próprios” para o ESP8266, que trabalham com nível de sinal de 3.3V.

Nosso circuito de teste fica assim:

Circuito ESP8266 NodeMCU e Conversor Analógico Digital ADS1115

Usamos trimpots de 1K nos testes, mas você pode usar outros valores ou potenciômetros, se preferir.

Programa e configuração NodeMCU com ADS1115

Antes de mandar o programa para o NodeMCU, vamos apenas relembrar como adicionar essa placa na IDE Arduino.

Dentro da IDE, acesse o menu Arquivo e em seguida Preferências. No campo URLs Adicionais para Gerenciadores de placas, coloque a URL abaixo:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Clique em OK e agora acesse o menu Ferramentas -> Placa -> Gerenciador de Placas. Na tela seguinte procure por ESP8266 e selecione esp8266 by ESP8266 Community, clicando em seguida em instalar:

ESP8266 Install IDE Arduino

As placas da linha ESP8266 aparecerão na lista de placas disponíveis e agora basta você selecionar NodeMCU 1.0 (ESP-12E Module) como mostra a imagem abaixo:

NodeMCU 1.0 IDE Arduino

Vamos precisar também carregar na IDE a biblioteca ADS1115_WE.

Para isso, acesse o menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas. No gerenciador, procure por ADS1115 e selecione a biblioteca ADS1115_WE, clicando em seguida em Instalar:

Instalação biblioteca ADS1115 IDE Arduino

Dúvidas na instalação da biblioteca? Confira o post Como instalar uma biblioteca na IDE Arduino.

Feito isso, carregue o programa abaixo no NodeMCU. Na linha 8 definimos o endereço do nosso módulo (0x48, com o pino ADDR conectado ao GND do circuito).

O programa faz uma varredura contínua das portas analógicas, mostrando os valores (em volts) no serial monitor.

//Programa: Conversor Analogico Digital ADS1115 com ESP8266 NodeMCU
//Autor: Arduino e Cia

#include<ADS1115_WE.h> 
#include<Wire.h>

//Endereco do modulo ADS1115
#define I2C_ADDRESS 0x48

ADS1115_WE adc(I2C_ADDRESS);

void setup() 
{
  Wire.begin();
  Serial.begin(9600);
  if(!adc.init())
  {
    Serial.println("ADS1115 nao conectado!");
  }
  
  adc.setVoltageRange_mV(ADS1115_RANGE_6144);
  adc.setCompareChannels(ADS1115_COMP_3_GND);
  adc.setMeasureMode(ADS1115_CONTINUOUS);

  Serial.println("ADS1115 com ESP8266 NodeMCU - Leitura continua");
  Serial.println("Todos os valores em volts!");
  Serial.println();
}

void loop() {
  float voltage = 0.0;

  Serial.print("Pino A0: ");
  voltage = readChannel(ADS1115_COMP_0_GND);
  Serial.print(voltage);

  Serial.print(",   Pino A1: ");
  voltage = readChannel(ADS1115_COMP_1_GND);
  Serial.print(voltage);
  
  Serial.print(",   Pino A2: ");
  voltage = readChannel(ADS1115_COMP_2_GND);
  Serial.print(voltage);

  Serial.print(",   Pino A3: ");
  voltage = readChannel(ADS1115_COMP_3_GND);
  Serial.println(voltage);

  delay(1000);
}

float readChannel(ADS1115_MUX channel) 
{
  float voltage = 0.0;
  adc.setCompareChannels(channel);
  voltage = adc.getResult_V(); // alternative: getResult_mV for Millivolt
  return voltage;
}

Abra o serial monitor e confira os valores lidos das portas analógicas:

Dados portas analógicas ADS1115 Serial Monitor

Recomendo abrir os exemplos da biblioteca ADS1115_WE e checar os parâmetros utilizados no programa. Existem vários ajustes que podem ser feitos e que serão úteis para o seu projeto.

Gostou? Confira outros posts usando ESP8266 aqui mesmo no Arduino e Cia!

5/5 - (4 votes)