ADS1115 convertidor analógico digital ADC para Arduino y ESP8266 Deja un comentario

El ADS1115 es un convertidor analógico digital ADC de 16-bit que puede resultar muy útil para ciertos proyectos con Arduino y ESP8266.

Aunque las placas de Arduino suelen tener algún convertidor analógico digital ADC incorporado, el ADS1115 tiene más funcionalidades y más resolución.

Por ejemplo, el Arduino UNO incorpora 6 ADC de 10-bit sin embargo el ADS1115 tiene una resolución de 16-bit.

Por otro lado, al utilizar un convertidor analógico digital ADC externo, conseguirás liberar al procesador.

En el caso del ESP8266, sólo incorpora un convertidor analógico digital de 10-bit que mide en el rango de 0V y 1V. Esto hace que la conversión dependa de las resistencias que se utilicen para hacer el divisor de tensión.

Utilizando el ADS1115 ganarás bastante en precisión y calidad de conversión.

La comunicación entre el convertidor analógico digital externo ADS1115 y Arduino o ESP8266 es a través de I2C.

Todo esto es lo que irás viendo en este tutorial pero antes, déjame que te muestre qué es analógico, digital y el convertidor analógico digital.

ads1115 convertidor analogico digital adc arduino esp8266

¿Qué es un convertidor analógico digital?

Para que entiendas qué es analógico y digital y que sepas las diferencias, te aconsejo que veas estos 3 vídeos.

Bien, espero que con estos tres vídeos te haya quedado claro qué es la electrónica analógica y la electrónica digital.

El convertidor analógico digital te permite convertir del mundo analógico al mundo digital. Todas las señales detectadas y procesadas por el ser humano son señales analógicas.

El objetivo de convertir una señal analógica en una señal digital es que pueda ser tratada y procesada por un microcontrolador para diversos propósitos.

Las máquinas sólo entienden de 1s y 0s.

Televisores, ordenadores, tablets o móviles, todos llevan dentro al menos un convertidor analógico digital.

Hay diferentes tipos de convertidor analógico digital (ADC) que se utilizan para diferentes propósitos. Los 3 tipos más comunes son:

  • Flash
  • Aproximaciones sucesivas
  • Sigma-delta

El convertidor analógico digital (ADC) más común y más económico es el de aproximaciones sucesivas.

Las dos características más importantes de un convertidor analógico digital (ADC) son la resolución y la velocidad o frecuencia de muestreo.

Resolución de un convertidor analógico digital

La resolución de un convertidor analógico digital (ADC) se expresa en número de bits. Establece el número de niveles en los que se puede dividir un rango de entrada analógico.

Para calcular la resolución de un convertidor analógico digital (ADC) de n-bit, se divide 1 entre 2 elevado a n.

resolucion=frac{1}{2^{n}}

Por ejemplo, un convertidor analógico digital (ADC) de 16-bit tiene una resolución de

resolucion=frac{1}{2^{16}} =frac{1}{65536}=0,0000152

Si el rango de entrada es de 5V,

frac{5V}{2^{16}} =frac{5}{65536}=0,00007629V=0,07629mV

Lo que viene a decir que podremos medir variaciones de 0,0763mV en la señal analógica de entrada.

Variaciones por debajo de este voltaje no serán detectados.

En general, cuando un convertidor analógico digital tiene una resolución más alta, proporciona más detalles de la señal anlógica que un convertidor analógico digital con resolución más baja.

¿Es mejor tener un ADC con mayor resolución?

Pues depende. Si sólo te interesan variaciones de temperatura de grado en grado a lo mejor con el propio convertidor analógico digital de Arduino es más que suficiente.

Siempre que se pueda hay que evitar añadir capas que hagan que el proyecto sea más complejo y costoso sin ninguna razón convincente.

Velocidad de un convertidor analógico digital

La otra características en la que nos debemos fijar en un convertidor analógico digital (ADC) es en la velocidad o frecuencia de muestreo.

Es el número de veces que el convertidor analógico digital (ADC) muestrea la señal analógica en 1 segundo. Su unidad se expresa en hercios (Hz).

Por ejemplo, para señales de audio se utilizan principalmente frecuencias de muestreo de 44 kHz, 22 kHz y 11 kHz. Si se utiliza la primera, 44 kHz quiere decir que el convertidor analógico digital muestrea la señal 44000 veces por segundo.

Cuanto mayor sea la frecuencia de muestreo mejor será la conversión de analógico a digital.

¿Qué es un ADS1115?

Ahora que tenemos claro qué es un convertidor analógico digital, vamos a pasar a ver el ADS1115.

El ADS1115 es un convertidor analógico digital externo ideal cuando se requiere de más resolución o de más pines analógicos.

Un caso típico es cuando quieres medir diferentes señales analógicas con un ESP8266. Este SoC solo incorpora un ADC.

En estos casos, es indispensable utilizar un convertidor analógico digital (ADC) externo como el ADS1115.

Como ocurre con muchos componentes de este tipo, el ADS1115 es el chip que da nombre al componente electrónico.

Lo vas a encontrar de diferentes formas y formatos según el fabricante.

Uno de los más famosos es el de Adafruit aunque puedes encontrar otros parecidos de otras marcas.

Yo voy a trabajar con el GY-ADS1115/ADS1015 cuyo precio es de unos 4€.

ads1115

Todo lo que veas en este tutorial también te va a servir para cualquier otro ADS1115, da lo mismo el fabricante.

Lo más normal es que venga con los pines sin soldar. Así que prepara el soldador y el estaño porque hay que soldar.

Este mismo componente se utiliza tanto para el ADS1115 como para el ADS1015. Lo puedes diferenciar porque tiene una muesca indicando qué tipo de convertidor analógico digital utiliza.

ads1115

A continuación vamos a ver las características principales del ADS1115.

Características principales del ADS1115

Lo primero es siempre acudir a la hoja de características técnicas donde vas a obtener la mejor y más fiable información de un componente electrónico.

En la web del fabricante del chip, Texas Instruments, la encuentras.

Característica Valor
Voltaje de operación de 2V a 5,5V
Consumo de corriente 150 µA (modo continuo)
Velocidad de muestreo programable de 8 Hz a 860 Hz
Resolución 16-bit
Canales 4 canales de entrada o 2 diferenciales
Interfaz de comunicación I2C (4 direcciones)

Vamos a ir desgranando todas estas características del ADS1115 a lo largo de este tutorial.

Antes vamos a ver los pines.

Pines del ADS1115

El número de pines depende mucho del componente pero lo normal es que tengamos acceso a 10 pines.

ads1115 pinout

Los pines VDD y GND son los pines de alimentación.

Los pines SCL y SDA son los pines de reloj y datos de I2C.

Los pines A0, A1, A2 y A3 son los 4 pines analógicos de entrada.

Los pines ADDR y ALERT son especiales y los vamos a ver con más detenimiento.

Pin ADDR

El convertidor analógico digital ADS1115 puede ser configurado con 4 direcciones I2C. Esto significa que puedes conectar hasta 4 ADS1115 en un mismo bus I2C.

Para seleccionar una dirección entre las 4 posibles se utiliza el pin ADDR. Dependiendo de a donde se conecte utilizará una dirección u otra.

Las posibles direcciones I2C son 0x48, 0x49, 0x4A y 0x4B.

En la siguiente tabla muestro las posibles conexiones con sus direcciones correspondientes.

Conexión ADDR Dirección
GND 0x48
5V 0x49
SDA 0x4A
SCL 0x4B

Lo que quiere decir esta tabla es que el pin ADDR tiene que ser conectado al pin GND, 5V, SDA o SCL para obtener la dirección correspondiente.

Este tipo de direccionamiento permite conectar hasta 4 módulos ADS1115 a una misma placa.

Pin ALERT

El convertidor anlógico digital ADS1115 está equipado con un comparador personalizable que emite un alerta en el pin ALERT/RDY.

Esta característica es muy útil ya que puede reducir significativamente los circuitos externos en muchos proyectos.

Imagínate que tienes un sensor para detectar inundaciones. Gracias a un comparador como el del ADS1115 podrías hacer que cuando supere el umbral, en el pin ALERT emita una señal y despierte al microcontrolador.

Esto permite que el consumo del dispositivo sea muy bajo.

Puede funcionar de dos formas.

En el modo comparador tradicional, el pin ALERT se activa cuando la señal supera un umbral alto (TH_H) establecido y se desactiva cuando el umbral cae por debajo del umbral bajo (TH_L).

