I2C voor analoge sensoren met de ADS1115

Hallo iedereen

vandaag wil ik u kort het gebruik van onze ADS1115 module laten zien. Voor Arduino beginners biedt deze module weinig toegevoegde waarde. Als u meer analoge pinnen nodig hebt voor uw project, is het meestal de moeite waard om over te schakelen naar de volgende grotere controller, de MEGA biedt bijvoorbeeld 16 analoge ingangen. Degenen die meer dan 16 analoge pinnen nodig hebben voor een project worden meestal niet langer beschouwd als een beginner :)

Voor gevorderde gebruikers kan de functionaliteit van de module in een korte zin worden beschreven: een 16-bits Adc Met Pga En I2cinterface voor maximaal 860/s.

Vandaag wil ik kort uitleggen hoe de module werkt en een toepassingsvoorbeeld geven.

Wat is een ADC?

ADC staat voor AnalogDigitalConverter, ook wel A/D converters of converters genoemd. Dit maakt het mogelijk om analoge signalen om te zetten naar digitale signalen. A/D-converters zijn onmisbaar op het gebied van elektronica en zijn verkrijgbaar in bijna elk elektrisch apparaat, inclusief Arduinos. De tegenhanger hiervan heet DAU. Er zijn vele manieren om analoge signalen om te zetten in digitale, afhankelijk van de diepten, dit zijn zeer complexe processen en dus zijn deze processen nog steeds het onderwerp van het huidige onderzoek op het gebied van elektrotechniek en informatica tot op de dag van vandaag.

Resolutie en voorbeeldsnelheid

Voor het hobbygebied zijn er twee relevante waarden om met de modules, de resolutie en de sampling rate te werken. De bemonsteringssnelheid bepaalt hoeveel wijzigingen van het signaal kunnen worden gedetecteerd. In principe is de horizontale afstand van de stippellijnen onder aan de afbeelding:

De resolutie kan worden opgevat als het aantal mogelijke stappen en moet in de volgende figuur worden opgevat als de verticale afstand van de horizontale lijnen (x).

Wat is een PGA?

PGA staat voor Programmable Gain Amplifier, wat zich vertaalt als "programmeerbare versterker". Deze worden voornamelijk gebruikt als operationele versterkers in meettechnologie, we gebruiken deze functie van de AGAU zelden op onze modules, omdat onze analoge sensoren "out-of-the-box" leesbare waarden bieden voor onze microcontrollers.

Waarom I2C?

De I2C-interface maakt communicatie tussen de module (inclusief meerdere modules) en microcontrollers met slechts twee datalijnen mogelijk. De bediening van de I2C-bus wordt vooral aanbevolen voor beginners, hoewel niet langer state-of-the-art. Alle veelvoorkomende microcontrollers kunnen communiceren via dit protocol en de bediening van de sensoren op moduleniveau (met bibliotheek) is bijzonder eenvoudig te leren. Voor gevorderde gebruikers worden de alternatieve I2S en CAN op dit moment genoemd. 

De bedrading:

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

 

De experimentele opstelling van vandaag werd zeer conservatief gekozen:

Welke bibliotheek?

Aangezien de lay-out van onze ADS1115 grotendeels identiek is aan de Adafruit-lay-out, kunnen we deze bibliotheek zonder beperkingen gebruiken. Dit is beschikbaar in de bibliotheekmanager van de Arduino IDE:

De bibliotheek hierboven te zien ondersteunt ook de ADS1117 modules op onze Arduinos en ESP8266 boards.

Hier is de code:

 

#include <Draad.H>
#include <Adafruit_ADS1015.H>

Adafruit_ADS1115 Advertenties;


Void Setup(Void) 
{   Seriële.Beginnen(9600);   Seriële.println("Hallo!");   Seriële.println("Het krijgen van single-ended lezingen van AIN0.. 3");   Seriële.println("ADC-bereik: +/- 6.144V (1 bit = 0,1875mV/ADS1115)");      Advertenties.Beginnen();
}


Void Lus(Void) 
{   int16_t adc0 adc0, adc1, adc2, adc3;   adc0 adc0 = Advertenties.readADC_SingleEnded(0);
 adc1 = ads.readADC_SingleEnded(1);
 adc2 = ads.readADC_SingleEnded(2);
 adc3 = ads.readADC_SingleEnded(3);   Seriële.Afdrukken("AIN0: "); Seriële.println(adc0 adc0);
 Serial.print("AIN1: "); Serial.println(adc1);
 Serial.print("AIN2: "); Serial.println(adc2);
 Serial.print("AIN3: "); Serial.println(adc3);   Seriële.println(" ");      Vertraging(1000);
}

 

Dit werd door ons getest op nano, UNO en MEGA, evenals op onze D1, Amica en LoLin boards met ESP8266-12E/F, maar het moet ook werken op de ESP8266-01.

 

Tot de volgende post :)

 

 

 

 

Produktvorstellungen

13 Kommentare

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 ?

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert