I2C para sensores analógicos con el ADS1115

Hola a todos

Hoy me gustaría mostrarles brevemente cómo usar nuestro módulo ADS1115. Para los principiantes de Arduino, este módulo ofrece poco valor agregado. Si necesita más pines analógicos para su proyecto, generalmente vale la pena cambiar al siguiente controlador más grande, el MEGA ofrece 16 entradas analógicas, por ejemplo. Quien necesita más de 16 pines analógicos para un proyecto generalmente ya no se considera un principiante :)

Para usuarios avanzados, la funcionalidad del módulo se puede describir en una oración corta: un 16 bits ADC  con PGA  y I2C-Interfaz de hasta 860 / s.

Hoy me gustaría explicar brevemente a los principiantes cómo funciona el módulo y proporcionar un ejemplo de aplicación.

¿Qué es un ADC?

ADC significa AnalogDigitalConverter, también llamado convertidor o convertidor A / D. Esto permite que las señales analógicas se conviertan en señales digitales. Los convertidores A / D son indispensables en el campo de la electrónica y están presentes en casi todos los dispositivos eléctricos, incluidos los Arduinos. La contraparte de esto se llama DAU. Hay muchas formas de convertir señales analógicas a digitales, dependiendo de la profundidad, estos son procesos muy complejos y, por lo tanto, estos métodos siguen siendo objeto de investigación actual en el campo de la ingeniería eléctrica y la informática.

Resolución y frecuencia de muestreo

Para el área de pasatiempo hay dos valores relevantes para poder trabajar con los módulos, la resolución y la frecuencia de muestreo. La frecuencia de muestreo determina cuántos cambios en la señal se pueden detectar. En principio, por lo tanto, la distancia horizontal de las líneas punteadas en la parte inferior de la imagen:

La resolución puede entenderse como el número de niveles posibles y debe entenderse en la siguiente figura como la distancia vertical de las líneas horizontales (x).

¿Qué es un PGA?

PGA significa amplificador de ganancia programable, que se traduce como "amplificador programable". Estos sirven principalmente como amplificadores operacionales en la tecnología de medición, solo usamos esta función del ADC en nuestros módulos muy raramente, porque nuestros sensores analógicos ofrecen valores legibles "listos para usar" para nuestros microcontroladores.

¿Por qué I2C?

La comunicación entre el módulo (incluidos varios módulos) y los microcontroladores con solo dos líneas de datos es posible a través de la interfaz I2C. Tratar con el autobús I2C se recomienda especialmente para los principiantes, aunque ya no es lo más avanzado. Todos los microcontroladores comunes pueden comunicarse a través de este protocolo y el manejo de los sensores a nivel de módulo (con biblioteca) es particularmente fácil de aprender. Para usuarios avanzados, las alternativas I2S y CAN se mencionan aquí.

El cableado:

Sensor ADS1117 Microcontrolador (NanoV3 / D1 mini)
VCC VCC VCC
GND GND GND
S A0
SDA SDA (A4 / D2)
SCL SCL (A5 / D1)

 

La configuración experimental de hoy fue elegida de manera muy conservadora:

Cual biblioteca

Dado que el diseño de nuestro ADS1115 es en gran medida idéntico al diseño de Adafruit, podemos usar esta biblioteca sin restricciones y sin ajustes. Está disponible en el administrador de la biblioteca del IDE de Arduino:

La biblioteca que se muestra arriba también admite los módulos ADS1117 en nuestras placas Arduinos y ESP8266.

Aquí está el código:

 

#include <Alambre.h>
#include <Adafruit_ADS1015.h>

Adafruit_ADS1115 anuncios;


nulo configuración(nulo) 
{   De serie.comenzar(9600);   De serie.println("Hola!");   De serie.println("Obteniendo lecturas de un solo extremo de AIN0..3");   De serie.println("Rango ADC: +/- 6.144V (1 ​​bit = 0.1875mV / ADS1115)");      anuncios.comenzar();
}


nulo bucle(nulo) 
{   int16_t adc0, adc1, adc2, adc3;   adc0 = anuncios.readADC_SingleEnded(0);
 // adc1 = ads.readADC_SingleEnded (1);
 // adc2 = ads.readADC_SingleEnded (2);
 // adc3 = ads.readADC_SingleEnded (3);   De serie.imprimir("AIN0:"); De serie.println(adc0);
 // Serial.print ("AIN1:"); Serial.println (adc1);
 // Serial.print ("AIN2:"); Serial.println (adc2);
 // Serial.print ("AIN3:"); Serial.println (adc3);   De serie.println(" ");      retrasar(1000);
}

 

Probamos esto en Nano, UNO y MEGA, así como en nuestros tableros D1, Amica y LoLin con ESP8266-12E / F, pero también debería funcionar en el ESP8266-01.

 