En el modo comparador de ventana, permite saber si la señal está entre los límites de una ventana establecida por el umbral alto (TH_H) y el umbral bajo (TH_L).

Esto quiere decir que se activa cuando se supera el umbral alto o cuando caen por debajo del umbral bajo.

Estos dos modos se pueden configurar a nivel de software.

Modos de conversión del ADS1115

El convertidor analógico digital ADS1115 puede funcionar en dos modos de conversión: modo disparo único y modo conversión continua.

En el modo disparo único, el convertidor analógico digital (ADC) realiza una conversión de la señal de entrada a demanda y almacena el resultado en un registro interno.

Enviando una señal al ADS1115 podemos indicar cuando hacer la conversión.

Luego el ADS1115 entra en modo ahorro de energía. Este modo se utiliza para ahorrar energía en sistemas que solo requieran de conversiones periódicas o hay largos periodos de inactividad entre conversiones.

En el modo conversión continua, el convertidor analógico digital (ADC) automáticamente comienza a convertir la señal de entrada tan pronto como la conversión previa se ha completado.

Es decir, convierte un valor de analógico a digital y cuando termina, coge otra muestra. ¿A qué velocidad?

La tasa de conversión, como hemos visto antes, es programable.

Los datos pueden ser leídos en cualquier momento y siempre reflejan la conversión más reciente.

Resolución del convertidor analógico digital ADS1115

Aunque ya he comentado que la resolución del ADS1115 es de 16-bit, la realidad es que no todos bits de los 16-bit se utilizan para expresar el valor de voltaje.

La salida que obtienes del ADS1115 se conoce como entero con signo es decir, uno de los bits de la palabra de 16-bit se utiliza para establecer el signo, positivo o negativo.

Por lo tanto, solo se utilizan 15-bit de los 16-bit lo que significa que hay 32.768 valores posibles (215).

El primer valor sería el 0 y el último sería el 32.767.

Amplificador de ganancia programable o PGA

Otra de las particularidades que dotan al ADS1115 de todavía mayor precisión y fiabilidad es el amplificador de ganancia programable o PGA que lleva incorporado.

Vale pero ¿qué es un amplificador de ganancia programable?

Básicamente es un amplificador operacional al que podemos modificar la ganancia a través del código, programando.

El amplificador de ganancia programable establece la escala completa es decir, indica el valor de referencia.

En Arduino este valor viene determinado por el voltaje de referencia que en el caso de Arduino UNO es 5V y en la gama Arduino MKR y el ESP8266 es de 3V3.

En el ADS1115 lo establece el PGA. Por defecto este valor de referencia es ±6,144 V. Esto quiere decir que el valor de 32.677 (valor máximo con 15-bit) corresponde a 6,144 V.

En Arduino UNO, con un ADC de 10-bit (1024 valores posibles), el valor 1023 corresponde a 5 V.

Si haces la conversión tienes que para el ADS1115

factor de escala=frac{6,144 V}{32.767} =0,0001875 V = 0,1875 mV

Y para un Arduino UNO

factor de escala=frac{5 V}{1.023} =0,0048875 V = 4,8875 mV

Lo que significa que con el ADS1115 se consigue una mejora significativa con respecto al ADC del Arduino UNO, entorno a 26 veces mejor.

Pero lo mejor es que el amplificador de ganancia es programable y podemos cambiar el valor de referencia a valores menores. El valor de 6,144 V es el peor de los casos.

En la siguiente tabla tienes un resumen de todos los valores posibles de la PGA.

PGA Referencia (V) Factor de escala
2/3 6,144 V 0,1875 mV
1 4,096 V 0,1250 mV
2 2,048 V 0,0625 mV
4 1,024 V 0,0312 mV
8 0,512 V 0,0156 mV
16 0,256 V 0,0078 mV

Fíjate bien que configurando la PGA con el valor 16, se consigue un factor de escala de 0,0078 mV es decir, se pueden detectar variaciones de voltaje muy pequeñas.

Pero cuidado, la referencia en voltios de la tabla anterior no quiere decir que podamos medir señales en ese rango de valores.

Rango máximo de las entradas analógicas del ADS1115

La anterior tabla puede ser muy engañosa ya que puede llevarnos a error. Aunque la mayor referencia sea de 6,1444 V, el ADS1115 sólo puede medir el valor de alimentación (VDD) más 0,3 V por sus pines analógicos.

