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 :)
14 Reacties
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
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
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
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
@Sebastian: Handelt es sich hier wirklich um einen 1115 (16 bit) oder um einen 1015 (12 bit) ?
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
@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
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
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
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
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
Stimmt schon.
860 Samples pro Sekunde.
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
860 kbit/s ?