I2C per sensori analogici con ADS1115

Ciao a tutti

Oggi vorrei mostrarti brevemente come utilizzare il nostro modulo ADS1115. Per i principianti di Arduino, questo modulo offre un piccolo valore aggiunto. Se hai bisogno di più pin analogici per il tuo progetto, di solito vale la pena passare al controller più grande successivo, ad esempio MEGA offre 16 ingressi analogici. Chi ha bisogno di più di 16 pin analogici per un progetto di solito non è più considerato un principiante :)

Per utenti esperti, la funzionalità del modulo può essere descritta in una breve frase: un 16 bit ADC  con PGA  e I2C-Interfaccia per un massimo di 860 / s.

Oggi vorrei spiegare brevemente ai principianti come funziona il modulo e fornire un esempio di applicazione.

Che cos'è un ADC?

ADC sta per AnalogDigitalConverter, chiamato anche convertitore A / D o convertitore. Ciò consente ai segnali analogici di essere convertiti in segnali digitali. I convertitori A / D sono indispensabili nel campo dell'elettronica e sono presenti in quasi tutti i dispositivi elettrici, compresi gli Arduinos. La controparte di questo si chiama DAU. Esistono molti modi per convertire i segnali analogici in digitali, a seconda della profondità, questi sono processi molto complessi e quindi questi metodi sono ancora oggetto della ricerca attuale nel campo dell'ingegneria elettrica e dell'informatica.

Risoluzione e frequenza di campionamento

Per l'area hobby ci sono due valori rilevanti per essere in grado di lavorare con i moduli, la risoluzione e la frequenza di campionamento. La frequenza di campionamento determina quanti cambiamenti nel segnale possono essere rilevati. In linea di principio, quindi, la distanza orizzontale delle linee tratteggiate nella parte inferiore dell'immagine:

La risoluzione può essere compresa come il numero di livelli possibili e deve essere compresa nella figura successiva come la distanza verticale delle linee orizzontali (x).

Che cos'è un PGA?

PGA sta per Amplificatore di guadagno programmabile, che si traduce come "amplificatore programmabile". Questi servono principalmente come amplificatori operativi nella tecnologia di misura, usiamo questa funzione dell'ADC sui nostri moduli molto raramente, perché i nostri sensori analogici forniscono valori leggibili "pronti all'uso" per i nostri microcontrollori.

Perché I2C?

La comunicazione tra il modulo (compresi diversi moduli) e i microcontrollori con solo due linee dati è possibile tramite l'interfaccia I2C. Trattare con il bus I2C è particolarmente indicato per i principianti, sebbene non sia più all'avanguardia. Tutti i microcontrollori comuni possono comunicare tramite questo protocollo e la gestione dei sensori a livello di modulo (con libreria) è particolarmente facile da imparare. Per utenti esperti, qui vengono citati I2S e CAN alternativi.

Il cablaggio:

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

 

La configurazione sperimentale di oggi è stata scelta in modo molto conservativo:

Quale biblioteca?

Poiché il layout del nostro ADS1115 è in gran parte identico al layout di Adafruit, possiamo utilizzare questa libreria senza restrizioni e senza modifiche. Questo è disponibile nel gestore librerie dell'IDE Arduino:

La libreria mostrata sopra supporta anche i moduli ADS1117 sulle nostre schede Arduinos e ESP8266.

Ecco il codice:

 

#include <filo.B>
#include <Adafruit_ADS1015.B>

Adafruit_ADS1115 annunci;


vuoto configurazione(vuoto) 
{   serial.iniziare(9600);   serial.println("Ciao!");   serial.println("Ottenere letture single-ended da AIN0..3");   serial.println("Gamma ADC: +/- 6.144V (1 ​​bit = 0.1875mV / ADS1115)");      annunci.iniziare();
}


vuoto cappio(vuoto) 
{   int16_t ADC0, ADC1, ADC2, ADC3;   ADC0 = annunci.readADC_SingleEnded(0);
 // adc1 = ads.readADC_SingleEnded (1);
 // adc2 = ads.readADC_SingleEnded (2);
 // adc3 = ads.readADC_SingleEnded (3);   serial.stampare("AIN0"); serial.println(ADC0);
 // Serial.print ("AIN1:"); Serial.println (adc1);
 // Serial.print ("AIN2:"); Serial.println (adc2);
 // Serial.print ("AIN3:"); Serial.println (adc3);   serial.println(" ");      ritardo(1000);
}

 

Questo è stato testato da noi su Nano, UNO e MEGA, nonché sulle nostre schede D1, Amica e LoLin con ESP8266-12E / F, ma dovrebbe funzionare anche su ESP8266-01.

 

Fino al prossimo 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

Post di blog consigliati

  1. Installa ESP32 ora dal gestore del consiglio di amministrazione
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - Programmazione ESP tramite WLAN