¿Esto qué quiere decir? VDD es la tensión de alimentación y como hemos visto, puede ser de entre 2V y 5,5V.

Por lo tanto, si alimentamos el ADS1115 con 5V, sólo podremos medir tensiones por los pines analógicos hasta 5V + 0,3V es decir, 5,3V.

Lo mismo ocurriría si alimentamos con 3,3V. En este caso el máximo sería 3,6V.

Aplicar una tensión superior a VDD + 0,3V a un ADS1115, puede dañar el chip. No superes nunca este voltaje en ningún pin analógico.

Vuelvo a repetir que no es lo mismo la referencia del PGA (es el factor de escala) y el valor máximo que admiten las entradas analógicas.

Lo último que vamos a ver antes de ver los ejemplos son los modos de funcionamiento: modo de un solo extremo, modo diferencial y modo comparador.

Modos de funcionamiento ADS1115

El modo de un solo extremo hace que las 4 entradas analógicas del ADS1115 funcionen como las de un Arduino. El convertidor analógico digital (ADC) lee la diferencia entre cada entrada y tierra.

El modo diferencial sin embargo, mide la diferencia entre dos de las entradas analógicos del ADS1115 es decir, se realiza una medición en la que ninguno de los lados se encuentra en GND.

En este modo, se emparejan los pines de dos en dos, A0 con A1 y A2 con A3. Esto quiere decir que sólo vas a tener dos canales.

En canal 1 devuelve la diferencia entre los pines A0 y A1 y el canal 2 devuelve la diferencia entre los pines A2 y A3.

En el modo comparador se utiliza el pin ALERT que hemos visto antes para lanzar una señal cada vez que se supere un umbral establecido dentro del ADS1115.

Para probar cada modo vamos a hacer unos ejemplos. Lo primero que haremos será instalar la librería para poder programar el ADS1115.

Instalar librería para ADS1115

Lo primero es instalar la librería para controlar el ADS1115. La más famosa y popular es la de Adafruit.

En el tutorial de cómo instalar una librería con Arduino te muestro no sólo a instalarla, también cómo seleccionar la más adecuada para tu proyecto.

Sólo tienes que buscar la librería Adafruit ADS1X15 en el gestor de librerías.

ads1115 librería Arduino

La instalas y listo. Ahora puedes acceder tanto a la librería como al código de los ejemplos.

ads1115 librería Arduino

Esta librería permite controlar tanto la placa basada en el ADS1115 como la basada en el ADS1015. En este tutorial sólo hablaré del ADS1115.

Modo de un solo extremo

El primer modo que vamos a ver es el modo de un solo extremo. Este modo hace que el ADS1115 se comporte como un ADC normal.

Tiene 4 entradas analógicas numeradas como A0, A1, A2 y A3.

La idea es conectar un sensor analógico a una de esas entradas y medir su valor.

En este ejemplo utilizarás una fotoresistencia o LDR conectada al ADS1115.

A continuación te dejo el esquema eléctrico para conectar el ADS1115 a un Arduino UNO y a una placa NodeMCU basada en el ESP8266.

Conexión ADS1115 con Arduino UNO

La conexión del ADS1115 con el Arduino UNO es muy sencilla. Sigue el siguiente esquema.

ads1115 Arduino UNO

El pin SDA del ADS1115 va al pin A4 del Arduino UNO y el pin SCL al pin A5.

La dirección I2C se configura conectando el pin ADDR del ADS1115 al pin GND.

A parte, he añadido una fotoresistencia o LDR para poder probar el convertidor analógico digital (ADC) ADS1115.

La resistencia va conectada a través de un divisor de tensión con otra resistencia de 10kΩ.

El pin analógico del ADS1115 que voy a utilizar es el A0.

Conexión ADS1115 con ESP8266

La conexión con el ESP8266 es muy parecida a la de Arduino UNO. En este caso voy a utilizar una placa NodeMCU.

ads1115 NodeMCU ESP8266

El pin SDA del ADS1115 va conectado al pin D2 de la placa NodeMCU ESP8266 y el pin SCL al pin D1.

La dirección I2C se configura conectando el pin ADDR del ADS1115 al pin GND.

Igual que en el esquema del Arduino UNO he conectado una fotoresistencia o LDR a través de un divisor de tensión con una resistencia de 10kΩ.

La LDR está conectada al pin A0 del ADS1115.

Programación modo un sólo extremo

Una vez tenemos todo conectado entre la placa y el ADS1115 vamos a ver la programación.

Comenzamos por las librerías y las variables.

Librerías y variables

Lo primero es importar las librerías Wire.h y Adafruit_ADS1015.h. Aunque esta última librería se llame ADS1015 también contiene el código para controlar el ADS1115.

Luego crea un objeto de la clase Adafruit_ADS1115 al que llamamos ads.

Función setup()

La función setup() comienza iniciando la comunicación serie para mostrar mensajes a través del monitor serie.

Luego inicia el ADS1115 llamando a la función ads.begin() que no admite ningún parámetro.

Función loop()

En la función loop() es donde realmente hay que hacer la lectura del pin analógico.

Lo primero es declarar una variable del tipo short que se llama adc0. Esta variable almacenará el valor del pin digital A0.

Es de tipo short porque este tipo almacena números enteros de 16-bit con signo. Suficiente para almacenar el valor que devuelve un pin analógico, un número de 15-bit como hemos visto antes (de 0 a 32767).

Para obtener el valor del pin analógico del ADS1115 se utiliza la función ads.readADC_SingleEnded(0). El parámetro que se le pasa a esta función es el número de pin analógico.

0 devolverá el valor del pin analógico A0, 1 el del pin A1 y así sucesivamente.

Por último, en la función loop() se muestra la información obtenida por el monitor serie.

Ahora solo queda una cosa, cargar el código a la placa y abrir el monitor serie.

Código completo

El código para el Arduino UNO y la placa NodeMCU ESP8266 es el mismo, no hace falta hacer ningún cambio y es totalmente compatible.

Obtendrás algo parecido a esto.

ads1115 LDR

Si pones la mano encima de la fotoresistencia disminuirá el valor y si pones la mano encima aumentará el valor.

Pero qué pasaría si quiero más precisión. Como hemos visto, el ADS1115 incluye un amplificador de ganancia programable o PGA que nos permite tener más precisión con el mismo número de bits.

¿Cómo lo hace? Cambiando el valor de referencia.

Por defecto, el ADS1115 utiliza el voltaje de referencia de 6,1444V lo que supone un factor de escala de 0,1875mV.

Si cambiamos el voltaje de referencia por ejemplo a 4,096V se obtiene un factor de escala de 0,125mV.

Para cambiar el factor de escala sólo tienes que añadir la llamada a la función ads.setGain(GAIN_ONE) justo antes de iniciar el ADS1115 con la función ads.begin() en la línea 13.

El código quedaría de la siguiente manera.

¿Qué es lo que sucede cuando cambias la referencia de voltaje? pues que se reduce el rango y por lo tanto el factor de escala disminuye.

Gracias a esto, ahora se pueden medir variaciones de luminosidad más pequeñas.

En la siguiente tabla muestro los diferentes valores que puede tomar esta función, el voltaje de referencia y el factor de escala correspondiente.

Parámetro Referencia Factor de escala
GAIN_TWOTHIRDS 6,144V 0,1875mV
GAIN_ONE 4.096V 0,125mV
GAIN_TWO 2,048V 0,0625mV
GAIN_FOUR 1,024V 0,03125mV
GAIN_EIGHT 0,512V 0,015625mV
GAIN_SIXTEEN 0,256V 0,0078125mV

Y así es como funciona el ADS1115 de forma normal, como cualquier otro convertidor analógico digital (ADC).

Ahora vamos a ver otro modo de funcionamiento, el modo diferencial.

Modo diferencial

Como ya he comentado, el modo diferencial del ADS1115, nos permite medir la diferencia entre dos pines analógicos de este módulo.

Puedes medir la diferencia de voltaje entre el A0 y el A1 o entre el A2 y A3. Por eso se llama diferencial.

Pero ¿para qué puede ser útil este tipo de medidas?

Si sueles hacer proyectos con Arduino en algún momento necesitarás alimentar tu proyecto con pilas o baterías.

El modo diferencial te va a permitir hacer una medición en la que ninguno de los lados de la medición esté conectado a GND como ocurre al medir una pila o batería con Arduino.

Además, otro beneficio de este modo es que puedes realizar mediciones de voltajes negativos.

