I2C für analoge Sensoren mit dem ADS1115 - AZ-Delivery

Hallo zusammen,

heute möchte ich Ihnen kurz die Verwendung unseres ADS1115-Moduls zeigen. Für Arduino-Einsteiger bietet dieses Modul kaum einen Mehrwert. Benötigt man für sein Projekt mehr analoge Pins lohnt sich meist der Umstieg auf den nächst größeren Controller, der MEGA bietet Beispielsweise 16 analoge Eingänge. Wer für ein Projekt mehr als 16 analoge Pins benötigt gilt meistens nicht mehr als Anfänger :)

Für fortgeschrittene Benutzer lässt sich die Funktionalität des Moduls in einem kurzen Satz beschreiben: Ein 16-bit ADC mit PGA und I2C-Interface für bis zu 860/s.

Einsteigern möchte ich heute kurz die Funktionsweise des Moduls erklären und ein Anwendungsbeispiel zur Hand geben.

Was ist ein ADC?

ADC steht für AnalogDigitalConverter, auch A/D-Wandler oder Umsetzer genannt. Dieser ermöglicht es analoge Signale zu digitalen Signalen umzuwandeln. A/D-Umsetzer sind im Bereich der Elektronik unverzichtbar und so gut wie in jedem Elektrogerät vorhanden, so auch in Arduinos. Das Gegenstück hierzu wird DAU genannt. Es gibt viele Arten analoge Signale in digitale umzuwandeln, je nach tiefe handelt es sich dabei um sehr komplexe Prozesse und so sind diese Verfahren bis zum heutigen Tag noch immer Thema aktueller Forschungen im Bereich Elektrotechnik und Informatik.

Auflösung und Sample Rate

Für den Hobbybereich gibt es zwei relevante Werte um mit den Modulen arbeiten zu können, die Auflösung und die Abtastrate. Die Abtastrate bestimmt, wieviele Veränderungen des Signals erfasst werden können. Im Prinzip also der horizontale Abstand der gepunkteten Linien unten im Bild:

Die Auflösung kann als Anzahl möglicher Stufen verstanden werden und ist in der nächsten Abbildung als vertikaler Abstand der horizontalen Linien zu verstehen (x).

Was ist ein PGA?

PGA steht für Programmable Gain Amplifier was übersetzt soviel wie "programmierbarer Verstärker" heißt. Diese dienen primär als Operationsverstärker in der Messtechnik, wir verwenden diese Funktion des ADUs auf unseren Modulen nur recht selten, da unsere analogen Sensoren "out-of-the-box" für unsere Mikrocontroller lesbare Werte liefern.

Wieso I2C?

Über das I2C-Interface ist eine Kommunikation zwischen dem Modul (auch mehreren Modulen) und Mikrocontrollern mit nur zwei Datenleitungen möglich. Der Umgang mit dem I2C-Bus ist vor allem für Einsteiger empfehlenswert wenn auch nicht mehr Stand der Technik. Alle gängigen Mikrocontroller können über dieses Protokoll kommunizieren und der Umgang der Sensoren auf Modul-Ebene (mit Library) ist besonders leicht zu erlernen. Für fortgeschrittene Benutzer sei an der Stelle die alternativen I2S und CAN genannt. 

Die Verdrahtung:

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

 

Der heutige Versuchsaufbau wurde höchst konservativ gewählt:

Welche Library?

Da das Layout unseres ADS1115 zum Großteil mit dem Adafruit-Layout identisch ist können wir diese Library uneingeschränkt und ohne Anpassungen nutzen. Diese steht im Library-Manager der Arduino-IDE zur Verfügung:

Die oben zu sehende Library unterstütz auch die ADS1117 Module an unseren Arduinos sowie ESP8266-Boards.

Hier der 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);
}

 

Dieser wurde von uns am Nano, UNO und MEGA sowie auf unseren D1, Amica und LoLin Boards mit ESP8266-12E/F getestet, er sollte jedoch auch auf den ESP8266-01 funktionieren.

 

Bis zum nächsten Beitrag :)

 

 

 

 

Produktvorstellungen

14 comments

Manfred

Manfred

Bei mir hatte das Programm oben micht funktioniert (die Module funktionierten nicht).
Nach langer suche fand ich den Fehler fand ich den Felhler:
in der 2. Zeile muß der Eintrag: #include gegen den Eintrag #include getauscht werden.
Danach funktionierte bei mir alles.

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. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery