KY-053 Analog Digital Converter
Per entsprechenden Befehlen auf den I2C-Bus können auf bis zu 4 Eingängen analoge Spannungswerte mit bis zu 16-Bit Genauigkeit gemessen werden.
- Arduino
- Raspberry Pi
- Raspberry Pi Pico
- Micro:Bit
Der Analog-Digital-Wandler (ADC) ermöglicht es, analoge Spannungswerte auf bis zu 4 Eingängen mit hoher Präzision zu messen. Über den I2C-Bus können entsprechende Befehle gesendet werden, um diese Messungen durchzuführen. Die gemessenen Werte werden dann kodiert auf den I2C-Bus ausgegeben.
Mit einer Auflösung von bis zu 16 Bit können sehr genaue Messungen durchgeführt werden. Der ADC kann unterschiedliche Abtastraten programmieren, was ihn flexibel für verschiedene Anwendungen macht. Er arbeitet in einem Spannungsbereich von 2 V bis 5,5 V und kann Eingangsspannungen bis zur Betriebsspannung messen.
Die einfache Integration über die I2C-Schnittstelle und die Möglichkeit, mehrere ADC-Kanäle zu nutzen, machen diesen Wandler ideal für Projekte, die präzise Spannungsmessungen erfordern. Anwendungen könnten unter anderem in der Datenerfassung, Sensorüberwachung oder in verschiedenen Elektronikprojekten liegen, wo genaue analoge Messungen benötigt werden. Der geringe Betriebsstrom von typischerweise 150μA macht ihn auch für energieeffiziente Anwendungen geeignet.
Technische Daten | |
---|---|
Schnittstelle | I2C |
ADC-Kanäle | 4 |
Auflösung pro Kanal | 16 Bit |
Programmierbare Abtastrate | 8 bis 860 SPS |
Betriebsspannung | 2 V bis 5,5 V |
Analogeingangsspannung | 0 V bis Betriebsspannung |
I2C Logikspannung | 0 V bis 5,5 V |
I2C Adresse | 0x48 bis 0x4B |
Typischer Betriebsstrom | 150μA |
Änderung der I2C Adresse
Dieser Analog zu Digital Wandler (oder in kurz ADC) besitzt nicht nur eine I2C Adresse. Hierbei handelt es sich um einen ADC welcher 4 verschiedene I2C Adressen besitzen kann. Diese können frei gewählt werden aber im weiteren verlauf wird die Standard Adresse 0x48 benutzt.
In der folgenden Tabelle können Sie alle möglichen Adressen einsehen und auch wie diese zu erreichen sind. Hierbei ist hauptsächlich zu beachten das der ADDR Pin des ADC verantwortlich ist für die Änderung der Adresse.
Von | Zu | Adresse |
---|---|---|
ADDR Pin | GND Pin | 0x48 |
ADDR Pin | VDD Pin | 0x49 |
ADDR Pin | SDA Pin | 0x4A |
ADDR Pin | SCL Pin | 0x4B |
Anschlussbelegung
Arduino | Sensor |
---|---|
5 V | +V |
GND | GND |
Pin A5 | SCL |
Pin A4 | SDA |
- | ADDR |
- | ALRT |
- | A0 |
- | A1 |
- | A2 |
- | A3 |
Code-Beispiel
Die Arduino-Boards verfügen bereits über einen integrierten 10 Bit-ADC mit 6 Kanälen. Werden weitere Kanäle, oder eine höhere Genauigkeit, benötigt, so kann der Arduino mit Hilfe des KY-053 Analog Digital Converter Moduls um 4 ADC Kanäle mit 16-Bit Genauigkeit erweitert werden.
Um das folgende Codebeispiel auf Ihren Arduino zu laden, empfehlen wir die Verwendung der Arduino IDE. In der IDE können Sie den passenden Port und das richtige Board für Ihr Gerät auswählen.
Es werden für das Codebeispiel auch die folgenden Bibliotheken verwendet:
Adafruit ADS1X15 von Adafruit | veröffentlicht unter der BSD-Lizenz
Diese Bibliotheken können Sie bequem über den Bibliotheken-Manager der Arduino IDE hinzufügen. Kopieren Sie anschließend den unten stehenden Code in Ihre IDE. Um den Code auf den Arduino hochzuladen, klicken Sie einfach auf den Upload-Button.
#include <Adafruit_ADS1X15.h>
#include <math.h>
// ADS1115-Modul ist initialisiert - alle weiteren Operationen mit
// dem ADC können mit Hilfe des "ads"-Objekts ausgeführt werden.
Adafruit_ADS1115 ads;
void setup() {
// Initialisiere seriellen Monitor
Serial.begin(9600);
Serial.println("Werte der analogen Eingänge des ADS1115 (A0..A3) werden ausgelesen und ausgegeben");
Serial.println("ADC Bereich: +/- 6.144V (1 bit = 0.1875mV)");
// Dieses Modul verfügt über Signalverstärker an seinen Analogeingängen,
// deren Verstärkung in den unten stehenden Bereichen per Software konfiguriert werden kann.
// Dies ist erforderlich, wenn ein bestimmter Spannungsbereich als Messergebnis
// erwartet wird und somit eine höhere Auflösung des Signals erhält.
// ADS1115
// -------
ads.setGain(GAIN_TWOTHIRDS); // 2 / 3x gain +/- 6.144V 1 bit = 0.1875mV
// ads.setGain(GAIN_ONE); // 1x gain +/- 4.096V 1 bit = 0.125mV
// ads.setGain(GAIN_TWO); // 2x gain +/- 2.048V 1 bit = 0.0625mV
// ads.setGain(GAIN_FOUR); // 4x gain +/- 1.024V 1 bit = 0.03125mV
// ads.setGain(GAIN_EIGHT); // 8x gain +/- 0.512V 1 bit = 0.015625mV
// ads.setGain(GAIN_SIXTEEN); // 16x gain +/- 0.256V 1 bit = 0.0078125mV
ads.begin();
}
void loop() {
uint16_t adc0, adc1, adc2, adc3;
float voltage0, voltage1, voltage2, voltage3;
float gain_conversion_factor;
// Der Befehl "ads.readADC_SingleEnded (0)" ist der eigentliche Vorgang, der die Messung im ADC startet.
// Die "0" als Variable für diese Funktion definiert den verwendeten Kanal, der gemessen werden soll.
// Soll z.B. der dritte Kanal gemessen werden, muss die "0" durch die "3" ersetzt werden.
adc0 = ads.readADC_SingleEnded(0);
adc1 = ads.readADC_SingleEnded(1);
adc2 = ads.readADC_SingleEnded(2);
adc3 = ads.readADC_SingleEnded(3);
// Umrechnung der aufgezeichneten Werte in eine Spannung
voltage0 = ads.computeVolts(adc0);
voltage1 = ads.computeVolts(adc1);
voltage2 = ads.computeVolts(adc2);
voltage3 = ads.computeVolts(adc3);
// Ausgabe der Werte auf der seriellen Schnittstelle
Serial.print ("A0: "); Serial.print (voltage0); Serial.println (" V");
Serial.print ("A1: "); Serial.print (voltage1); Serial.println (" V");
Serial.print ("A2: "); Serial.print (voltage2); Serial.println (" V");
Serial.print ("A3: "); Serial.print (voltage3); Serial.println (" V");
Serial.println ("------------------------");
delay (1000);
}
Der Analog-Digital-Wandler (ADC) ermöglicht es, analoge Spannungswerte auf bis zu 4 Eingängen mit hoher Präzision zu messen. Über den I2C-Bus können entsprechende Befehle gesendet werden, um diese Messungen durchzuführen. Die gemessenen Werte werden dann kodiert auf den I2C-Bus ausgegeben.
Mit einer Auflösung von bis zu 16 Bit können sehr genaue Messungen durchgeführt werden. Der ADC kann unterschiedliche Abtastraten programmieren, was ihn flexibel für verschiedene Anwendungen macht. Er arbeitet in einem Spannungsbereich von 2 V bis 5,5 V und kann Eingangsspannungen bis zur Betriebsspannung messen.
Die einfache Integration über die I2C-Schnittstelle und die Möglichkeit, mehrere ADC-Kanäle zu nutzen, machen diesen Wandler ideal für Projekte, die präzise Spannungsmessungen erfordern. Anwendungen könnten unter anderem in der Datenerfassung, Sensorüberwachung oder in verschiedenen Elektronikprojekten liegen, wo genaue analoge Messungen benötigt werden. Der geringe Betriebsstrom von typischerweise 150μA macht ihn auch für energieeffiziente Anwendungen geeignet.
Technische Daten | |
---|---|
Schnittstelle | I2C |
ADC-Kanäle | 4 |
Auflösung pro Kanal | 16 Bit |
Programmierbare Abtastrate | 8 bis 860 SPS |
Betriebsspannung | 2 V bis 5,5 V |
Analogeingangsspannung | 0 V bis Betriebsspannung |
I2C Logikspannung | 0 V bis 5,5 V |
I2C Adresse | 0x48 bis 0x4B |
Typischer Betriebsstrom | 150μA |
Änderung der I2C Adresse
Dieser Analog zu Digital Wandler (oder in kurz ADC) besitzt nicht nur eine I2C Adresse. Hierbei handelt es sich um einen ADC welcher 4 verschiedene I2C Adressen besitzen kann. Diese können frei gewählt werden aber im weiteren verlauf wird die Standard Adresse 0x48 benutzt.
In der folgenden Tabelle können Sie alle möglichen Adressen einsehen und auch wie diese zu erreichen sind. Hierbei ist hauptsächlich zu beachten das der ADDR Pin des ADC verantwortlich ist für die Änderung der Adresse.
Von | Zu | Adresse |
---|---|---|
ADDR Pin | GND Pin | 0x48 |
ADDR Pin | VDD Pin | 0x49 |
ADDR Pin | SDA Pin | 0x4A |
ADDR Pin | SCL Pin | 0x4B |
Anschlussbelegung
Raspberry Pi | Sensor |
---|---|
3,3 V [Pin 1] | +V |
GND [Pin 6] | GND |
GPIO 3 [Pin 5] | SCL |
GPIO 2 [Pin 3] | SDA |
- | ADDR |
- | ALRT |
- | A0 |
- | A1 |
- | A2 |
- | A3 |
Code-Beispiel
Der Raspberry Pi besitzt im Gegensatz zum Arduino weder analoge Eingänge, noch einen integrierten Analog-Digital Converter. Dies schränkt den Raspberry Pi bei der Verwendung von analogen Sensoren ein. Um dennoch analoge Sensoren am Raspberry Pi verwenden zu können, kann der Raspberry Pi um unser KY-053 Analog Digital Converter Modul um 4 ADC Kanäle mit 16-Bit Genauigkeit erweitert werden.
Das Programm nutzt zur Ansteuerung des ADS1115 ADC die entsprechenden ADS1x15 und I2C Python-Libraries von Adafruit. Diese wurden unter dem folgenden Link Adafruit_CircuitPython_ADS1x15 unter der MIT-Lizenz veröffentlicht. Die benötigten Libraries sind nicht im unteren Download-Paket enthalten.
Zunächst müssen Sie I2C auf Ihren Raspberry Pi aktivieren. Um die Konfiguration zu öffnen, geben Sie den folgenden Befehl ein:
sudo raspi-config
Wählen Sie dort 3 Interface Options → I4 I2C aus und aktivieren Sie die I2C-Schnittstelle. Sie haben nun erfolgreich I2C aktiviert. Der Analog-Digital Wandler ist jetzt unter der I2C-Adresse 0x48 erreichbar, welche bei diesem Sensor standardmäßig gesetzt ist. Die I2C Adresse wird anders sein, wenn Sie diese bereits konfiguriert haben sollten, bevor Sie Ihren Raspberry Pi konfiguriert haben.
Installieren Sie nun pip3 mit dem folgendem Befehl:
sudo apt-get install python3-pip
Als nächstes muss die virtuelle Umgebung eingerichtet werden. Geben Sie dazu die folgenden Befehle ein:
mkdir dein_projekt
cd dein_projekt
python -m venv --system-site-packages env
source env/bin/activate
Mit dem folgenden Befehlen laden Sie sich die adafruit-circuitpython-ads1x15 Bibliothek herunter und installieren sie.
pip3 install adafruit-circuitpython-ads1x15
Nachdem Sie die Bibliothek heruntergeladen haben, brauchen Sie nur mit folgendem Befehl...
nano ADS1115.py
...eine neue Datei auf Ihrem Raspberry Pi zu erstellen und dann den folgenden Code in die so eben erstellt Datei kopieren.
import time
import board
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
# Create the I2C bus
i2c = busio.I2C(board.SCL, board.SDA)
# Create the ADC object using the I2C bus
ads = ADS.ADS1115(i2c)
# Create single-ended input on channels
chan0 = AnalogIn(ads, ADS.P0)
chan1 = AnalogIn(ads, ADS.P1)
chan2 = AnalogIn(ads, ADS.P2)
chan3 = AnalogIn(ads, ADS.P3)
while True:
print("channel 0: ","{:>5}\t{:>5.3f}".format(chan0.value, chan0.voltage))
print("channel 1: ","{:>5}\t{:>5.3f}".format(chan1.value, chan1.voltage))
print("channel 2: ","{:>5}\t{:>5.3f}".format(chan2.value, chan2.voltage))
print("channel 3: ","{:>5}\t{:>5.3f}".format(chan3.value, chan3.voltage))
print("---------------------------------------------------")
time.sleep(1)
Diese können Sie dann mit dem folgenden Befehl starten:
python3 KY053.py
Der Analog-Digital-Wandler (ADC) ermöglicht es, analoge Spannungswerte auf bis zu 4 Eingängen mit hoher Präzision zu messen. Über den I2C-Bus können entsprechende Befehle gesendet werden, um diese Messungen durchzuführen. Die gemessenen Werte werden dann kodiert auf den I2C-Bus ausgegeben.
Mit einer Auflösung von bis zu 16 Bit können sehr genaue Messungen durchgeführt werden. Der ADC kann unterschiedliche Abtastraten programmieren, was ihn flexibel für verschiedene Anwendungen macht. Er arbeitet in einem Spannungsbereich von 2 V bis 5,5 V und kann Eingangsspannungen bis zur Betriebsspannung messen.
Die einfache Integration über die I2C-Schnittstelle und die Möglichkeit, mehrere ADC-Kanäle zu nutzen, machen diesen Wandler ideal für Projekte, die präzise Spannungsmessungen erfordern. Anwendungen könnten unter anderem in der Datenerfassung, Sensorüberwachung oder in verschiedenen Elektronikprojekten liegen, wo genaue analoge Messungen benötigt werden. Der geringe Betriebsstrom von typischerweise 150μA macht ihn auch für energieeffiziente Anwendungen geeignet.
Technische Daten | |
---|---|
Schnittstelle | I2C |
ADC-Kanäle | 4 |
Auflösung pro Kanal | 16 Bit |
Programmierbare Abtastrate | 8 bis 860 SPS |
Betriebsspannung | 2 V bis 5,5 V |
Analogeingangsspannung | 0 V bis Betriebsspannung |
I2C Logikspannung | 0 V bis 5,5 V |
I2C Adresse | 0x48 bis 0x4B |
Typischer Betriebsstrom | 150μA |
Änderung der I2C Adresse
Dieser Analog zu Digital Wandler (oder in kurz ADC) besitzt nicht nur eine I2C Adresse. Hierbei handelt es sich um einen ADC welcher 4 verschiedene I2C Adressen besitzen kann. Diese können frei gewählt werden aber im weiteren verlauf wird die Standard Adresse 0x48 benutzt.
In der folgenden Tabelle können Sie alle möglichen Adressen einsehen und auch wie diese zu erreichen sind. Hierbei ist hauptsächlich zu beachten das der ADDR Pin des ADC verantwortlich ist für die Änderung der Adresse.
Von | Zu | Adresse |
---|---|---|
ADDR Pin | GND Pin | 0x48 |
ADDR Pin | VDD Pin | 0x49 |
ADDR Pin | SDA Pin | 0x4A |
ADDR Pin | SCL Pin | 0x4B |
Anschlussbelegung
Micro:Bit | Sensor |
---|---|
3,3 V | +V |
GND | GND |
Pin 19 | SCL |
Pin 20 | SDA |
- | ADDR |
- | ALRT |
- | A0 |
- | A1 |
- | A2 |
- | A3 |
Code-Beispiel
Der Micro:Bit verfügt bereits über einen integrierten 10-Bit ADC. Werden weitere Kanäle oder eine höhere Genauigkeit benötigt, so kann der Micro:Bit mit Hilfe des KY-053 Analog Digital Converter Moduls um 4 ADC Kanäle mit 16-Bit Genauigkeit erweitert werden.
Zur Ansteuerung empfehlen wir die Verwendung der pxt-ads1115 Biblitohek, die von uns unter der MIT-Lizenz veröffentlicht wurde.
Die Bibliothek können Sie hinzufügen, indem Sie auf der Makecode Seite auf Erweiterungen klicken und dort dann ADS1115 in der Suchleiste eingeben. Nachdem Sie das getan haben, müssen Sie nur noch auf die Erweiterung klicken, um diese automatisch für ihr aktuelles Projekt hinzuzufügen.
ADS1115.setMode(mode.Multi)
ADS1115.setGain(gain.Two)
ADS1115.setRate(rate.Rate5)
ADS1115.initADS1115(userInI2C.Gnd)
basic.forever(function () {
serial.writeLine("" + (ADS1115.read(0)))
serial.writeString("" + (ADS1115.raw_to_v(ADS1115.read(0))))
serial.writeLine(" V")
serial.writeLine("---------")
basic.pause(500)
})
Beispielprogramm Download
Der Analog-Digital-Wandler (ADC) ermöglicht es, analoge Spannungswerte auf bis zu 4 Eingängen mit hoher Präzision zu messen. Über den I2C-Bus können entsprechende Befehle gesendet werden, um diese Messungen durchzuführen. Die gemessenen Werte werden dann kodiert auf den I2C-Bus ausgegeben.
Mit einer Auflösung von bis zu 16 Bit können sehr genaue Messungen durchgeführt werden. Der ADC kann unterschiedliche Abtastraten programmieren, was ihn flexibel für verschiedene Anwendungen macht. Er arbeitet in einem Spannungsbereich von 2 V bis 5,5 V und kann Eingangsspannungen bis zur Betriebsspannung messen.
Die einfache Integration über die I2C-Schnittstelle und die Möglichkeit, mehrere ADC-Kanäle zu nutzen, machen diesen Wandler ideal für Projekte, die präzise Spannungsmessungen erfordern. Anwendungen könnten unter anderem in der Datenerfassung, Sensorüberwachung oder in verschiedenen Elektronikprojekten liegen, wo genaue analoge Messungen benötigt werden. Der geringe Betriebsstrom von typischerweise 150μA macht ihn auch für energieeffiziente Anwendungen geeignet.
Technische Daten | |
---|---|
Schnittstelle | I2C |
ADC-Kanäle | 4 |
Auflösung pro Kanal | 16 Bit |
Programmierbare Abtastrate | 8 bis 860 SPS |
Betriebsspannung | 2 V bis 5,5 V |
Analogeingangsspannung | 0 V bis Betriebsspannung |
I2C Logikspannung | 0 V bis 5,5 V |
I2C Adresse | 0x48 bis 0x4B |
Typischer Betriebsstrom | 150μA |
Änderung der I2C Adresse
Dieser Analog zu Digital Wandler (oder in kurz ADC) besitzt nicht nur eine I2C Adresse. Hierbei handelt es sich um einen ADC welcher 4 verschiedene I2C Adressen besitzen kann. Diese können frei gewählt werden aber im weiteren verlauf wird die Standard Adresse 0x48 benutzt.
In der folgenden Tabelle können Sie alle möglichen Adressen einsehen und auch wie diese zu erreichen sind. Hierbei ist hauptsächlich zu beachten das der ADDR Pin des ADC verantwortlich ist für die Änderung der Adresse.
Von | Zu | Adresse |
---|---|---|
ADDR Pin | GND Pin | 0x48 |
ADDR Pin | VDD Pin | 0x49 |
ADDR Pin | SDA Pin | 0x4A |
ADDR Pin | SCL Pin | 0x4B |
Anschlussbelegung
Raspberry Pi Pico | Sensor |
---|---|
3,3 V | +V |
GND | GND |
GPIO1 | SCL |
GPIO0 | SDA |
- | ADDR |
- | ALRT |
- | A0 |
- | A1 |
- | A2 |
- | A3 |
Code-Beispiel
Der Raspberry Pi Pico verfügt bereits über einen integrierten 12-Bit ADC. Werden weitere Kanäle oder eine höhere Genauigkeit benötigt, so kann der Raspberry Pi Pico mit Hilfe des KY-053 Analog Digital Converter Moduls um 4 ADC Kanäle mit 16-Bit Genauigkeit erweitert werden.
Dieses Codebeispiel liest Kanal 0 und gibt die gelesenen Daten als Analogwert und als berechnete Spannung zurück.
Um das folgende Codebeispiel auf Ihren Pico zu laden, empfehlen wir die Verwendung von der Thonny IDE. Sie müssen nur zunächst unter Run > Configure interpreter … > Interpreter > Which kind of interpreter should Thonny use for running your code? > MicroPython (Raspberry Pi Pico) auswählen.
Es wird für das Codebeispiel die folgende Bibliothek verwendet:
Driver for the ADS1015/ADS1115 Analogue-Digital Converter von Robert Hammelrath | veröffentlicht unter der MIT-Lizenz
Um diese Bibliothek zu verwenden, müssen Sie sich die oben verlinkten py-Datei herunterladen und auf den Pico in einem Ordner namens lib (Sie müssen diesen ggf. erstellen) laden. Danach können Sie den untenstehenden Code nun in Ihre IDE kopieren und klicken Sie auf Run.
# Bibliotheken laden
from machine import I2C, Pin
from ads1x15 import ADS1115
from time import sleep
# I2C initialisieren
i2c = I2C(0, sda = Pin(0), scl = Pin(1))
# Optionen für Genauigkeit (gain)
# 0 : 0 - 6.144V # 2/3x
# 1 : 0 - 4.096V # 1x
# 2 : 0 - 2.048V # 2x
# 3 : 0 - 1.024V # 4x
# 4 : 0 - 0.512V # 8x
# 5 : 0 - 0.256V # 16x
# ADC initialisieren mit dem erstellten I2C, Addresse und Gain
adc = ADS1115(i2c, address=0x48, gain=1)
print("KY-053 Analog-Digital-Konverter")
print("-----------------------------------------------")
while True:
# Optionen für die Abtastrate (rate)
# 0 : 128/8 Stichproben pro Sekunde
# 1 : 250/16 Stichproben pro Sekunde
# 2 : 490/32 Stichproben pro Sekunde
# 3 : 920/64 Stichproben pro Sekunde
# 4 : 1600/128 Stichproben pro Sekunde (standardmäßig)
# 5 : 2400/250 Stichproben pro Sekunde
# 6 : 3300/475 Stichproben pro Sekunded
# 7 : - /860 Stichproben pro Sekunde
# adc.read(rate, channel)
# Auslesen der Kanäle mit der Abtastrate 1600/128
adc0 = adc.read(4, 0)
adc1 = adc.read(4, 1)
adc2 = adc.read(4, 2)
adc3 = adc.read(4, 3)
# umwandeln vom rohen Wert zu Spannung
voltage0 = adc.raw_to_v(adc0)
voltage1 = adc.raw_to_v(adc1)
voltage2 = adc.raw_to_v(adc2)
voltage3 = adc.raw_to_v(adc3)
# serielle Ausgabe
print("A0: Roher Wert:", adc0, "\t Spannung:", voltage0, "V")
print("A1: Roher Wert:", adc1, "\t Spannung:", voltage1, "V")
print("A2: Roher Wert:", adc2, "\t Spannung:", voltage2, "V")
print("A3: Roher Wert:", adc3, "\t Spannung:", voltage3, "V")
print("-----------------------------------------------")
sleep(1)