En el siguiente ejemplo te voy a mostrar cómo puedes hacerlo.

Conexión ADS1115 con Arduino UNO

Monta el circuito partiendo del siguiente esquema.

ads1115 Arduino UNO diferencial

He utilizado un portapilas de dos pilas AA pero puedes utilizar otra clase de pilas como las AAA o incluso una única pila de 1,5V.

El extremo positivo del portapilas se conecta al A1 y el extremo negativo se conecta al A0 del ADS1115.

Al estar conectadas en serie las dos pilas, se suman los voltajes. Por lo tanto 1,5 + 1,5 = 3V. Esto será en el mejor de los casos.

La programación será la misma, lo que cambiará será el valor obtenido de la diferencia.

Conexión ADS1115 con ESP8266

En el siguiente esquema te muestro cómo conectar el ADS1115 con una placa NodeMCU ESP8266 para hacer una medida diferencial.

ads1115 NodeMCU ESP8266 diferencial

Igual que en el esquema con el Arduino UNO, he utilizado un portapilas de pilas AA.

El extremo positivo del portapilas al A1 y el extremo negativo al A0.

Ten mucho cuidado si vas a medir un voltaje superior a los 3,3V con los que se alimenta el ADS1115. Recuerda que no se puede superar VDD + 0,3V es decir 3,3 + 0,3 = 3,6V

Programación en modo diferencial

La programación en modo diferencial del ADS1115 es muy sencilla y muy parecida a la que hemos visto en el modo de un solo extremo.

A continuación te dejo el código.

Lo primero que hace el código es importar las librerías y crear una instancia a la clase Adafruit_ADS1115 que se llama ads.

Luego declaro una variable del tipo float para almacenar el factor de escala que se llama factorEscala.

El factor de escala depende de la referencia de voltaje que se haya seleccionado. Por defecto es 6,144V al que corresponde un factor de escala de 0,1875mV.

Si se modifica la referencia de voltaje, tendrás que modificar el factor de escala y poner el que corresponde según la tabla que hemos visto en el apartado anterior.

En la función setup() se inicia la comunicación serie, se establece el factor de escala con la función ads.setGain(GAIN_TWOTHIRDS) y se inicia el sensor ADS1115 con la función ads.begin().

Como ya he comentado si modificas el factor de escala con la función ads.setGain(…) tendrás que cambiar el valor inicial de la variable factorEscala al que corresponda.

En la función loop() lo primero es obtener la diferencia entre el pin A0 y A1 utilizando la función ads.readADC_Differential_0_1().

Esta función devuelve la diferencia entre A0 y A1 es decir, el valor que hay en A0 resta el valor de A1.

Si necesitas utilizar los otros dos pines puedes utilizar la función ads.readADC_Differential_2_3() que devolverá la diferencia entre A2 y A3.

Esta diferencia viene expresada como un número de 16-bit con signo es decir entre -32.768 y 32.767. Este valor hay que convertirlo en voltios.

Para hacerlo se multiplica por factorEscala y se obtienen milivoltios. Para obtener voltios hay que dividir entre 1.000. Esto mismo es lo que se hace en la línea 27 del código.

Por último se muestra la información por el monitor serie.

Ahora solo queda cargar el código a la placa y abrir el monitor serie. Obtendrás algo parecido a esto.

ads1115 diferencial

Como puedes comprobar salen números negativos. Esto se debe a que estamos restando el voltaje que tenemos en el pin A0 menos el pin A1.

Como hemos conectado el positivo del portapilas al A1, el resultado es negativo.

Puedes probar a cambiar de orden los cables (positivo al A0 y negativo al A1) y verás cómo aparece el voltaje positivo.

Por último vamos a ver cómo hacer que el ADS1115 lance una alerta cuando está funcionando en modo comparador.

Modo comparador

El modo comparador permite hacer una comparación del valor obtenido por uno de los pines analógicos con un umbral preestablecido.

Como hemos visto anteriormente, se pueden configurar dos tipos de comparaciones: la tradicional o por ventana.

Si se utiliza la tradicional, siempre que el valor supere el umbral máximo el pin ALERT se pondrá en estado LOW. Por defecto siempre está en estado HIGH.

Si utilizas el tipo por ventana, cambiará de estado siempre que se supere el umbral alto y siempre que caiga del umbral bajo.

