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

Bonjour à tous

aujourd’hui, je voudrais vous montrer brièvement l’utilisation de notre module ADS1115. Pour les débutants Arduino, ce module offre peu de valeur ajoutée. Si vous avez besoin de plus d’épingles analogiques pour votre projet, il vaut généralement la peine de passer au contrôleur plus grand suivant, le MEGA offre par exemple 16 entrées analogiques. Ceux qui ont besoin de plus de 16 broches analogiques pour un projet ne sont généralement plus considérés comme un débutant :)

Pour les utilisateurs avancés, la fonctionnalité du module peut être décrite en une courte phrase : un Adc Avec Pga Et I2c I2cinterface jusqu’à 860/s.

Aujourd’hui, je voudrais expliquer brièvement comment le module fonctionne et fournir un exemple d’application.

Qu’est-ce qu’un ADC?

ADC signifie AnalogDigitalConverter, également appelé convertisseurs ou convertisseurs A/D. Cela permet de convertir les signaux analogiques en signaux numériques. Les convertisseurs A/D sont indispensables dans le domaine de l’électronique et sont disponibles dans presque tous les appareils électriques, y compris Arduinos. La contrepartie à cela s’appelle DAU. Il existe de nombreuses façons de convertir les signaux analogiques en signaux numériques, selon les profondeurs, ce sont des processus très complexes et donc ces processus font encore l’objet de recherches actuelles dans le domaine du génie électrique et de l’informatique à ce jour.

Taux de résolution et d’échantillon

Pour l’aire de loisirs, il y a deux valeurs pertinentes pour travailler avec les modules, la résolution et le taux d’échantillonnage. Le taux d’échantillonnage détermine le nombre de changements du signal pouvant être détectés. En principe, la distance horizontale des lignes pointillées au bas de l’image :

La résolution peut être comprise comme le nombre d’étapes possibles et doit être comprise dans la figure suivante comme la distance verticale des lignes horizontales (x).

Qu’est-ce qu’une PGA?

PGA signifie Programmable Gain Amplifier, qui se traduit par «amplificateur programmable». Ceux-ci sont principalement utilisés comme amplificateurs opérationnels dans la technologie de mesure, nous utilisons rarement cette fonction de l’AGAU sur nos modules, puisque nos capteurs analogiques fournissent des valeurs lisibles « out-of-the-box » pour nos microcontrôleurs.

Pourquoi I2C?

L’interface I2C permet la communication entre le module (y compris plusieurs modules) et les microcontrôleurs avec seulement deux lignes de données. La manutention du bus I2C est particulièrement recommandée pour les débutants, bien qu’elle ne soit plus à la fine pointe de la technologie. Tous les microcontrôleurs communs peuvent communiquer via ce protocole et la manipulation des capteurs au niveau du module (avec bibliothèque) est particulièrement facile à apprendre. Pour les utilisateurs avancés, l’alternative I2S et CAN sont mentionnées à ce stade. 

Le câblage:

Capteur ANNONCES1117 Microcontrôleurs (NanoV3/D1 mini)
Vcc Vcc Vcc Vcc Vcc Vcc
Gnd Gnd Gnd
S A0 (en)
Sda SDA (A4/D2)
Scl SCL (A5/D1)

 

La configuration expérimentale d’aujourd’hui a été élue de façon très conservatrice :

Quelle bibliothèque ?

Puisque la mise en page de notre ADS1115 est pour la plupart identique à la mise en page Adafruit, nous pouvons utiliser cette bibliothèque sans aucune restriction. Ceci est disponible dans le library Manager de l’IDE Arduino:

La bibliothèque ci-dessus prend également en charge les modules ADS1117 sur nos panneaux Arduinos ainsi que les panneaux ESP8266.

Voici le code:

 

#include <Fil.H (en)>
#include <Adafruit_ADS1015.H (en)>

Adafruit_ADS1115 Annonces;


Vide Configuration(Vide) 
{   Série.Commencer(9600);   Série.println("Bonjour !");   Série.println("Obtenir des lectures à une seule fin de AIN0. 3");   Série.println("ADC Range: -/- 6.144V (1 bit ' 0.1875mV/ADS1115)");      Annonces.Commencer();
}


Vide Boucle(Vide) 
{   int16_t adc0 adc0, adc1, adc2, adc3;   adc0 adc0 = Annonces.readADC_SingleEnded(0);
 adc1 - ads.readADC_SingleEnded(1);
 adc2 - ads.readADC_SingleEnded(2);
 adc3 - ads.readADC_SingleEnded(3);   Série.Imprimer("AIN0: "); Série.println(adc0 adc0);
 Serial.print ("AIN1: "); Serial.println (adc1);
 Serial.print ("AIN2: "); Serial.println (adc2);
 Serial.print ("AIN3: "); Serial.println (adc3);   Série.println(" ");      Retard(1000);
}

 

Cela a été testé par nous sur nano, UNO et MEGA ainsi que sur nos conseils D1, Amica et LoLin avec ESP8266-12E/F, mais il devrait également travailler sur l’ESP8266-01.

 

Jusqu’au prochain post :)

 

 

 

 

Produktvorstellungen

14 commentaires

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 ?

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Articles de blog recommandés

  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