Tabla de contenido
resumen
En este tutorial, ADS1115 Módulo ADC de 16 bits ESP32. La placa de conexión ADS1115 tiene alta resolución Convertidores de analógico a digital (ADC) Se puede utilizar con varios microcontroladores como Arduino, STM32, ESP8266/32, etc. Especialmente ESP32 es un potente microcontrolador con capacidades integradas de Wi-Fi y Bluetooth, ideal para aplicaciones de IoT.
ESP32 tiene incorporado ADC de 12 bitsOfrece una resolución más alta que los ADC de 10 bits que se encuentran en las placas Arduino. Sin embargo, el ADS1115 cuenta con una resolución aún mayor 16 bits, proporcionando un excelente rendimiento en términos de medición de voltaje. El voltaje mínimo que puede medir el ESP32 es 3,3 V / 4096 = 0,0008 V (o 0,8 mV)El ADS1115 puede medir en menos de 1 μA. 5V / 65536 = 0,000076V (76uV)Esto hace que el ADS1115 sea ideal cuando se requieren mediciones de voltaje precisas.
La siguiente sección de este tutorial proporciona instrucciones paso a paso para conectar el ADS1115 al ESP32, configurar la comunicación I2C y escribir código para leer y procesar señales analógicas utilizando el IDE de Arduino. Después de leer esta guía, tendrá una sólida comprensión de cómo interconectar el módulo ADC ADS1115 de 16 bits con el ESP32 y aprovechar todo su potencial.
Lista de materiales
Se requieren factores posteriores para comprender completamente cuándo se utiliza el módulo ADC ADS1115 con el ESP32.
Pines y precisión del ADC ESP32
El ESP32 es un potente microcontrolador con funciones integradas de Wi-Fi y Bluetooth. Tiene múltiples pines convertidores analógicos a digitales (ADC) que se pueden usar para medir señales analógicas y convertirlas a valores digitales. El ESP32 tiene dos ADC, ADC1 y ADC2, para un total de 18 canales ADC disponibles.
- ADC1 tiene 8 canales (GPIO32 a GPIO39)
- ADC2 tiene 10 canales (GPIO0, GPIO2, GPIO4, GPIO12 a GPIO15 y GPIO25 a GPIO27).
precisión: El ADC ESP32 tiene una resolución de 12 bits y puede utilizar 4096 niveles discretos para representar señales analógicas. Sin embargo, debido al ruido interno y las características no lineales, la resolución efectiva suele ser de alrededor de 10-11 bits.
Para mejorar la precisión de las lecturas de ADC del ESP32, puede:
- Utilice el sensor Hall incorporado para la calibración.
- Implemente el sobremuestreo y el promedio para reducir el ruido.
- Para una mayor estabilidad, utilice una referencia de voltaje externa.
- Si se requiere una mayor precisión, considere la posibilidad de utilizar un módulo ADC externo como el ADS1115.
El canal ADC2 se comparte con la funcionalidad Wi-Fi, por lo que si está utilizando Wi-Fi, se recomienda utilizar el canal ADC1 para evitar posibles conflictos o interferencias con las lecturas del ADC.
Chip ADS1115
El ADS1115 es un CI de conversión de analógico a digital de precisión, bajo consumo, de 16 bits, compatible con I2C.
Características de ADS1115
- Resolución de 16 bits
- Entrada de un solo extremo de 4 canales o entrada diferencial de 2 canales
- Yo2Protocolo C interfaz
- Comparador programable
- Amplio rango de tensión de alimentación
- Bajo consumo de corriente
- Modo de conversión continua
- Velocidad de datos programable
- Comparador programable
- Asentamiento de ciclo único
- Referencia interna de voltaje de baja deriva
- Oscilador interno
- Amplio rango de temperatura de funcionamiento
- Disponible en paquete X2QFN ultrapequeño
Configuración de pines ADS1115
La siguiente figura muestra la configuración del pin del chip ADS1115.
- El pin 1 es el pin ADDR que selecciona la dirección I2C del chip.
- El pin 2 es un pin de alerta/listo que actúa como una señal de alerta y lista para datos.
- El pin 3 es el terminal GND.
- Los pines 4, 5, 6 y 7 son los cuatro pines de entrada ADC. Estos pines se pueden utilizar como cuatro entradas de un solo extremo o dos entradas diferenciales.
- El pin 8 es un pin de suministro positivo que acepta de 2.0V a 5.5V.
- Los pines 9 y 10 son los pines de interfaz I2C, SDA y SCL, respectivamente.
Diagrama de bloques funcionales ADS1115.
El diagrama de características del chip ADS1115 se muestra a continuación.
En primer lugar, el multiplexor selecciona la señal de entrada al. Esta señal seleccionada entra en un amplificador de ganancia programable (PGA) y se puede programar para amplificar señales pequeñas antes de que se produzca la conversión.
Un convertidor delta-sigma de 16 bits procesa la entrada. El convertidor incluye su propia referencia de voltaje y oscilador para la medición de la señal de entrada. Cuando se completa la conversión, los datos resultantes se envían a la interfaz I2C. Además, el comparador genera una señal para la interfaz externa, lo que indica que el resultado convertido se puede buscar.
Conexión típica ADS1115
La conexión I2C principal para el ADS1115 se muestra en la siguiente figura.
El ADS1115 es compatible y puede interactuar directamente con controladores I2C de modo estándar, modo de alta velocidad y alta velocidad. El ADS1115 funciona con cualquier periférico I2C de microcontrolador, incluidos los periféricos I2C solo maestro y maestro único.
Para obtener más información, consulte Hoja de datos de ADS1115
Módulo ADS1115 o placa de conexión
El ADS1115 está disponible en paquetes X2QFN y VSSOP, pero no es adecuado para la creación de prototipos. Por lo tanto, para su uso con ESP32 u otros microcontroladores, se requiere un módulo ADS1115 o una placa de conexión.
Estos módulos pueden ser encontrados por diferentes fabricantes a precios asequibles. El diseño amigable con la placa de pruebas lo hace ideal para aplicaciones de creación de prototipos y pruebas y se integra fácilmente.
Pines del módulo ADS1115
El número total de módulos ADS1115 es de 10 pines.
Anclar. No. | Nombre del PIN | Descripción del Pin |
1 | VDD | Fuente de alimentación: 2.0V-5.5V |
2 | Teletipo | tierra |
3 | Teletipo | Entrada de reloj serie: datos de reloj en SDA (utilizados para la comunicación I2C) |
4 | Teletipo | Datos en serie: Enviar y recibir datos (utilizados para la comunicación I2C) |
5 | Adol | Selección de dirección I2C (esclavo) |
6 | Alerta/RDY | Salida de comparador digital o soporte de conversión |
7 | AIN0 | Canal diferencial 1: entrada de canal 1 de un solo extremo o entrada negativa |
8 | Ain 1 | Canal diferencial 1: entrada de canal 2 de un solo extremo o entrada negativa |
9 | Ain 2 | Canal diferencial 2: entrada de canal 3 de un solo extremo o entrada positiva |
10 | Ain 3 | Canal diferencial 2: entrada de canal 4 de un solo extremo o entrada negativa |
Esquema del módulo ADS1115.
La figura anterior muestra la adaptación de Adafruit del módulo ADS1115.
Este diseño se ajusta al protocolo de conexión estándar del chip ADS1115. Tanto los pines I2C como Alert tienen resistencias pull-up de 10K ohmios, y el VDD yHay un condensador de 1uF entre los pines GND que actúa como un condensador de desacoplamiento.
Módulo ADS1115 e interfaz ESP32
El diagrama de cableado ESP32 para interactuar con el módulo ADC ADS1115 es sencillo.
Primero, conecte los pines VDD y GND del módulo a los pines 3.3V y GND del ESP32, respectivamente. A continuación, conecte los pines I2C (SDA y SCL) del ADS1115 a los pines I2C (SDA=GPIO21 y SCL=GPIO22) del ESP32. El pin ADDR del chip debe estar conectado a VDD, SDA o SCL, dependiendo de la dirección 0x49, 0x4A o 0x4B utilizada. Tenga en cuenta que el pin ADDR se tira hacia abajo a tierra por una resistencia de 10K de forma predeterminada.
Si se utiliza el pin ALERT/READY del módulo ADS1115, debe estar conectado al pin digital ESP32. Este pin tiene dos usos. En primer lugar, se puede utilizar para conversiones impulsadas por interrupciones que actúan como señales de datos READY. A continuación, se puede utilizar con un comparador de salida programable para detectar el umbral de conversión. En este caso, actúa como una señal de alerta.
El ADS1115 tiene cuatro salidas ADC, A0, A1, A2 y A3, y se pueden conectar hasta cuatro sensores analógicos al módulo. Por ejemplo, para probar las lecturas de un módulo, puede usar un potenciómetro que debe conectarse de acuerdo con el esquema anterior.
Instalación de la biblioteca ADS1115
El módulo ADS1115 tiene varias bibliotecas. Mientras navega por el Administrador de bibliotecas, obtiene una biblioteca de otro desarrollador.
e de todas las librerías disponibles y librerías estables para nuestra aplicación. La biblioteca es AdafruitTambién puede descargar la biblioteca desde el siguiente enlace:
Código fuente/programa básico
Puede utilizar el código de ejemplo básico de la carpeta de muestras ADS1115 de Adafruit para probar el funcionamiento del sensor.
Copie el código siguiente y cárguelo en la placa ESP32.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <Adafruit_ADS1X15.h> Adafruit_ADS1115 anuncio; /* Uso para la versión de 16 bits */ Adafruit_ADS1015 publicidad; /* Utilice esto para la versión de 12 bits */ No válido arreglo(No válido) { serial.empezar(115200); serial.Printrung(“Obtenga una lectura de un solo extremo de AIN0.3”); serial.Printrung(“Rango de ADC: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)”); El rango de entrada (o ganancia) del ADC se puede cambiar de la siguiente manera: Funciona, pero tenga cuidado de no exceder VDD + 0.3V máximo. Si ajusta el rango de entrada, ¡superará los límites superior e inferior! Establecer estos valores incorrectamente puede dañar el ADC. ADS1015 ADS1115 // ——- ——- ads.setGain(GAIN_TWOTHIRDS); 2/3x ganancia +/- 6.144V 1 bit = 3mV 0.1875mV (predeterminado) ads.setGain(GAIN_ONE); 1x Ganancia +/- 4.096V 1 bit = 2 mV 0.125 mV ads.setGain(GAIN_TWO); 2x ganancia +/- 2.048V 1 bit = 1 mV 0.0625 mV ads.setGain(GAIN_FOUR); 4x ganancia +/- 1.024V 1 bit = 0.5mV 0.03125mV ads.setGain(GAIN_EIGHT); 8x ganancia +/- 0.512V 1 bit = 0.25mV 0.015625mV ads.setGain(GAIN_SIXTEEN); 16x ganancia +/- 0.256V 1 bit = 0.125mV 0.0078125mV Si (!anuncio.empezar()) { serial.Printrung(“Error de inicialización de ADS”.); mientras (1); } } No válido bucle(No válido) { int16_t ADC0, ADC1, ADC2, ADC3; flotar Voltio 0, Perno 1, Perno 2, Perno 3; ADC0 = anuncio.readADC_SingleEnded(0); ADC1 = anuncio.readADC_SingleEnded(1); ADC2 = anuncio.readADC_SingleEnded(2); ADC3 = anuncio.readADC_SingleEnded(3); Voltio 0 = anuncio.Perno de cómputo(ADC0); Perno 1 = anuncio.Perno de cómputo(ADC1); Perno 2 = anuncio.Perno de cómputo(ADC2); Perno 3 = anuncio.Perno de cómputo(ADC3); serial.Printrung(“———————————————————–“); serial.Impresión(“AIN0: “); serial.Impresión(ADC0); serial.Impresión(” “); serial.Impresión(Voltio 0); serial.Printrung(“V”); serial.Impresión(“AIN1: “); serial.Impresión(ADC1); serial.Impresión(” “); serial.Impresión(Perno 1); serial.Printrung(“V”); serial.Impresión(“AIN2: “); serial.Impresión(ADC2); serial.Impresión(” “); serial.Impresión(Perno 2); serial.Printrung(“V”); serial.Impresión(“AIN3: “); serial.Impresión(ADC3); serial.Impresión(” “); serial.Impresión(Perno 3); serial.Printrung(“V”); } |
Después de cargar el código, abra el monitor serie. El monitor serie muestra los valores ADC y los voltajes de salida de las cuatro salidas, AIN0, AIN1, AIN2 y AIN3.
Dado que solo se utilizan dos potenciómetros para AIN0 y AIN1, estos valores cambian a medida que se giran los potenciómetros.
Prueba de precisión del módulo ADS1115
A continuación, evalúe la precisión del módulo ADC ADS1115. Para evaluar su precisión, la pantalla LCD se puede utilizar para mostrar el valor ADC y el voltaje medido. Después de eso, puede usar un multímetro para medir el voltaje detectado y compararlo con el voltaje que se muestra en el monitor serie.
ADS1115, ESP32, Diagrama de conexión LCD
Siga el esquema para conectar la pantalla LCD al circuito anterior.
Conecte el LCD SDA & SCL PIN a GPIO21. GPIO32 para ESP22. Utilice los pines Vin y GND del ESP32 para proporcionar conexiones VCC y GND de 5 V para pantallas LCD.
Código fuente/Programa
El código contiene Biblioteca LCD I2C Para compilación. A continuación, puede copiar el siguiente código y cargarlo en la placa ESP32.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <Adafruit_ADS1X15.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C Pantalla de cristal líquido(0x27, 16, 2); Adafruit_ADS1115 anuncio; /* Uso para la versión de 16 bits */ Adafruit_ADS1015 publicidad; /* Utilice esto para la versión de 12 bits */ No válido arreglo(No válido) { serial.empezar(115200); serial.Printrung(“Obtenga una lectura de un solo extremo de AIN0.3”); serial.Printrung(“Rango de ADC: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)”); El rango de entrada (o ganancia) del ADC se puede cambiar de la siguiente manera: Funciona, pero tenga cuidado de no exceder VDD + 0.3V máximo. Si ajusta el rango de entrada, ¡superará los límites superior e inferior! Establecer estos valores incorrectamente puede dañar el ADC. ADS1015 ADS1115 // ——- ——- ads.setGain(GAIN_TWOTHIRDS); 2/3x ganancia +/- 6.144V 1 bit = 3mV 0.1875mV (predeterminado) ads.setGain(GAIN_ONE); 1x Ganancia +/- 4.096V 1 bit = 2 mV 0.125 mV ads.setGain(GAIN_TWO); 2x ganancia +/- 2.048V 1 bit = 1 mV 0.0625 mV ads.setGain(GAIN_FOUR); 4x ganancia +/- 1.024V 1 bit = 0.5mV 0.03125mV ads.setGain(GAIN_EIGHT); 8x ganancia +/- 0.512V 1 bit = 0.25mV 0.015625mV ads.setGain(GAIN_SIXTEEN); 16x ganancia +/- 0.256V 1 bit = 0.125mV 0.0078125mV Pantalla de cristal líquido.inicialización(); Pantalla de cristal líquido.Luz de fondo(); Si (!anuncio.empezar()) { serial.Printrung(“Error de inicialización de ADS”.); mientras (1); } } No válido bucle(No válido) { int16_t ADC0, ADC1, ADC2, ADC3; flotar Voltio 0, Perno 1, Perno 2, Perno 3; ADC0 = anuncio.readADC_SingleEnded(0); ADC1 = anuncio.readADC_SingleEnded(1); ADC2 = anuncio.readADC_SingleEnded(2); ADC3 = anuncio.readADC_SingleEnded(3); Voltio 0 = anuncio.Perno de cómputo(ADC0); Perno 1 = anuncio.Perno de cómputo(ADC1); Perno 2 = anuncio.Perno de cómputo(ADC2); Perno 3 = anuncio.Perno de cómputo(ADC3); serial.Printrung(“———————————————————–“); serial.Impresión(“AIN0: “); serial.Impresión(ADC0); serial.Impresión(” “); serial.Impresión(Voltio 0); serial.Printrung(“V”); serial.Impresión(“AIN1: “); serial.Impresión(ADC1); serial.Impresión(” “); serial.Impresión(Perno 1); serial.Printrung(“V”); serial.Impresión(“AIN2: “); serial.Impresión(ADC2); serial.Impresión(” “); serial.Impresión(Perno 2); serial.Printrung(“V”); serial.Impresión(“AIN3: “); serial.Impresión(ADC3); serial.Impresión(” “); serial.Impresión(Perno 3); serial.Printrung(“V”); Pantalla de cristal líquido.claro(); Pantalla de cristal líquido.Establecer cursor(0, 0); Pantalla de cristal líquido.Impresión(“ADC0:”); Pantalla de cristal líquido.Impresión(ADC0); Pantalla de cristal líquido.Impresión(” “); Pantalla de cristal líquido.Impresión(Voltio 0); Pantalla de cristal líquido.Impresión(“V”); Pantalla de cristal líquido.Establecer cursor(0, 1); Pantalla de cristal líquido.Impresión(“ADC1:”); Pantalla de cristal líquido.Impresión(ADC1); Pantalla de cristal líquido.Impresión(” “); Pantalla de cristal líquido.Impresión(Perno 1); Pantalla de cristal líquido.Impresión(“V”); demorar(1000); } |
Resultados de las pruebas
Después de cargar el código, el módulo está listo para probar. Para este propósito necesitarás un multímetro.
La pantalla LCD tiene Valor ADC Y Voltaje medido.
Se utilizan dos potenciómetros para introducir el voltaje ADC y ambos se muestran en la pantalla LCD. Uno de los voltajes medidos indicados por el multímetro es 3.28V, y en la pantalla LCD muestra 3.31V.
El voltaje de salida máximo del ADC del módulo es: 3,3 V El valor mínimo es 0V.
Al medir el voltaje más bajo, el 0.84V en la pantalla LCD se midió como 0.827V con un multímetro.
Por lo tanto, podemos concluir que el módulo ADC ADS1115 de 16 bits tiene una alta precisión y se puede utilizar para aplicaciones versátiles.
Según otras pruebas, este dispositivo se declara 0.01% de precisión Pero tiene Máxima precisión de 0.15%Esta precisión incluye todas las fuentes de error, como: Referencia de voltaje, error de ganancia, compensaciónY ruido.
Video Tutorial y Guía
ADS1115 16-bit A/D Converter: Tutorial detallado usando Arduino, ESP8266 y ESP32
El mismo módulo ADS1115 también se puede utilizar con otros microcontroladores, incluyendo:
- ADS1115 y Arduino
- ADS1115 con Raspberry Pi Pico
- ADS1115 y ESP8266