Con la librería de Adafruit sólo se puede trabajar con un umbral, umbral alto, y el modo tradicional. No tiene implementado el otro modo.

Esto es precisamente lo que vamos a ver a continuación.

Conexión ADS1115 y Arduino UNO

El circuito que vamos a utilizar es igual que el que hemos visto en un apartado anterior.

Sigue el siguiente esquema para conectar los componentes.

La fotorresistencia o LDR se conecta al pin A0 y también conectamos un LED al pin ALERT.

La idea es configurar un umbral en el ADS1115 y cada vez que baje la luminosidad de ese umbral, encienda el LED.

Conexión ADS1115 y NodeMCU ESP8266

La conexión con la placa NodeMCU ESP8266 es prácticamente la misma. Sigue el siguiente esquema.

Igual que con la placa de Arduino, la fotorresistencia o LDR se conecta al pin A0 y el LED al pin ALERT.

Ahora sólo queda la programación.

Programación en modo comparador

A continuación tienes el código completo con el ejemplo del comparador.

La primera parte del código es igual que los códigos que hemos visto hasta ahora en este tutorial, importación de librerías e instancia a la clase Adafruit_ADS1115.

En la función setup() se inicia la comunicación serie, se establece el factor de escala y se inicia el ADS1115.

En la siguiente parte del código se establece el umbral alto del modo comparador desde la línea 20 a la línea 29.

Lo primero es declarar una variable con el factor de escala. Recuerda que por defecto el factor de escala es 0,1875mV que corresponden a 6.144V de referencia de voltaje.

La variable que almcena este valor es factorEscala del tipo float.

El umbral hay que establecerlo en un número que va de 0 a 32.767 (son los 15-bit de resolución). Lo lógico es establecer un voltaje umbral y luego pasarlo a número.

Para hacer esa conversión hay que aplicar la siguiente fórmula:

frac{volatje_{umbral}}{factor escala}times 1.000

Hay que dividir el voltaje umbral entre el factor de escala. Se debe multiplicar por 1.000 ya que el factor de escara está en milivoltios, en el caso de que esté en Voltios no haría falta

Para asignar el umbral en el ADS1115 hay que utilizar la función ads.startComparator_SingleEnded(adc, umbral).

El primer parámetro de la función indica el pin analógico que se va a utilizar y el segundo parámetro indica el umbral que se quiere establecer.

Es así de sencillo.

Si por ejemplo se quiere establecer un umbral de 2,5V el número que hay que utilizar es el siguiente.

frac{2,5}{0,1875}times 1.000 = 13.333,33

En la función loop() hay que consultar constantemente el valor que hay en el pin analógico con la función ads.getLastConversionResults() para que internamente el ADS1115 haga la comparación.

En el caso de que el voltaje en el A0 sea mayor que 2,5V, el pin ALERT del ADS1115 estará a estado LOW es decir se activará el pin.

En el caso de que el voltaje en el A0 sea menor que 2,5V, el pin ALERT estará a estado HIGH es decir, el pin estará desactivado.

Por defecto el pin ALERT funciona de forma invertida.

Ahora solo queda una cosa, subir el código a la placa y probar acercando y alejando una luz a la fotorresistencia o LDR.

Verás como cuando incide más luz se apaga el LED y cuando no incide tanta luz se apaga el LED.

Con esto doy por finalizado este tutorial sobre el convertidor analógico digital.

Conclusiones convertidor analógico digital ADS1115

El convertidor analógico digital ADS1115 puede ser un gran aliado cuando necesitamos más pines analógicos o más precisión en nuestros proyectos.

Es muy sencillo de usar con un Arduino o un ESP8266 gracias a su interfaz I2C.

Permite trabajar en diferentes modos de funcionamiento: modo un solo extremo, modo diferencial o modo comparador.

Utilizar uno u otro dependerá de los requerimientos de nuestro proyecto.

Gracias a la librería de Adafruit, su uso con cualquiera de estas dos placas es muy sencillo y además el código es 100% compatible entre ellas.

Espero haberte ayudado con este tutorial y cualquier duda o sugerencia la puedes dejar aquí abajo en los comentarios.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

0
    0
    Tu Carrito
    Tu carrito esta vacíoVolver a la tienda
    Enviar Whatsapp
    Hola 👋
    ¿En qué podemos ayudarte?