Mejora tus mediciones analógicas en Arduino con el ADS1115

Introducción 

En este tutorial, te guiaré a través de cómo trabajar con el convertidor Analógico a Digital (ADC) ADS1115, un componente de alto rendimiento y bajo consumo de energía, perfecto para medir señales analógicas con mas presición o como una extensión si es que necesitas mas entradas analógicas en tu Arduino.

¿Qué es el ADS1115?

Es un convertidor analógico a digital (ADC) preciso, de bajo consumo y 16 bits, compatible con I2C. 

Integra una referencia de voltaje de baja deriva y un oscilador. También incorpora un amplificador de ganancia programable (PGA) que ofrece rangos de entrada desde ±256 mV hasta ±6.144 V, y un comparador digital.

Realiza conversiones a velocidades de hasta 860 muestras por segundo (SPS). El ADS1115 cuenta con un multiplexor de entrada (MUX) que permite dos mediciones de entrada diferencial o cuatro mediciones de entrada de un solo extremo. Se puede usar el comparador digital para la detección de subvoltaje y sobrevoltaje. Opera en modo de conversión continua o en modo de disparo único. Se apaga automáticamente después de una conversión en modo de disparo único, lo que reduce significativamente el consumo de energía durante los períodos de inactividad. Puedes ver la hoja de datos completa aquí.

Resolución de un ADC

La resolución de un Convertidor Analógico a Digital (ADC) se refiere al número de bits que se utilizan para representar la lectura de la entrada analógica.

La resolución del ADC determina cuántos niveles discretos de voltaje puede representar. Por ejemplo:

Un ADC de n bits puede representar 2^n diferentes niveles de voltaje.
Un ADC de 10 bits puede representar 2^10, o 1024, diferentes niveles de voltaje. Un ADC de 12 bits puede representar 2^12, o 4096, diferentes niveles.

En resumen, un ADC con una mayor resolución puede proporcionar una representación más precisa de una señal analógica, ya que puede detectar y representar cambios más pequeños en la señal.

El ADS1115 proporciona un número entero con signo, lo que significa que aun que tiene una resolución de 16 bits, uno de estos bits se utiliza para indicar el signo del número, entonces solo utiliza 15 bits para representar el valor de magnitud del voltaje medido. Esto nos da 2^15, o 32,768 valores diferentes. El bit restante se utiliza para indicar si el valor es positivo o negativo, dando así la capacidad al ADC para representar tanto voltajes positivos como negativos.

 

Modos de conversión 

Los ADS1115 tienen dos modos de conversión disponibles: disparo único y conversión continua.

  • En el modo de disparo único, el ADC realiza una conversión de la señal de entrada al recibir una solicitud, almacena el valor de la conversión en un registro interno de conversión y luego entra en un estado de apagado. Este modo está diseñado para proporcionar un ahorro de energía significativo en sistemas que solo requieren conversiones periódicas o cuando hay largos periodos de inactividad entre conversiones.
  • En el modo de conversión continua, el ADC inicia automáticamente una conversión de la señal de entrada tan pronto como se completa la conversión anterior. La tasa de conversión continua es igual a la tasa de datos programada. Los datos se pueden leer en cualquier momento y siempre reflejan la conversión completa más reciente.

Dirección 

Los ADS1115 tienen un pin de dirección, ADDR, que configura la dirección I2C del dispositivo. Este pin puede estar conectado a GND, VDD, SDA o SCL, permitiendo seleccionar cuatro direcciones diferentes con un solo pin, según se muestra en la Tabla.

Full-Scale Range (FSR)

En los ADS1114 y ADS1115, se implementa un amplificador de ganancia programable (PGA) antes del ADC ΔΣ. El rango de escala completa se configura mediante los bits PGA[2:0] en el registro de configuración, y puede configurarse para rangos de ±6.144 V, ±4.096 V, ±2.048 V, ±1.024 V, ±0.512 V, ±0.256 V, permitiendo hacer mediciones mas precisas. La Tabla muestra el rango de escala completa (FSR) junto con el tamaño correspondiente del bit menos significativo (LSB).

