I2C for analog sensors with the ADS1115

Hello everyone

today I would like to briefly show you the use of our ADS1115 module. For Arduino beginners, this module offers little added value. If you need more analog pins for your project, it is usually worth switching to the next larger controller, the MEGA offers for example 16 analog inputs. Those who need more than 16 analog pins for a project are usually no longer considered a beginner :)

For advanced users, the functionality of the module can be described in a short sentence: a 16-bit Adc With Pga And I2cinterface for up to 860/s.

Today, I would like to briefly explain how the module works and provide an application example.

What is an ADC?

ADC stands for AnalogDigitalConverter, also called A/D converters or converters. This makes it possible to convert analog signals to digital signals. A/D converters are indispensable in the field of electronics and are available in almost every electrical appliance, including Arduinos. The counterpart to this is called DAU. There are many ways of converting analog signals into digital ones, depending on the depths, these are very complex processes and so these processes are still the subject of current research in the field of electrical engineering and computer science to this day.

Resolution and Sample Rate

For the hobby area there are two relevant values to work with the modules, the resolution and the sampling rate. The sampling rate determines how many changes of the signal can be detected. In principle, the horizontal distance of the dotted lines at the bottom of the image:

The resolution can be understood as the number of possible steps and is to be understood in the next figure as the vertical distance of the horizontal lines (x).

What is a PGA?

PGA stands for Programmable Gain Amplifier, which translates as "programmable amplifier". These are primarily used as operational amplifiers in measurement technology, we rarely use this function of the AGAU on our modules, since our analog sensors provide "out-of-the-box" readable values for our microcontrollers.

Why I2C?

The I2C interface allows communication between the module (including several modules) and microcontrollers with only two data lines. The handling of the I2C bus is especially recommended for beginners, although no longer state-of-the-art. All common microcontrollers can communicate via this protocol and the handling of the sensors at the module level (with library) is particularly easy to learn. For advanced users, the alternative I2S and CAN are mentioned at this point. 

The wiring:

Sensor ADS1117 Microcontrollers (NanoV3/D1 mini)
Vcc Vcc Vcc
Gnd Gnd Gnd
S A0
Sda SDA (A4/D2)
Scl SCL (A5/D1)

 

Today's experimental setup was highly conservatively elected:

Which library?

Since the layout of our ADS1115 is mostly identical to the Adafruit layout, we can use this library without any restrictions. This is available in the Library Manager of the Arduino IDE:

The library seen above also supports the ADS1117 modules on our Arduinos as well as ESP8266 boards.

Here is the code:

 

#include <Wire.H>
#include <Adafruit_ADS1015.H>

Adafruit_ADS1115 Ads;


Void Setup(Void) 
{   Serial.Begin(9600);   Serial.println("Hello!");   Serial.println("Getting single-ended readings from AIN0.. 3");   Serial.println("ADC Range: +/- 6.144V (1 bit = 0.1875mV/ADS1115)");      Ads.Begin();
}


Void Loop(Void) 
{   int16_t adc0, adc1, adc2, adc3;   adc0 = Ads.readADC_SingleEnded(0);
 adc1 = ads.readADC_SingleEnded(1);
 adc2 = ads.readADC_SingleEnded(2);
 adc3 = ads.readADC_SingleEnded(3);   Serial.Print("AIN0: "); Serial.println(adc0);
 Serial.print("AIN1: "); Serial.println(adc1);
 Serial.print("AIN2: "); Serial.println(adc2);
 Serial.print("AIN3: "); Serial.println(adc3);   Serial.println(" ");      Delay(1000);
}

 

This was tested by us on nano, UNO and MEGA as well as on our D1, Amica and LoLin boards with ESP8266-12E/F, but it should also work on the ESP8266-01.

 

Until the next post :)

 

 

 

 

Produktvorstellungen

13 comments

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 ?

Leave a comment

All comments are moderated before being published

Recommended blog posts

  1. Install ESP32 now from the board manager
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP programming via WLAN