Hasta el próximo post :)

 

 

 

 

Produktvorstellungen

13 comentarios

marculus

marculus

Hallo zusammen,
ich habe zwei Module bei ebay und amazon gekauft, leider kann ich beide nicht ansprechen.
i2cdetect -y 1 zeigt keine Adresse an. Bei einem anderen Modul (andere Hersteller) funktioniert es sofort.
Gibts es da tricks die Adresse anzusprechen?

Klaus

Klaus

Auf meinem Modul befindet sich der Aufdruck “16 Bit I2C ADC+PGA ADS1115” und der Chip auf dem Modul hat die Bezeichnung “7A BOGI”.

Es scheinen fehlerhafte Module (mit geringerer Auflösung) verkauft zu werden.
Ich habe einfach ein anderes ADS1115 Modul verwendet, gleicher Aufdruck und Verkäufer und bekomme jetzt die versprochene Auflösung.
VG

Klaus

Klaus

Hallo Sebastian, konntest du das Problem lösen?
Ich verwende einen ADS1115 (16 Bit), und bekomme ebenfalls nur eine 12 Bit Auflösung.
Die letzten Bits werden nicht genutzt.
Das bedeutet, die kleinste Messwertänderung erfolgt immer in 16er Schritten, also z.B. statt 7,8 µV gibt es nur eine Auflösung von 0,125mV (16x 7,8µV) .

VG

DD1UZ

DD1UZ

@Sebastian: Handelt es sich hier wirklich um einen 1115 (16 bit) oder um einen 1015 (12 bit) ?

Sebastian

Sebastian

Hallo, ich verwende auch dieses Board. Ich habe folgendes Problem: Die Auflösung beträgt nicht 16bit sondern nur 12bit. Die letzten 4 Stellen des Low byte werden IMMER als 0000 zurückgegeben. Das ist unabhängig von der Einstelluing SPS, PGA und Single/Diff. Kann das jemand bestätigen? Habe alle verfügbaren Beispiele probiert… Vielen Dank!

Thomas

Thomas

@Lutz (Juni 05, 2019): Default full scale = 6.144 V entsprechen Ausgabewert 32767 (15 bit, 1 bit für Vorzeichen) → 5 V ergeben Ausgabewert 26665.

Thomas

Thomas

Ich muss noch zu meiner Frage schreiben, dass ich mit ArduinoIDE programmiere und die 3 bzw 4 ADS1115 an einem esp8266 nutzen möchte.

Vielen Dank

Thomas

Thomas

Kannn mir jemand zeigen wie ich 3 oder 4 ADS1115 über I2C ansprechen kann? Die Adressen mit dem Adresspin einstellen ist kein Problem. Aber wie rufe ich die Werte der 12 bzw 16 Analogeingänge ab???

Lutz

Lutz

Nachtrag:
Habe gelesen das im Bus 10K Widerstände sind
Ist das die Ursache und wenn ja wie kann der Bus ohne die aufgelötteten Widerstände Vverwendet werden???
mfg
Lutz

Lutz

Lutz

Hallo habe die Schaltung aufgebaut aber bei 5V DC nur ca 26.600 bei 0 V Anzeige 0
Auch bei direkt 5 V keine höhere Auflösung
Frage müssen Interne Register eingestellt werden und wenn ja wie.
Habe das Datenblatt geladen aber alles englisch und das kann ich nicht
Wer kann mir helfen
mfg
Lutz

Patrick

Patrick

Stimmt schon.
860 Samples pro Sekunde.

Willy

Willy

@joe: samples per second, also messungen pro sekunde.

Die 860 gelten aber nur, wenn nur ein Kanal der 4 benutzt wird. Sobald die anderen dazu kommen, geht es deutlich runter. Allein das umschalten der Kanäle dauert bis zu 10ms.

Die hier angegebene Libary hat noch den Nachteil, das sich die Anzahl noch einmal deutlich reduziert, wenn man mehr als einen ads1115 benutzt. Das ist aktuell mein problem, da ich eigentlich 4 gleichzeitig nutzen wollte. Bei 2 ads1115 komme ich mit tricks aber nur noch auf ca. 100 sps und das dann noch durch 8 Kanäle… Da brauch ich mit 16 Kanälen nicht versuchen.

Wem 12bit reichen, da gibt es noch den ads1015, der kann 3300sps, ist aber schlechter zu bekommen.

Eine bessere libary habe ich aber auch noch nicht gefunden.

joe

joe

>Ein 16-bit ADC mit PGA und I2C-Interface für bis zu 860/s.

860 kbit/s ?

Deja un comentario

Todos los comentarios son moderados antes de ser publicados

Artículos de blog

  1. Ahora instalamos el esp32 a través de la administración.
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. Transporte Aéreo - programación de ESP mediante redes locales inalámbricas