(1) No apliques más de VDD + 0.3 V a las entradas analógicas del dispositivo.

Hardware necesario: 

  • Arduino uno
  • ADS1115
  • 4 Potenciómetros
  • Cables jumper

Diagrama

Las conexiones necesarias para usar este dispositivo estan descritas en el siguiente diagrama.

Importación de la librería

Primero, necesitarás instalar la biblioteca "ADS1X15" en el IDE de Arduino. Ve a Sketch -> Include Library -> Manage Libraries, luego busca "ADS1X15" en la barra de búsqueda y haz clic en "Install".

Programación

El primer programa que haremos lee los valores de los cuatro canales analógicos de la placa en modo de disparo único y los imprime a través del Serial Monitor de Arduino.

Incluye la biblioteca "ADS1X15.h", que proporciona las funciones necesarias para interactuar con el ADS1115. Luego, crea una instancia del ADC ADS1115 llamada 'ADS'. El número 0x48 es la dirección I2C del módulo ADS1115.

#include "ADS1X15.h"
ADS1115 ADS(0x48);

 

En la función setup(), se inicializa la comunicación serial a 115200 baudios y se inicia la biblioteca Wire para la comunicación I2C. Luego, se inicializa el ADS1115 con ADS.begin(). 

void setup() {
Serial.begin(115200);
Wire.begin();
ADS.begin();
}

 

En cada iteración del bucle loop(), el código comienza estableciendo la ganancia del ADS1115 a 0 con ADS.setGain(0), según la siguiente tabla.

Luego, crea un array para almacenar los valores de los cuatro canales analógicos y calcula el factor de voltaje.

A continuación, ejecuta un ciclo for que itera sobre cada uno de los cuatro canales del ADS1115. Para cada canal, lee el valor del ADC con ADS.readADC(i), luego imprime el canal y el valor leído, así como el valor convertido a voltaje (val[i] * f).

Finalmente, el código imprime una línea vacía para separar cada conjunto de lecturas y se detiene durante 1 segundo antes de repetir el bucle.

 

El código completo queda de la siguiente forma:

Una vez subido al Arduino puedes ver los valores de los cuatro canales del ADS1115 junto con su equivalente en voltaje.

Modo diferencial

Una de las características más poderosas del ADC ADS1115 es su capacidad para realizar mediciones diferenciales. Esto significa que puede medir directamente la diferencia en voltaje entre dos pines de entrada analógicos.

Esta funcionalidad es particularmente útil para una variedad de aplicaciones. Por ejemplo, si estás midiendo la caída de voltaje a través de un componente en particular en un circuito, puedes conectar un pin a cada lado del componente y obtener una lectura directa de la caída de voltaje.

Para leer el ADC de manera diferencial existen 4 posibles llamadas.

  • int16_t readADC_Differential_0_1()  retorna la diferencia entre  A0 y A1.
  • int16_t readADC_Differential_0_3()  retorna la diferencia entre  A0 y A3.
  • int16_t readADC_Differential_1_3()  retorna la diferencia entre  A1 y A3.
  • int16_t readADC_Differential_2_3()  retorna la diferencia entre  A2 y A3.
  • int16_t readADC_Differential_0_2()  (solo por software) retorna la diferencia entre  A0 y A2.
  • int16_t readADC_Differential_1_2()  (solo por software) retorna la diferencia entre  A1 y A2.

 

Puedes modificar el siguiente código dependiendo que entradas quieras comparar:

 

 

 Conclusión

Al completar este tutorial, has adquirido una sólida comprensión de cómo opera el convertidor Analógico a Digital (ADC) ADS1115 y cómo puedes integrarlo en tus propios proyectos. Hemos trabajado juntos para aprender cómo manipular tanto su modo de "disparo único" como su modo "diferencial", proporcionando una visión clara de las diversas capacidades y flexibilidad que este potente ADC puede ofrecer. 

¡Buena suerte con tus futuras exploraciones y proyectos con el ADC ADS1115 en Arduino!

Productos Relacionados

Ver artículo

Ver artículo

Adc

Deja un comentario